Example #1
0
 function createPage($mode = FALSE)
 {
     /* mode: FALSE == page, mode: TRUE == menu */
     if ($_GET['mode'] == 'menu') {
         $mode = TRUE;
     }
     global $e107, $e_userclass, $e_event;
     $frm = e107::getForm();
     $sql = e107::getDb();
     $tp = e107::getParser();
     $ns = e107::getRender();
     $mes = e107::getMessage();
     $id = intval($_GET['id']);
     $sub_action = $_GET['action'];
     $edit = $sub_action == 'edit';
     $caption = !$mode ? $edit ? CUSLAN_23 : CUSLAN_24 : ($edit ? CUSLAN_25 : CUSLAN_26);
     if ($_GET['action'] == "edit" && !isset($_POST['preview']) && !isset($_POST['submit'])) {
         //$url = e107::getUrl()->sc('page/view', $row, 'allow=page_id,page_title,page_sef');
         //$query = "SELECT p.*,l.link_name,m.menu_name FROM #page AS p
         $query = "SELECT p.* FROM #page AS p\n\t\t\t\tLEFT JOIN #menus AS m ON m.menu_path='{$id}' WHERE p.page_id ='{$id}' LIMIT 1";
         // FIXME - extremely bad
         //LEFT JOIN #links AS l ON l.link_url='".$url."'
         if ($sql->db_Select_gen($query)) {
             $row = $sql->db_Fetch();
             $page_class = $row['page_class'];
             $page_password = $row['page_password'];
             $page_title = $tp->toForm($row['page_title']);
             $page_rating_flag = $row['page_rating_flag'];
             $page_comment_flag = $row['page_comment_flag'];
             $page_display_authordate_flag = $row['page_author'];
             $page_link = varset($row['link_name'], '');
             $data = $tp->toForm($row['page_text']);
             $edit = TRUE;
             //				$menu_name					  = $tp->toForm($row['menu_name']);
             $menu_name = $tp->toForm($row['page_theme']);
         }
     } else {
         $menu_name = '';
         $page_title = '';
         $data = '';
     }
     $e_qry = $mode ? 'menus=1' : '';
     $text = "\n\t\t\t\t<form method='post' action='" . e_SELF . "?" . $e_qry . "' id='dataform' enctype='multipart/form-data'>\n\t\t\t\t\t<fieldset id='core-cpage-create-general'>\n\t\t\t\t\t\t<legend" . ($mode ? " class='e-hideme'" : "") . ">" . CUSLAN_47 . "</legend>\n\t\t\t\t\t\t<table class='table adminform'>\n\t\t\t\t\t\t\t<colgroup>\n\t\t\t\t\t\t\t\t<col class='col-label' />\n\t\t\t\t\t\t\t\t<col class='col-control' />\n\t\t\t\t\t\t\t</colgroup>\n\t\t\t\t\t\t\t<tbody>\n\t\t\t";
     if ($mode) {
         $text .= "\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>" . CUSLAN_7 . "</td>\n\t\t\t\t\t\t<td>" . $frm->text('menu_name', $menu_name, 50) . "</td>\n\t\t\t\t\t</tr>\n\t\t\t\t";
     } else {
         $text .= "\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Chapter</td>\n\t\t\t\t\t\t<td>" . $frm->selectbox('page_chapter', $this->cats, $row['page_chapter']) . "</td>\n\t\t\t\t\t</tr>\n\t\t\t\t";
         // fixed - last parameter (allinfo) should be false as getLayout method is returning non-usable formatted array
         $templates = e107::getLayouts('', 'page', 'front', '', false, false);
         $templates['menu'] = "Sidebar";
         // ie. a MENU item. //TODO
         $text .= "\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Template</td>\n\t\t\t\t\t\t<td>" . $frm->selectbox('page_template', $templates, $row['page_template']) . "</td>\n\t\t\t\t\t</tr>\n\t\t\t\t";
     }
     $text .= "\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>" . CUSLAN_8 . "</td>\n\t\t\t\t\t\t<td>" . $frm->text('page_title', $page_title, 250) . "</td>\n\t\t\t\t\t</tr>\n\t\t\t";
     if (!$mode) {
         $text .= "\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>" . CUSLAN_3 . "</td>\n\t\t\t\t\t\t\t<td>" . $frm->text('page_sef', $row['page_sef'], 250) . "</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t";
         $text .= "\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>" . CUSLAN_32 . "</td>\n\t\t\t\t\t\t\t<td>" . $frm->text('page_metakeys', $row['page_metakeys'], 250) . "</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t";
         $text .= "\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>" . CUSLAN_11 . "</td>\n\t\t\t\t\t\t\t<td>" . $frm->textarea('page_metadscr', $row['page_metadscr'], 1, 80, array(), 200) . "</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t";
     }
     $text .= "\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>" . CUSLAN_9 . "</td>\n\t\t\t\t\t\t\t<td>\n\t\t\t";
     $text .= "<div id='tab-container' class='admintabs e-tabs'>";
     $data = $tp->toForm($data, FALSE, TRUE);
     // Make sure we convert HTML tags to entities
     $textareaValue = strstr($data, "[img]http") ? $data : str_replace("[img]../", "[img]", $data);
     //	$text .= $this->bbareaMulti('data', $textareaValue, 'page','page','large');
     $text .= $frm->bbarea('data', $textareaValue, 'page', 'page', 'large');
     $text .= "</div>";
     //	$text .= $frm->bbarea('data', $textareaValue, 'page','help','large');
     //	$text .= "<textarea class='e-wysiwyg tbox' tabindex='".$frm->getNext()."' id='data' name='data' cols='80'{$insertjs}>".(strstr($data, "[img]http") ? $data : str_replace("[img]../", "[img]", $data))."</textarea>";
     //			<br />".display_help('cpage-help', 'cpage')."
     /*
     				$text .= "</td>
     							</tr>
     							<tr>
     								<td>".LAN_UPLOAD_IMAGES."</td>
     								<td>".$tp->parseTemplate("{UPLOADFILE=".e_IMAGE."custom/}")."</td>
     							</tr>
     
     
     		";
     */
     if (!$mode) {
         $text .= "\n\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</fieldset>\n\t\t\t\t\t<fieldset id='core-cpage-create-options'>\n\t\t\t\t\t\t<legend>" . LAN_OPTIONS . "</legend>\n\t\t\t\t\t\t<table class='adminedit options'>\n\t\t\t\t\t\t\t<colgroup>\n\t\t\t\t\t\t\t\t<col class='col-label' />\n\t\t\t\t\t\t\t\t<col class='col-control' />\n\t\t\t\t\t\t\t</colgroup>\n\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>" . CUSLAN_10 . "</td>\n\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t" . $frm->radio_switch('page_rating_flag', $page_rating_flag) . "\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>" . CUSLAN_13 . "</td>\n\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t" . $frm->radio_switch('page_comment_flag', $page_comment_flag) . "\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>" . CUSLAN_41 . "</td>\n\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t" . $frm->radio_switch('page_display_authordate_flag', $page_display_authordate_flag) . "\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>" . CUSLAN_14 . "</td>\n\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t" . $frm->text('page_password', $page_password, 50) . "\n\t\t\t\t\t\t\t\t\t\t<div class='field-help'>" . CUSLAN_15 . "</div>\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t</tr>\n\t\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>" . CUSLAN_18 . "</td>\n\t\n\t\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t\t" . $e_userclass->uc_dropdown('page_class', $page_class, 'public,guest,nobody,member,main,admin,classes', "tabindex='" . $frm->getNext() . "'") . "\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t";
         /*
         								<tr>
         									<td>".CUSLAN_16."</td>
         									<td>
         										".$frm->text('page_link', $page_link, 50)."
         										<div class='field-help'>".CUSLAN_17."</div>
         									</td>
         								</tr>
         								 **/
         //triggerHook
         $data = array('method' => 'form', 'table' => 'page', 'id' => $id, 'plugin' => 'page', 'function' => 'createPage');
         $hooks = $e_event->triggerHook($data);
         if (!empty($hooks)) {
             $text .= "\n\t\t\t\t\t</tbody>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</fieldset>\n\t\t\t\t\t<fieldset id='core-cpage-create-hooks'>\n\t\t\t\t\t\t<legend>" . LAN_HOOKS . "</legend>\n\t\t\t\t\t\t<table class='adminform options'>\n\t\t\t\t\t\t\t<colgroup>\n\t\t\t\t\t\t\t\t<col class='col-label' />\n\t\t\t\t\t\t\t\t<col class='col-control' />\n\t\t\t\t\t\t\t</colgroup>\n\t\t\t\t\t\t\t<tbody>";
             foreach ($hooks as $hook) {
                 if (!empty($hook)) {
                     $text .= "\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>" . $hook['caption'] . "</td>\n\t\t\t\t\t\t\t\t<td>" . $hook['text'] . "</td>\n\t\t\t\t\t\t\t</tr>";
                 }
             }
         }
     }
     $text .= "\n\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t\t<div class='buttons-bar center'>\n\t\t\t\t\t\t\t" . (!$mode ? $edit ? $frm->admin_button('updatePage', CUSLAN_19, 'update') . "<input type='hidden' name='pe_id' value='{$id}' />" : $frm->admin_button('submitPage', CUSLAN_20, 'create') : ($edit ? $frm->admin_button('updateMenu', CUSLAN_21, 'update') . "<input type='hidden' name='pe_id' value='{$id}' />" : $frm->admin_button('submitMenu', CUSLAN_22, 'create'))) . "\n\t\t\t\t\t\t\t<input type='hidden' name='mode' value='{$mode}' />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</fieldset>\n\t\t\t\t</form>\n\t\t\t";
     //	$ns->tablerender($caption, $text);
     echo $mes->render() . $text;
 }
