View file upload/engine/inc/userfields.php

File size: 18.37Kb
<?php
/*
=====================================================
 DataLife Engine - by SoftNews Media Group 
-----------------------------------------------------
 https://dle-news.ru/
-----------------------------------------------------
 Copyright (c) 2004-2025 SoftNews Media Group
=====================================================
 This code is protected by copyright
=====================================================
 File: userfields.php
-----------------------------------------------------
 Use: profile xfields
=====================================================
*/

if (!defined('DATALIFEENGINE')) {
	header("HTTP/1.1 403 Forbidden");
	header('Location: ../../');
	die("Hacking attempt!");
}

if (!$user_group[$member_id['user_group']]['admin_userfields']) {
	msg("error", $lang['index_denied'], $lang['index_denied']);
}

if ($_GET['action'] == "delete") {

	if (!isset($_REQUEST['user_hash']) or !$_REQUEST['user_hash'] or $_REQUEST['user_hash'] != $dle_login_hash) {
		die("Hacking attempt! User not found");
	}

	$name = DLEUserXFields::DeleteField($_GET['name']);

	if ($name) {
		$db->query("INSERT INTO " . USERPREFIX . "_admin_logs (name, date, ip, action, extras) values ('" . $db->safesql($member_id['name']) . "', '{$_TIME}', '{$_IP}', '71', '{$name}')");

		header("Location: ?mod=userfields");
		die();
	} else {
		msg("error", $lang['xfield_error'], $lang['xfield_err_5'], "javascript:history.go(-1)");
	}
}

if ($_REQUEST['action'] == "doadd" or $_REQUEST['action'] == "doedit") {

	$editedxfield = isset($_POST['editedxfield']) ? $_POST['editedxfield'] : [];
	
	if (!is_array($editedxfield) or !count($editedxfield)) {
		msg("error", $lang['xfield_error'], $lang['xfield_err_8'], "javascript:history.go(-1)");
	}

	DLEUserXFields::Init();
	$editedxfield['name'] = totranslit(trim($editedxfield['name']));
	$editedxfield['description'] = strip_tags(stripslashes(trim($editedxfield['description'])));

	if (!$editedxfield['name'] OR !$editedxfield['description']) {
		msg("error", $lang['xfield_error'], $lang['xfield_err_12'], "javascript:history.go(-1)");
	}

	if( $_REQUEST['action'] == "doadd" AND isset( DLEUserXFields::$fields['fields'][$editedxfield['name']]) ) {
		msg("error", $lang['xfield_error'], $lang['xfield_err_9'], "javascript:history.go(-1)");
	}

	if ($_REQUEST['action'] == "doedit" AND (!isset($_REQUEST['editedname']) OR !isset(DLEUserXFields::$fields['fields'][$_REQUEST['editedname']] ) ) ) {
		msg("error", $lang['xfield_error'], $lang['xfield_err_8'], "javascript:history.go(-1)");
	}

	$editedxfield['type'] = totranslit(trim($editedxfield['type']));

	$editedxfield['registration'] = isset($editedxfield['registration']) ? intval($editedxfield['registration']) : 0;
	$editedxfield['allow_change'] = isset($editedxfield['allow_change']) ? intval($editedxfield['allow_change']) : 0;
	$editedxfield['private'] = isset($editedxfield['private']) ? intval($editedxfield['private']) : 0;
	$editedxfield['safe_mode'] = isset($editedxfield['safe_mode']) ? intval($editedxfield['safe_mode']) : 0;
	
	if ($editedxfield['type'] == "select") {

		$options = array();
		$editedxfield["default_select"] = str_replace("\r", '', $editedxfield["default_select"]);

		foreach (explode("\n", $editedxfield["default_select"]) as $name => $value) {
			$value = trim($value);
			if (!in_array($value, $options)) {
				$options[] = $value;
			}
		}

		if (count($options) < 2) {
			msg("error", $lang['xfield_error'], $lang['xfield_err_10'], "javascript:history.go(-1)");
		}

		$editedxfield['default'] = implode("\n", $options);
	}

	unset($editedxfield["default_select"]);
	
	if ($editedxfield['type'] == "datetime") {
		$editedxfield['date_format'] = intval($editedxfield['date_format']);
		$editedxfield['date_view_format'] = strip_tags(stripslashes(trim($editedxfield['date_view_format'])));
		$editedxfield['date_local'] = isset($editedxfield['date_local']) ? intval($editedxfield['date_local']) : 0;
		$editedxfield['date_declension'] = isset($editedxfield['date_declension']) ? intval($editedxfield['date_declension']) : 0;
	} else {
		$editedxfield['date_format'] = '';
		$editedxfield['date_view_format'] = '';
		$editedxfield['date_local'] = '';
		$editedxfield['date_declension'] = '';
	}

	DLEUserXFields::SaveField($editedxfield['name'], $editedxfield);

	if ($_REQUEST['action'] == "doedit" and $editedxfield['name'] != $_REQUEST['editedname']) {
		DLEUserXFields::DeleteField($_REQUEST['editedname']);
	}

	$db->query("INSERT INTO " . USERPREFIX . "_admin_logs (name, date, ip, action, extras) values ('" . $db->safesql($member_id['name']) . "', '{$_TIME}', '{$_IP}', '72', '{$editedxfield['name']}')");
	
	header("Location: ?mod=userfields");
	die();

}

