function run() { global $user; global $layout; global $DB; global $website; $out = ''; $item = new template(); switch ($_REQUEST['act']) { case 'json': case 1: // json data retrieval & operations switch ($_REQUEST['oper']) { case 'del': // remove rows $ids = $_REQUEST['ids']; foreach ($ids as $id) { $item->load($id); $item->delete(); } echo json_encode(true); break; default: // list or search // we have to merge the theme templates with the custom private templates (which are defined in the DB) // as we don't expect a lot of templates, we will always return the whole dataset // for this reason, paginate is useless $orderby = $_REQUEST['sidx'] . ' ' . $_REQUEST['sord']; if (isset($_REQUEST['quicksearch'])) { $dataset = template::search($orderby, array('quicksearch' => $_REQUEST['quicksearch'])); } else { $dataset = template::search($orderby); } $total = count($dataset); $out = array(); $permissions = array(0 => '<img src="img/icons/silk/world.png" align="absmiddle" /> ' . t(69, 'Published'), 1 => '<img src="img/icons/silk/world_dawn.png" align="absmiddle" /> ' . t(70, 'Private'), 2 => '<img src="img/icons/silk/world_night.png" align="absmiddle" /> ' . t(81, 'Hidden')); if (empty($dataset)) { $rows = 0; } else { $rows = count($dataset); } for ($i = 0; $i < $rows; $i++) { $out[$i] = array(0 => $dataset[$i]['id'], 1 => $dataset[$i]['title'], 2 => $dataset[$i]['theme'], 3 => $permissions[$dataset[$i]['permission']], 4 => $dataset[$i]['enabled'] == 1 ? '<img src="img/icons/silk/accept.png" />' : '<img src="img/icons/silk/cancel.png" />'); } navitable::jqgridJson($out, 1, 0, PHP_INT_MAX, $total); break; } core_terminate(); break; case 'load': case 2: // edit/new form if (!empty($_REQUEST['id'])) { if (is_numeric($_REQUEST['id'])) { $item->load(intval($_REQUEST['id'])); } else { $item->load_from_theme($_REQUEST['id']); } } if (isset($_REQUEST['form-sent'])) { $item->load_from_post(); try { $item->save(); if (!empty($_REQUEST['property-enabled'])) { $enableds = array_values($_REQUEST['property-enabled']); } else { $enableds = array(); } property::reorder("template", $item->id, $_REQUEST['template-properties-order'], $enableds); $layout->navigate_notification(t(53, "Data saved successfully."), false, false, 'fa fa-check'); } catch (Exception $e) { $layout->navigate_notification($e->getMessage(), true, true); } users_log::action($_REQUEST['fid'], $item->id, 'save', $item->title, json_encode($_REQUEST)); } else { users_log::action($_REQUEST['fid'], $item->id, 'load', $item->title); } $out = templates_form($item); break; case 'save_template_file': // save template html if (!empty($_REQUEST['id'])) { $item->load(intval($_REQUEST['id'])); } $data = $_REQUEST['templates-file-edit-area']; $data = str_replace("\r\n", "\r", $data); $x = file_put_contents(NAVIGATE_PRIVATE . '/' . $website->id . '/templates/' . $item->file, $data); echo json_encode($x > 0); session_write_close(); exit; break; case 4: // remove if (!empty($_REQUEST['id'])) { $item->load(intval($_REQUEST['id'])); if ($item->delete() > 0) { $layout->navigate_notification(t(55, 'Item removed successfully.'), false); $out = templates_list(); } else { $layout->navigate_notification(t(56, 'Unexpected error.'), false); $out = webdictionary_list(); } users_log::action($_REQUEST['fid'], $item->id, $item->title, 'remove'); } break; case 'template_property_load': $property = new property(); if (!empty($_REQUEST['id'])) { if (is_numeric($_REQUEST['id'])) { $property->load(intval($_REQUEST['id'])); } else { $property->load_from_theme($_REQUEST['id'], null, 'template', $_REQUEST['template']); } } header('Content-type: text/json'); $types = property::types(); $property->type_text = $types[$property->type]; echo json_encode($property); session_write_close(); exit; break; case 'template_property_save': // save property details $property = new property(); if (!empty($_REQUEST['property-id'])) { $property->load(intval($_REQUEST['property-id'])); } $property->load_from_post(); $property->save(); header('Content-type: text/json'); $types = property::types(); $property->type_text = $types[$property->type]; echo json_encode($property); session_write_close(); exit; break; case 'template_property_remove': // remove property $property = new property(); if (!empty($_REQUEST['property-id'])) { $property->load(intval($_REQUEST['property-id'])); } $property->delete(); session_write_close(); exit; break; case 0: // list / search result // list / search result default: $out = templates_list(); break; } return $out; }