/** * Добавление / увеличение счетчика хитов по объекту * * @param stdClass $obj объект который, обращения к которому необходимо подсчитать * @param string $task название задачи выполняемой над объектов * * @return bool результат добавления / увеличения счетчика */ public static function add_obj(stdClass $obj, $task = '') { $class_name = get_class($obj); $id = crc32($class_name); $option = $class_name; $sql = sprintf("INSERT INTO `#__hits` (`id`, `obj_id`, `obj_option`, `obj_task`, `hit`) VALUES (NULL, %u, '%s', '%s', 1)\n ON DUPLICATE KEY UPDATE hit=hit+1;", (int) $id, $option, $task); return joosDatabase::instance()->set_query($sql)->query(); }
public static function check_access_for_user_id($full_operations_name, $user_id) { static $allowed_rules; if ($allowed_rules === null) { $sql = sprintf("SELECT DISTINCT CONCAT_WS('::',al.acl_group, al.acl_name) AS rule_name, 1 AS value FROM #__users_acl_rules_groups AS aa INNER JOIN #__users_acl_groups AS ag ON ( ag.id=aa.group_id ) INNER JOIN #__users_acl_rules AS al ON ( al.id=aa.task_id ) WHERE ag.id IN ( SELECT group_id FROM #__users_acl_groups_users WHERE user_id = %s )", $user_id); $allowed_rules = joosDatabase::instance()->set_query($sql)->load_row_array('rule_name', 'value'); } return isset($allowed_rules[$full_operations_name]); }
public static function lists($param) { $cat_id = $param['cat_id']; $sql = sprintf("SELECT b.id, b.title, b.created_at AS lastmod, c.slug as cat_slug FROM #__blog AS b\n INNER JOIN #__blog_category AS c ON ( c.id=b.category_id AND c.state=1 AND c.id=%s )\n WHERE b.state=1 ORDER BY b.id DESC", $cat_id); $objs = joosDatabase::instance()->set_query($sql)->load_object_list(); foreach ($objs as $obj) { $obj->loc = joosRoute::href('blog_view', array('id' => $obj->id, 'cat_slug' => $obj->cat_slug)); } return $objs; }
/** * Главная страница компонента, вывод списка объектов * * @static * @return array */ public function index() { $search_result = array(); $total = 0; $search_word = isset(self::$param['search_word']) ? self::$param['search_word'] : ''; if (isset($_POST['search'])) { $search_word = joosRequest::post('search'); $search_word = joosText::simple_clean($search_word); $search_word = joosFilter::htmlspecialchars($search_word); joosRoute::redirect(joosRoute::href('search_word', array('search_word' => $search_word))); } $search_word = joosText::simple_clean($search_word); joosFilter::make_safe($search_word); if (strlen($search_word) > 100) { $search_word = joosString::substr($search_word, 0, 99); } if ($search_word && joosString::strlen($search_word) < 3) { $search_word = ''; } if ($search_word != '') { $results = joosDatabase::instance()->set_query("SELECT t.id, t.title,t.`fulltext` as text, t.type_id, t.type_cat_id, t.created_at, t.anons_image_id, t.file_id,'topic' AS itemtype,\n g.title AS gamename, t.game_id, g.slug AS game_slug\n FROM #__texts as t\n LEFT JOIN #__games AS g ON g.id=t.game_id\n WHERE LOWER(t.title) LIKE LOWER('%{$search_word}%') OR LOWER(t.`fulltext`) LIKE LOWER('%{$search_word}%') ")->load_object_list(); $rows = array(); $_n = count($results); for ($i = 0, $n = $_n; $i < $n; $i++) { $rows = array_merge((array) $rows, (array) $results[$i]); } $total = count($rows); for ($i = 0; $i < $total; $i++) { $text =& $rows[$i]->text; $search_words = explode(' ', $search_word); $needle = $search_words[0]; $text = modelSearch::prepare_search_content($text, 500, $needle); foreach ($search_words as $k => $hlword) { $search_words[$k] = htmlspecialchars(stripslashes($hlword), ENT_QUOTES, 'UTF-8'); } $searchRegex = implode('|', $search_words); $text = preg_replace('/' . $searchRegex . '/iu', '<span class="highlight">\\0</span>', $text); } $search_result = $rows; } $page = self::$param['page']; $pager = new joosPager(joosRoute::href('search_word', array('search_word' => $search_word)), $total, 10); $pager->paginate($page); // для первой (0) страницы и если есть результаты поиска - запишем словопоиск в базу, для дальнейших ленивых автокомплитов $total > 0 && $page == 0 ? modelSearch::add($search_word) : null; return array('search_word' => $search_word, 'search_result' => $search_result, 'pager' => $pager); }
/** * Вывод сводной таблицы расспределения и назначения прав * * @static * @return array */ public function acl_table() { $group_obj = new modelUsersAclGroups(); $groups = $group_obj->find_all(array('select' => 'id,title')); $acl_list_obj = new modelUsersAclRules(); $acls = $acl_list_obj->find_all(array('select' => 'id,title,acl_group,acl_name')); $acl_list = array(); foreach ($acls as $acl) { $acl_list[$acl->acl_group][sprintf('%s::%s', $acl->acl_group, $acl->acl_name)] = $acl; } $acl_groups = array_keys($acl_list); $sql = 'SELECT ag.id AS group_id, al.id AS list_id FROM #__users_acl_rules_groups AS aa INNER JOIN #__users_acl_groups AS ag ON ( ag.id=aa.group_id ) INNER JOIN #__users_acl_rules AS al ON ( al.id=aa.task_id )'; $acl_rules_array = joosDatabase::instance()->set_query($sql)->load_assoc_list(); $acl_rules = array(); foreach ($acl_rules_array as $value) { $acl_rules[$value['group_id']][$value['list_id']] = true; } return array('groups' => $groups, 'acl_groups' => $acl_groups, 'acl_list' => $acl_list, 'acls' => $acls, 'acl_rules' => $acl_rules); }
private static function db_debug() { $profs = joosDatabase::instance()->set_query('show profiles;')->load_assoc_list(); $total_time = 0; $r = ' <div id="ptb_data_cont_sql" class="ptb_data_cont"> <ul class="ptb_tabs"> <li id="ptb_tab_sqldefault">default <span>(' . count($profs) . ')</span></li> </ul> <div id="ptb_tab_cont_sqldefault" class="ptb_tab_cont"> <table class="ptb_tab_cont_table"> <tbody> <tr> <th style="width:20px;">№</th> <th>query</th> <th style="width:100px;">time</th> </tr>'; if (isset($profs[0])) { foreach ($profs as $prof) { $r .= '<tr valign="top"><td>' . $prof['Query_ID'] . ' </td><td> ' . $prof['Query'] . ' </td><td class="tRight"> ' . $prof['Duration'] . ' s</td></tr>'; $total_time += $prof['Duration']; } } $r .= '<tr class="total"> <td></td> <td>total ' . count($profs) . ' queries</td> <td class="tRight">' . $total_time . ' s</td> </tr> </tbody> </table> </div> </div>'; return $r; }
public function get_model($table, $implode_models = false) { $table_fields = joosDatabase::instance()->get_utils()->get_table_fields($table); $tableName = str_replace(array('#__', '#_', joosDatabase::instance()->get_prefix()), '', $table); $className = str_replace(' ', '', ucwords(strtolower(str_replace('_', ' ', $tableName)))); $buffer_site = array(); $buffer_site[] = "\n/**"; $buffer_site[] = "\n * Модель сайта компонента {$className}"; $buffer_site[] = "\n * "; $buffer_site[] = "\n * @package Components\\{$className}"; $buffer_site[] = "\n * @subpackage Models\\Site"; $buffer_site[] = "\n * @author JoostinaTeam <*****@*****.**>"; $buffer_site[] = "\n * @copyright (C) 2007-2012 Joostina Team"; $buffer_site[] = "\n * @license MIT License http://www.opensource.org/licenses/mit-license.php"; $buffer_site[] = "\n * @created " . JCURRENT_SERVER_TIME; $buffer_site[] = "\n * Информация об авторах и лицензиях стороннего кода в составе Joostina CMS: docs/copyrights"; $buffer_site[] = "\n * "; $buffer_site[] = "\n */"; $buffer_site[] = "\nclass model{$className} extends joosModel {"; foreach ($table_fields as $k => $v) { $buffer_site[] = "\n\t/**"; $buffer_site[] = "\n\t * @field {$v}"; $field_type = preg_replace('#[^A-Z]#i', '', $v); $field_type = str_replace('unsigned', '', $field_type); $field_type_name = self::get_type($field_type); $buffer_site[] = "\n\t * @type {$field_type_name}"; $buffer_site[] = "\n\t */"; $buffer_site[] = "\n\tpublic \${$k};"; } $buffer_site[] = "\n\n\t/*"; $buffer_site[] = "\n\t * Constructor"; $buffer_site[] = "\n\t *"; $buffer_site[] = "\n\t */"; $buffer_site[] = "\n\tpublic function __construct(){"; $buffer_site[] = "\n\t\tparent::__construct( '#__{$tableName}', 'id' );"; $buffer_site[] = "\n\t}"; $buffer_site[] = "\n\n\tpublic function check() {"; $buffer_site[] = "\n\t\t\$this->filter();"; $buffer_site[] = "\n\t\treturn true;"; $buffer_site[] = "\n\t}\n"; $buffer_site[] = "\n\n\tpublic function before_insert() {\n"; $buffer_site[] = "\t\treturn true;"; $buffer_site[] = "\n\t}\n"; $buffer_site[] = "\n\n\tpublic function after_insert() {\n"; $buffer_site[] = "\t\treturn true;"; $buffer_site[] = "\n\t}\n"; $buffer_site[] = "\n\n\tpublic function before_update() {\n"; $buffer_site[] = "\t\treturn true;"; $buffer_site[] = "\n\t}\n"; $buffer_site[] = "\n\n\tpublic function after_update() {\n"; $buffer_site[] = "\t\treturn true;"; $buffer_site[] = "\n\t}\n"; $buffer_site[] = "\n\n\tpublic function before_store() {\n"; $buffer_site[] = "\t\treturn true;"; $buffer_site[] = "\n\t}\n"; $buffer_site[] = "\n\n\tpublic function after_store() {\n"; $buffer_site[] = "\t\treturn true;"; $buffer_site[] = "\n\t}\n"; $buffer_site[] = "\n\n\tpublic function before_delete() {\n"; $buffer_site[] = "\t\treturn true;"; $buffer_site[] = "\n\t}\n"; $buffer_site[] = "\n}\n"; $buffer_admin[] = "\n/**"; $buffer_admin[] = "\n * Модель панели управления компонента {$className}"; $buffer_admin[] = "\n * "; $buffer_admin[] = "\n * @package Components\\{$className}"; $buffer_admin[] = "\n * @subpackage Models\\Admin"; $buffer_admin[] = "\n * @author JoostinaTeam <*****@*****.**>"; $buffer_admin[] = "\n * @copyright (C) 2007-2012 Joostina Team"; $buffer_admin[] = "\n * @license MIT License http://www.opensource.org/licenses/mit-license.php"; $buffer_admin[] = "\n * @created " . JCURRENT_SERVER_TIME; $buffer_admin[] = "\n * Информация об авторах и лицензиях стороннего кода в составе Joostina CMS: docs/copyrights"; $buffer_admin[] = "\n * "; $buffer_admin[] = "\n */"; $buffer_admin[] = "\nclass modelAdmin{$className} extends model{$className} {"; $buffer_admin[] = "\n\n\tpublic function get_fieldinfo() {\n"; $buffer_admin[] = "\t\treturn array("; foreach ($table_fields as $k => $v) { $buffer_admin[] = "\n\t\t\t'{$k}' => array("; $buffer_admin[] = "\n\t\t\t\t'name' => '{$k}',"; $buffer_admin[] = "\n\t\t\t\t'editable' => true,"; $buffer_admin[] = "\n\t\t\t\t'in_admintable' => true,"; $buffer_admin[] = "\n\t\t\t\t'html_table_element' => 'value',"; $buffer_admin[] = "\n\t\t\t\t'html_table_element_param' => array(),"; $buffer_admin[] = "\n\t\t\t\t'html_edit_element' => 'edit',"; $buffer_admin[] = "\n\t\t\t\t'html_edit_element_param' => array(),"; $buffer_admin[] = "\n\t\t\t),"; } $buffer_admin[] = "\n\t\t);"; $buffer_admin[] = "\n\t}\n"; $buffer_admin[] = "\n\n\tpublic function get_tableinfo() {\n"; $buffer_admin[] = "\t\t\treturn array("; $buffer_admin[] = "\n\t\t\t\t'header_main' => '{$className}',"; $buffer_admin[] = "\n\t\t\t\t'header_list' => '{$className}',"; $buffer_admin[] = "\n\t\t\t\t'header_new' => 'Создание {$className}',"; $buffer_admin[] = "\n\t\t\t\t'header_edit' => 'Редактирование {$className}'"; $buffer_admin[] = "\n\t\t\t);"; $buffer_admin[] = "\n\t}\n"; $buffer_admin[] = "\n\n\tpublic function get_extrainfo() {\n"; $buffer_admin[] = "\t\t\treturn array("; $buffer_admin[] = "\n\t\t\t\t'search' => array(),"; $buffer_admin[] = "\n\t\t\t\t'filter' => array(),"; $buffer_admin[] = "\n\t\t\t\t'extrafilter' => array()"; $buffer_admin[] = "\n\t\t\t);"; $buffer_admin[] = "\n\t}\n"; $buffer_admin[] = "\n}\n"; $return = array(); $return['site'] = $implode_models ? implode('', $buffer_site) : joosHTML::textarea(array('name' => $tableName, 'value' => implode('', $buffer_site), 'rows' => '5', 'class' => 'coder_model_area')); $return['admin'] = $implode_models ? implode('', $buffer_admin) : joosHTML::textarea(array('name' => $tableName, 'value' => implode('', $buffer_site), 'rows' => '5', 'class' => 'coder_model_area')); return $return; }
private static function prepare_extra(joosModel $obj, array $extra_data) { if (self::$data === NULL) { $results = array(); $hidden_elements = array(); $wheres_filter = array('true'); $wheres_search = array(); foreach ($extra_data as $key => $value) { switch ($key) { case 'search': $results[] = joosHtml::label(array('for' => 'search_elements'), 'Поиск'); $search_value = joosSession::get_user_state_from_request("search-" . $obj->get_class_name(), 'search', false); $results[] = joosHtml::input(array('name' => 'search_elements', 'id' => 'search_elements'), $search_value); $hidden_elements[] = joosHtml::hidden('search', $search_value); if ($search_value !== false && joosString::trim($search_value) != '') { foreach ($value as $selected_value) { $wheres_search[] = sprintf('%s LIKE ( %s )', joosDatabase::instance()->get_name_quote($selected_value), joosDatabase::instance()->get_quoted("%" . $search_value . "%")); } } break; case 'filter': foreach ($value as $params_key => $params_value) { $field_name = $params_key; $field_title = $value[$field_name]['name']; $results[] = joosHtml::label(array('for' => 'filter_' . $field_name), $field_title); $datas_for_select = array(-1 => 'Всё сразу'); $datas_for_select += isset($value[$field_name]['call_from']) && is_callable($value[$field_name]['call_from']) ? call_user_func($value[$field_name]['call_from'], $obj, $params_key) : array(); $selected_value = joosSession::get_user_state_from_request('filter-' . '-' . $field_name . '-' . $obj->get_class_name(), $field_name, -1); $selected_value = $selected_value === '0' ? '0' : $selected_value; $results[] = joosHtml::dropdown(array('name' => 'filter_' . $field_name, 'data-obj-name' => $field_name, 'class' => 'filter_elements', 'selected' => $selected_value), $datas_for_select); $hidden_elements[] = joosHtml::hidden($field_name, $selected_value); if ($selected_value && $selected_value != -1 or $selected_value === '0') { $wheres_filter[] = sprintf('%s=%s', joosDatabase::instance()->get_name_quote($field_name), joosDatabase::instance()->get_quoted($selected_value)); } } break; case 'extrafilter': $datas_for_select = array(-1 => 'Всё сразу'); foreach ($value as $params_key => $params_value) { $field_name = $params_key; $datas_for_select += array($params_key => $value[$field_name]['name']); } $selected_value = joosSession::get_user_state_from_request("extrafilter-" . $obj->get_class_name(), 'filter_extrafilter', -1); $results[] = joosHtml::label(array('for' => 'filter_extrafilter'), 'Фильтр'); $results[] = joosHtml::dropdown(array('name' => 'filter_extrafilter_selector', 'class' => 'extrafilter_elements', 'options' => $datas_for_select, 'selected' => $selected_value)); $hidden_elements[] = joosHtml::hidden('filter_extrafilter', $selected_value); //self::$data_overload = ( $selected_value && isset($value[$selected_value]['call_from']) && is_callable($value[$selected_value]['call_from']) ) ? call_user_func($value[$selected_value]['call_from'], $obj) : array(); self::$data_overload = $selected_value && isset($value[$selected_value]['call_from']) && is_callable($value[$selected_value]['call_from']) ? $value[$selected_value]['call_from'] : array(); break; default: break; } } $wheres = array(implode(' AND ', $wheres_filter)); if (count($wheres_search) > 0) { $wheres[] = ' (' . implode(' OR ', $wheres_search) . ' )'; } self::$data = array('for_header' => $results, 'hidden_ellements' => implode("\n", $hidden_elements), 'wheres' => implode(' AND ', $wheres), 'data_overload' => self::$data_overload); } return self::$data; }
public function table_select() { $table = joosRequest::post('table'); $types = modelAdminCoder_Faker::$data_types; $type_names = array(); array_walk($types, function ($v, $k) use(&$type_names) { $type_names[$k] = $v['name']; }); $table_fields = joosDatabase::instance()->get_utils()->get_table_fields($table); ob_start(); ?> <table class="table table-striped"> <thead> <tr> <th>#</th> <th>Поле</th> <th>Тип</th> <th>Чем заполнить</th> </tr> </thead> <tbody> <?php $i = 1; foreach ($table_fields as $key => $value) { ?> <?php $type = preg_replace('#[^A-Z]#i', '', $value); $type = str_replace('unsigned', '', $type); $active_option = null; array_walk($types, function ($v, $k) use($type, &$active_option) { $active_option = in_array($type, $v['types']) && $active_option === null ? $k : $active_option; }); $faker_selector = joosHTML::dropdown('type', $type_names, $active_option); ?> <tr> <td><?php echo $i; ?> </td> <td><?php echo $key; ?> </td> <td><?php echo $type; ?> </td> <td><?php echo $faker_selector; ?> </td> </tr> <?php ++$i; } ?> </tbody> </table> <?php $return = ob_get_contents(); ob_get_clean(); return $return; }
/** * Вставка массива значений в таблицу текущего объекта * * @example * $values = array( * 0 => array( * 'counter' => 111, * 'name' => 'первая запись', * ), * 1 => array( * 'name' => ' вторая запись ', * 'counter' => 2222 * ), * 2 => array( * 'name' => ' третья запись', * 'counter' => 123456 * ), * ); * * @param array $array_values * @return bool результат вставки массива */ public function insert_array(array $array_values) { return $this->_db->insert_array($this->_tbl, $this, $array_values); }
/** * Удаляем куку * */ public function logout_me() { $user_token = joosCookie::get(self::$_token_name, false); if (!$user_token) { return; } //сносим куку, что бы в следующий раз не искать по ней joosCookie::delete(self::$_token_name); //и удаляем из базы данных $query = "DELETE FROM #__users_tokens WHERE token=" . joosDatabase::instance()->get_quoted($user_token); return joosDatabase::instance()->set_query($query)->query(); }
public static function init_user() { $option = joosRequest::param('option'); // logout check if ($option == 'logout') { $database = joosDatabase::instance(); // обновление записи последнего посещения панели управления в базе данных if (isset($_SESSION['session_user_id']) && $_SESSION['session_user_id'] != '') { $query = "UPDATE #__users SET lastvisit_date = " . $database->get_quoted(JCURRENT_SERVER_TIME) . " WHERE id = " . (int) $_SESSION['session_user_id']; $database->set_query($query)->query(); } // delete db session record corresponding to currently logged in user if (isset($_SESSION['session_id']) && $_SESSION['session_id'] != '') { $query = "DELETE FROM #__users_session WHERE session_id = " . $database->get_quoted($_SESSION['session_id']); $database->set_query($query)->query(); } session_destroy(); joosRoute::redirect('index.php'); } if (session_name() != JADMIN_SESSION_NAME) { joosRoute::redirect(JPATH_SITE_ADMIN, 'Ошибка сессии'); } $my = new modelUsers(); $my->id = joosRequest::int('session_user_id', 0, $_SESSION); $my->user_name = joosRequest::session('session_user_name'); $session_id = joosRequest::session('session_id'); $logintime = joosRequest::session('session_logintime'); if ($session_id != session_id()) { joosRoute::redirect(JPATH_SITE_ADMIN, 'Вы не авторизованы'); } // check to see if session id corresponds with correct format if ($session_id == md5($my->id . $my->user_name . $logintime)) { $task = joosRequest::param('task'); if ($task != 'save' && $task != 'apply') { $database = joosDatabase::instance(); $session_life_admin = joosConfig::get2('session', 'life_admin'); // purge expired admin sessions only $past = time() - $session_life_admin; $query = "DELETE FROM #__users_session WHERE time < '" . (int) $past . "' AND guest = 1 AND user_id <> 0"; $database->set_query($query)->query(); // update session timestamp $query = "UPDATE #__users_session SET time = " . $database->get_quoted(time()) . " WHERE session_id = " . $database->get_quoted($session_id); $database->set_query($query)->query(); // set garbage cleaning timeout self::set_session_garbage_clean($session_life_admin); // check against db record of session $query = "SELECT COUNT( session_id ) FROM #__users_session WHERE session_id = " . $database->get_quoted($session_id) . " AND user_name = " . $database->get_quoted($my->user_name) . " AND user_id = " . (int) $my->id; $count = $database->set_query($query)->load_result(); // если в таблице нет информации о текущей сессии - она устарела if ($count == 0) { setcookie(JADMIN_SESSION_NAME); // TODO тут можно сделать нормальную запоминалку последней активной страницы, и разных данных с неё. И записывать всё это как параметры пользователя в JSON joosRoute::redirect(JPATH_SITE_ADMIN, 'Вы не авторизованы'); } } } elseif ($session_id == '') { joosRoute::redirect(JPATH_SITE, 'Вы не авторизованы'); } else { joosRoute::redirect(JPATH_SITE, 'Вы не авторизованы'); exit; } self::$user = $my; }
public function get_log($word) { $sql = "SELECT hit AS id, word AS label FROM #__searched WHERE LOWER(word) LIKE LOWER('%{$word}%') ORDER BY hit DESC"; return joosDatabase::instance()->set_query($sql, 0, 10)->load_assoc_list(); }
public function faker() { self::$submenu['db_faker']['active'] = true; $tables = joosDatabase::instance()->get_utils()->get_table_list(); return array('tables' => $tables); }