if ($_REQUEST['action'] == "add" or $_REQUEST['action'] == "edit") {
	
	$type_selected = array('text' => '', 'textarea' => '','select' => '', 'yesorno' => '', 'datetime' => '');
	$condition_selected = array('', '');
	$date_format_selected = array('', '', '');

	if ($_REQUEST['action'] == 'edit') {

		$lang['xfield_title'] = $lang['xfield_etitle'];
		$editedxfield = DLEUserXFields::GETField($_GET['name']);
		
		if (!count($editedxfield)) {
			msg("error", $lang['xfield_error'], $lang['xfield_err_9'], "javascript:history.go(-1)");
		}

		$checked = $editedxfield['safe_mode'] ? "checked" : "";
		$checked2 = $editedxfield['registration'] ? "checked" : "";
		$checked3 = $editedxfield['allow_change'] ? "checked" : "";
		$checked4 = $editedxfield['private'] ? "checked" : "";
		$checked5 = $editedxfield['date_local'] ? "checked" : "";
		$checked6 = $editedxfield['date_declension'] ? "checked" : "";

		$editedxfield['name'] = htmlspecialchars($editedxfield['name'], ENT_QUOTES, 'UTF-8');
		$editedxfield['description'] = htmlspecialchars($editedxfield['description'], ENT_QUOTES, 'UTF-8');
		$editedxfield['date_view_format'] = htmlspecialchars($editedxfield['date_view_format'], ENT_QUOTES, 'UTF-8');
		$type_selected[$editedxfield['type']] = 'selected';
		$condition_selected[$editedxfield['condition']] = 'selected';
		$date_format_selected[$editedxfield['date_format']] = 'selected';
		
		if ($editedxfield['type'] == "select") $defalult_select = htmlspecialchars($editedxfield['default'], ENT_QUOTES, 'UTF-8'); else $defalult_select = '';

	} else {
		
		$checked = "checked";
		$checked2 = "checked";
		$checked3 = "checked";
		$checked4 = "";
		$checked5 = "checked";
		$checked6 = "checked";
		
		$editedxfield['name'] = '';
		$editedxfield['description'] = '';
		$editedxfield['date_view_format'] = '';
		$type_selected['text'] = 'selected';
		$defalult_select = '';
		$condition_selected[0] = 'selected';
		$date_format_selected[0] = 'selected';

	}

	echoheader("<i class=\"fa fa-list position-left\"></i><span class=\"text-semibold\">{$lang['header_uf_1']}</span>", array('?mod=userfields'  => $lang['header_nf_1'], '' => $lang['xfield_title'] ) );

	echo <<<HTML
<form method="post" name="xfieldsform" class="form-horizontal">
	<input type="hidden" name="mod" value="userfields">
	<input type="hidden" name="user_hash" value="{$dle_login_hash}">
	<input type="hidden" name="action" value="do{$_REQUEST['action']}">
	<input type="hidden" name="action" value="do{$_REQUEST['action']}">
	<input type="hidden" name="editedname" value="{$editedxfield['name']}">

	<div class="panel panel-default">
		<div class="panel-heading">
			{$lang['xfield_title']}
		</div>
		<div class="panel-body">
			<div class="form-group">
				<label class="control-label col-md-2 col-sm-3">{$lang['xfield_xname']}</label>
				<div class="col-md-10 col-sm-9">
					<input class="form-control width-350" maxlength="30" type="text" dir="auto" name="editedxfield[name]" value="{$editedxfield['name']}"><span class="text-muted text-size-small"><i class="fa fa-exclamation-circle position-left position-right"></i>{$lang['xf_lat']}</span>
				</div>
			</div>
			<div class="form-group">
				<label class="control-label col-md-2 col-sm-3">{$lang['xfield_xdescr']}</label>
				<div class="col-md-10 col-sm-9">
					<input class="form-control width-350" maxlength="100" type="text" dir="auto" name="editedxfield[description]" value="{$editedxfield['description']}">
				</div>
			</div>
			<div class="form-group">
				<label class="control-label col-sm-2">{$lang['xfield_xtype']}</label>
				<div class="col-sm-10">
					<select class="uniform" name="editedxfield[type]" id="type" onchange="onTypeChange(this.value);">
						<option value="text" {$type_selected['text']}>{$lang['xfield_xstr']}</option>
						<option value="textarea" {$type_selected['textarea']}>{$lang['xfield_xarea']}</option>
						<option value="select" {$type_selected['select']}>{$lang['xfield_xsel']}</option>
						<option value="yesorno" {$type_selected['yesorno']}>{$lang['xfield_xyesorno']}</option>
						<option value="datetime" {$type_selected['datetime']}>{$lang['xfield_xdatetime']}</option>
					</select>
				</div>
			</div>
			<div class="form-group" id="select_options">
				<label class="control-label col-md-2 col-sm-3">{$lang['xfield_xfaul']}</label>
				<div class="col-md-10 col-sm-9">
					<textarea class="classic width-400" dir="auto" style="height: 6.25rem;" name="editedxfield[default_select]">{$defalult_select}</textarea>
					<div class="text-muted text-size-small">{$lang['xfield_xfsel']}</div>
				</div>
			</div>
			<div id="optional" class="form-group">
				<label class="control-label col-sm-2">{$lang['xfield_xfaul']}</label>
				<div class="col-sm-10">
					<select class="uniform" name="editedxfield[condition]">
						<option value="0" {$condition_selected[0]}>{$lang['xfsel_off']}</option>
						<option value="1" {$condition_selected[1]}>{$lang['xfsel_on']}</option>
					</select>
				</div>
			</div>

			<div id="optional1">
				<div class="form-group">
					<label class="control-label col-sm-2">{$lang['xfield_xinput']}</label>
					<div class="col-sm-10">
						<select class="uniform" name="editedxfield[date_format]">
							<option value="0" {$date_format_selected[0]}>{$lang['xfield_xdatetime']}</option>
							<option value="1" {$date_format_selected[1]}>{$lang['xfsel_date']}</option>
							<option value="2" {$date_format_selected[2]}>{$lang['xfsel_time']}</option>
						</select>
					</div>
				</div>

				<div class="form-group mb-20">
					<label class="control-label col-sm-2">{$lang['xfield_xoutput']}</label>
					<div class="col-sm-10">
						<input class="form-control" style="width:100%;max-width: 200px;" type="text" dir="auto" name="editedxfield[date_view_format]" value="{$editedxfield['date_view_format']}"> <a onclick="javascript:Help('date'); return false;" href="#">{$lang['opt_sys_and']}</a>
					</div>
				</div>
			</div>

			<div id="optional4" class="form-group">
				<div class="form-group">
					<label class="control-label col-md-4 col-sm-6">{$lang['xfield_xlocaldate']}</label>
					<div class="col-md-8 col-sm-6">
						<input class="switch" type="checkbox" name="editedxfield[date_local]" value="1" {$checked5}><i class="help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right position-left" data-rel="popover" data-trigger="hover" data-placement="auto right" data-content="{$lang['xfield_xhelplocal']}"></i>
					</div>
				</div>
				<div class="form-group">
					<label class="control-label col-md-4 col-sm-6">{$lang['xfield_xdecldate']}</label>
					<div class="col-md-8 col-sm-6">
						<input class="switch" type="checkbox" name="editedxfield[date_declension]" value="1" {$checked6}><i class="help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right position-left" data-rel="popover" data-trigger="hover" data-placement="auto right" data-content="{$lang['xfield_xhelpdec']}"></i>
					</div>
				</div>
			</div>

			<div class="form-group" id="optional3">
				<label class="control-label col-md-4 col-sm-6">{$lang['opt_sys_sxfield']}</label>
				<div class="col-md-8 col-sm-6">
					<input class="switch" type="checkbox" name="editedxfield[safe_mode]" value="1" {$checked}><i class="help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right position-left" data-rel="popover" data-trigger="hover" data-placement="auto right" data-content="{$lang['opt_sys_sxfieldd']}"></i>
				</div>
			</div>
			<div class="form-group">
				<label class="control-label col-md-4 col-sm-6">{$lang['xp_reg']}</label>
				<div class="col-md-8 col-sm-6">
					<input class="switch" type="checkbox" name="editedxfield[registration]" value="1" {$checked2}><i class="help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right position-left" data-rel="popover" data-trigger="hover" data-placement="auto right" data-content="{$lang['xp_reg_hint']}"></i>
				</div>
			</div>
			<div class="form-group">
				<label class="control-label col-md-4 col-sm-6">{$lang['xp_edit']}</label>
				<div class="col-md-8 col-sm-6">
					<input class="switch" type="checkbox" name="editedxfield[allow_change]" value="1" {$checked3}><i class="help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right position-left" data-rel="popover" data-trigger="hover" data-placement="auto right" data-content="{$lang['xp_edit_hint']}"></i>
				</div>
			</div>
			<div class="form-group">
				<label class="control-label col-md-4 col-sm-6">{$lang['xp_privat']}</label>
				<div class="col-md-8 col-sm-6">
					<input class="switch" type="checkbox" name="editedxfield[private]" value="1" {$checked4}><i class="help-button visible-lg-inline-block text-primary-600 fa fa-question-circle position-right position-left" data-rel="popover" data-trigger="hover" data-placement="auto right" data-content="{$lang['xp_privat_hint']}"></i>
				</div>
			</div>

		</div>
		<div class="panel-footer">
			<button type="submit" class="btn bg-teal btn-sm btn-raised position-left"><i class="fa fa-floppy-o position-left"></i>{$lang['user_save']}</button>
		</div>
	</div>
	<script>
		function ShowOrHideEx(id, show) {
			item = document.getElementById(id);
			
			if (item && item.style) {
				item.style.display = show ? "" : "none";
			}
		}

		function onTypeChange(value) {
			ShowOrHideEx("select_options", value == "select");
			ShowOrHideEx("optional", value == "yesorno");
			ShowOrHideEx("optional1", value == "datetime");
			ShowOrHideEx("optional3", value == "text" || value == "textarea");
			ShowOrHideEx("optional4", value == "datetime");
		}

		onTypeChange(document.getElementById("type").value);
	</script>
</form>
HTML;

	echofooter();
	die();
}