Example #2
0
 /**
  * Auto-render Form Element
  * @param string $key
  * @param mixed $value
  * @param array $attributes field attributes including render parameters, element options - see e_admin_ui::$fields for required format
  * #param array (under construction) $required_data required array as defined in e_model/validator
  * @return string
  */
 function renderElement($key, $value, $attributes, $required_data = array(), $id = 0)
 {
     //	return print_a($value,true);
     $parms = vartrue($attributes['writeParms'], array());
     $tp = e107::getParser();
     if (is_string($parms)) {
         parse_str($parms, $parms);
     }
     if (!empty($attributes['multilan'])) {
         $value = is_array($value) ? varset($value[e_LANGUAGE], '') : $value;
         $parms['post'] = "<small class='e-tip admin-multilanguage-field input-group-addon' style='cursor:help; padding-left:10px' title='Multi-language field'>" . $tp->toGlyph('fa-language') . "</small>";
     }
     if (empty($value) && !empty($parms['default'])) {
         $value = $parms['default'];
     }
     // Two modes of read-only. 1 = read-only, but only when there is a value, 2 = read-only regardless.
     if (vartrue($attributes['readonly']) && (vartrue($value) || vartrue($attributes['readonly']) === 2)) {
         if (vartrue($attributes['writeParms'])) {
             $attributes['readParms'] = $attributes['writeParms'];
         }
         return $this->renderValue($key, $value, $attributes) . $this->hidden($key, $value);
         //
     }
     // FIXME standard - writeParams['__options'] is introduced for list elements, bundle adding to writeParms is non reliable way
     $writeParamsOptionable = array('dropdown', 'comma', 'radio', 'lanlist', 'language', 'user');
     $writeParamsDisabled = array('layouts', 'templates', 'userclass', 'userclasses');
     // FIXME it breaks all list like elements - dropdowns, radio, etc
     if (vartrue($required_data[0]) || vartrue($attributes['required'])) {
         // FIXME - another approach, raise standards, remove checks
         if (in_array($attributes['type'], $writeParamsOptionable)) {
             $parms['__options']['required'] = 1;
         } elseif (!in_array($attributes['type'], $writeParamsDisabled)) {
             $parms['required'] = 1;
         }
     }
     // FIXME it breaks all list like elements - dropdowns, radio, etc
     if (vartrue($required_data[3]) || vartrue($attributes['pattern'])) {
         // FIXME - another approach, raise standards, remove checks
         if (in_array($attributes['type'], $writeParamsOptionable)) {
             $parms['__options']['pattern'] = vartrue($attributes['pattern'], $required_data[3]);
         } elseif (!in_array($attributes['type'], $writeParamsDisabled)) {
             $parms['pattern'] = vartrue($attributes['pattern'], $required_data[3]);
         }
     }
     // XXX Fixes For the above.  - use optArray variable. eg. $field['key']['writeParms']['optArray'] = array('one','two','three');
     if (($attributes['type'] == 'dropdown' || $attributes['type'] == 'radio' || $attributes['type'] == 'checkboxes') && !empty($parms['optArray'])) {
         $fopts = $parms;
         $parms = $fopts['optArray'];
         unset($fopts['optArray']);
         $parms['__options'] = $fopts;
     }
     $this->renderElementTrigger($key, $value, $parms, $required_data, $id);
     switch ($attributes['type']) {
         case 'number':
             $maxlength = vartrue($parms['maxlength'], 255);
             unset($parms['maxlength']);
             if (!vartrue($parms['size'])) {
                 $parms['size'] = 'mini';
             }
             if (!vartrue($parms['class'])) {
                 $parms['class'] = 'tbox number e-spinner';
             }
             if (!$value) {
                 $value = '0';
             }
             $ret = vartrue($parms['pre']) . $this->number($key, $value, $maxlength, $parms) . vartrue($parms['post']);
             break;
         case 'ip':
             $ret = vartrue($parms['pre']) . $this->text($key, e107::getIPHandler()->ipDecode($value), 32, $parms) . vartrue($parms['post']);
             break;
         case 'email':
             $maxlength = vartrue($parms['maxlength'], 255);
             unset($parms['maxlength']);
             $ret = vartrue($parms['pre']) . $this->email($key, $value, $maxlength, $parms) . vartrue($parms['post']);
             // vartrue($parms['__options']) is limited. See 'required'=>true
             break;
         case 'url':
             $maxlength = vartrue($parms['maxlength'], 255);
             unset($parms['maxlength']);
             $ret = vartrue($parms['pre']) . $this->url($key, $value, $maxlength, $parms) . vartrue($parms['post']);
             // vartrue($parms['__options']) is limited. See 'required'=>true
             break;
             //	case 'email':
         //	case 'email':
         case 'password':
             // encrypts to md5 when saved.
             $maxlength = vartrue($parms['maxlength'], 255);
             unset($parms['maxlength']);
             $ret = vartrue($parms['pre']) . $this->password($key, $value, $maxlength, $parms) . vartrue($parms['post']);
             // vartrue($parms['__options']) is limited. See 'required'=>true
             break;
         case 'text':
             $maxlength = vartrue($parms['maxlength'], 255);
             unset($parms['maxlength']);
             if (!empty($parms['password'])) {
                 $ret = vartrue($parms['pre']) . $this->password($key, $value, $maxlength, $parms) . vartrue($parms['post']);
             } else {
                 $ret = vartrue($parms['pre']) . $this->text($key, $value, $maxlength, $parms) . vartrue($parms['post']);
                 // vartrue($parms['__options']) is limited. See 'required'=>true
             }
             if (!empty($attributes['multilan'])) {
                 $ret = "<span class='input-group input-xxlarge'>" . $ret . "</span>";
             }
             break;
         case 'tags':
             $maxlength = vartrue($parms['maxlength'], 255);
             $ret = vartrue($parms['pre']) . $this->tags($key, $value, $maxlength, $parms) . vartrue($parms['post']);
             // vartrue($parms['__options']) is limited. See 'required'=>true
             break;
         case 'textarea':
             $text = "";
             if (vartrue($parms['append']) && vartrue($value)) {
                 $attributes['readParms'] = 'bb=1';
                 $text = $this->renderValue($key, $value, $attributes);
                 $text .= '<br />';
                 $value = "";
                 // Appending needs is  performed and customized using function: beforeUpdate($new_data, $old_data, $id)
             }
             $text .= vartrue($parms['pre']) . $this->textarea($key, $value, vartrue($parms['rows'], 5), vartrue($parms['cols'], 40), vartrue($parms['__options'], $parms), varset($parms['counter'], false)) . vartrue($parms['post']);
             $ret = $text;
             break;
         case 'bbarea':
             $options = array('counter' => varset($parms['counter'], false));
             // Media = media-category owner used by media-manager.
             $ret = vartrue($parms['pre']) . $this->bbarea($key, $value, vartrue($parms['template']), vartrue($parms['media']), vartrue($parms['size'], 'medium'), $options) . vartrue($parms['post']);
             break;
         case 'image':
             //TODO - thumb, image list shortcode, js tooltip...
             $label = varset($parms['label'], 'LAN_EDIT');
             unset($parms['label']);
             $ret = $this->imagepicker($key, $value, defset($label, $label), $parms);
             break;
         case 'images':
             //	return print_a($value, true);
             $ret = "";
             $label = varset($parms['label'], 'LAN_EDIT');
             for ($i = 0; $i < 5; $i++) {
                 $k = $key . '[' . $i . '][path]';
                 $ival = $value[$i]['path'];
                 $ret .= $this->imagepicker($k, $ival, defset($label, $label), $parms);
             }
             break;
         case 'files':
             if ($attributes['data'] == 'array') {
                 $parms['data'] = 'array';
             }
             $ret = '<ol>';
             for ($i = 0; $i < 5; $i++) {
                 //	$k 		= $key.'['.$i.'][path]';
                 //	$ival 	= $value[$i]['path'];
                 $k = $key . '[' . $i . ']';
                 $ival = $value[$i];
                 $ret .= '<li>' . $this->filepicker($k, $ival, defset($label, $label), $parms) . '</li>';
             }
             $ret .= '</ol>';
             break;
         case 'file':
             //TODO - thumb, image list shortcode, js tooltip...
             $label = varset($parms['label'], 'LAN_EDIT');
             unset($parms['label']);
             $ret = $this->filepicker($key, $value, defset($label, $label), $parms);
             break;
         case 'icon':
             $label = varset($parms['label'], 'LAN_EDIT');
             $ajax = varset($parms['ajax'], true) ? true : false;
             unset($parms['label'], $parms['ajax']);
             $ret = $this->iconpicker($key, $value, defset($label, $label), $parms, $ajax);
             break;
         case 'date':
             // date will show the datepicker but won't convert the value to unix. ie. string value will be saved. (or may be processed manually with beforeCreate() etc. Format may be determined by $parm.
         // date will show the datepicker but won't convert the value to unix. ie. string value will be saved. (or may be processed manually with beforeCreate() etc. Format may be determined by $parm.
         case 'datestamp':
             // If hidden, value is updated regardless. eg. a 'last updated' field.
             // If not hidden, and there is a value, it is retained. eg. during the update of an existing record.
             // otherwise it is added. eg. during the creation of a new record.
             if (vartrue($parms['auto']) && ($value == null || vartrue($parms['hidden']))) {
                 $value = time();
             }
             if (vartrue($parms['readonly'])) {
                 $ret = $this->renderValue($key, $value, $attributes) . $this->hidden($key, $value);
             } elseif (vartrue($parms['hidden'])) {
                 $ret = $this->hidden($key, $value);
             } else {
                 $ret = $this->datepicker($key, $value, $parms);
             }
             break;
         case 'layouts':
             //to do - exclude param (exact match)
             $location = varset($parms['plugin']);
             // empty - core
             $ilocation = vartrue($parms['id'], $location);
             // omit if same as plugin name
             $where = vartrue($parms['area'], 'front');
             //default is 'front'
             $filter = varset($parms['filter']);
             $merge = vartrue($parms['merge']) ? true : false;
             $layouts = e107::getLayouts($location, $ilocation, $where, $filter, $merge, true);
             if (varset($parms['default']) && !isset($layouts[0]['default'])) {
                 $layouts[0] = array('default' => $parms['default']) + $layouts[0];
             }
             $info = array();
             if ($layouts[1]) {
                 foreach ($layouts[1] as $k => $info_array) {
                     if (isset($info_array['description'])) {
                         $info[$k] = defset($info_array['description'], $info_array['description']);
                     }
                 }
             }
             //$this->selectbox($key, $layouts, $value)
             $ret = vartrue($parms['raw']) ? $layouts[0] : $this->radio_multi($key, $layouts[0], $value, array('sep' => "<br />"), $info);
             break;
         case 'templates':
             //to do - exclude param (exact match)
             $templates = array();
             if (varset($parms['default'])) {
                 $templates['default'] = defset($parms['default'], $parms['default']);
             }
             $location = vartrue($parms['plugin']) ? e_PLUGIN . $parms['plugin'] . '/' : e_THEME;
             $ilocation = vartrue($parms['location']);
             $tmp = e107::getFile()->get_files($location . 'templates/' . $ilocation, vartrue($parms['fmask'], '_template\\.php$'), vartrue($parms['omit'], 'standard'), vartrue($parms['recurse_level'], 0));
             foreach ($tmp as $files) {
                 $k = str_replace('_template.php', '', $files['fname']);
                 $templates[$k] = implode(' ', array_map('ucfirst', explode('_', $k)));
                 //TODO add LANS?
             }
             // override
             $where = vartrue($parms['area'], 'front');
             $location = vartrue($parms['plugin']) ? $parms['plugin'] . '/' : '';
             $tmp = e107::getFile()->get_files(e107::getThemeInfo($where, 'rel') . 'templates/' . $location . $ilocation, vartrue($parms['fmask']), vartrue($parms['omit'], 'standard'), vartrue($parms['recurse_level'], 0));
             foreach ($tmp as $files) {
                 $k = str_replace('_template.php', '', $files['fname']);
                 $templates[$k] = implode(' ', array_map('ucfirst', explode('_', $k)));
                 //TODO add LANS?
             }
             $ret = vartrue($parms['raw']) ? $templates : $this->selectbox($key, $templates, $value);
             break;
         case 'checkboxes':
             if (is_array($parms)) {
                 $eloptions = vartrue($parms['__options'], array());
                 if (is_string($eloptions)) {
                     parse_str($eloptions, $eloptions);
                 }
                 if ($attributes['type'] === 'comma') {
                     $eloptions['multiple'] = true;
                 }
                 unset($parms['__options']);
                 if (!is_array($value) && !empty($value)) {
                     $value = explode(",", $value);
                 }
                 $ret = vartrue($eloptions['pre']) . $this->checkboxes($key, $parms, $value, $eloptions) . vartrue($eloptions['post']);
             }
             return $ret;
             break;
         case 'dropdown':
         case 'comma':
             $eloptions = vartrue($parms['__options'], array());
             if (is_string($eloptions)) {
                 parse_str($eloptions, $eloptions);
             }
             if ($attributes['type'] === 'comma') {
                 $eloptions['multiple'] = true;
             }
             unset($parms['__options']);
             if (vartrue($eloptions['multiple']) && !is_array($value)) {
                 $value = explode(',', $value);
             }
             $ret = vartrue($eloptions['pre']) . $this->selectbox($key, $parms, $value, $eloptions) . vartrue($eloptions['post']);
             break;
         case 'radio':
             // TODO - more options (multi-line, help)
             $eloptions = vartrue($parms['__options'], array());
             if (is_string($eloptions)) {
                 parse_str($eloptions, $eloptions);
             }
             unset($parms['__options']);
             $ret = vartrue($eloptions['pre']) . $this->radio_multi($key, $parms, $value, $eloptions, false) . vartrue($eloptions['post']);
             break;
         case 'userclass':
         case 'userclasses':
             $uc_options = vartrue($parms['classlist'], 'public,guest,nobody,member,admin,main,classes');
             // defaults to 'public,guest,nobody,member,classes' (userclass handler)
             unset($parms['classlist']);
             //	$method = ($attributes['type'] == 'userclass') ? 'uc_select' : 'uc_select';
             if (vartrue($attributes['type']) == 'userclasses') {
                 $parms['multiple'] = true;
             }
             $ret = vartrue($parms['pre']) . $this->uc_select($key, $value, $uc_options, vartrue($parms, array())) . vartrue($parms['post']);
             break;
             /*case 'user_name':
             		case 'user_loginname':
             		case 'user_login':
             		case 'user_customtitle':
             		case 'user_email':*/
         /*case 'user_name':
         		case 'user_loginname':
         		case 'user_login':
         		case 'user_customtitle':
         		case 'user_email':*/
         case 'user':
             //user_id expected
             // Just temporary solution, could be changed soon
             if (!isset($parms['__options'])) {
                 $parms['__options'] = array();
             }
             if (!is_array($parms['__options'])) {
                 parse_str($parms['__options'], $parms['__options']);
             }
             if (empty($value) && varset($parms['currentInit'], USERID) !== 0 || vartrue($parms['current'])) {
                 $value = USERID;
                 if (vartrue($parms['current'])) {
                     $parms['__options']['readonly'] = true;
                 }
             }
             if (!is_array($value)) {
                 $value = $value ? e107::getSystemUser($value, true)->getUserData() : array();
                 // e107::user($value);
             }
             $colname = vartrue($parms['nameType'], 'user_name');
             $parms['__options']['name'] = $colname;
             if (!$value) {
                 $value = array();
             }
             $uname = varset($value[$colname]);
             $value = varset($value['user_id'], 0);
             $ret = $this->userpicker(vartrue($parms['nameField'], $key), $key, $uname, $value, vartrue($parms['__options']));
             break;
         case 'bool':
         case 'boolean':
             if (varset($parms['label']) === 'yesno') {
                 $lenabled = 'LAN_YES';
                 $ldisabled = 'LAN_NO';
             } else {
                 $lenabled = vartrue($parms['enabled'], 'LAN_ENABLED');
                 $ldisabled = vartrue($parms['disabled'], 'LAN_DISABLED');
             }
             unset($parms['enabled'], $parms['disabled'], $parms['label']);
             $ret = vartrue($parms['pre']) . $this->radio_switch($key, $value, defset($lenabled, $lenabled), defset($ldisabled, $ldisabled), $parms) . vartrue($parms['post']);
             break;
         case "checkbox":
             $value = isset($parms['value']) ? $parms['value'] : $value;
             $ret = vartrue($parms['pre']) . $this->checkbox($key, 1, $value, $parms) . vartrue($parms['post']);
             break;
         case 'method':
             // Custom Function
             $meth = !empty($attributes['method']) ? $attributes['method'] : $key;
             $parms['field'] = $key;
             $ret = call_user_func_array(array($this, $meth), array($value, 'write', $parms));
             break;
         case 'upload':
             //TODO - from method
             // TODO uploadfile SC is now processing uploads as well (add it to admin UI), write/readParms have to be added (see uploadfile.php parms)
             $disbut = varset($parms['disable_button'], '0');
             $ret = $tp->parseTemplate("{UPLOADFILE=" . (vartrue($parms['path']) ? e107::getParser()->replaceConstants($parms['path']) : e_UPLOAD) . "|nowarn&trigger=etrigger_uploadfiles&disable_button={$disbut}}");
             break;
         case 'hidden':
             $value = isset($parms['value']) ? $parms['value'] : $value;
             $ret = vartrue($parms['show']) ? $value ? $value : varset($parms['empty'], $value) : '';
             $ret = $ret . $this->hidden($key, $value);
             break;
         case 'lanlist':
             // installed languages
         // installed languages
         case 'language':
             // all languages
             $options = $attributes['type'] === 'language' ? e107::getLanguage()->getList() : e107::getLanguage()->getLanSelectArray();
             $eloptions = vartrue($parms['__options'], array());
             if (!is_array($eloptions)) {
                 parse_str($eloptions, $eloptions);
             }
             unset($parms['__options']);
             if (vartrue($eloptions['multiple']) && !is_array($value)) {
                 $value = explode(',', $value);
             }
             $ret = vartrue($eloptions['pre']) . $this->selectbox($key, $options, $value, $eloptions) . vartrue($eloptions['post']);
             break;
         case null:
             //	Possibly used in db but should not be submitted in form. @see news_extended.
             break;
         default:
             // No LAN necessary, debug only.
             $ret = ADMIN ? "<span class='alert alert-error alert-danger'>" . LAN_ERROR . " Unknown 'type' : " . $attributes['type'] . "</span>" : $value;
             break;
     }
     if (vartrue($parms['expand'])) {
         $k = "exp-" . $this->name2id($key);
         $text = "<a class='e-expandit e-tip' href='#{$k}'>" . $parms['expand'] . "</a>";
         $text .= vartrue($parms['help']) ? '<div class="field-help">' . $parms['help'] . '</div>' : '';
         $text .= "<div id='{$k}' class='e-hideme'>" . $ret . "</div>";
         return $text;
     } else {
         $ret .= vartrue($parms['help']) ? '<div class="field-help">' . $tp->toHtml($parms['help'], false, 'defs') . '</div>' : '';
     }
     return $ret;
 }
