e107_admin/users_extended.php
<?php
/*
* e107 website system
*
* Copyright (C) 2008-2017 e107 Inc (e107.org)
* Released under the terms and conditions of the
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
*
*/
require_once(__DIR__.'/../class2.php');
if (!getperms('4'))
{
e107::redirect('admin');
exit;
}
e107::coreLan('users_extended', true);
if(varset($_GET['mode']) == "ajax")
{
// Construct action string.
$action = varset($_GET['mode']) . '/' . varset($_GET['action']);
switch($action)
{
case 'ajax/changeTable':
$tableName = varset($_POST['table_db'], null);
if($tableName)
{
$sql = e107::getDb();
$tp = e107::getParser();
$sub_action = '';
if(e_QUERY)
{
$tmp = explode(".", e_QUERY);
$action = $tp->filter($tmp[0]);
$sub_action = varset($tmp[1]);
$sub_action = $tp->filter($sub_action);
$id = varset($tmp[2], 0);
unset($tmp);
}
if($sql->select('user_extended_struct', '*', "user_extended_struct_id = '$sub_action'"))
{
$current = $sql->fetch();
}
else
{
$current = 'new';
}
$currVal = $current['user_extended_struct_values'];
$curVals = explode(",", varset($currVal));
// Ajax URL for "Table" dropdown.
$ajaxGetTableSrc = e_SELF . '?mode=ajax&action=changeTable';
$text = "<table class='table table-striped table-bordered' style='width:70%;margin-left:0;'><tr><td>";
$text .= EXTLAN_62 . "</td><td style='70%'>\n";
$text .= "<select name='table_db' style='width:99%' class='tbox e-ajax' data-src='{$ajaxGetTableSrc}'>";
$text .= "<option value='' class='caption'>" . LAN_NONE . "</option>";
$result = e107::getDb()->tables();
foreach($result as $row2)
{
$fld = $row2;
$selected = (varset($_POST['table_db']) == $fld || $curVals[0] == $fld) ? " selected='selected'" : "";
$text .= "<option value=\"" . $fld . "\" $selected>" . $fld . "</option>\n";
}
$text .= "</select></td></tr>";
if($_POST['table_db'] || $curVals[0])
{
// Field ID.
$text .= "<tr><td>" . EXTLAN_63 . "</td><td>";
$text .= "<select style='width:99%' class='tbox e-select' name='field_id'>";
$text .= "<option value='' class='caption'>" . LAN_NONE . "</option>";
$table_list = !empty($_POST['table_db']) ? $_POST['table_db'] : $curVals[0];
if($sql->gen("DESCRIBE " . MPREFIX . $table_list))
{
while($row3 = $sql->fetch())
{
$field_name = $row3['Field'];
$selected = ($curVals[1] == $field_name) ? " selected='selected' " : "";
$text .= "<option value=\"$field_name\" $selected>" . $field_name . "</option>";
}
}
$text .= "</select></td></tr><tr><td>";
// Display Value.
$text .= EXTLAN_64 . "</td><td>";
$text .= "<select style='width:99%' class='tbox e-select' name='field_value'>";
$text .= "<option value='' class='caption'>" . LAN_NONE . "</option>";
$table_list = !empty($_POST['table_db']) ? $_POST['table_db'] : $curVals[0];
if($sql->gen("DESCRIBE " . MPREFIX . "{$table_list}"))
{
while($row3 = $sql->fetch())
{
$field_name = $row3['Field'];
$selected = ($curVals[2] == $field_name) ? " selected='selected' " : "";
$text .= "<option value=\"$field_name\" $selected>" . $field_name . "</option>";
}
}
$text .= "</select></td></tr><tr><td>";
// Order.
$text .= LAN_ORDER . "</td><td>";
$text .= "<select style='width:99%' class='tbox e-select' name='field_order'>";
$text .= "<option value='' class='caption'>" . LAN_NONE . "</option>";
$table_list = !empty($_POST['table_db']) ? $_POST['table_db'] : $curVals[0];
if($sql->gen("DESCRIBE " . MPREFIX . "{$table_list}"))
{
while($row3 = $sql->fetch())
{
$field_name = $row3['Field'];
$selected = ($curVals[3] == $field_name) ? " selected='selected' " : "";
$text .= "<option value=\"$field_name\" $selected>" . $field_name . "</option>";
}
}
$text .= "</select></td></tr>";
}
$text .= "</table>";
$ajax = e107::getAjax();
$commands = array();
$commands[] = $ajax->commandInsert('#db_mode', 'html', $text);
$ajax->response($commands);
exit;
}
break;
}
}
/*
if (isset($_POST['cancel']))
{
header('location:'.e_SELF);
exit;
}
if (isset($_POST['cancel_cat']))
{
header("location:".e_SELF."?cat");
exit;
}*/
function js()
{
include_once(e_LANGUAGEDIR . e_LANGUAGE . "/lan_user_extended.php");
$text = "
$('.e-select').change(function(e){
var type = $(this).val();
if(type == 4)
{
$('#db_mode').show();
$('#values').hide();
}
else if(type == 2 || type == 3 || type == 9 || type == 10)
{
$('#db_mode').hide();
$('#values').show();
}
else
{
$('#db_mode').hide();
$('#values').hide();
}
";
for($i = 1; $i <= 9; $i++)
{
$type_const = "UE_LAN_{$i}";
$help_const = "\"" . str_replace("/", "\/", "EXTLAN_HELP_{$i}") . "\"";
$text .= "
if(type == \"{$i}\")
{
xtype=\"" . defset($type_const) . "\";
what=\"" . defset($help_const) . "\";
}";
}
$text .= "
// $('#ue_type').innerHTML=''+xtype+'';
// $('#ue_help').innerHTML=''+what+''
console.log(type);
return false;
});
";
return $text;
//FIXME
/*
$text .= "
function changeHelp(type) {
return;
//<![CDATA[
var ftype;
var helptext;
";
for($i = 1; $i <= 9; $i++)
{
$type_const = "UE_LAN_{$i}";
$help_const = "\"" . str_replace("/", "\/", "EXTLAN_HELP_{$i}") . "\"";
$text .= "
if(type == \"{$i}\")
{
xtype=\"" . defset($type_const) . "\";
what=\"" . defset($help_const) . "\";
}";
}
$text .= "
// document.getElementById('ue_type').innerHTML=''+xtype+'';
// document.getElementById('ue_help').innerHTML=''+what+'';
if(type == 4){
document.getElementById('db_mode').style.display = '';
document.getElementById('values').style.display = 'none';
}else{
document.getElementById('values').style.display = '';
document.getElementById('db_mode').style.display = 'none';
}
// ]]>
}
";
return $text;*/
}
e107::js('footer-inline', js());
class user_extended_adminArea extends e_admin_dispatcher
{
protected $modes = array(
'main' => array(
'controller' => 'user_extended_struct_ui',
'path' => null,
'ui' => 'user_extended_struct_form_ui',
'uipath' => null
),
'cat' => array(
'controller' => 'user_extended_category_struct_ui',
'path' => null,
'ui' => 'user_extended_struct_form_ui',
'uipath' => null
),
);
protected $adminMenu = array(
'main/list' => array('caption'=> LAN_MANAGE, 'perm' => '0|4'),
'main/add' => array('caption'=> EXTLAN_45, 'perm' => '0|4', 'icon'=>'fa-plus'),
'main/create' => array('caption'=> EXTLAN_81, 'perm' => '0|4', 'icon'=>'fa-user-edit'),
'cat/list' => array('caption'=> LAN_CATEGORIES, 'perm' => '0|4'),
'cat/create' => array('caption'=> LAN_CREATE_CATEGORY, 'perm' => '0|4'),
// 'main/custom' => array('caption'=> 'Custom Page', 'perm' => 'P')
);
protected $adminMenuIcon = 'e-extended-24';
/*
* }
$var['main']['text'] = EXTLAN_34;
$var['main']['link'] = e_SELF;
$var['pre']['text'] = EXTLAN_45;
$var['pre']['link'] = e_SELF."?pre";
$var['editext']['text'] = "Add Custom Field";
$var['editext']['link'] = e_SELF."?editext";
$var['cat']['text'] = EXTLAN_35;
$var['cat']['link'] = e_SELF."?cat";
show_admin_menu(EXTLAN_9, $action, $var);
}
*/
protected $adminMenuAliases = array(
'main/edit' => 'main/list'
);
protected $menuTitle = EXTLAN_9;
}
class user_extended_struct_ui extends e_admin_ui
{
protected $pluginTitle = EXTLAN_9;
protected $pluginName = 'user_extended';
// protected $eventName = 'user_extended-user_extended_struct'; // remove comment to enable event triggers in admin.
protected $table = 'user_extended_struct';
protected $pid = 'user_extended_struct_id';
protected $perPage = 10;
protected $batchDelete = true;
// protected $batchCopy = true;
protected $sortField = 'user_extended_struct_order';
protected $orderStep = 10;
protected $tabs = array(LAN_BASIC,LAN_ADVANCED); // Use 'tab'=>0 OR 'tab'=>1 in the $fields below to enable.
protected $listQry = "SELECT * FROM `#user_extended_struct` WHERE user_extended_struct_type != 0 AND user_extended_struct_text != '_system_' "; // Example Custom Query. LEFT JOINS allowed. Should be without any Order or Limit.
protected $listOrder = 'user_extended_struct_order ASC';
protected $fields = array (
'checkboxes' => array ( 'title' => '', 'type' => null, 'data' => null, 'width' => '5%', 'thclass' => 'center', 'forced' => '1', 'class' => 'center', 'toggle' => 'e-multiselect', ),
'user_extended_struct_id' => array ( 'title' => LAN_ID, 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_name' => array ( 'title' => LAN_NAME, 'type' => 'method', 'data' => 'str', 'readonly'=>true, 'width' => '350px', 'help' => '', 'readParms' => '', 'writeParms' => array('tdClassRight' => 'form-inline', 'pre' => 'user_ ', 'required'=>true), 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_text' => array ( 'title' => EXTLAN_79, 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'inline' => true, 'help' => '', 'readParms' => 'constant=1', 'writeParms' => array('required'=>true), 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_type' => array ( 'title' => LAN_PREVIEW, 'type' => 'method', 'data' => 'int', 'width' => 'auto', 'batch' => true, 'filter' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_values' => array ( 'title' => EXTLAN_82, 'type' => 'method', 'nolist'=>true, 'data' => 'str', 'width' => 'auto', 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_default' => array ( 'title' => EXTLAN_16, 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_parent' => array ( 'title' => LAN_CATEGORY, 'type' => 'dropdown', 'tab'=>1, 'data' => 'int', 'width' => 'auto', 'batch' => true, 'filter' => true, 'help' => '', 'readParms' => '', 'writeParms' => array('size'=>'xxlarge'), 'class' => 'left', 'thclass' => 'left', ),
// These are combined into user_extended_struct_parms on submit.
'field_placeholder' => array('title'=>EXTLAN_83, 'tab'=>1, 'type'=>'text', 'data'=>false, 'writeParms'=>array('size'=>'xxlarge')),
'field_helptip' => array('title'=>EXTLAN_84, 'tab'=>1, 'type'=>'text', 'data'=>false, 'writeParms'=>array('size'=>'xxlarge')),
'field_include' => array('title'=> EXTLAN_15, 'tab'=>1, 'type'=>'textarea', 'data'=>false, 'help'=>EXTLAN_51, 'writeParms'=>array('size'=>'xxlarge')),
'field_regex' => array('title'=> EXTLAN_52, 'tab'=>1, 'type'=>'text', 'data'=>false, 'help'=> EXTLAN_53, 'writeParms'=>array('size'=>'xxlarge')),
'field_regexfail' => array('title'=> EXTLAN_54, 'tab'=>1, 'type'=>'text', 'data'=>false, 'help'=>EXTLAN_55, 'writeParms'=>array('size'=>'xxlarge')),
'field_userhide' => array('title'=> EXTLAN_49, 'tab'=>1, 'type'=>'boolean', 'data'=>false, 'help'=>EXTLAN_50, 'writeParms'=>array('size'=>'xxlarge')),
'user_extended_struct_required' => array ( 'title' => EXTLAN_18, 'type' => 'method', 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_applicable' => array ( 'title' => EXTLAN_5, 'type' => 'userclass', 'data' => 'int', 'filter'=>true, 'batch'=>true, 'width' => '10%', 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_parms' => array ( 'title' => "Params", 'type' => 'hidden', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_read' => array ( 'title' =>EXTLAN_6, 'type' => 'userclass', 'data' => 'int', 'filter'=>true, 'batch'=>true,'width' => '10%', 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_write' => array ( 'title' => EXTLAN_7, 'type' => 'userclass', 'data' => 'int', 'filter'=>true, 'batch'=>true, 'width' => '10%', 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_signup' => array ( 'title' => 'Signup', 'type' => 'hidden', 'nolist'=>true, 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_order' => array ( 'title' => LAN_ORDER, 'type' => 'hidden', 'nolist'=>true, 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'options' => array ( 'title' => LAN_OPTIONS, 'type' => 'method', 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced' => '1', 'readParms'=>'sort=1' ),
);
protected $fieldpref = array('user_extended_struct_name', 'user_extended_struct_text', 'user_extended_struct_type', 'user_extended_struct_read', 'user_extended_struct_write', 'user_extended_struct_required', 'user_extended_struct_applicable');
protected $prefs = array(
);
/**
* Automatically exectured when edit mode is active.
*/
public function EditObserver()
{
parent::EditObserver();
$row = e107::getDb()->retrieve('user_extended_struct', 'user_extended_struct_type,user_extended_struct_parms',"user_extended_struct_id = ".intval($_GET['id']));
$parms = $row['user_extended_struct_parms'];
$tmp = explode('^,^', $parms);
$this->fields['field_include']['writeParms']['default'] = $tmp[0];
$this->fields['field_regex']['writeParms']['default'] = $tmp[1];
$this->fields['field_regexfail']['writeParms']['default'] = $tmp[2];
$this->fields['field_userhide']['writeParms']['default'] = $tmp[3];
$this->fields['field_placeholder']['writeParms']['default'] = $tmp[4];
$this->fields['field_helptip']['writeParms']['default'] = $tmp[5];
if((int) $row['user_extended_struct_type'] === 12) // EUF_ADDON
{
unset(
$this->fields['field_include'],
$this->fields['field_regex'],
$this->fields['field_regexfail'],
$this->fields['field_userhide'],
$this->fields['field_placeholder'],
$this->fields['field_helptip'],
$this->fields['user_extended_struct_default']
);
}
}
public function init()
{
if($this->getAction() == 'edit' || $this->getAction() == 'create')
{
$this->fields['user_extended_struct_type']['title'] = LAN_TYPE;
}
$data = e107::getDb()->retrieve("user_extended_struct", "*", "user_extended_struct_type = 0 ORDER BY user_extended_struct_order ASC", true);
$opts = array();
$opts[0] = EXTLAN_36;
foreach($data as $row)
{
$id = $row['user_extended_struct_id'];
$opts[$id] = $row['user_extended_struct_name'];
}
$this->fields['user_extended_struct_parent']['writeParms']['optArray'] = $opts;
}
private function compileData($new_data)
{
$parms = array(
$new_data['field_include'],
$new_data['field_regex'],
$new_data['field_regexfail'],
$new_data['field_userhide'],
$new_data['field_placeholder'],
$new_data['field_helptip'],
);
if(isset($new_data['field_include']))
{
$new_data['user_extended_struct_parms'] = implode('^,^', $parms);
}
if($new_data['user_extended_struct_type'] == EUF_DB_FIELD)
{
$new_data['user_extended_struct_values'] = array($new_data['table_db'],$new_data['field_id'],$new_data['field_value'],$new_data['field_order']);
}
if(isset($new_data['user_extended_struct_values']))
{
$new_data['user_extended_struct_values'] = array_filter($new_data['user_extended_struct_values']);
$new_data['user_extended_struct_values'] = implode(',',$new_data['user_extended_struct_values']);
}
// e107::getMessage()->addInfo(print_a($new_data,true),'default', true);
return $new_data;
}
// ------- Customize Create --------
public function beforeCreate($new_data, $old_data)
{
$ue = e107::getUserExt();
$mes = e107::getMessage();
if($ue->user_extended_field_exist($new_data['user_extended_struct_name']))
{
$mes->addError("Field name already exists");
return false;
}
if($ue->user_extended_reserved($new_data['user_extended_struct_name']))
{
$mes->addError("Field name is reserved. Please try a different name.");
return false;
}
$new_data = $this->compileData($new_data);
$field_info = $ue->user_extended_type_text($new_data['user_extended_struct_type'], $new_data['user_extended_struct_default']);
// wrong type
if(false === $field_info)
{
e107::getMessage()->addDebug("\$field_info is false ".__METHOD__." ".__LINE__);
return false;
}
else
{
if(e107::getDb()->gen('ALTER TABLE #user_extended ADD user_'.e107::getParser()->toDB($new_data['user_extended_struct_name'], true).' '.$field_info)===false)
{
$mes->addError("Unable to alter table user_extended.");
}
}
if(empty($new_data['user_extended_struct_order']))
{
if($max = e107::getDb()->retrieve('user_extended_struct','MAX(user_extended_struct_order) as maxorder','1'))
{
if(is_numeric($max))
{
$new_data['user_extended_struct_order'] = ($max + 1);
}
}
}
return $new_data;
}
public function afterCreate($new_data, $old_data, $id)
{
// do something
}
public function onCreateError($new_data, $old_data)
{
// do something
}
public function beforeDelete($data,$id)
{
$mes = e107::getMessage();
if(!e107::getUserExt()->user_extended_remove($id, $data['user_extended_struct_name']))
{
$mes->addError("Unable to delete column from user_extended table.");
return false;
}
else
{
$mes->addSuccess(EXTLAN_86);
}
}
/*
public function afterDelete($data,$id)
{
}*/
// ------- Customize Update --------
public function beforeUpdate($new_data, $old_data, $id)
{
$ue = e107::getUserExt();
$mes = e107::getMessage();
if ($ue->user_extended_field_exist($new_data['user_extended_struct_name']))
{
$type = isset($new_data['user_extended_struct_type']) ? $new_data['user_extended_struct_type'] : $old_data['user_extended_struct_type'];
$field_info = $ue->user_extended_type_text($type, $new_data['user_extended_struct_default']);
if(false === $field_info) // wrong type
{
return false;
}
else
{
if(e107::getDb()->gen("ALTER TABLE #user_extended MODIFY user_".e107::getParser()->toDB($new_data['user_extended_struct_name'], true)." ".$field_info)===false)
{
$mes->addError("Unable to alter table user_extended.");
}
}
}
$new_data = $this->compileData($new_data);
return $new_data;
}
public function afterUpdate($new_data, $old_data, $id)
{
// do something
}
public function onUpdateError($new_data, $old_data, $id)
{
// do something
}
private function addPageActivate()
{
if(empty($_POST['activate']))
{
return null;
}
$ue = e107::getUserExt();
$tp = e107::getParser();
$ret = "";
$preList = $ue->parse_extended_xml('getfile');
$tmp = $preList;
foreach(array_keys($_POST['activate']) as $f)
{
$tmp[$f]['parms'] = $tp->toDB($tmp[$f]['parms']);
if($ue->user_extended_add($tmp[$f]))
{
$ret .= EXTLAN_68." $f ".EXTLAN_69."<br />";
if ($tmp[$f]['type']=="db field")
{
if (!is_readable(e_CORE.'sql/extended_'.$f.'.php'))
{
$ret .= str_replace('[x]',e_CORE.'sql/extended_'.$f.'.php',EXTLAN_78);
// $ret .= ($this->process_sql($f)) ? LAN_CREATED." user_extended_{$f}<br />" : LAN_CREATED_FAILED." user_extended_{$f}<br />";
}
}
}
else
{
$ret .= EXTLAN_70." $f ".EXTLAN_71."<br />";
}
}
e107::getLog()->add('EUF_11',implode(', ',$_POST['activate']),E_LOG_INFORMATIVE,'');
e107::getMessage()->addSuccess($ret);
return $ret;
}
private function addPageDeactivate()
{
if(empty($_POST['deactivate']))
{
return null;
}
$tp = e107::getParser();
$sql = e107::getDb();
$ue = e107::getUserExt();
$ret = "";
foreach(array_keys($_POST['deactivate']) as $f)
{
$f = $tp->filter($f);
if($ue->user_extended_remove($f, $f))
{
$ret .= EXTLAN_68." $f ".EXTLAN_72."<br />";
if(is_readable(e_CORE."sql/extended_".$f.".php"))
{
$ret .= ($sql->gen("DROP TABLE ".MPREFIX."user_extended_".$f)) ? LAN_DELETED." user_extended_".$f."<br />" : LAN_DELETED_FAILED." user_extended_".$f."<br />";
}
}
else
{
$ret .= EXTLAN_70." $f ".EXTLAN_73."<br />";
}
}
e107::getLog()->add('EUF_12',implode(', ',$_POST['deactivate']),E_LOG_INFORMATIVE,'');
e107::getMessage()->addSuccess($ret);
return $ret;
}
function addPage()
{
$ns = e107::getRender();
$ue = e107::getUserExt();
$this->addPageActivate();
$this->addPageDeactivate();
// Get list of current extended fields
$curList = $ue->user_extended_get_fieldlist();
$curNames = array();
foreach($curList as $c)
{
$curNames[] = $c['user_extended_struct_name'];
}
//Get list of predefined fields.
$preList = $ue->parse_extended_xml('getfile');
ksort($preList);
$txt = "
<form method='post' action='".e_REQUEST_URI."'>
<table class='table adminlist'>
<colgroup>
<col />
<col />
<col />
<col />
<col />
<col />
</colgroup>
<thead>
<tr>
<th>".UE_LAN_21."</th>
<th>".EXTLAN_79."</th>
<th>".EXTLAN_2."</th>
<th>".UE_LAN_22."</th>
<th class='center' >".EXTLAN_57."</th>
<th class='center last' >".LAN_OPTIONS."</th>
</tr>
</thead>
<tbody>";
foreach($preList as $k=>$a)
{
if($k !== 'version') // don't know why this is appearing in the array.
{
$active = (in_array($a['name'], $curNames)) ? TRUE : FALSE;
$txt .= $this->show_predefined_field($a,$active);
}
}
$txt .= "</tbody></table></form>";
$emessage = e107::getMessage();
return $txt;
// $ns->tablerender(EXTLAN_9.SEP.EXTLAN_56,$emessage->render(). $txt);
}
function show_predefined_field($var, $active)
{
static $head_shown;
$txt = "";
$tp = e107::getParser();
$ue = e107::getUserExt();
$frm = e107::getForm();
foreach($var as $key=>$val) // convert predefined xml to default array format
{
$var['user_extended_struct_'.$key] = $val;
}
$var['user_extended_struct_type'] = $ue->typeArray[$var['user_extended_struct_type']];
$var['user_extended_struct_parms'] = $var['include_text'];
$txt .= "
<tr>
<td>{$var['user_extended_struct_name']}</td>
<td>".constant(strtoupper($var['user_extended_struct_text'])."_DESC")."</td>
<td>".$ue->user_extended_edit($var,'')."</td>
<td>".$tp->toHTML($var['type'], false, 'defs')."</td>
<td class='center'>".($active ? ADMIN_TRUE_ICON : " ")."</td>
";
// $txt .= constant("UE_LAN_".strtoupper($var['text'])."DESC")."<br />";
// foreach($showlist as $f)
// {
// if($var[$f] != "" && $f != 'type' && $f !='text')
// {
// $txt .= "<strong>{$f}: </strong>".$tp->toHTML($var[$f], false, 'defs')."<br />";
// }
// }
$val = (!$active) ? EXTLAN_59 : EXTLAN_60;
$type = (!$active) ? 'activate' : 'deactivate';
$style = (!$active) ? 'other' : 'delete';
$txt .= "
<td class='center last'>";
$txt .= $frm->admin_button($type."[".$var['user_extended_struct_name']."]", $val, $style );
$txt .= "</td>
</tr>";
return $txt;
}
/*
// optional - a custom page.
public function customPage()
{
$ns = e107::getRender();
$text = 'Hello World!';
return $text;
}
*/
}
class user_extended_struct_form_ui extends e_admin_form_ui
{
function options($parms, $value, $id, $attributes)
{
if($attributes['mode'] == 'read')
{
$name = $this->getController()->getListModel()->get('user_extended_struct_name');
if(strpos($name, 'plugin_') === 0)
{
$attributes['readParms']['deleteClass'] = e_UC_NOBODY;
}
$text = "<div class='btn-group'>";
$text .= $this->renderValue('options',$value,$attributes, $id);
$text .= "</div>";
return $text;
}
}
// Custom Method/Function
function user_extended_struct_type($curVal,$mode)
{
switch($mode)
{
case 'read': // List Page
$ext = $this->getController()->getListModel()->getData();
// return print_a($ext,true);
$ext['user_extended_struct_required'] = 0; // so the form can be posted.
return e107::getUserExt()->renderElement($ext,$ext['user_extended_struct_default']);
// reutrn e107::getParser()>toHTML(deftrue($ext['user_extended_struct_text'], $ext['user_extended_struct_text']), FALSE, "defs")
break;
case 'write': // Edit Page
if(empty($curVal))
{
$curVal = '1';
}
$types = e107::getUserExt()->getFieldTypes();
if($curVal == EUF_ADDON)
{
return LAN_PLUGIN;
}
return $this->select('user_extended_struct_type', $types, $curVal, array('class'=>'tbox e-select'));
}
}
function user_extended_struct_required($curVal, $mode)
{
$opts = array('0' => EXTLAN_65, '1' => EXTLAN_66, '2' => EXTLAN_67);
switch($mode)
{
case 'read': // List Page
return $opts[$curVal];
break;
case 'write': // Edit Page
return $this->select('user_extended_struct_required',$opts, varset($curVal,1),'size=xxlarge');
break;
case 'filter':
case 'batch':
return $opts;
break;
}
}
// Custom Method/Function
function user_extended_struct_name($curVal,$mode, $att)
{
switch($mode)
{
case 'read': // List Page
return str_replace('plugin_', "<span class='label label-primary'>".LAN_PLUGIN."</span> ",$curVal);
break;
case 'write': // Edit Page
$field = [];
$field['type'] = 'text';
$field['writeParms'] = $att;
$field['pattern'] = '[0-9a-z_]*';
return $this->renderElement('user_extended_struct_name', $curVal, $field);
break;
case 'filter':
case 'batch':
return array();
break;
}
}
// Custom Method/Function
function user_extended_struct_values($curVal,$mode)
{
switch($mode)
{
case 'read': // List Page
return $curVal;
break;
case 'write': // Edit Page
return $this->renderStructValues($curVal);
break;
case 'filter':
case 'batch':
return array();
break;
}
}
function renderStructValues($curVal)
{
$sql = e107::getDb();
$frm = e107::getForm();
$current = $this->getController()->getModel()->getData();
$type = (int) varset($current['user_extended_struct_type']);
if($type === EUF_ADDON)
{
return '-';
}
$val_hide = ($type !== EUF_DB_FIELD && $type !== EUF_TEXT && $type !== EUF_COUNTRY ) ? "visible" : "none";
if($type == 0)
{
$val_hide = 'none';
}
// return print_a($type,true); // return print_a($current,true);
$text = "<div id='values' style='display:$val_hide'>\n";
$text .= "<div id='value_container' >\n";
$curVals = explode(",",varset($current['user_extended_struct_values']));
if(count($curVals) == 0)
{
$curVals[]='';
}
$i=0;
foreach($curVals as $v)
{
$id = $i ? "" : " id='value_line'";
$i++;
$text .= "
<span {$id}>
<input class='tbox' type='text' name='user_extended_struct_values[]' size='40' value='{$v}' /></span><br />";
}
$text .= "
</div>
<input type='button' class='btn btn-primary' value='".EXTLAN_48."' onclick=\"duplicateHTML('value_line','value_container');\" />
<br /><span class='field-help'>".EXTLAN_17."</span>";
$text .= "<div class='checkbox' style='margin-top:10px; margin-bottom:0'>".$frm->checkbox('sort_user_values',1, false, EXTLAN_87)."</div>";
$text .= "</div>";
if($this->getController()->getAction() === 'edit' && ($type !== EUF_DB_FIELD))
{
return $text;
}
// End of Values. --------------------------------------
$db_hide = ($current['user_extended_struct_type'] == EUF_DB_FIELD) ? "block" : "none";
// Ajax URL for "Table" dropdown.
$ajaxGetTableSrc = e_SELF . '?mode=ajax&action=changeTable';
$text .= "<div id='db_mode' style='display:{$db_hide}'>";
$text .= "<table class='table table-striped table-bordered' style='width:70%;margin-left:0;'><tr><td>";
$text .= EXTLAN_62 . "</td><td style='70%'>";
$text .= "<select name='table_db' style='width:99%' class='tbox e-ajax' data-src='{$ajaxGetTableSrc}'>";
$text .= "<option value='' class='caption'>" . LAN_NONE . "</option>";
$result = e107::getDb()->tables();
foreach($result as $row2)
{
$fld = $row2;
$selected = (varset($_POST['table_db']) == $fld || $curVals[0] == $fld) ? " selected='selected'" : "";
// if (MPREFIX!='' && strpos($row2[0], MPREFIX)!==FALSE)
{
$text .= "<option value=\"".$fld."\" $selected>".$fld."</option>\n";
}
}
$text .= " </select></td></tr>";
if($_POST['table_db'] || $curVals[0])
{
// Field ID
$text .= "<tr><td>".EXTLAN_63."</td><td><select style='width:99%' class='tbox e-select' name='field_id' >\n
<option value='' class='caption'>".LAN_NONE."</option>\n";
$table_list = !empty($_POST['table_db']) ? $_POST['table_db'] : $curVals[0] ;
if($sql->gen("DESCRIBE ".MPREFIX."{$table_list}"))
{
while($row3 = $sql->fetch())
{
$field_name=$row3['Field'];
$selected = ($curVals[1] == $field_name) ? " selected='selected' " : "";
$text .="<option value=\"$field_name\" $selected>".$field_name."</option>\n";
}
}
$text .= " </select></td></tr><tr><td>";
// Field Value
$text .= EXTLAN_64."</td><td><select style='width:99%' class='tbox e-select' name='field_value' >
<option value='' class='caption'>".LAN_NONE."</option>\n";
$table_list = !empty($_POST['table_db']) ? $_POST['table_db'] : $curVals[0] ;
if($sql->gen("DESCRIBE ".MPREFIX."{$table_list}"))
{
while($row3 = $sql->fetch())
{
$field_name=$row3['Field'];
$selected = ($curVals[2] == $field_name) ? " selected='selected' " : "";
$text .="<option value=\"$field_name\" $selected>".$field_name."</option>\n";
}
}
$text .= " </select></td></tr><tr><td>";
$text .= LAN_ORDER."</td><td><select style='width:99%' class='tbox e-select' name='field_order' >
<option value='' class='caption'>".LAN_NONE."</option>\n";
$table_list = !empty($_POST['table_db']) ? $_POST['table_db'] : $curVals[0] ;
if($sql ->gen("DESCRIBE ".MPREFIX."{$table_list}"))
{
while($row3 = $sql->fetch())
{
$field_name=$row3['Field'];
$selected = ($curVals[3] == $field_name) ? " selected='selected' " : "";
$text .="<option value=\"$field_name\" $selected>".$field_name."</option>\n";
}
}
$text .= " </select></td></tr>";
}
$text .= "</table></div>";
// ---------------------------------------------------------
return $text;
}
} // end class.
class user_extended_category_struct_ui extends e_admin_ui
{
protected $pluginTitle = EXTLAN_9;
protected $pluginName = 'user_extended';
// protected $eventName = 'user_extended-user_extended_struct'; // remove comment to enable event triggers in admin.
protected $table = 'user_extended_struct';
protected $pid = 'user_extended_struct_id';
protected $perPage = 10;
protected $batchDelete = true;
// protected $batchCopy = true;
// protected $sortField = 'somefield_order';
// protected $orderStep = 10;
// protected $tabs = array('Tabl 1','Tab 2'); // Use 'tab'=>0 OR 'tab'=>1 in the $fields below to enable.
protected $listQry = "SELECT * FROM `#user_extended_struct` WHERE user_extended_struct_type = 0 AND user_extended_struct_text != '_system_' "; // Example Custom Query. LEFT JOINS allowed. Should be without any Order or Limit.
protected $listOrder = 'user_extended_struct_order ASC';
protected $fields = array (
'checkboxes' => array ( 'title' => '', 'type' => null, 'data' => null, 'width' => '5%', 'thclass' => 'center', 'forced' => '1', 'class' => 'center', 'toggle' => 'e-multiselect', ),
'user_extended_struct_id' => array ( 'title' => LAN_ID, 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_name' => array ( 'title' => LAN_NAME, 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_text' => array ( 'title' => EXTLAN_79, 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'inline' => true, 'help' => '', 'readParms' => 'constant=1', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_type' => array ( 'title' => EXTLAN_2, 'type' => 'hidden', 'nolist'=>true, 'data' => 'int', 'width' => 'auto', 'batch' => true, 'filter' => true, 'help' => '', 'readParms' => '', 'writeParms' => array('default'=>0), 'class' => 'left', 'thclass' => 'left', ),
// 'user_extended_struct_values' => array ( 'title' => "Values", 'type' => 'method', 'nolist'=>true, 'data' => 'str', 'width' => 'auto', 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
// 'user_extended_struct_default' => array ( 'title' => LAN_DEFAULT, 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
// 'user_extended_struct_parent' => array ( 'title' => LAN_CATEGORY, 'type' => 'dropdown', 'data' => 'int', 'width' => 'auto', 'batch' => true, 'filter' => true, 'help' => '', 'readParms' => '', 'writeParms' => array('size'=>'xxlarge'), 'class' => 'left', 'thclass' => 'left', ),
// 'user_extended_struct_required' => array ( 'title' => EXTLAN_4, 'type' => 'method', 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_applicable' => array ( 'title' => EXTLAN_5, 'type' => 'userclass', 'data' => 'int', 'width' => '15%', 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
// 'user_extended_struct_parms' => array ( 'title' => "Params", 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_read' => array ( 'title' =>EXTLAN_6, 'type' => 'userclass', 'data' => 'int', 'width' => '15%', 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_write' => array ( 'title' => EXTLAN_7, 'type' => 'userclass', 'data' => 'int', 'width' => '15%', 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
// 'user_extended_struct_signup' => array ( 'title' => 'Signup', 'type' => 'boolean', 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'user_extended_struct_order' => array ( 'title' => LAN_ORDER, 'type' => 'number', 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'right', 'thclass' => 'right', ),
'options' => array ( 'title' => LAN_OPTIONS, 'type' => null, 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced' => '1', 'readParms'=>'sort=0' ),
);
protected $fieldpref = array('user_extended_struct_name', 'user_extended_struct_text', 'user_extended_struct_read', 'user_extended_struct_write', 'user_extended_struct_applicable');
protected $prefs = array(
);
public function init()
{
// Set drop-down values (if any).
}
// ------- Customize Create --------
public function beforeCreate($new_data, $old_data)
{
return $new_data;
}
/*
public function afterCreate($new_data, $old_data, $id)
{
// do something
}
public function onCreateError($new_data, $old_data)
{
// do something
}
// ------- Customize Update --------
public function beforeUpdate($new_data, $old_data, $id)
{
return $new_data;
}
public function afterUpdate($new_data, $old_data, $id)
{
// do something
}
public function onUpdateError($new_data, $old_data, $id)
{
// do something
}*/
}
new user_extended_adminArea();
require_once(e_ADMIN."auth.php");
e107::getAdminUI()->runPage();
require_once(e_ADMIN."footer.php");