$xfields =  DLEUserXFields::GETFields();

$js_array[] = "public/js/sortable.js";

echoheader("<i class=\"fa fa-list position-left\"></i><span class=\"text-semibold\">{$lang['header_uf_1']}</span>", array('?mod=userfields'  => $lang['header_nf_1'], '' => $lang['header_uf_2']));
if (!count($xfields)) {

	$x_list = "<div class=\"panel-body\"><center><br>{$lang['xfield_xnof']}<br><br></center></div>";

} else {

	$x_list = "";

	foreach ($xfields as $name => $value) {

		$p1 = $value['registration'] != 0 ? $lang['opt_sys_yes'] : $lang['opt_sys_no'];
		$p2 = $value['allow_change'] != 0 ? $lang['opt_sys_yes'] : $lang['opt_sys_no'];
		$p3 = $value['private'] != 0 ? $lang['opt_sys_yes'] : $lang['opt_sys_no'];

		if ($value['type'] == "text") $type = $lang['xfield_xstr'];
		elseif ($value['type'] == "textarea") $type = $lang['xfield_xarea'];
		elseif ($value['type'] == "select") $type = $lang['xfield_xsel'];
		elseif ($value['type'] == "yesorno") $type = $lang['xfield_xyesorno'];
		elseif ($value['type'] == "datetime") $type = $lang['xfield_xdatetime'];

		$menu_link = <<<HTML
		<div class="btn-group">
			<a href="#" class="dropdown-toggle nocolor" data-toggle="dropdown" aria-expanded="true"><i class="fa fa-bars"></i><span class="caret"></span></a>
			<ul class="dropdown-menu dropdown-menu-right">
				<li><a href="?mod=userfields&action=edit&name={$name}"><i class="fa fa-pencil-square-o"></i> {$lang['group_sel1']}</a></li>
				<li class="divider"></li>
				<li><a onclick="javascript:xfdelete('{$name}'); return false;" href="#"><i class="fa fa-trash-o text-danger"></i> {$lang['xfield_xfid']}</a></li>
			</ul>
		</div>
HTML;
		
if ($value['description']) {
			$description = "<div class=\"text-muted text-size-small\">{$value['description']}</div>";
		} else $description = '';

		$x_list .= "
		<tr class=\"drag-bg allow-drag\" data-id=\"{$name}\">
			<td class=\"dd-handles\"></td>
			<td>{$name}{$description}</td>
			<td>{$type}</td>
			<td>{$p1}</td>
			<td>{$p2}</td>
			<td>{$p3}</td>		
			<td class=\"text-center\">{$menu_link}</td>
		</tr>";
	}
	if ($x_list) {
		$th_head = <<<HTML
      <tr>
        <td class="no-border" style="width: 2rem;"></td>
        <td class="no-border">{$lang['xfield_xname']}</td>
		<td class="no-border">{$lang['xfield_xtype']}</td>
		<td class="no-border" style="width: 10rem;">{$lang['xp_regh']}</td>
        <td class="no-border" style="width: 10rem;">{$lang['xp_edith']}</td>
		<td class="no-border" style="width: 10rem;">{$lang['xp_privath']}</td>
        <td class="no-border" style="width: 4.375rem">&nbsp;</td>
      </tr>
HTML;

		$x_list = $th_head . $x_list;
	}

	$x_list = <<<HTML
	<table class="table table-xs" style="table-layout:fixed;">
		<tbody id="xflist">
			{$x_list}
		</tbody>
	</table>
HTML;

}