Example #3
0
 function init()
 {
     if (vartrue($_POST['menu_delete'])) {
         $key = key($_POST['menu_delete']);
         if ($key) {
             e107::getDb()->update('page', "menu_name = '' WHERE page_id=" . intval($key) . " LIMIT 1");
         }
     }
     // USED IN Menu LIST/INLINE-EDIT MODE ONLY.
     if ($this->getMode() == 'menu' && ($this->getACtion() == 'list' || $this->getACtion() == 'inline')) {
         $this->listQry = "SELECT SQL_CALC_FOUND_ROWS p.*,u.user_id,u.user_name FROM #page AS p LEFT JOIN #user AS u ON p.page_author = u.user_id WHERE p.menu_name != '' ";
         // without any Order or Limit.
         $this->listOrder = 'p.page_id desc';
         $this->batchDelete = false;
         $this->fields = array('checkboxes' => array('title' => '', 'type' => null, 'width' => '3%', 'forced' => TRUE, 'thclass' => 'center', 'class' => 'center'), 'page_id' => array('title' => 'ID', 'type' => 'text', 'tab' => 0, 'width' => '5%', 'readParms' => '', 'forced' => TRUE), 'menu_image' => array('title' => CUSLAN_71, 'type' => 'image', 'width' => '110px', 'thclass' => 'left', 'class' => "left", 'nosort' => false, 'readParms' => 'thumb=140&thumb_urlraw=0&thumb_aw=140', 'readonly' => false), 'menu_icon' => array('title' => LAN_ICON, 'type' => 'icon', 'width' => '80px', 'thclass' => 'center', 'class' => "center", 'nosort' => false, 'readParms' => 'thumb=80&thumb_urlraw=0&thumb_aw=80', 'readonly' => false), 'menu_title' => array('title' => CUSLAN_65, 'forced' => TRUE, 'type' => 'text', 'inline' => true, 'width' => '20%'), 'menu_name' => array('title' => CUSLAN_64, 'type' => 'text', 'inline' => true, 'width' => '10%', 'nolist' => false, "help" => "Will be listed in the Menu-Manager under this name. Must use ASCII characters only."), 'menu_template' => array('title' => CUSLAN_67, 'type' => 'dropdown', 'width' => '15%', 'filter' => true, 'batch' => true, 'inline' => true, 'writeParms' => ''), 'menu_class' => array('title' => LAN_USERCLASS, 'type' => 'userclass', 'data' => 'int', 'inline' => true, 'width' => 'auto', 'filter' => true, 'batch' => true), 'page_datestamp' => array('title' => LAN_DATE, 'type' => 'datestamp', 'data' => 'int', 'width' => 'auto', 'writeParms' => 'auto=1&readonly=1'), 'page_chapter' => array('title' => CUSLAN_63, 'tab' => 0, 'type' => 'dropdown', 'width' => '20%', 'filter' => true, 'batch' => true, 'inline' => true), 'menu_text' => array('title' => CUSLAN_66, 'type' => 'bbarea', 'data' => 'str', 'width' => 'auto', 'readParms' => 'expand=...&truncate=50&bb=1', 'writeParms' => 'media=page'), 'options' => array('title' => LAN_OPTIONS, 'type' => 'method', 'noselector' => true, 'forced' => TRUE, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center', 'readParms' => 'delete=0&deleteClass=' . e_UC_NOBODY));
         $this->fieldpref = array("page_id", "menu_name", "menu_title", 'menu_image', 'menu_template', 'menu_icon', 'page_chapter', 'menu_class');
         ### Parse aliases again or all filters shall fail due to the menu hack!
         $this->_alias_parsed = false;
         $this->parseAliases();
     }
     $this->templates = e107::getLayouts('', 'page', 'front', '', true, false);
     unset($this->templates['panel'], $this->templates['nav']);
     $this->fields['page_template']['writeParms'] = $this->templates;
     $this->fields['menu_template']['writeParms'] = e107::getLayouts('', 'menu', 'front', '', true, false);
     $this->fields['menu_name']['writeParms'] = array('pattern' => '^[\\w-]*');
     $tmp = e107::getLayouts('', 'chapter', 'front', '', true, false);
     $tmpl = array();
     foreach ($tmp as $key => $val) {
         if (substr($key, 0, 3) != 'nav') {
             $tmpl[$key] = $val;
         }
     }
     $this->prefs['listBooksTemplate']['writeParms'] = $tmpl;
     $sql = e107::getDb();
     $sql->gen("SELECT chapter_id,chapter_name,chapter_parent FROM #page_chapters ORDER BY chapter_parent asc, chapter_order");
     while ($row = $sql->fetch()) {
         $cat = $row['chapter_id'];
         if ($row['chapter_parent'] == 0) {
             $this->books[$cat] = $row['chapter_name'];
         } else {
             $book = $row['chapter_parent'];
             $this->cats[$cat] = $this->books[$book] . " : " . $row['chapter_name'];
         }
     }
     //	asort($this->cats);
     $this->fields['page_chapter']['writeParms']['optArray'] = $this->cats;
     $this->fields['page_chapter']['writeParms']['size'] = 'xxlarge';
 }
Example #4
0
 /**
  * Provide user friendly message on mysql duplicate entry error #1062 
  * No need of beforeCreate callback and additional SQL query - mysql error number give us
  * enough info
  * @return boolean true - suppress model errors
  */
 protected function _handleUnique($new_data, $mod)
 {
     if ($this->getModel()->getSqlErrorNumber() == 1062) {
         $templates = e107::getLayouts('featurebox', 'featurebox_category', 'front', '', true, false);
         $msg = e107::getMessage();
         $msg->error('Layout <strong>' . vartrue($templates[$new_data['fb_category_template']], 'n/a') . '</strong> is in use by another category. Layout should be unique per category. ');
         $msg->error($mod == 'create' ? LAN_CREATED_FAILED : LAN_UPDATED_FAILED);
         return !E107_DEBUG_LEVEL;
         // suppress messages (TRUE) only when not in debug mod
     }
     return false;
 }
Example #5
0
 /**
  * Auto-render Form Element
  * @param string $key
  * @param mixed $value
  * @param array $attributes field attributes including render parameters, element options - see e_admin_ui::$fields for required format
  * #param array (under construction) $required_data required array as defined in e_model/validator
  * @return string
  */
 function renderElement($key, $value, $attributes, $required_data = array())
 {
     $parms = vartrue($attributes['writeParms'], array());
     $tp = e107::getParser();
     if (is_string($parms)) {
         parse_str($parms, $parms);
     }
     // Two modes of read-only. 1 = read-only, but only when there is a value, 2 = read-only regardless.
     if (vartrue($attributes['readonly']) && (vartrue($value) || vartrue($attributes['readonly']) == 2)) {
         if (vartrue($attributes['writeParms'])) {
             $attributes['readParms'] = $attributes['writeParms'];
         }
         return $this->renderValue($key, $value, $attributes) . $this->hidden($key, $value);
         //
     }
     switch ($attributes['type']) {
         case 'number':
             $maxlength = vartrue($parms['maxlength'], 255);
             unset($parms['maxlength']);
             if (!vartrue($parms['size'])) {
                 $parms['size'] = 15;
             }
             if (!vartrue($parms['class'])) {
                 $parms['class'] = 'tbox number e-spinner';
             }
             if (!$value) {
                 $value = '0';
             }
             $ret = vartrue($parms['pre']) . $this->text($key, $value, $maxlength, $parms) . vartrue($parms['post']);
             break;
         case 'ip':
             $ret = $this->text($key, e107::getIPHandler()->ipDecode($value), 32, $parms);
             break;
         case 'url':
         case 'email':
         case 'text':
         case 'password':
             // encrypts to md5 when saved.
             $maxlength = vartrue($parms['maxlength'], 255);
             unset($parms['maxlength']);
             $ret = vartrue($parms['pre']) . $this->text($key, $value, $maxlength, vartrue($parms['__options'])) . vartrue($parms['post']);
             break;
         case 'textarea':
             $text = "";
             if ($parms['append']) {
                 $attributes['readParms'] = 'bb=1';
                 $text = $this->renderValue($key, $value, $attributes) . $this->hidden($key, $value) . '<br />';
                 $value = "";
             }
             $text .= $this->textarea($key, $value, vartrue($parms['rows'], 5), vartrue($parms['cols'], 40), vartrue($parms['__options']), varset($parms['counter'], false));
             $ret = $text;
             break;
         case 'bbarea':
             $options = array('counter' => varset($parms['counter'], false));
             $ret = $this->bbarea($key, $value, vartrue($parms['template']), vartrue($parms['helptag']), vartrue($parms['size'], 'medium'), $options);
             break;
         case 'image':
             //TODO - thumb, image list shortcode, js tooltip...
             $label = varset($parms['label'], 'LAN_EDIT');
             unset($parms['label']);
             $ret = $this->imagepicker($key, $value, defset($label, $label), $parms);
             break;
         case 'file':
             //TODO - thumb, image list shortcode, js tooltip...
             $label = varset($parms['label'], 'LAN_EDIT');
             unset($parms['label']);
             $ret = $this->filepicker($key, $value, defset($label, $label), $parms);
             break;
         case 'icon':
             $label = varset($parms['label'], 'LAN_EDIT');
             $ajax = varset($parms['ajax'], true) ? true : false;
             unset($parms['label'], $parms['ajax']);
             $ret = $this->iconpicker($key, $value, defset($label, $label), $parms, $ajax);
             break;
         case 'date':
             // date will show the datepicker but won't convert the value to unix. ie. string value will be saved. (or may be processed manually with beforeCreate() etc. Format may be determined by $parm.
         // date will show the datepicker but won't convert the value to unix. ie. string value will be saved. (or may be processed manually with beforeCreate() etc. Format may be determined by $parm.
         case 'datestamp':
             // If hidden, value is updated regardless. eg. a 'last updated' field.
             // If not hidden, and there is a value, it is retained. eg. during the update of an existing record.
             // otherwise it is added. eg. during the creation of a new record.
             if (vartrue($parms['auto']) && ($value == null || vartrue($parms['hidden']))) {
                 $value = time();
             }
             if (vartrue($parms['hidden'])) {
                 $ret = $this->hidden($key, $value);
             } else {
                 $ret = $this->datepicker($key, $value, $parms);
             }
             break;
         case 'layouts':
             //to do - exclude param (exact match)
             $location = varset($parms['plugin']);
             // empty - core
             $ilocation = vartrue($parms['id'], $location);
             // omit if same as plugin name
             $where = vartrue($parms['area'], 'front');
             //default is 'front'
             $filter = varset($parms['filter']);
             $merge = vartrue($parms['merge']) ? true : false;
             $layouts = e107::getLayouts($location, $ilocation, $where, $filter, $merge, true);
             if (varset($parms['default']) && !isset($layouts[0]['default'])) {
                 $layouts[0] = array('default' => $parms['default']) + $layouts[0];
             }
             $info = array();
             if ($layouts[1]) {
                 foreach ($layouts[1] as $k => $info_array) {
                     if (isset($info_array['description'])) {
                         $info[$k] = defset($info_array['description'], $info_array['description']);
                     }
                 }
             }
             //$this->selectbox($key, $layouts, $value)
             $ret = vartrue($parms['raw']) ? $layouts[0] : $this->radio_multi($key, $layouts[0], $value, true, $info);
             break;
         case 'templates':
             //to do - exclude param (exact match)
             $templates = array();
             if (varset($parms['default'])) {
                 $templates['default'] = defset($parms['default'], $parms['default']);
             }
             $location = vartrue($parms['plugin']) ? e_PLUGIN . $parms['plugin'] . '/' : e_THEME;
             $ilocation = vartrue($parms['location']);
             $tmp = e107::getFile()->get_files($location . 'templates/' . $ilocation, vartrue($parms['fmask'], '_template\\.php$'), vartrue($parms['omit'], 'standard'), vartrue($parms['recurse_level'], 0));
             foreach ($tmp as $files) {
                 $k = str_replace('_template.php', '', $files['fname']);
                 $templates[$k] = implode(' ', array_map('ucfirst', explode('_', $k)));
                 //TODO add LANS?
             }
             // override
             $where = vartrue($parms['area'], 'front');
             $location = vartrue($parms['plugin']) ? $parms['plugin'] . '/' : '';
             $tmp = e107::getFile()->get_files(e107::getThemeInfo($where, 'rel') . 'templates/' . $location . $ilocation, vartrue($parms['fmask']), vartrue($parms['omit'], 'standard'), vartrue($parms['recurse_level'], 0));
             foreach ($tmp as $files) {
                 $k = str_replace('_template.php', '', $files['fname']);
                 $templates[$k] = implode(' ', array_map('ucfirst', explode('_', $k)));
                 //TODO add LANS?
             }
             $ret = vartrue($parms['raw']) ? $templates : $this->selectbox($key, $templates, $value);
             break;
         case 'dropdown':
             $eloptions = vartrue($parms['__options'], array());
             if (is_string($eloptions)) {
                 parse_str($eloptions, $eloptions);
             }
             unset($parms['__options']);
             if (vartrue($eloptions['multiple']) && !is_array($value)) {
                 $value = explode(',', $value);
             }
             $ret = vartrue($eloptions['pre']) . $this->selectbox($key, $parms, $value, $eloptions) . vartrue($eloptions['post']);
             break;
         case 'radio':
             // TODO - more options (multi-line, help)
             /*$eloptions  = vartrue($parms['__options'], array());
             		if(is_string($eloptions)) parse_str($eloptions, $eloptions);
             		unset($parms['__options']);*/
             $ret = vartrue($eloptions['pre']) . $this->radio_multi($key, $parms, $value, false) . vartrue($eloptions['post']);
             break;
         case 'userclass':
         case 'userclasses':
             $uc_options = vartrue($parms['classlist'], 'public,guest,nobody,member,admin,main,classes');
             // defaults to 'public,guest,nobody,member,classes' (userclass handler)
             unset($parms['classlist']);
             $method = $attributes['type'] == 'userclass' ? 'uc_select' : 'uc_select';
             if ($atrributes['type'] == 'userclasses') {
                 $parms['multiple'] = true;
             }
             $ret = $this->{$method}($key, $value, $uc_options, vartrue($parms, array()));
             break;
             /*case 'user_name':
             		case 'user_loginname':
             		case 'user_login':
             		case 'user_customtitle':
             		case 'user_email':*/
         /*case 'user_name':
         		case 'user_loginname':
         		case 'user_login':
         		case 'user_customtitle':
         		case 'user_email':*/
         case 'user':
             //user_id expected
             // Just temporary solution, could be changed soon
             if (!isset($parms['__options'])) {
                 $parms['__options'] = array();
             }
             if (!is_array($parms['__options'])) {
                 parse_str($parms['__options'], $parms['__options']);
             }
             if (empty($value) && vartrue($parms['currentInit']) || vartrue($parms['current'])) {
                 $value = USERID;
                 if (vartrue($parms['current'])) {
                     $parms['__options']['readonly'] = true;
                 }
             }
             if (!is_array($value)) {
                 $value = $value ? e107::getSystemUser($value, true)->getUserData() : array();
                 // get_user_data($value);
             }
             $colname = vartrue($parms['nameType'], 'user_name');
             $parms['__options']['name'] = $colname;
             if (!$value) {
                 $value = array();
             }
             $uname = varset($value[$colname]);
             $value = varset($value['user_id'], 0);
             $ret = $this->userpicker(vartrue($parms['nameField'], $key . '_usersearch'), $key, $uname, $value, vartrue($parms['__options']));
             break;
         case 'bool':
         case 'boolean':
             $lenabled = vartrue($parms['enabled'], 'LAN_ENABLED');
             $ldisabled = vartrue($parms['disabled'], 'LAN_DISABLED');
             unset($parms['enabled'], $parms['disabled']);
             $ret = $this->radio_switch($key, $value, defset($lenabled, $lenabled), defset($ldisabled, $ldisabled), $parms);
             break;
         case 'method':
             // Custom Function
             $ret = call_user_func_array(array($this, $key), array($value, 'write', $parms));
             break;
         case 'upload':
             //TODO - from method
             // TODO uploadfile SC is now processing uploads as well (add it to admin UI), write/readParms have to be added (see uploadfile.php parms)
             $disbut = varset($parms['disable_button'], '0');
             $ret = $tp->parseTemplate("{UPLOADFILE=" . (vartrue($parms['path']) ? e107::getParser()->replaceConstants($parms['path']) : e_UPLOAD) . "|nowarn&trigger=etrigger_uploadfiles&disable_button={$disbut}}");
             break;
         case 'hidden':
             $ret = vartrue($parms['show']) ? $value ? $value : varset($parms['empty'], $value) : '';
             $value = vartrue($parms['value']) ? $parms['value'] : $value;
             echo "key=" . $key . "<br />value=" . $value;
             $ret = $ret . $this->hidden($key, $value);
             break;
         case 'lanlist':
         case 'language':
             $options = e107::getLanguage()->getLanSelectArray();
             $eloptions = vartrue($parms['__options'], array());
             if (!is_array($eloptions)) {
                 parse_str($eloptions, $eloptions);
             }
             unset($parms['__options']);
             if (vartrue($eloptions['multiple']) && !is_array($value)) {
                 $value = explode(',', $value);
             }
             $ret = vartrue($eloptions['pre']) . $this->selectbox($key, $options, $value, $eloptions) . vartrue($eloptions['post']);
             break;
         default:
             $ret = $value;
             break;
     }
     if (vartrue($parms['expand'])) {
         $k = "exp-" . $this->name2id($key);
         $text = "<a class='e-expandit e-tip' href='#{$k}'>" . $parms['expand'] . "</a>";
         $text .= vartrue($parms['help']) ? '<div class="field-help">' . $parms['help'] . '</div>' : '';
         $text .= "<div id='{$k}' class='e-hideme'>" . $ret . "</div>";
         return $text;
     } else {
         $ret .= vartrue($parms['help']) ? '<div class="field-help">' . $tp->toHtml($parms['help'], false, 'defs') . '</div>' : '';
     }
     return $ret;
 }