/** * @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 getCost() { if (!empty($this->obj)) { if (empty($this->cost)) { // Считаем стоимость товаров $sel = new ormSelect('eshop_goods'); $sel->fields('cost, count'); $sel->where('parents', '=', $this->obj->id); while ($goods = $sel->getObject()) { $this->cost += $goods->count * $goods->cost; } } return $this->cost; } }
public function doAction() { $answers = system::POST('answers'); $error = 2; $msg = ''; if (count($answers) > 0) { if ($vote = ormPages::get(system::POST('vote_id'), 'vote')) { if (!$vote->close) { $sel = new ormSelect('answer'); $sel->fields('name, count'); $sel->where('parents', '=', $vote->id); while ($answ = $sel->getObject()) { if (in_array($answ->id, $answers)) { $answ->count = $answ->count + 1; $answ->save(); if (!$vote->multiselect) { break; } } } cache::delete('vote' . $vote->id . '1'); cache::delete('vote' . $vote->id . '0'); $_SESSION['voting_' . $vote->id] = 1; $error = 0; } else { // Голосование закрыто $msg = lang::get('VOTING_MSG_CLOSE'); $error = 1; } } else { $msg = lang::get('VOTING_MSG_NOT_FOUND'); } } else { $msg = lang::get('VOTING_MSG_CHOSE_VAR'); } if (system::isAjax()) { if ($error < 2 && $vote instanceof ormPage) { $data = page::macros('voting')->objView($vote->id); } system::json(array('error' => 0, 'html' => $data, 'msg' => $msg)); } else { if (!empty($_POST['back_url'])) { system::redirect($_POST['back_url'], true); } else { system::redirect('/'); } } }
public function proc() { if (system::isAjax() && system::issetUrl(2)) { if (system::url(2) == 'start') { searchIndex::clear(); reg::setKey(ormPages::getPrefix('search') . '/index_date', date('d.m.Y')); $sel = new ormSelect(); $sel->fields('name'); $sel->findInPages(); $sel->where('active', '=', 1); $sel->where('in_search', '=', 1); echo $sel->getCount(); } else { if (system::url(2) == 'info') { $data = reg::getKey(ormPages::getPrefix('search') . '/index_date'); if (empty($data)) { $data = '-'; } system::json(array('pages' => searchIndex::getCountPages(), 'words' => searchIndex::getCountWords(), 'data' => $data)); } else { $sel = new ormSelect(); $sel->findInPages(); $sel->where('active', '=', 1); $sel->where('in_search', '=', 1); $sel->limit(system::url(2), 1); searchIndex::indexPage($sel->getObject()); echo 'ok'; } } system::stop(); } if (system::POST('parram') == 'clear') { searchIndex::clear(); } system::redirect('/search/index'); }
public function delete() { if ($this->old_system) { $this->newError(24, 'Класс является системным, вам запрещено его редактирование!'); return false; } else { if (!empty($this->id)) { // Удаляем все объекты созданные на основе этого класса $sel = new ormSelect($this->sname); $sel->fields('id'); //$sel->where('parents', '=', 0); while ($obj = $sel->getObject()) { $obj->delete(); } // Удаляем SQL-таблицы всех наследников класса while ($class = $this->getInheritor()) { $class->delete(); } // Убираем связь удаляемого класса с другими классами db::q('UPDATE <<classes>> SET c_base_class = NULL WHERE c_base_class = "' . $this->id . '";'); $ret = db::q('DELETE FROM <<classes>> WHERE c_id = "' . $this->id . '";'); if ($ret !== false) { db::q('DROP TABLE IF EXISTS <<__' . $this->sname . '>>;'); return true; } else { $this->newError(12, 'Ошибка в SQL запросе!'); return false; } } else { return false; } } }
public function goodsList($order_id, $templ_name = 'goods_list') { $templ_file = '/eshop/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('eshop.goodsList', $templ_file); } if ($order = ormObjects::get($order_id, 'eshop_order')) { $fields = page::getFields('obj', $TEMPLATE['list']); $sel = new ormSelect('eshop_goods'); $sel->where('parents', '=', $order_id); $list = ''; $num = $cost = 0; while ($goods = $sel->getObject()) { if ($obj = ormPages::get($goods->goods_id, 'goods')) { $num++; if (isset($fields['obj'])) { while (list($key, $val) = each($fields['obj'])) { if ($val != 'url' && $val != 'class' && $val != 'num') { page::assign('obj.' . $val, $obj->__get($val)); } } } 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' : ''); page::assign('obj.id', $obj->id); page::assign('obj.name', $obj->name); page::assign('obj.cost', $goods->cost); page::assign('obj.count', $goods->count); page::assign('obj.url', $obj->url); $cost_all = $goods->cost * $goods->count; page::assign('obj.cost_all', $cost_all); $cost += $cost_all; $list .= page::parse($TEMPLATE['list']); } } if (!empty($list)) { page::assign('cost', $cost); page::assign('list', $list); return page::parse($TEMPLATE['frame']); } else { return page::parse($TEMPLATE['empty']); } } }
private static function checkSocialUser($user_info) { $sel = new ormSelect('user'); $sel->where($sel->val('social_identity', '=', $user_info['identity']), $sel->val('social_type', '=', $user_info['social_type'])); $sel->limit(1); if ($user = $sel->getObject()) { // Пользователь уже зарегистрирован $groups = $user->getParents(); $sel = new ormSelect('user_group'); $sel->where('id', '=', $groups, 'OR'); $sel->where('active', '=', 1); if (!$user->active || $sel->getCount() < 1) { // Ошибка: Пользователь или группа выключены, авторизация не возможна echo lang::get('USERS_DISABLE_AUTH'); die; } else { if (user::authHim($user)) { // Пользователь авторизован, закрываем дочернее окно и возвращаемся на сайт self::closeWindowAndOpen('/'); } } } else { // Пользователь еще не создан, регистрируем if (reg::getKey('/users/confirm') || reg::getKey('/users/ask_email') && empty($user_info['email'])) { // Запрашивает согласие с правилами или e-mail $_SESSION['SOCIAL_AUTH_USER_INFO'] = $user_info; echo page::macros('users')->socialAuthConfirm(); } else { // регистрируем $user = self::createUserForSocial($user_info); if ($user && !$user->issetErrors()) { user::authHim($user); self::closeWindowAndOpen('/'); } else { if ($user instanceof ormObject) { echo $user->getErrorListText(); } else { echo 'Unknown error'; } } } system::stop(); } }
public static function getSectionByPath($path) { $section = ''; if (is_numeric($path)) { if ($path == 0) { $section = 'root'; $class_name = ''; } else { $section = ormPages::get($path); $class_name = ''; } } else { if (strpos($path, '..')) { // Выборка всех подразделов раздела, например "454 .. pages" $str = str_replace(' ', '', $path); // Определяем класс $section_id = 0; $pos = strpos($str, '..'); if ($pos) { $class_name = substr($str, $pos + 2); $section_id = substr($str, 0, $pos); } else { $class_name = ''; } $section = self::getAllSubSections($section_id); } else { if (strpos($path, '>')) { // Обычная цепочка, вида "455 > #5 > category goods" $str = str_replace(array('> ', ' >'), '>', $path); // Определяем класс $pos = strpos($str, ' '); if ($pos) { $class_name = substr($str, $pos + 1); $str = substr($str, 0, $pos); } else { $class_name = ''; } // Получаем путь $list = array(); $mas = explode('>', $str); while (list($key, $val) = each($mas)) { $val = trim($val); if (!empty($val)) { $list[] = $val; } } // Определяем объект $parent_id = 0; reset($list); while (list($key, $val) = each($list)) { if (is_numeric($val)) { // Указан ID if (empty($key)) { $parent_id = $val; } } else { if ($val[0] == '#') { // Указан порядковый номер в списке $num = str_replace('#', '', $val) - 1; $sel = new ormSelect(); $sel->findInPages(); $sel->fields('id'); $sel->where('active', '=', 1); if (!empty($parent_id)) { $sel->where('parents', '=', $parent_id); } else { $sel->where('parents', '=', 0); } $sel->limit($num, 1); $sel->orderBy(position, asc); if ($section = $sel->getObject()) { $parent_id = $section->id; } else { $section = false; break; } } else { // Указан класс $sel = new ormSelect($val); $sel->findInPages(); $sel->fields('id'); $sel->where('active', '=', 1); if (!empty($parent_id)) { $sel->where('parents', '=', $parent_id); } else { $sel->where('parents', '=', 0); } $sel->limit(1); $sel->orderBy(position, asc); if ($section = $sel->getObject()) { $parent_id = $section->id; } else { $section = false; $section; } } } } } else { $pos = strpos($path, ' '); if ($pos) { $obj_id = substr($path, 0, $pos); if (is_numeric($obj_id)) { $class_name = substr($path, $pos + 1); if ($obj_id == 0) { $section = 'root'; } else { $section = ormPages::get($obj_id); } } else { $class_name = $path; } } else { $class_name = $path; } } } } return array('section' => $section, 'class' => $class_name); }
static function addEmail($email, $subscriptions, $copyUserData = false) { $email = system::checkVar($email, isEmail); if (!empty($email) && !empty($subscriptions)) { $obj = new ormObject(); $obj->setClass('subscribe_user'); $obj->name = $email; if (!user::isGuest() && $copyUserData) { $obj->second_name = user::get('surname'); $obj->first_name = user::get('name'); $obj->user_id = user::get('id'); } // Указываем на какие подписки подписать while (list($key, $val) = each($subscriptions)) { $obj->setNewParent($val); } // Сохраняем изменения $sid = $obj->save(); if ($obj->issetErrors(29)) { // Если указанный e-mail уже существует, пытаемся найти его и подписать на рассылки. $sel = new ormSelect('subscribe_user'); $sel->where('name', '=', $email); $sel->limit(1); if ($obj = $sel->getObject()) { if (!user::isGuest() && $copyUserData) { $obj->second_name = user::get('surname'); $obj->first_name = user::get('name'); $obj->user_id = user::get('id'); } reset($subscriptions); while (list($key, $val) = each($subscriptions)) { $obj->setNewParent($val); } $sid = $obj->save(); } } return $sid; } }
/** * @return HTML * @param int $section_id - ID новостной ленты, для которой необходимо построить RSS-ленту * @param string $templ_name - Шаблон оформления, по которому будет строится RSS-лента * @desc МАКРОС: Выводит содержимое RSS-ленты. */ public function rss($section_id, $templ_name = 'rss') { $templ_file = '/structure/rss/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('structure.rss', $templ_file); } $cur_domain = 'http://' . domains::curDomain()->getName(); page::assign('channel.url', $cur_domain); page::assign('channel.date', date('r')); page::assign('channel.notice', ''); // Определяем из каких категорий выводить ленту новостей $sections = array(); if ($section_id == 'all') { // Из нескольких $sel = new ormSelect('news_feed'); $sel->findInPages(); $sel->fields('id'); $sel->where('rss_export', '=', 1); $sel->where('active', '=', 1); while ($obj = $sel->getObject()) { $sections[] = $obj->id; } page::assign('channel.title', domains::curDomain()->getSiteName()); } else { // Из одной $section_id = system::checkVar($section_id, isInt); if (empty($section_id)) { return ''; } $sections[] = $section_id; if ($sect = ormPages::get($section_id)) { page::assign('channel.title', $sect->name); } } // Формируем выборку объектов $sel = new ormSelect(); $sel->findInPages(); $sel->fields('name, notice, publ_date'); $sel->where('parents', '=', $sections, 'OR'); $sel->where('active', '=', 1); $sel->orderBy('publ_date', desc); $sel->limit(3); // Формируем список $list = ''; while ($obj = $sel->getObject()) { $num = $sel->getObjectNum() + 1; page::assign('obj.num', $num); page::assign('obj.id', $obj->id); page::assign('obj.url', $cur_domain . $obj->_url); page::assign('obj.name', $obj->name); $notice = str_replace(' ', '', strip_tags($obj->notice)); page::assign('obj.notice', $notice); $date = date('r', strtotime($obj->publ_date)); page::assign('obj.date', $date); /* if ($obj->podkast != '') { page::assign('obj.media_url', $cur_domain.$obj->podkast); page::fParse('media', $TEMPLATE['media']); } else page::assign('media', ''); */ if (isset($TEMPLATE['list'])) { $list .= page::parse($TEMPLATE['list']); } else { return page::errorBlock('structure.rss', $templ_file, 'list'); } } if (!empty($list)) { page::assign('list', $list); if (isset($TEMPLATE['frame_list'])) { $list = page::parse($TEMPLATE['frame_list']); } else { return page::errorBlock('structure.rss', $templ_file, 'frame_list'); } } return $list; }
public function proc_upd() { // Обработчик для еденичного изменения класса $mini_action = substr(system::action(), -3); if (system::action() == "proc_upd") { $obj = ormObjects::get(system::POST('obj_id')); $parent_id = $obj->parent_id; } else { if (system::action() == "proc_add") { $obj = new ormObject(); $obj->setClass('subscribe_user'); $parent_id = system::POST('obj_id'); } } // Если произошли ошибки, перенаправляем на главную страницу модуля if ($obj->issetErrors()) { system::redirect('/subscription'); } // Присваиваем пришедшие значения полям в объекте $obj->loadFromPost(); // Сохраняем изменения $obj_id = $obj->save(); if ($obj->issetErrors(29)) { // Если указанный e-mail уже существует, пытаемся найти его и подписать на рассылки. $sel = new ormSelect('subscribe_user'); $sel->where('name', '=', system::POST('name', isString)); $sel->limit(1); if ($obj = $sel->getObject()) { $obj->tabuList('subscribes'); $obj->loadFromPost(); reset($_POST['subscribes']); while (list($key, $val) = each($_POST['subscribes'])) { $obj->setNewParent($val); } $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/user_' . $mini_action . '/' . $obj_id); } // Если данные изменились корректно перенаправляем на соответствующию страницу if ($_POST['parram'] == 'apply') { system::redirect('/subscription/user_upd/' . $obj_id); } else { system::redirect('/subscription/user/' . $parent_id); } }
public function activateAction() { if (!reg::getKey('/users/reg') || !reg::getKey('/users/activation')) { system::redirect('/'); } if ($userKey = system::checkVar(system::url(2), isMD5)) { // Ищем нужного пользователя $sel = new ormSelect('user'); $sel->where('md5_flag', '=', $userKey); $sel->limit(1); if ($user = $sel->getObject()) { $key = md5(date('d.m.Y') . 'activate' . $user->id); if ($key == $userKey) { $user->active = 1; $user->md5_flag = ''; $user->save(); // Авторизуем пользователя user::authHim($user); page::globalVar('h1', lang::get('USERS_ADD_H1')); page::globalVar('title', lang::get('USERS_ADD_H1')); return lang::get('USERS_ADD_MSG2'); } } } return ormPages::get404(); }
/** * @return HTML * @param int(string) $section - ID объекта, подразделы которой будут выводиться в списке или системное имя класса, объекты которого нужно вывести * @param string $templ_name - Шаблон оформления по которому будет строится список * @param int $max_count - Максимальное количество элементов в списке * @param string $order_by - Способ сортировки элементов списка. SQL-подобный синтаксис, например: "name DESC". * @param int $start_pos - Номер элемента по порядку с которого будет выводиться список. * @desc МАКРОС: Выводит список объектов. */ public function objList($section, $TEMPLATE = 'default', $max_count = 0, $order_by = 0, $start_pos = 0) { $list = ''; // Определяем источник данных: ID, имя класса, путь, объект ormPage $independent = $section instanceof ormObject ? false : true; $class_name = $class_frame = ''; if ($independent) { if (!is_numeric($section)) { $pos = strpos($section, ' '); if ($pos) { $class_name = substr($section, $pos + 1); $section = substr($section, 0, $pos); } else { $class_name = $section; $section = -1; } } } // Если нужно, подгружаем файл шаблона if (!is_array($TEMPLATE)) { $templ_file = '/core/objects/' . $TEMPLATE . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('core.objList', $templ_file); } } // Формируем выборку объектов $sel = new ormSelect($class_name); if ($section >= 0) { page::assign('parent_id', $section); $sel->where('parents', '=', $section); } // Сортировка списка if (!empty($order_by)) { $pos = strpos($order_by, ' '); if ($pos) { $parram = substr($order_by, $pos + 1); $order_by = substr($order_by, 0, $pos); } else { $parram = ''; } $sel->orderBy($order_by, $parram); } else { $sel->orderBy(position, asc); } $class_list = $sel->getClassesList(); if (!empty($class_list)) { // Узнаем какие поля объектов будут участвовать в выборке $fields_str = ''; $fields = page::getFields('obj', $TEMPLATE, $class_list, $class_frame); if (isset($fields['obj'])) { while (list($key, $val) = each($fields['obj'])) { if ($val != 'url' && $val != 'class' && $val != 'num') { $fields_str .= empty($fields_str) ? $val : ', ' . $val; } } } $sel->fields($fields_str); // Количество элементов и постраничная навигация if (!empty($max_count)) { if (isset($fields['funct']) && in_array('structure.navigation', $fields['funct'])) { $count_page = ceil($sel->getCount() / $max_count); page::assign('count_page', $count_page); if (system::getCurrentNavNum() != 0) { $niz = empty($start_pos) ? system::getCurrentNavNum() * $max_count - $max_count : $start_pos; $sel->limit($niz, $max_count); } else { $sel->limit($max_count); } } else { if (!empty($start_pos)) { $sel->limit($start_pos, $max_count); } else { $sel->limit($max_count); } } } // Формируем список while ($obj = $sel->getObject()) { // Парсим поля страницы if (isset($fields['obj_all'])) { reset($fields['obj_all']); while (list($num, $name) = each($fields['obj_all'])) { page::assign('obj.' . $name, $obj->__get($name)); } } $class = $obj->getClass()->getSName(); $num = $sel->getObjectNum() + 1; page::assign('obj.num', $num); page::assign('obj.class', $class); 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' : ''); if ($num === 1) { page::assign('first_children_id', $obj->id); } page::assign('last_children_id', $obj->id); if (isset($TEMPLATE['list_' . $class])) { $templ = 'list_' . $class; } else { if (isset($TEMPLATE['list'])) { $templ = 'list'; } else { $templ = ''; } } if (isset($TEMPLATE[$templ])) { if ($num > 1 && isset($TEMPLATE['separator'])) { $list .= $TEMPLATE['separator']; } $list .= page::parse($TEMPLATE[$templ]); } } } if (!empty($list) && $independent) { page::assign('list', $list); if (isset($TEMPLATE['frame_list'])) { $list = page::parse($TEMPLATE['frame_list']); } else { $list = page::errorBlock('core.objList', $templ_file, 'frame_list'); } } return $list; }
public function __get($name) { if ($name == 'url' && !empty($this->id)) { if (empty($this->url)) { $this->url = ormPages::getPageUrlById($this->id); } //echo $this->id.'|'.$this->url.'<br/>'; return $this->url; } else { if ($name == '_url' && !empty($this->id)) { if (empty($this->_url)) { if ($this->__get('other_link') != '') { $link = $this->__get('other_link'); if ($link == '/first_subsection') { $sel = new ormSelect(); /// $sel->fields('id'); $sel->findInPages(); $sel->where('parents', '=', $this->id); $sel->orderBy('position'); $sel->limit(1); if ($subsection = $sel->getObject()) { $this->_url = $subsection->__get('_url'); } } else { $this->_url = $link; } } else { $this->_url = ormPages::getPageUrlById($this->id); } } return $this->_url; } else { if ($name == 'first_children_id' && !empty($this->id)) { $sel = new ormSelect(); $sel->findInPages(); $sel->where('parents', '=', $this->id); $sel->fields('id'); $sel->limit(1); $order_by = $this->__get('order_by'); if (!empty($order_by)) { $pos = strpos($order_by, ' '); if ($pos) { $parram = substr($order_by, $pos + 1); $order_by = substr($order_by, 0, $pos); } else { $parram = ''; } $sel->orderBy($order_by, $parram); } return $sel->getObject()->id; } else { if ($name == 'count_children' && !empty($this->id)) { return $this->countChildren(); } else { if ($this->isSysField($name) && isset($this->cur_prop[$name])) { return $this->cur_prop[$name]; } else { if ($this->isSysField($name) && isset($this->new_prop[$name])) { return $this->new_prop[$name]; } else { return parent::__get($name); } } } } } } }
/** * @return string HTML * @param integer $obj - Экземпляр объекта (ormObject, ormPage) * @param string $action - Тип действия: "upd" - изменение, "add" - добавление * @desc Выводит форму изменения прав доступа для объекта */ public static function getListForObject($obj, $action) { if (file_exists(MODUL_DIR . '/users/template/right_list_object.tpl')) { include MODUL_DIR . '/users/template/right_list_object.tpl'; } if (isset($_POST['query'])) { // Формируем список подсказок для пользователя $sel = new ormSelect('user'); $sel->fields('login'); $sel->where('id', '<>', '29'); $sel->where('login', 'LIKE', '%' . $_POST['query'] . '%'); $users = ''; while ($user = $sel->getObject()) { $zapi = $sel->getObjectNum() != 0 ? ', ' : ''; $users .= $zapi . "'" . $user->login . "'"; } echo "{ query:'" . $_POST['query'] . "', suggestions:[" . $users . "], data:[] }"; system::stop(); } else { if (isset($_POST['user_name'])) { // Добавляем выбранного пользователя в список $sel = new ormSelect('user'); $sel->fields('login'); $sel->where('id', '<>', '29'); $sel->where('login', '=', $_POST['user_name']); $sel->limit(1); $user = $sel->getObject(); if ($user instanceof ormObject) { page::assign("group.id", $user->id); page::assign("group.name", $user->login); page::assign("checked_edit", ''); page::assign("checked_view", 'checked'); echo page::parse($TEMPLATE['group']); } system::stop(); } } // Выводим список групп $sel = new ormSelect('user_group'); $sel->where('id', '<>', '32'); $sel->orderBy('name', asc); $groups = $sel->getData(); $rights = array(); if ($action == 'upd') { $users = db::q('SELECT o_id, login o_name FROM <<rights>>, <<objects>>, <<__user>> WHERE r_obj_id = "' . $obj->id . '" and r_group_id = o_id and obj_id = o_id and o_class_id <> 33;', records); $groups = array_merge($groups, $users); $tmp = db::q('SELECT r_state, r_group_id FROM <<rights>> WHERE r_obj_id = "' . $obj->id . '";', records); while (list($key, $right) = each($tmp)) { $rights[$right['r_group_id']] = $right['r_state']; } $select_all = count($tmp) == 1 && empty($tmp[0]['r_group_id']) ? $tmp[0]['r_state'] : false; } else { $select_all = 2; } $items = ''; $num = $edit_num = $view_num = 0; while (list($key, $group) = each($groups)) { $state = isset($rights[$group['o_id']]) ? $rights[$group['o_id']] : 0; if ($state == 2) { $edit_num++; } $checked_edit = $state == 2 || $select_all == 2 ? 'checked' : ''; page::assign("checked_edit", $checked_edit); if ($state > 0) { $view_num++; } $checked_view = $state > 0 || $select_all > 0 ? 'checked' : ''; page::assign("checked_view", $checked_view); page::assign("group.id", $group['o_id']); page::assign("group.name", $group['o_name']); $items .= page::parse($TEMPLATE['group']); $num = $key + 1; } $checked_edit = $select_all == 2 || $num == $edit_num ? 'checked' : ''; page::assign("checked_edit", $checked_edit); $checked_view = $select_all > 0 || $num == $view_num ? 'checked' : ''; page::assign("checked_view", $checked_view); page::assign("text.all_user", lang::get('STRUCTURE_RIGHT_ALL_USER')); page::assign("text.title", lang::get('STRUCTURE_RIGHT_TITLE')); page::assign("groups", $items); return page::parse($TEMPLATE['frame']); }
/** * @return HTML * @param int $obj_id - ID голосования. * @param string $templ_name - Шаблон оформления. * @desc МАКРОС: Выводит указанное голосование. */ public function objView($obj_id, $templ_name = 'default') { $html = ''; $id = is_array($obj_id) ? $obj_id['o_id'] : $obj_id; $ses = empty($_SESSION['voting_' . $id]) ? '1' : '0'; $key = 'vote' . $id . $ses; $ckey = md5(serialize($templ_name)); if (($data = cache::get($key)) && isset($data[$ckey])) { $html = $data[$ckey]; } else { if (!is_array($templ_name)) { $templ_file = '/voting/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); } else { $TEMPLATE = $templ_name; } if (!is_array($TEMPLATE)) { return page::errorNotFound('voting.viewVote', $templ_file); } if (is_array($obj_id)) { $obj = ormPages::get($obj_id); } else { $obj = ormPages::get($obj_id, 'vote'); } if ($obj instanceof ormPage) { $all_count = 0; $result = !empty($_SESSION['voting_' . $obj->id]) || $obj->close ? '_result' : ''; $fields = page::getFields('obj', $TEMPLATE['vote']); // Выводим список вариантов ответов if (isset($fields['mono']) && in_array('answers', $fields['mono'])) { $list = ''; $num = $max = 0; $sel = new ormSelect('answer'); $sel->fields('name, count'); $sel->where('parents', '=', $obj->id); // Находим самый популярный ответ while ($answ = $sel->getObject()) { if ($max < $answ->count) { $max = $answ->count; } $all_count += $answ->count; } $pr = $all_count / 100; if ($pr == 0) { $pr = 1; } // Выводим список вариантов ответов $sel->reset(); while ($answ = $sel->getObject()) { $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' : ''); page::assign('obj.id', $answ->id); page::assign('obj.parent_id', $obj->id); page::assign('obj.name', $answ->name); page::assign('obj.count', $answ->count); $procent = round($answ->count / $pr, 2); page::assign('obj.percent', $procent); page::assign('obj.per1', round($procent)); page::assign('obj.per2', 100 - round($procent)); $best = $answ->count == $max ? 'best' : ''; page::assign('class-best', $best); $list .= page::parse($TEMPLATE['answer' . $result]); } page::assign('answers', $list); page::assign('type', $obj->multiselect ? 'checkbox' : 'radio'); } // Парсим поля страницы if (isset($fields['obj'])) { while (list($num, $name) = each($fields['obj'])) { page::assign('obj.' . $name, $obj->__get($name)); } } page::assign('obj.count', $all_count); $html = page::parse($TEMPLATE['vote' . $result]); } // Записываем в кэш $data[$ckey] = $html; cache::set($key, $data); } return $html; }
static function checkObjectLinks() { if (system::url(0) == 'getObjectLinksTree') { if (file_exists(MODUL_DIR . '/mpanel/template/objectLinks.tpl')) { include MODUL_DIR . '/mpanel/template/objectLinks.tpl'; } $tree = new ormTree(457, 0); $tree->miniStyle(); $tree->setClass('ormPage'); $tree->setRoot(0, reg::getKey(ormPages::getPrefix() . '/title_prefix')); $tree->setRightAjaxLoad('tree'); page::assign('tree', $tree->getHTML()); page::assign('parram', system::url(1)); echo page::parse($TEMPLATE['tree_frame']); system::stop(); } else { if (system::url(0) == 'getObjectLinks') { if (file_exists(MODUL_DIR . '/mpanel/template/objectLinks.tpl')) { include MODUL_DIR . '/mpanel/template/objectLinks.tpl'; if (!($obj = ormPages::get(system::url(1)))) { $obj = ormObjects::get(system::url(1)); } if ($obj instanceof ormObject && !$obj->issetErrors()) { page::assign('id', $obj->id); page::assign('name', $obj->name); page::assign('url', $obj->url); page::assign('field_name', system::url(2)); page::assign('field_id', system::url(3)); if ($obj->getClass()->isPage()) { echo page::parse($TEMPLATE['new_object_link']); } else { echo page::parse($TEMPLATE['object_link']); } } } system::stop(); } else { if (system::url(0) == 'findObjectLinks' && isset($_POST['query'])) { // Формируем список подсказок $sel = new ormSelect(); $sel->findInPages(); $sel->fields('name'); $sel->where('name', 'LIKE', '%' . $_POST['query'] . '%'); $list = $list2 = ''; while ($obj = $sel->getObject()) { $zapi = $sel->getObjectNum() != 0 ? ', ' : ''; $list .= $zapi . "'" . $obj->name . "'"; $list2 .= $zapi . " ['" . $obj->id . "', '" . system::url(1) . "' ]"; } echo "{ query:'" . $_POST['query'] . "', suggestions:[" . $list . "], data:[" . $list2 . "] }"; system::stop(); } } } }