echo <<<HTML
<div class="panel panel-default">
  <div class="panel-heading">
    {$lang['xp_xlist']}
  </div>
  <div class="table-responsive">
	{$x_list}
  </div>
	<div class="panel-footer">
		<div class="pull-left">
		<button type="button" onclick="document.location='?mod=userfields&action=add'" class="btn bg-teal btn-sm btn-raised position-left"><i class="fa fa-plus position-left"></i>{$lang['b_create']}</button>
		</div>
		<div class="pull-right">
		<a onclick="javascript:Help('xprofile'); return false;" href="#">{$lang['xfield_xhelp']}</a>
		</div>
	</div>
</div>
<script>
jQuery(function($){

    if( document.getElementById('xflist') ) {
		var xf_sort = new Sortable(document.getElementById('xflist'), {
			group: "xfield",
			animation: 150,
			ghostClass: 'drop-bg',
			handle: '.dd-handles',
			draggable: '.allow-drag',
			onSort: function (evt) {
				ShowLoading('');

				$.post('index.php?controller=ajax&mod=adminfunction', {'action': 'userxfsort', 'list': window.JSON.stringify(xf_sort.toArray()), user_hash: '{$dle_login_hash}'}, function(data){

					HideLoading('');

					if (data != 'ok') {
						console.log();
						DLEPush.error('{$lang['cat_sort_fail']}');

					} else {
						
						location.reload();
						
					}

				});

			}

		});
	}

});

function xfdelete(id){

	DLEconfirmDelete( '{$lang['xfield_err_6']}', '{$lang['p_confirm']}', function () {
		document.location='?mod=userfields&action=delete&name=' + id +'&user_hash={$dle_login_hash}';
	} );
}
</script>
HTML;

echofooter();