/** * Display search results * * @return void */ public function _default() { // load dictionary $this->dict->get_wordarray(array('search')); // get page data $page = $this->get_page('search'); $view = new X4View_core(X4Utils_helper::set_tpl($page->tpl)); $view->page = $page; // build the message $tmp = ''; // search // if submitted if (X4Route_core::$post && trim($_POST['search']) != '') { // found counter $tot = 0; // sanitize $str = X4Validation_helper::sanitize(strtolower($_POST['search']), 'string'); // handle _POST $str = explode(' ', addslashes($str)); // search in area's articles $found = $this->site->search($page->id_area, $str); // build links to items found if ($found) { // update counter $tot += sizeof($found); // set message $tmp .= '<strong>' . _SEARCH_PAGES . '</strong></p><ul class="search_result">'; // build links to items found foreach ($found as $i) { $tmp .= '<li><a href="' . $i->url . '" title="' . stripslashes($i->description) . '">' . stripslashes($i->name) . '</a>' . _TRAIT_ . nl2br(stripslashes($i->description)) . '</li>'; } $tmp .= '</ul>'; } // modules $plug = new X4Plugin_model(); // get searchable plugins $searchable = $plug->get_searchable($page->id_area); if ($searchable) { foreach ($searchable as $i) { // model to load $model = ucfirst($i->name) . '_model'; $mod = new $model(); // get page URL to use as link if (isset($mod->search_param)) { $to_page = $this->site->get_page_to($page->id_area, $page->lang, $i->name, $mod->search_param); } else { $to_page = $this->site->get_page_to($page->id_area, $page->lang, $i->name, '*'); } // perform plugin search $found = $mod->search($page->id_area, $page->lang, $str); // build links to items found if ($found) { // plugin name $plugin = strtoupper($i->name); // update counter $tot += sizeof($found); // set message if (defined('_SEARCH_' . $plugin)) { $tmp .= '<strong>' . constant('_SEARCH_' . $plugin) . '</strong></p>'; } // build links to items found $tmp .= '<ul class="search_result">'; foreach ($found as $ii) { // create url $url = isset($mod->personalized_url) && $mod->personalized_url ? $mod->get_url($ii, $to_page) : $to_page . '/' . $ii->id . '/detail'; // item name $item = stripslashes($ii->name); $description = empty($ii->description) ? '' : _TRAIT_ . stripslashes($ii->description); // link to item $tmp .= '<li><a href="' . $url . '" title="' . $item . '">' . $item . '</a>' . $description . '</li>'; } $tmp .= '</ul>'; } } } // if found if ($tot) { $tmp = '<p>' . _SEARCH_FOUND . ' ' . $tot . ' ' . _SEARCH_ITEMS . '</p>' . $tmp; } else { $tmp .= '<p>' . _SEARCH_ZERO_RESULT . '</p>'; } $msg = new Obj_msg(_SEARCH_RESULT, _SEARCH_OF . ' <strong>' . addslashes($_POST['search']) . '</strong>' . $tmp, false); } else { // empty request $msg = new Obj_msg(_SEARCH_RESULT, '<p>' . _SEARCH_MSG_SEARCH_EMPTY . '</p>'); } // get menus $view->menus = $this->site->get_menus($page->id_area); $view->navbar = array($this->site->get_bredcrumb($page)); // popolate section $sections = $this->site->get_sections($page->id); $sections[1] = array($msg); $view->sections = $sections; $view->render(TRUE); }
/** * Check if a plugin is installed * * @static * @param string $id_are Area ID * @param string $module Plugin name * @return boolean */ public static function module_exists($id_area, $module) { $plug = new X4Plugin_model(); return $plug->exists($module, $id_area, false, 1); }
/** * Register the site configuration * * @access private * @param array $_post _POST array * @return void */ private function configure($_post) { $msg = null; // check permission $msg = AdmUtils_helper::chk_priv_level($_SESSION['xuid'], 'sites', $_post['id'], 3); if (is_null($msg)) { // get parameters before update $params = $this->site->get_param($_post['id']); // build update array $sql = array(); foreach ($params as $i) { // handle _post switch ($i->xtype) { case '0|1': $val = intval(isset($_post[$i->name])); break; case 'IMG': $val = $_post[$i->name]; break; default: $val = $_post[$i->name]; break; } // if the new value is different then update if ($val != $i->xvalue) { $sql[$i->id] = $val; } } // do update $plugin = new X4Plugin_model(); $result = $plugin->update_param($sql); APC && apc_delete(SITE . 'param' . $_post['id']); // set message $msg = AdmUtils_helper::set_msg($result); // set what update if ($result[1]) { $msg->update[] = array('element' => 'topic', 'url' => BASE_URL . 'sites/show/1', 'title' => null); } } $this->response($msg); }
/** * New / Edit article form * The form is simplified if site use simple editing * * @param integer $id_area Area ID * @param string $lang Language code * @param integer $code_context Context code * @param string $bid, the unique ID of articles * @param integer $id_page Page ID (for simple editing) * @param boolean $duplicate Duplicate article resetting bid * @return void */ public function edit($id_area = 2, $lang = '', $code_context = 0, $bid = 0, $id_page = 0, $duplicate = 0) { // set language $lang = empty($lang) ? X4Route_core::$lang : $lang; // load dictionaries $this->dict->get_wordarray(array('form', 'articles')); // referer $qs = X4Route_core::get_query_string(); $referer = isset($qs['ref']) ? $qs['ref'] : ''; $mod = new Article_model(); // simple editing if ($id_page && $bid != 'x3') { $bid = $mod->get_bid_by_id_page($id_page); } // get object $item = $bid && $bid != 'x3' ? $mod->get_by_bid($bid) : new Article_obj($id_area, $lang, $code_context); // dedicated page when called from composer if ($bid == 'x3') { $item->id_page = $id_page; } // if duplicate reset bid if ($duplicate) { $item->name = _COPY_OF . ' ' . $item->name; $item->bid = $mod->get_new_bid(); } // build the form $fields = array(); $fields[] = array('label' => null, 'type' => 'html', 'value' => '<div class="band double-inner-pad clearfix"><div id="left-box" class="four-fifth md-three-fourth sm-two-third xs-one-whole">'); $fields[] = array('label' => null, 'type' => 'hidden', 'value' => $referer, 'name' => 'from'); $fields[] = array('label' => null, 'type' => 'hidden', 'value' => $item->bid, 'name' => 'bid'); $lmod = new Language_model(); if ($id_page == 0 || $bid == 'x3') { // advanced editing // area $amod = new Area_model(); $fields[] = array('label' => null, 'type' => 'html', 'value' => '<div class="band clearfix"><div class="one-fourth sm-one-half pad-right xs-one-whole xs-pad-none">'); $fields[] = array('label' => _AREA, 'type' => 'select', 'value' => $item->id_area, 'options' => array($amod->get_areas(), 'id', 'name'), 'name' => 'id_area', 'extra' => 'class="large spinner spin2"'); $fields[] = array('label' => null, 'type' => 'hidden', 'value' => 'module|' . BASE_URL . 'articles/refresh_module|id_area', 'name' => 'spinner1_data'); $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div><div class="one-fourth sm-one-half pad-right xs-one-whole sm-pad-none">'); // language $fields[] = array('label' => _LANGUAGE, 'type' => 'select', 'value' => $item->lang, 'options' => array($lmod->get_languages(), 'code', 'language'), 'name' => 'lang', 'extra' => 'class="large spinner spin2"'); // value = id_to_update|url|ids_to_get $fields[] = array('label' => null, 'type' => 'hidden', 'value' => 'code_context|' . BASE_URL . 'articles/refresh_context|id_area|lang', 'name' => 'spinner2_data'); $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div><div class="one-fourth sm-one-half pad-right xs-one-whole xs-pad-none">'); // contexts $cmod = new Context_model(); $fields[] = array('label' => _CONTEXT, 'type' => 'select', 'value' => $item->code_context, 'options' => array($cmod->get_contexts($item->id_area, $item->lang), 'code', 'name'), 'name' => 'code_context', 'extra' => 'class="large spin2"'); $fields[] = array('label' => null, 'type' => 'hidden', 'value' => $item->code_context, 'name' => 'old_context'); // value = id_to_update|url|ids_to_get $fields[] = array('label' => null, 'type' => 'hidden', 'value' => 'id_page|' . BASE_URL . 'articles/refresh_pages|id_area|lang|code_context', 'name' => 'spinner3_data'); $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div><div class="one-fourth sm-one-half xs-one-whole">'); $fields[] = array('label' => _PAGE, 'type' => 'select', 'value' => $item->id_page, 'options' => $item->id_page ? array($cmod->get_pages($item->id_area, $item->lang, 1), 'id', 'name') : array(), 'name' => 'id_page', 'extra' => 'class="large"'); $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div></div>'); } else { // simple editing // hidden fields $fields[] = array('label' => null, 'type' => 'hidden', 'value' => $item->id_area, 'name' => 'id_area'); $fields[] = array('label' => null, 'type' => 'hidden', 'value' => $item->lang, 'name' => 'lang'); $fields[] = array('label' => null, 'type' => 'hidden', 'value' => $item->code_context, 'name' => 'code_context'); $fields[] = array('label' => null, 'type' => 'hidden', 'value' => $item->code_context, 'name' => 'old_context'); $fields[] = array('label' => null, 'type' => 'hidden', 'value' => $item->id_page, 'name' => 'id_page'); } // classification section $fields[] = array('label' => _NAME, 'type' => 'text', 'value' => stripslashes($item->name), 'name' => 'name', 'rule' => 'required', 'extra' => 'class="large"'); // content $fields[] = array('label' => _CONTENT, 'type' => 'textarea', 'value' => $item->content, 'name' => 'content'); if (EDITOR_SCRIPTS) { // content $fields[] = array('label' => _SCRIPT, 'type' => 'textarea', 'value' => htmlentities($item->js), 'name' => 'js', 'extra' => 'class="NoEditor"', 'suggestion' => _SCRIPT_MSG); } else { $fields[] = array('label' => null, 'type' => 'hidden', 'value' => $item->js, 'name' => 'js'); } // plugin section $fields[] = array('label' => null, 'type' => 'html', 'value' => '<h3>' . _PLUGIN . '</h3> <div class="band clearfix"><div class="one-half pad-right">'); $plugin = new X4Plugin_model(); // for APC $fields[] = array('label' => null, 'type' => 'hidden', 'value' => $item->module, 'name' => 'old_module'); $fields[] = array('label' => null, 'type' => 'hidden', 'value' => $item->param, 'name' => 'old_param'); $fields[] = array('label' => _MODULE, 'type' => 'select', 'value' => $item->module, 'options' => array($plugin->get_modules($id_area, 0), 'name', 'description', ''), 'name' => 'module', 'extra' => 'class="large"'); $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div><div class="one-half pad-left">'); $fields[] = array('label' => _PARAM, 'type' => 'text', 'value' => $item->param, 'name' => 'param', 'extra' => 'class="large"'); $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div></div></div> <div id="right-box" class="one-fifth md-one-fourth sm-one-third xs-one-whole xs-hidden">'); // time window section $fields[] = array('label' => null, 'type' => 'html', 'value' => '<h2>' . _TIME_WINDOW . '</h2><div class="band clearfix inner-pad"><div class="one-half sm-one-whole">'); $fields[] = array('label' => null, 'type' => 'hidden', 'value' => $item->date_in, 'name' => 'old_date_in'); $fields[] = array('label' => _START_DATE, 'type' => 'text', 'value' => date('Y-m-d', $item->date_in), 'name' => 'date_in', 'rule' => 'required|date', 'extra' => 'class="date date_toggled large"'); $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div><div class="one-half sm-one-whole">'); $fields[] = array('label' => _END_DATE, 'type' => 'text', 'value' => $item->date_out == 0 ? '' : date('Y-m-d', $item->date_out), 'name' => 'date_out', 'rule' => 'date', 'extra' => 'class="date date_toggled large"', 'suggestion' => _NO_END_MSG); // classification section $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div></div><h2>' . _ORGANIZATION . '</h2>'); // categories $camod = new Category_model(); $fields[] = array('label' => _CATEGORY, 'type' => 'select', 'value' => $item->category, 'options' => array($camod->get_categories($item->id_area, $item->lang), 'name', 'description', 0), 'name' => 'category', 'extra' => 'class="large"'); // xkeys $fields[] = array('label' => _KEYS, 'type' => 'text', 'value' => $item->xkeys, 'name' => 'xkeys', 'extra' => 'class="large"'); // tags $fields[] = array('label' => _TAGS, 'type' => 'text', 'value' => $item->tags, 'name' => 'tags', 'extra' => 'class="large"'); // author $fields[] = array('label' => _AUTHOR, 'type' => 'text', 'value' => empty($item->author) ? $_SESSION['mail'] : $item->author, 'name' => 'author', 'rule' => 'required', 'extra' => 'class="large"'); if (EDITOR_OPTIONS) { // options section $fields[] = array('label' => null, 'type' => 'html', 'value' => '<h2>' . _OPTIONS . '</h2> <div class="band clearfix"> <div class="one-half sm-one-whole">'); $fields[] = array('label' => _SHOW_AUTHOR, 'type' => 'checkbox', 'value' => $item->show_author, 'name' => 'show_author', 'checked' => $item->show_author); $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div><div class="one-half sm-one-whole">'); $fields[] = array('label' => _SHOW_DATE, 'type' => 'checkbox', 'value' => $item->show_date, 'name' => 'show_date', 'checked' => $item->show_date); $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div><div class="one-half sm-one-whole">'); $fields[] = array('label' => _SHOW_TAGS, 'type' => 'checkbox', 'value' => $item->show_tags, 'name' => 'show_tags', 'checked' => $item->show_tags); $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div><div class="one-half sm-one-whole">'); $fields[] = array('label' => _SHOW_ACTIONS, 'type' => 'checkbox', 'value' => $item->show_actions, 'name' => 'show_actions', 'checked' => $item->show_actions); $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div></div>'); } $fields[] = array('label' => null, 'type' => 'html', 'value' => '</div></div>'); /* // TODO: maybe in the future $fields[] = array( 'label' => _SCHEMA, 'type' => 'textarea', 'value' => $item->xschema, 'name' => 'xschema', 'extra' => 'class="mceNoEditor"' ); */ // if submitted if (X4Route_core::$post) { $e = X4Validation_helper::form($fields, 'editor'); if ($e) { $this->editing($item, $_POST); } else { $this->notice($fields); } die; } // content $view = new X4View_core('tabber'); $view->tabs = array(); $view->down = new X4View_core('editor'); $view->down->close = false; // Set the navbar $page = $this->get_page('articles/edit'); $ref = isset($_SESSION['referer']) ? $_SESSION['referer'] : 'index/' . $id_area . '/' . $lang; $navbar = array($this->site->get_bredcrumb($page), array('articles' => $ref)); $pmod = new Page_model(); if ($id_page && $bid != 'x3') { // simple editing $page = $pmod->get_by_id($id_page); $view->title = _CONTENT_EDITOR . ' <a class="bta" href="' . BASE_URL . 'pages/index/' . $page->id_area . '/' . $page->lang . '/' . $page->xfrom . '/1" title="' . _GO_BACK . '">' . stripslashes($page->name) . '</a>' . _TRAIT_ . $lang; $view->down->js = ''; } else { // generic back $back = '<a class="bta" href="' . BASE_URL . 'pages/index/' . $id_area . '/' . $lang . '/home/1" title="' . _GO_BACK . '">' . _PAGES . '</a>'; if ($bid) { if ($item->id_page) { // back to the right page $page = $pmod->get_by_id($item->id_page); $back = ADVANCED_EDITING ? '<a class="bta" href="' . BASE_URL . 'sections/compose/' . $page->id . '" title="' . _GO_BACK . '">' . stripslashes($page->name) . '</a>' : '<a class="bta" href="' . BASE_URL . 'pages/index/' . $page->id_area . '/' . $page->lang . '/' . $page->xfrom . '/1" title="' . _GO_BACK . '">' . stripslashes($page->name) . '</a>'; } $view->title = $back . _TRAIT_ . _EDIT_ARTICLE . _TRAIT_ . $lang; } else { $view->title = $back . _TRAIT_ . _ADD_ARTICLE . _TRAIT_ . $lang; } $view->down->js = ' <script> window.addEvent("domready", function() { if ($chk($("spinner1_data"))) { var sdata = $("spinner1_data").get("value").split("|"); spinnerize(sdata, ".spinner"); } if ($chk($("spinner2_data"))) { var sdata = $("spinner2_data").get("value").split("|"); spinnerize(sdata, ".spinner"); } if ($chk($("spinner3_data"))) { var sdata = $("spinner3_data").get("value").split("|"); spinnerize(sdata, ".spin2"); } }); </script> '; } $view->down->js .= ' <script> window.addEvent("domready", function() { X3.content("filters","articles/filter/' . $id_area . '/' . $lang . '", "' . addslashes(X4Utils_helper::navbar($navbar, ' . ')) . '"); buttonize("tabber", "bta", "topic"); pickerize(1); $("module").addEvent("change", function(event, target){ event.preventDefault(); v = this.get("value"); if (v.length == 0) { $("param").set("value", ""); } else { X3.modal("", "' . _ARTICLE_PARAM_SETTING . '", "' . BASE_URL . 'articles/param/' . $id_area . '/' . $lang . '/"+v); } }); $("param").addEvent("focus", function(event, target){ event.preventDefault(); m = $("module").get("value"); if (m != "") { v = this.get("value"); X3.modal("", "' . _ARTICLE_PARAM_SETTING . '", "' . BASE_URL . 'articles/param/' . $id_area . '/' . $lang . '/"+m+"/"+v); } }); }); </script>'; // form builder $view->down->form = X4Form_helper::doform('editor', $_SERVER["REQUEST_URI"], $fields, array(_RESET, _SUBMIT, 'buttons'), 'post', '', 'onclick="setForm(\'editor\', \'content\');"'); $view->down->tinymce = new X4View_core('tinymce'); $view->down->tinymce->id_area = $id_area; // rtl if ($lmod->rtl($lang)) { $view->down->tinymce->rtl = 1; } $view->render(TRUE); }
/** * Duplicate an area for another language (secret method) * If you need to add another language to an area you can call this script * /admin/modules/duplicate_area_lang/ID_AREA/OLD_LANG/NEW_LANG * * @param integer $id_area Area ID * @param string $old_lang Old language to copy * @param string $new_lang New language to set * @return string */ public function duplicate_area_lang($id_area, $old_lang, $new_lang) { // Comment the next row to enable the method die('Operation disabled!'); $mod = new X4Plugin_model(); // duplicate $res = $mod->duplicate_modules_lang($id_area, $old_lang, $new_lang); if ($res) { // refactory permissions $mod = new Permission_model(); $mod->refactory($_SESSION['xuid']); echo '<h1>CONGRATULATIONS!</h1>'; echo '<p>The changes on the database are applied.</p>'; } else { echo '<h1>WARNING!</h1>'; echo '<p>Something went wrong, changes are not applied.</p>'; } die; }
/** * Generic page override __call * * @param string url/controller name * @param array array of arguments * @return void */ public function __call($url, $args) { // dict $this->dict->get_words(); // get page data $page = $this->site->get_page($url); if ($page) { // check login if area is private if ($this->site->area->private && !in_array($url, $this->admitted)) { if (file_exists(APATH . 'controllers/' . X4Route_core::$area . '/login.php')) { X4Utils_helper::logged($page->id_area, X4Route_core::$area . '/login'); } else { X4Utils_helper::logged($page->id_area, 'public/home'); } } // set view $view = new X4View_core(X4Utils_helper::set_tpl($page->tpl)); $view->page = $page; $view->args = $args; // get menus $view->menus = $this->site->get_menus($page->id_area); $view->navbar = array($this->site->get_bredcrumb($page)); // get sections $view->sections = $this->site->get_sections($page->id); $view->render(true); } else { // check for redirects $url = X4Route_core::get_uri(); $mod = new X4Plugin_model(); $redirect = $mod->check_redirect(array('Page_model'), $url); if (!$redirect) { header('HTTP/1.0 404 Not Found'); header('Location: ' . BASE_URL . 'msg/message/_page_not_found'); } else { // redirect to header('Location: ' . $this->site->site->domain . '/' . $redirect->url, true, $redirect->redirect_code); } } }