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'); }
private function checkValue($field, $value) { $type = $this->fields[$field]['f_type']; $tmp = ''; switch ($type) { // Строка case 10: $tmp = system::checkVar($value, isString); break; // E-mail // E-mail case 15: $tmp = system::checkVar($value, isEmail); break; // URL // URL case 20: $tmp = system::checkVar($value, isUrl); break; // Пароль // Пароль case 35: $tmp2 = system::checkVar($value, isPassword); if (!empty($tmp2) || $tmp2 === false) { $tmp = $tmp2; } break; // Число // Число case 40: $tmp = system::checkVar($value, isInt); break; // Позиция в списке // Позиция в списке case 65: $tmp = system::checkVar($value, isInt); break; // Число с точкой // Число с точкой case 45: $tmp = system::checkVar($value, isNum); break; // Число с точкой // Число с точкой case 47: $tmp = system::checkVar($value, isPrice); break; // Галочка (логический) // Галочка (логический) case 50: $tmp = system::checkVar($value, isBool); break; // Дата // Дата case 25: if (!empty($value)) { $tmp = system::checkVar($value, isDate); } break; // Время // Время case 30: $tmp = system::checkVar($value, isDateTime); break; // Дата и Время // Дата и Время case 32: if (!empty($value)) { $tmp = system::checkVar($value, isDateTime); } break; // Большой текст // Большой текст case 55: $value = str_replace(array('<', '>'), array('<', '>'), $value); $tmp = system::checkVar($value, isText); break; // HTML – текст // HTML – текст case 60: $tmp = system::checkVar($value, isText); break; // Файл // Файл case 70: $tmp = $this->checkLoadFile($field, $value, '', '', $this->fields[$field]['f_max_size']); break; // Список файлов // Список файлов case 73: if (isset($_FILES[$value]) && count($_FILES[$value]['name']) > 0) { $file_var = $_FILES[$value]; $tmp = $value; for ($i = 0; $i < count($file_var['name']); $i++) { if (isset($file_var['tmp_name'][$i]) && file_exists($file_var['tmp_name'][$i])) { if (!empty($file_var['error'][$i])) { $this->newError(30, 'Произошла ошибка при загрузке файлов для поля "' . $field . '"!'); } } else { $tmp = false; } } } break; // Изображение // Изображение case 75: $tmp = $this->checkLoadFile($field, $value, array('png', 'gif', 'jpg', 'jpeg'), 'jpg, jpeg, gif, png', $this->fields[$field]['f_max_size']); break; // Видео // Видео case 80: $tmp = $this->checkLoadFile($field, $value, array('avi', 'mpeg'), 'avi, mpeg', $this->fields[$field]['f_max_size']); break; // Флеш-ролик // Флеш-ролик case 85: $tmp = $this->checkLoadFile($field, $value, array('flv'), 'flv', $this->fields[$field]['f_max_size']); break; // Выпадающий список // Выпадающий список case 90: if (empty($value)) { $value = 0; } $tmp = system::checkVar($value, isString); break; // Список c множественным выбором // Список c множественным выбором case 95: if (empty($value)) { $value = array(); } $tmp = is_array($value) ? $value : false; break; // Ссылка на дерево // Ссылка на дерево case 100: if (empty($value)) { $value = array(); } $tmp = is_array($value) ? $value : false; break; // Теги // Теги case 105: $tmp = system::checkVar($value, isString); break; default: $this->newError(31, 'Тип данных поля "' . $field . '" не поддерживается системой!', $field); } // Проверка уникальности значения поля if ($this->fields[$field]['f_uniqum']) { $class_name = $this->class->isInheritor('user') ? 'user' : $this->class->getSName(); $sel = new ormSelect($class_name); $sel->where($field, '=', $tmp); if (!empty($this->id)) { $sel->where('id', '<>', $this->id); } if ($sel->getCount() > 0) { if ($field == 'name') { $this->newError(29, 'В системе уже есть объект с указанным именем. Выберите другое имя.', 'name'); } else { $this->newError(32, 'Поле "' . $field . '" должно содержать уникальное не повторяющееся значение. Укажите другое значение.', $field); } } } if (!(empty($tmp) && ($type == 35 || $type == 25 || $type == 32) || $this->issetErrors())) { if ($tmp !== false) { if ($field == 'name') { $this->name = $tmp; } $this->new_prop[$field] = $tmp; } else { $this->newError(33, 'Неправильно указано значение для поля "' . $type . '"!', $field); } } }
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(); } }
static function start($release_id, $subject, $part = 1) { if ($release = ormObjects::get($release_id)) { $_SESSION['SUBSCR_PART'] = system::checkVar($part, isInt); $_SESSION['SUBSCR_SUBJECT'] = str_replace(array('{', '}'), '%', system::checkVar($subject, isString)); $_SESSION['SUBSCR_MAILHTML'] = self::getMailHTML($release_id); if ($release->error_part_num == 0) { // Рассылка части с начала $release->last_subscribe = date('Y-m-d H:i:s'); $release->error_part_num = $_SESSION['SUBSCR_PART']; if ($release->part_count_awaiting <= 0) { $count = self::getPartCount($release->parent_id); $release->part_count_awaiting = $count; $release->part_count = $count; } $release->save(); $start = 0; page::assign('part', $_SESSION['SUBSCR_PART']); page::assign('name', $release->name); system::revue($release->getParent(), page::parse(lang::get('SUBSCRIBE_HIST_START')), info); } else { // Продолжение незавершенной рассылки $_SESSION['SUBSCR_PART'] = $release->error_part_num; $start = $release->error_iteration_num; page::assign('part', $_SESSION['SUBSCR_PART']); page::assign('name', $release->name); system::revue($release->getParent(), page::parse(lang::get('SUBSCRIBE_HIST_CONTINUE')), info); } // Вычисляем кол-во итераций для рассылки всех писем в указанной части $sel = new ormSelect('subscribe_user'); $sel->where('parents', '=', $release->parent_id); $count_in_part = reg::getKey('/subscription/count_mails_day'); if ($_SESSION['SUBSCR_PART'] * $count_in_part > $sel->getCount()) { $count_in_part = $sel->getCount() - ($_SESSION['SUBSCR_PART'] - 1) * $count_in_part; } $count = ceil($count_in_part / reg::getKey('/subscription/count_mails')); return json_encode(array('error' => 0, 'start' => $start, 'count' => $count)); } }
function getSubscribersCount($id, $obj) { $sel = new ormSelect('subscribe_user'); $sel->where('parents', '=', $id); return $sel->getCount(); }
/** * @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; }
/** * @return int - количество подразделов * @param int $section_id - ID раздела сайта. * @param string $class - Системное имя ORM-класса, страницы которого необходимо посчитать. * @param boolean $active - Если 0, считает все страницы в разделе. Если 1, только активные. * @desc МАКРОС: Возвращает количество подразделов у указаного раздела (страницы) */ public function objCount($section_id, $class = 0, $active = 0) { if ($active || !empty($class)) { $sel = new ormSelect($class); $sel->where('parents', '=', $section_id); if ($active) { $sel->where('active', '=', 1); } return $sel->getCount(); } else { return ormPages::getCountOfSection($section_id); } }