/** * @return stirng * @param string $templ_name - Шаблон оформления * @desc МАКРОС: Выводит форму подписки на рассылки */ function form($templ_name = 'default') { $templ_file = '/subscription/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('subscription.form', $templ_file); } $list = ''; $sel = new ormSelect('subscription'); $sel->where('lang', '=', languages::curId()); $sel->where('domain', '=', domains::curId()); $sel->where('active', '=', 1); $num = 0; while ($obj = $sel->getObject()) { page::assign('obj.id', $obj->id); page::assign('obj.name', $obj->name); $num++; page::assign('obj.num', $num); page::assign('class-first', $num == 1 ? 'first' : ''); page::assign('class-last', $num == $sel->getObjectCount() ? 'last' : ''); page::assign('class-odd', $num % 2 == 0 ? 'odd' : ''); page::assign('class-even', $num % 2 != 0 ? 'even' : ''); page::assign('class-third', $num % 3 == 0 ? 'third' : ''); $list .= page::parse($TEMPLATE['list']); } // Парсим текст сообщения об ошибке page::parseError('subscription'); if (empty($list)) { return page::parse($TEMPLATE['empty']); } else { page::assign('list', $list); return page::parse($TEMPLATE['frame']); } }
public function defAction() { function getSubscribersCount($id, $obj) { $sel = new ormSelect('subscribe_user'); $sel->where('parents', '=', $id); return $sel->getCount(); } ui::newButton(lang::get('SUBSCRIBE_BTN_ADD'), '/subscription/subscribe_add'); $sel = new ormSelect('subscription'); $sel->where('lang', '=', languages::curId()); $sel->where('domain', '=', domains::curId()); $table = new uiTable($sel); $table->formatValues(true); $table->addColumn('name', lang::get('SUBSCRIBE_TT1'), 200); $table->addColumn('last_subscribe', lang::get('SUBSCRIBE_TT2'), 200); $table->addColumn('id', lang::get('SUBSCRIBE_TT3'), 200, 0, 1, 'getSubscribersCount'); $table->defaultRight('msg'); $table->addRight('msg', 'list', single); $table->addRight('user', 'users', single); $table->addRight('subscribe_upd', 'edit', single); $table->addRight('subscribe_history', 'history', single); $table->addRight('subscribe_del', 'drop', multi); $table->addRight('subscribe_act', 'active', multi); $table->setDelMessage(lang::get('SUBSCRIBE_DEL_TITLE2'), lang::get('SUBSCRIBE_DEL_TEXT2')); $table->setMultiDelMessage(lang::get('SUBSCRIBE_DEL_TITLE_MULTI2'), lang::get('SUBSCRIBE_DEL_TEXT_MULTI2')); return $table->getHTML(); }
/** * @return array * @param boolean $type - Назначение шаблонов: 0 - шаблон для страниц 1 - шаблон для объектов * @desc Вернет все шаблоны для текущей языковой версии и текущего домена. Метод без кеширования результатов. */ static function getByDestination($type = 0, $spec_name = false) { $type = $type ? 1 : 0; $select = $spec_name ? 't_id id, concat(t_name, " (", t_file, ")") name' : '*, t_id id'; return db::q('SELECT ' . $select . ' FROM <<template>> WHERE t_type = "' . $type . '" and t_lang_id = "' . languages::curId() . '" and t_domain_id = "' . domains::curId() . '" ORDER BY t_name;', records); }
private function getLangsAndDomains($TEMPLATE) { $sub_menu = ''; $langs = languages::getAll(); $domains = domains::getAll(); page::assign('ldObjectLinks', ''); if (count($langs) > 1 || count($domains) > 1) { $isMultiDom = count($domains) > 1 ? true : false; $sub_items = $curLD = ''; $mas = array(); $num = 0; while (list($num2, $domain) = each($domains)) { reset($langs); while (list($num1, $lang) = each($langs)) { if (user::issetRight($lang['l_id'] . ' ' . $domain['d_id'], 'structure')) { if ($isMultiDom) { $lanver = $domain['d_name']; if ($lang['l_id'] != $domain['d_def_lang']) { $lanver .= '/' . $lang['l_prefix']; } } else { $lanver = $lang['l_name']; } $link = ADMIN_URL; if ($domain['d_id'] != domains::curSiteDomain()->id()) { $link .= '/' . str_replace('.', '_', $domain['d_name']); } if ($lang['l_id'] != $domain['d_def_lang']) { $link = '/' . $lang['l_prefix'] . $link; } if (domains::curId() == $domain['d_id'] && languages::curId() == $lang['l_id']) { $curLD = $link; } page::assign('name', $lanver); page::assign('url', $link); $sub_items .= page::parse($TEMPLATE['langver']); $mas[] = array('id' => $link, 'name' => $lanver); $num++; } } } if (!empty($sub_items) && $num > 1) { if ($isMultiDom) { $lanver = domains::curDomain()->getName() . languages::pre(); } else { $lanver = languages::curLang()->getName(); } page::assign('eshe', $lanver); page::assign('sub_items', $sub_items); $sub_menu = page::parse($TEMPLATE['sub_menu']); ui::SelectBox('ldObjectLinks', $mas, $curLD, 474, '', 'onSelectldObjectLinks()'); } } return $sub_menu; }
/** * @return NULL * @param integer $lang_id - ID языковой версии, если не указан используется текущая. * @param integer $domain_id - ID домена, если не указан используется текущий. * @desc Указывает что выборка будет производиться только по страницам. */ public function findInPages($lang_id = 0, $domain_id = 0) { if (empty($lang_id)) { $this->cur_lang_id = languages::curId(); } if (empty($domain_id)) { $this->cur_domain_id = domains::curId(); } $this->find_page = 1; }
/** * @return int ID шаблона * @param int $type - Тип шаблона. 0 - шаблон страницы, 1 - шаблон содержимого * @desc Возвращает id стандартного шаблона для класса с учетом текущего домена и языка, 0 - шаблон не выбран */ public function getDefTemplate($type = 0) { $id = db::q('SELECT t_id FROM <<template>>, <<template_def>> WHERE t_id = td_template_id AND td_class_id = ' . $this->id . ' AND t_type = ' . $type . ' AND t_lang_id = ' . languages::curId() . ' AND t_domain_id = ' . domains::curId() . ' LIMIT 1', value); return $id != '' ? $id : 0; }
static function indexPage($page) { if ($page instanceof ormPage) { if ($page->in_search) { /* Пробегаем по всем полям, данные которых участвуют в поиске. Разбиваем их содержимое на отдельные словоформы и ранжируем в соотвествии с настройками. */ self::parseContent($page->name, 'name'); $fields = $page->getClass()->loadFields(); while (list($fname, $field) = each($fields)) { if ($field['f_search']) { self::parseContent($page->__get($fname), $fname); } } // Сохраняем все найденные слова в БД while (list($word, $rank) = each(self::$words)) { $word_id = self::getWordId(self::morphGetRoot($word)); db::q('INSERT INTO <<search_rankings>> SET sr_word_id = "' . $word_id . '", sr_rank = "' . $rank . '", sr_obj_id = "' . $page->id . '", sr_lang_id = "' . languages::curId() . '", sr_domain_id = "' . domains::curId() . '";'); } } } }
/** * @return boolean * @param string $right - Имя права в панели администрирования * @param string $module - Системное имя модуля. Если не указанно, имя определяется исходя из текущего URL`a * @desc Проверяет существование указанного права для текущего модуля */ static function issetRight($right, $module = 0) { if (!self::$isGuest) { if (empty($module)) { $module = system::url(0); } self::getRights(); $right = str_replace('_proc_', '_', $right); if ($module == 'structure' && !strpos($right, ' ')) { $sitever = languages::curId() . ' ' . domains::curId(); return isset(self::$right[$module]['rights'][$sitever][$right]) ? true : false; } else { return isset(self::$right[$module]['rights'][$right]) ? true : false; } } else { return false; } }
static function getFileSiteMap() { self::init(); $cur_date = reg::getKey('/structure/' . domains::curId() . '/cur_date'); $text = ''; reset(self::$pages); foreach (self::$pages as $page) { if ($page['active'] && $page['in_index'] && empty($page['other_link'])) { $date = date('Y-m-d', strtotime($page['o_change_date'])); if ($cur_date) { $left = (time() - strtotime($page['o_change_date'])) / 86400; if ($left > 30) { $date = date('Y-m-d'); } } $url = self::getPageUrlById($page['o_id']); $priority = $page['is_home_page'] ? 1 : 1 - (count(explode('/', $url)) - 1) * 0.1; $tmp = ''; $tmp .= '<loc>http://' . domains::curDomain()->getName() . $url . '</loc>'; $tmp .= '<lastmod>' . $date . '</lastmod>'; $tmp .= '<priority>' . $priority . '</priority>'; $text .= '<url>' . $tmp . '</url>'; } } return '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">' . $text . '</urlset>'; }
public function proc_upd() { // Обработчик для еденичного изменения класса $mini_action = substr(system::action(), -3); if (system::action() == "proc_upd") { // Говорим какой объект нужно изменить $obj = ormObjects::get(system::POST('obj_id')); } else { if (system::action() == "proc_add") { // Говорим какой объект нужно создать $obj = new ormObject(); $obj->setClass('subscription'); } } // Если произошли ошибки, перенаправляем на главную страницу модуля if ($obj->issetErrors()) { system::redirect('/subscription'); } // Присваиваем пришедшие значения полям в объекте $obj->loadFromPost($mini_action); $obj->lang = languages::curId(); $obj->domain = domains::curId(); // Сохраняем изменения $obj_id = $obj->save(); // Если объект не сохранился, выводим пользователю текст ошибки. if ($obj_id === false) { system::savePostToSession(); ui::MessageBox(lang::get('TEXT_MESSAGE_ERROR'), $obj->getErrorListText()); ui::selectErrorFields($obj->getErrorFields()); $obj_id = empty($_POST['obj_id']) ? '' : $_POST['obj_id']; system::redirect('/subscription/subscribe_' . $mini_action . '/' . $obj_id); } // Если данные изменились корректно перенаправляем на соответствующию страницу if ($_POST['parram'] == 'apply') { system::redirect('/subscription/subscribe_upd/' . $obj_id); } else { system::redirect('/subscription'); } }
/** * @return stirng - Контент * @param string $templ_name - имя шаблона * @desc МАКРОС: Возвращает пропарсенный шаблон из папки /template/structure */ function include_templ($templ_name) { $site_prefix = domains::curId() == 1 && languages::curId() == 1 ? '' : '/__' . str_replace('.', '_', domains::curDomain()->getName()) . '_' . languages::curPrefix(); $file = TEMPL_DIR . $site_prefix . '/structure/' . $templ_name . '.tpl'; if (!file_exists($file)) { return str_replace('%name%', $templ_name, 'Указанный шаблон (%name%.tpl) не найден!'); } else { $file_tpl = implode('', file($file)); return page::parse($file_tpl); } }
/** * @return null * @param string $filename - Путь к файлу шаблона * @param boolean $absolut - Если true - путь считается абсолютным и вычисляется от корневой папки, в которой находится движок * @desc Обрабатывает указанный файл шаблона и выводит его на страницу */ static function parseIt($filename, $absolut = false, $withoutCache = false) { if (!system::$isAdmin && !$absolut) { $site_prefix = domains::curId() == 1 && languages::curId() == 1 ? '' : '/__' . str_replace('.', '_', domains::curDomain()->getName()) . '_' . languages::curPrefix(); if (file_exists(TEMPL_DIR . $site_prefix . $filename)) { $filename = TEMPL_DIR . $site_prefix . $filename; } else { if (file_exists(TEMPL_DIR . $site_prefix . '/structure/default.tpl')) { $filename = TEMPL_DIR . $site_prefix . '/structure/default.tpl'; } else { echo lang::get('ERROR_TEMPL2'); system::stop(); } } } while (list($key, $val) = each(self::$page_mas)) { self::assign($key, $val); } self::$arr = self::parse(file($filename)); // Сохраняем страницу в кэш if (!$withoutCache && self::isCashePage()) { $page = array('html' => self::$arr, 'page_id' => ormPages::getCurPageId(), 'page_url' => system::getCurrentUrlPN(), 'active_pages' => ormPages::getActiveId(), 'host' => $_SERVER['HTTP_HOST']); cache::set(system::getCurrentUrlPN(), $page); } // Вторично обрабатывает шаблон self::$arr = self::parse(self::parse(self::$arr, 2), 2); // Выводит обработанный шаблон на печать //echo str_replace('`%`', '%', self::$arr); echo self::$arr; self::freshAll(); }
public function restore() { $restore = parent::restore(); if ($restore) { $parent_id = $this->getParentId(); $s = empty($this->id) ? '' : 'p_obj_id <> "' . $this->id . '" and '; $s .= empty($parent_id) ? 'r_parent_id is NULL' : 'r_parent_id = "' . $parent_id . '"'; $sql = 'SELECT count(p_obj_id) FROM <<pages>>, <<objects>>, <<rels>> WHERE pseudo_url = "' . $this->__get('pseudo_url') . '" and lang_id = "' . languages::curId() . '" and domain_id = "' . domains::curId() . '" and r_children_id = p_obj_id and ' . $s . ' and o_id = p_obj_id and o_to_trash = 0;'; $count = db::q($sql, value); if ($count > 0) { $pseudo_url = $this->__get('pseudo_url') . rand(100, 999); db::q('UPDATE <<pages>> SET pseudo_url="' . $pseudo_url . '" WHERE p_obj_id = "' . $this->id . '";'); return true; } } return false; }
private function createTemplate($field_name) { $id = 0; $type = $field_name == 'template_id' ? 0 : 1; if (!empty($_POST[$field_name . '_new_val']) && !empty($_POST[$field_name . '_new_val2'])) { $templ = new template($id); $templ->setName($_POST[$field_name . '_new_val']); $templ->setFile($_POST[$field_name . '_new_val2']); $templ->setDestination($type); $templ->setLangId(languages::curId()); $templ->setDomainId(domains::curId()); $id = $templ->save(); } if (!empty($id)) { $_POST[$field_name] = $id; } }
function changeTempl($id, $obj, $form_name) { $type = $form_name == 'page_tpl' ? 0 : 1; $templ = new template($id); $templ->setName($obj['t_name']); $templ->setFile($obj['t_file']); $templ->setDestination($type); $templ->setLangId(languages::curId()); $templ->setDomainId(domains::curId()); $templ->save(); return true; }