function run() { global $user; global $layout; global $DB; global $website; $out = ''; $item = new backup(); switch ($_REQUEST['act']) { 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 $page = intval($_REQUEST['page']); $max = intval($_REQUEST['rows']); $offset = ($page - 1) * $max; $orderby = $_REQUEST['sidx'] . ' ' . $_REQUEST['sord']; $where = " i.website = " . $website->id; if ($_REQUEST['_search'] == 'true' || isset($_REQUEST['quicksearch'])) { if (isset($_REQUEST['quicksearch'])) { $where .= $item->quicksearch($_REQUEST['quicksearch']); } else { if (isset($_REQUEST['filters'])) { $where .= navitable::jqgridsearch($_REQUEST['filters']); } else { // single search $where .= ' AND ' . navitable::jqgridcompare($_REQUEST['searchField'], $_REQUEST['searchOper'], $_REQUEST['searchString']); } } } $sql = ' SELECT SQL_CALC_FOUND_ROWS i.* FROM nv_backups i WHERE ' . $where . ' ORDER BY ' . $orderby . ' LIMIT ' . $max . ' OFFSET ' . $offset; if (!$DB->query($sql, 'array')) { throw new Exception($DB->get_last_error()); } $dataset = $DB->result(); $total = $DB->foundRows(); $out = array(); if (empty($dataset)) { $rows = 0; } else { $rows = count($dataset); } for ($i = 0; $i < $rows; $i++) { $out[$i] = array(0 => $dataset[$i]['id'], 1 => core_ts2date($dataset[$i]['date_created'], true), 2 => $dataset[$i]['title'], 3 => core_bytes($dataset[$i]['size']), 4 => backup::status($dataset[$i]['status'])); } navitable::jqgridJson($out, $page, $offset, $max, $total); break; } core_terminate(); break; case 2: // edit/new form if (!empty($_REQUEST['id'])) { $item->load(intval($_REQUEST['id'])); } if ($_REQUEST['form-sent'] == 'true') { $item->load_from_post(); try { // update an existing backup $item->save(); $id = $item->id; $layout->navigate_notification(t(53, "Data saved successfully."), false, false, 'fa fa-check'); } catch (Exception $e) { $layout->navigate_notification($e->getMessage(), true, true); } } $out = backups_form($item); 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 = backups_list(); } else { $layout->navigate_notification(t(56, 'Unexpected error.'), false); $out = webdictionary_list(); } } break; case 'backup': if (!empty($_REQUEST['id'])) { // trick to generate a underground process ;) @set_time_limit(0); @ignore_user_abort(true); $foo = str_pad('Navigate CMS ', 2048, 'Navigate CMS '); header("HTTP/1.1 200 OK"); header("Content-Length: " . strlen($foo)); echo $foo; header('Connection: close'); ob_end_flush(); ob_flush(); flush(); session_write_close(); // now the process is running in the server, the client thinks the http request has finished $item->load(intval($_REQUEST['id'])); $item->backup(); } core_terminate(); break; case 'restore': // TO DO: Restore break; case 'download': // download backup $item->load(intval($_REQUEST['id'])); ob_end_flush(); header('Content-type: application/zip'); header("Content-Length: " . filesize(NAVIGATE_PRIVATE . $item->file)); header('Content-Disposition: attachment; filename="' . basename($item->file) . '"'); readfile(NAVIGATE_PRIVATE . $item->file); core_terminate(); break; case 0: // list / search result // list / search result default: $out = backups_list(); break; } return $out; }
function run() { global $user; global $layout; global $DB; global $website; $out = ''; $wtext = new webdictionary(); switch ($_REQUEST['act']) { case 'json': // json data retrieval & operations switch ($_REQUEST['oper']) { case 'del': // remove rows $ids = $_REQUEST['ids']; foreach ($ids as $id) { $wtext->load($id); $wtext->delete(); } echo json_encode(true); break; default: // list or search $page = intval($_REQUEST['page']); $max = intval($_REQUEST['rows']); $offset = ($page - 1) * $max; $orderby = $_REQUEST['sidx'] . ' ' . $_REQUEST['sord']; $where = ' website = ' . $website->id; if ($_REQUEST['_search'] == 'true' || isset($_REQUEST['quicksearch'])) { if (isset($_REQUEST['quicksearch'])) { $where .= $wtext->quicksearch($_REQUEST['quicksearch']); } else { if (isset($_REQUEST['filters'])) { $where .= navitable::jqgridsearch($_REQUEST['filters']); } else { // single search $where .= ' AND ' . navitable::jqgridcompare($_REQUEST['searchField'], $_REQUEST['searchOper'], $_REQUEST['searchString']); } } } list($dataset, $total) = webdictionary_search($where, $orderby, $offset, $max); for ($i = 0; $i < count($dataset); $i++) { $origin = ""; if (!empty($dataset[$i]['theme'])) { $origin = '<i class="fa fa-fw fa-paint-brush ui-text-light" title="' . t(368, "Theme") . '"></i> ' . $dataset[$i]['theme']; } else { if (!empty($dataset[$i]['extension'])) { $origin = '<i class="fa fa-fw fa-puzzle-piece ui-text-light" title="' . t(617, "Extension") . '"></i> ' . $dataset[$i]['extension']; } } if (empty($dataset[$i])) { continue; } $out[$i] = array(0 => $dataset[$i]['theme'] . $dataset[$i]['extension'] . '.' . $dataset[$i]['id'], 1 => $dataset[$i]['node_id'], 2 => $origin, 3 => language::name_by_code($dataset[$i]['lang']), 4 => $dataset[$i]['text'], 5 => $dataset[$i]['source']); } navitable::jqgridJson($out, $page, $offset, $max, $total, 0); // 0 is the index of the ghost ID column break; } session_write_close(); exit; break; case 'edit': // edit/new form if (!empty($_REQUEST['path']) && !is_numeric($_REQUEST['id'])) { $wtext->load($_REQUEST['path']); } else { if (!empty($_REQUEST['id'])) { $wtext->load($_REQUEST['id']); } } if (isset($_REQUEST['form-sent'])) { $wtext->load_from_post(); try { $wtext->save(); $layout->navigate_notification(t(53, "Data saved successfully."), false, false, 'fa fa-check'); } catch (Exception $e) { $layout->navigate_notification($e->getMessage(), true, true); } } $out = webdictionary_form($wtext); break; case 'remove': // remove if (!empty($_REQUEST['id'])) { $wtext->load($_REQUEST['id']); if ($wtext->delete() > 0) { $layout->navigate_notification(t(55, 'Item removed successfully.'), false); $out = webdictionary_list(); } else { $layout->navigate_notification(t(56, 'Unexpected error.'), false); $out = webdictionary_form($wtext); } } break; case 'edit_language': if ($_REQUEST['form-sent'] == 'true') { $status = webdictionary::save_translations_post($_REQUEST['code']); if ($status == 'true') { $layout->navigate_notification(t(53, "Data saved successfully."), false, false, 'fa fa-check'); } else { $layout->navigate_notification(implode('<br />', $status), true, true); } } $out = webdictionary_edit_language_form($_REQUEST['code']); break; case 0: // list / search result // list / search result default: $out = webdictionary_list(); break; } return $out; }
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; }