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 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']); } }
/** * @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 getPrefix($modul = 'structure') { return '/' . $modul . '/' . domains::curId() . '/' . languages::curId(); }
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'); } }
private static function init() { if (!self::$isAdmin && system::$isAdmin) { // Определяем домен для панели управления // Определяем домен по УРЛу if (system::issetUrl(0)) { $tmp_domain = self::get(str_replace('_', '.', system::url(0))); if ($tmp_domain instanceof domain) { self::$cur_domain = $tmp_domain; system::clipUrl(); languages::setCurLang(self::$cur_domain->getDefLang()); } } // Проверяем, имеет ли пользователь доступ к данному домену if (!user::issetRight(languages::curId() . ' ' . self::$cur_domain->id(), 'structure')) { //echo languages::curId().' '.self::$cur_domain->id(); $langs = languages::getAll(); $domains = domains::getAll(); if (count($langs) > 1 || count($domains) > 1) { while (list($num2, $domain) = each($domains)) { reset($langs); while (list($num1, $lang) = each($langs)) { if (user::issetRight($lang['l_id'] . ' ' . $domain['d_id'], 'structure')) { $link = ADMIN_URL; if ($domain['d_id'] != 1) { $link .= '/' . str_replace('.', '_', $domain['d_name']); } if ($lang['l_id'] != 1) { $link = '/' . $lang['l_prefix'] . $link; } system::redirect($link, true); } } } } } self::$isAdmin = true; } else { if (empty(self::$cur_domain)) { // Опеделяем домен для сайта $domain_id = reg::getKey('/core/cur_domain/id'); if (!empty($domain_id)) { // Если домен в системе один, загружаем его данные из реестра $domain_name = reg::getKey('/core/cur_domain/name'); self::$domains[$domain_id] = array('d_id' => $domain_id, 'd_name' => $domain_name, 'd_domain_id' => '', 'd_def_lang' => reg::getKey('/core/cur_domain/def_lang'), 'd_sitename' => reg::getKey('/core/cur_domain/sitename'), 'd_email' => reg::getKey('/core/cur_domain/email'), 'd_online' => reg::getKey('/core/cur_domain/online'), 'd_offline_msg' => reg::getKey('/core/cur_domain/offline_msg'), 'd_error_msg' => reg::getKey('/core/cur_domain/error_msg'), 'id' => $domain_id); self::$domains_rel[$domain_name] = $domain_id; } else { $serv_name = $_SERVER['HTTP_HOST']; if (substr($serv_name, 0, 4) == 'www.') { $serv_name = substr($serv_name, 4, strlen($serv_name) - 4); } self::$cur_domain = self::get($serv_name); } if (!self::$cur_domain instanceof domain) { self::$cur_domain = self::get(1); } if (!self::$cur_domain instanceof domain) { die('не могу определить домен'); } self::$cur_site_domain = self::$cur_domain; } } }
/** * @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; }