Знакомимся с API ядра движка. Хранение и загрузка конфигурации.

+4
2.39K
Добавил в документации в wiki нижеследующий текст. К сожалению текст нуждается в форматировании. Сам я с wiki не очень дружу. В режиме правки там все понятно.

class cmsConfig

расположен в файле /core/classes/config.class.php

Сам по себе класс ничего сложного не представляет. Класс используется для загрузки и сохранения базовых настроек InstantCMS.

Краткий обзор

private static $instance
переменная для хранения объекта класса, недоступная извне. Доступ обеспечивается методом public static function getInstance().

private function __construct()
конструктор для создания объекта. Грузит (выполняет с помощью функции include()) конфиг. файл из "/includes/config.inc.php".

public static function getInstance()
как было описно выше, метод используется для получения экземпляра класса.

public function saveToFile($_CFG, $file=’config.inc.php’)
метод сохраняет настройки в виде php файла в папку "/includes/", который потом в дальнейшем будет грузиться

Ниже приводятся коды конфиг. файла и код класса.
Стоит обратить внимание на параметр
  1. $_CFG['debug']= 0;
Параметр введен для включения режима отладки и предоставления отладочной информации.
В дальнейшем в классах API будет встречаться следующая конструкция:
  1. if ($inConf->debug){
  2. //выдача отладочной информации
  3. }
Злоупотреблять подобными вставками не стоит, поскольку будет влиять на быстродействие.


Код конфигурационного файла:
  1. <?php
  2. if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }
  3. $_CFG = array();
  4. $_CFG['sitename'] = 'Мой сайт';
  5. $_CFG['hometitle'] = '';
  6. $_CFG['homecom'] = '';
  7. $_CFG['siteoff'] = 0;
  8. $_CFG['debug'] = 0;
  9. $_CFG['offtext'] = 'Производится обновление сайта';
  10. $_CFG['keywords'] = 'InstantCMS, система управления сайтом, бесплатная CMS, движок сайта, CMS';
  11. $_CFG['metadesc'] = 'InstantCMS - бесплатная система управления сайтом с социальными функциями';
  12. $_CFG['seourl'] = '';
  13. $_CFG['lang'] = 'ru';
  14. $_CFG['sitemail'] = '';
  15. $_CFG['wmark'] = 'watermark.png';
  16. $_CFG['stats'] = 1;
  17. $_CFG['template'] = '_default_';
  18. $_CFG['splash'] = 0;
  19. $_CFG['slight'] = 1;
  20. $_CFG['db_host'] = 'localhost';
  21. $_CFG['db_base'] = 'my_db';
  22. $_CFG['db_user'] = 'my_user';
  23. $_CFG['db_pass'] = 'db_password';
  24. $_CFG['db_prefix'] = 'cms';
  25. $_CFG['page_fx'] = 1;
  26. $_CFG['show_pw'] = 1;
  27. $_CFG['index_pw'] = 0;
  28. $_CFG['fastcfg'] = 1;
  29. $_CFG['mailer'] = 'mail';
  30. $_CFG['sendmail'] = '/usr/sbin/sendmail';
  31. $_CFG['smtpauth'] = 0;
  32. $_CFG['smtpuser'] = '';
  33. $_CFG['smtppass'] = '';
  34. $_CFG['smtphost'] = 'localhost';
  35. ?>
  36.  
По скольку код класса не очень большой, привожу код целиком здесь:

  1. class cmsConfig {
  2. private static $instance;
  3. private function __construct(){
  4. $cfg_file = PATH.'/includes/config.inc.php';
  5. if (file_exists($cfg_file)){
  6. include($cfg_file);
  7. foreach ($_CFG as $id=>$value) {
  8. $this->{$id} = $value;
  9. }
  10. }
  11. if (!$this->db_prefix){
  12. $this->db_prefix = 'cms';
  13. }
  14. return true;
  15. }
  16. private function __clone() {}
  17. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  18. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  19. public static function getInstance() {
  20. if (self::$instance === null) {
  21. self::$instance = new self;
  22. }
  23. return self::$instance;
  24. }
  25. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  26. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  27. /**
  28. * Сохраняет массив в файл конфигурации
  29. * @param array $_CFG
  30. */
  31. public function saveToFile($_CFG, $file='config.inc.php'){
  32. $filepath = PATH.'/includes/'.$file;
  33. if (file_exists($filepath)){
  34. if (!@is_writable($filepath)){ die('Файл <strong>'.$filepath.'</strong> недоступен для записи!'); }
  35. } else {
  36. if (!@is_writable(dirname($filepath))){ die('Папка <strong>'.dirname($filepath).'</strong> недоступна для записи!'); }
  37. }
  38. $cfg_file = fopen($filepath, 'w+');
  39. fputs($cfg_file, "<?php \n");
  40. fputs($cfg_file, "if(!defined('VALID_CMS')) { die('ACCESS DENIED'); } \n");
  41. fputs($cfg_file, '$_CFG = array();'."\n");
  42. foreach($_CFG as $key=>$value){
  43. if (is_int($value)){
  44. $s = '$_CFG' . "['$key'] \t= $value;\n";
  45. } else {
  46. $s = '$_CFG' . "['$key'] \t= '$value';\n";
  47. }
  48. fwrite($cfg_file, $s);
  49. }
  50. fwrite($cfg_file, "?>");
  51. fclose($cfg_file);
  52. return true;
  53. }
  54. }
  55.  
0
14 лет назад #
Зачем все это?
0
СергейР СергейР 14 лет назад #
Как зачем? Для распрямления мозгов - в самый раз))
0
14 лет назад #
Зачетно, просто сначала нада его распрямить ибо не распрямленный мозг усваивает тока 5% от того что тут пишут! Сразу выпадаешь из массы!
0
14 лет назад #
Оч желательно разработать подробную документацию 8))
0
14 лет назад #
Код PHP:
     * Обновляет данные пользователя
     * @return bool
     */
    public function update() {

        $inCore = cmsCore::getInstance();

        $user_id    = isset($_SESSION['user']['id']) ? $_SESSION['user']['id'] : 0;

        if (!$user_id){
            $this->id   = 0;
            $this->is_admin = 0;
            $this->group_id = self::getGuestGroupId();
            return true;
        }

        $info       =   $this->loadUser($user_id);

        if (!$info){ return false; }

        foreach($info as $key=>$value){
            $this->{$key}   = $value;
        }

        $this->id           = (int)$user_id;

        $this->checkBan();

        return true;

    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Загружает данные пользователя из базы
     * @param int $user_id
     * @return array
     */
    public function loadUser($user_id) {

        $inDB       = cmsDatabase::getInstance();
        $inCore     = cmsCore::getInstance();

        $sql    = "SELECT u.*, g.is_admin is_admin
                   FROM cms_users u, cms_user_groups g
                   WHERE u.id={$user_id} AND u.is_deleted = 0 AND u.is_locked = 0 AND u.group_id = g.id";

        $result = $inDB->query($sql);

        if($inDB->num_rows($result) !== 1) { return false; }

        $info   = $inDB->fetch_assoc($result);

        $info['ip']         = $_SERVER['REMOTE_ADDR'];

        return $info;

    }

// ============================================================================ //
// ============================================================================ //

    public static function createUser($_userdata){

        $inDB = cmsDatabase::getInstance();
        $user = $_userdata;

        $sql = "SELECT alias, access, is_admin FROM cms_user_groups WHERE id = ".$user['group_id'];
        $result = $inDB->query($sql);
        $_groupdata = $inDB->fetch_assoc($result);
        $user['group']  = $_groupdata['alias'];

        $access = str_replace(', ', ',', $_groupdata['access']);
        $access = split(',', $access);

        $user['access'] = array();
        $user['access'] = $access;

        $user['is_admin'] = $_groupdata['is_admin'];

        return $user;
        
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Проверяет, находится ли текущий посетитель в бан-листе
     * Если да, то показывает сообщение и завершает работу
     */
    public function checkBan(){
        
        $inDB       = cmsDatabase::getInstance();
        $inCore     = cmsCore::getInstance();
        
        $current_ip = $this->ip;

        if ($inDB->rows_count('cms_banlist', "ip = '$current_ip' AND status=1")){

            $ban        = $inDB->get_fields('cms_banlist', "ip = '$current_ip' AND status=1", 'int_num, int_period, autodelete, id, status, bandate');
            $interval   = $ban['int_num'] . ' ' .$ban['int_period'];

            //Check expired
            $sql = "SELECT *
                    FROM cms_banlist
                    WHERE id = {$ban['id']} AND bandate  0
                    LIMIT 1";

            $rs = $inDB->query($sql);

            if (!$inDB->errno()){
                if ($inDB->num_rows($rs)){
                    if ($ban['autodelete']){
                        //delete
                        $inDB->query("DELETE FROM cms_banlist WHERE id={$ban['id']}");
                    } else {
                        //close
                        $inDB->query("UPDATE cms_banlist SET status=0 WHERE id={$ban['id']}");
                    }
                } else {
                    echo 'Ваш доступ к сайту заблокирован';
                    echo '';
                        echo 'Дата блокировки: '.$ban['bandate'].'';
                        if ($ban['int_num']halt();
                }
            }
        }
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Проверяет наличие кукиса "запомнить меня" и если он найден - авторизует пользователя
     * @return bool
     */
    public function autoLogin(){
        $inDB       = cmsDatabase::getInstance();
        $inCore     = cmsCore::getInstance();
        
        if ($inCore->getCookie('userid') && !$this->id){

            $cookie_code = $inCore->getCookie('userid');

            $sql = "SELECT * FROM cms_users WHERE md5(CONCAT(id, password)) = '$cookie_code' AND is_deleted=0 AND is_locked=0";
            $res = $inDB->query($sql);

            if($inDB->num_rows($res)==1){
                $userrow = $inDB->fetch_assoc($res);
                session_register('user');
                $_SESSION['user'] = self::createUser($userrow);
                $inDB->query("UPDATE cms_users SET logdate = NOW() WHERE id = ".$_SESSION['user']['id']);
                $this->resetStatTimer();
            } else {
                $inCore->unsetCookie('user_id');
            }
        }
        return true;
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Сбрасывает таймер статистики пользователя
     * @return bool
     */
    public function resetStatTimer() {

        $_SESSION['user']['s_timer'] = time();

        return true;
        
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Проверяет, вышло ли время интервала для обновления статистики пользователя
     * @return bool
     */
    public function checkStatTimer() {

        if (!isset($_SESSION['user']['s_timer'])) { return true; }

        $user_time = $_SESSION['user']['s_timer'];
        
        return (bool)(time()-$user_time >= self::STAT_TIMER_INTERVAL);

    }


// ============================================================================ //
// ============================================================================ //

    public function dropStatTimer(){

        unset($_SESSION['user']['s_timer']);
        return true;

    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает рейтинг пользователя
     * @param int $user_id
     * @return int
     */
    public static function getRating($user_id) {

        $inDB = cmsDatabase::getInstance();

        $sql = "SELECT SUM( r.points ) AS rating
                FROM cms_ratings r
                LEFT JOIN cms_content c ON r.item_id = c.id AND r.target = 'content'
                LEFT JOIN cms_photo_files f ON r.item_id = f.id AND r.target = 'photo'
                LEFT JOIN cms_blog_posts p ON r.item_id = p.id AND r.target = 'blogpost'
                WHERE c.user_id = $user_id OR f.user_id = $user_id OR p.user_id = $user_id";

        $result = $inDB->query($sql);

        if (!$inDB->num_rows($result)){ return 0; }

        $data = $inDB->fetch_assoc($result);

        return $data['rating'] * 5;

    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает значение кармы пользователя
     * @param int $user_id
     * @return int
     */
    public static function getKarma($user_id){
        $inDB = cmsDatabase::getInstance();
        $sql = "SELECT SUM(points) as karma FROM cms_user_karma WHERE user_id = $user_id";
        $result = $inDB->query($sql);
        if ($inDB->num_rows($result)>0){ $data = $inDB->fetch_assoc($result); if ($data['karma']) {$karma = $data['karma']; } else { $karma = 0; } }
        return $karma;
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает значение кармы пользователя и ссылки для ее изменения в виде html
     * @param int $user_id
     * @param bool $showtitle
     * @param bool $controls
     * @return html
     */
    public static function getKarmaFormat($user_id, $showtitle=false, $controls=true){
        //calculate positive karma
        $inUser = self::getInstance();

        $karma = self::getKarma($user_id);

        $plus = '';
        $minus = '';

        if ($inUser->id && $controls){
            if(usrCanKarma($user_id, $inUser->id)){
                $plus = 'id.'" title="Карма +">';
                $minus = 'id.'" title="Карма -">';
            }
        }

        $html = '';
            $html .= ''.$plus.'';
            if($karma>0){
                $html .= '+'.$karma.'';
            } elseif ($karmamenuId();

        $sql = "SELECT u.id as id, u.nickname as nickname, u.login as login, u.birthdate, p.gender as gender
                FROM cms_users u, cms_user_profiles p
                WHERE p.user_id = u.id AND u.is_locked = 0 AND u.is_deleted = 0 AND DATE_FORMAT(u.birthdate, '%d-%m')=DATE_FORMAT(NOW(), '%d-%m')";

        $rs     = $inDB->query($sql);
        $total  = $inDB->num_rows($rs);

        $now=0; $html = '';

        if (!$total){ return false; }
        
        while($usr = mysql_fetch_assoc($rs)){
            $html .= self::getGenderLink($usr['id'], $usr['nickname'], $menuid, $usr['gender'], $usr['login']);
            if ($now < $total-1) { $html .= ', '; }
            $now ++;
        }

        return $html;
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает последние посты в блогах друзей
     * @param int $user_id
     * @param int $limit
     * @return array
     */
    public static function getUserFriendsComments($user_id, $limit=10){

        $inDB           = cmsDatabase::getInstance();
        $inCore         = cmsCore::getInstance();

        $friends        = self::getFriends($user_id);

        if (!$friends) { return false; }

        $friends_sql    = '';

        foreach($friends as $id=>$friend){
            $friends_sql .= 'u.id = '.$friend['id'];
            if ($id < sizeof($friends)-1){ $friends_sql .= ' OR '; }
        }

        $sql = "SELECT DISTINCT c.id, c.content, c.target as target, c.target_id as target_id, c.user_id, u.id as user_id, u.nickname as nickname, u.login as login, 
                       IF(DATE_FORMAT(c.pubdate, '%d-%m-%Y')=DATE_FORMAT(NOW(), '%d-%m-%Y'), DATE_FORMAT(c.pubdate, 'Cегодня в %H:%i'),
                       IF(DATEDIFF(NOW(), c.pubdate)=1, DATE_FORMAT(c.pubdate, 'Вчера в %H:%i'),DATE_FORMAT(c.pubdate, '%d, %M') ))  as pubdate
                FROM cms_comments c, cms_users u
                WHERE c.user_id = u.id AND ({$friends_sql})
                ORDER BY c.pubdate DESC
                ";

        if ($limit) { $sql .= 'LIMIT '.$limit; }

        $result = $inDB->query($sql);

        $comments = array();

        if (!$inDB->num_rows($result)){ return false; }

        while ($comment = $inDB->fetch_assoc($result)){
            $comment['pubdate'] = $inCore->getRusDate($comment['pubdate']);
            $comment['link']    = $inCore->getCommentLink($comment['target'], $comment['target_id'], true, true);
            if (sizeof($comment['content'])>50){
                $comment['content'] = substr($comment['content'], 0, 50) . '...';
            }
            $comments[] = $comment;
        }

        return $comments;

    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает последние посты в блогах друзей
     * @param int $user_id
     * @param int $limit
     * @return array
     */
    public static function getUserFriendsPosts($user_id, $limit=10){
        
        $inDB           = cmsDatabase::getInstance();
        $inCore         = cmsCore::getInstance();

        $friends        = self::getFriends($user_id);

        if (!$friends) { return false; }

        $friends_sql    = '';

        foreach($friends as $id=>$friend){
            $friends_sql .= 'u.id = '.$friend['id'];
            if ($id < sizeof($friends)-1){ $friends_sql .= ' OR '; }
        }

        $sql = "SELECT DISTINCT p.id,
                                p.title,
                                p.user_id,
                                p.blog_id,
                                p.seolink as seolink,
                                b.seolink as bloglink, 
                                u.id as user_id,
                                u.nickname as nickname,
                                u.login as login,
                       IF(DATE_FORMAT(p.pubdate, '%d-%m-%Y')=DATE_FORMAT(NOW(), '%d-%m-%Y'), DATE_FORMAT(p.pubdate, 'Cегодня в %H:%i'),
                       IF(DATEDIFF(NOW(), p.pubdate)=1, DATE_FORMAT(p.pubdate, 'Вчера в %H:%i'),DATE_FORMAT(p.pubdate, '%d, %M') ))  as pubdate
                FROM cms_blog_posts p, cms_users u, cms_blogs b
                WHERE p.blog_id = b.id AND p.user_id = u.id AND ({$friends_sql})
                ORDER BY p.pubdate DESC
                ";

        if ($limit) { $sql .= 'LIMIT '.$limit; }

        $result = $inDB->query($sql);

        $posts = array();

        if (!$inDB->num_rows($result)){ return false; }

        $inCore->loadModel('blog');
        $model = new cms_model_blog();

        while ($post = $inDB->fetch_assoc($result)){
            $post['pubdate']    = $inCore->getRusDate($post['pubdate']);
            $post['url']        = $model->getPostURL(0, $post['bloglink'], $post['seolink']);
            $posts[]            = $post;
        }

        return $posts;
        
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает последние фотографии друзей
     * @param int $user_id
     * @param int $limit
     * @return array
     */
    public static function getUserFriendsPhotos($user_id, $limit=10){

        $inDB           = cmsDatabase::getInstance();
        $inCore         = cmsCore::getInstance();

        $friends        = self::getFriends($user_id);

        if (!$friends) { return false; }

        $friends_sql    = '';

        foreach($friends as $id=>$friend){
            $friends_sql .= 'u.id = '.$friend['id'];
            if ($id < sizeof($friends)-1){ $friends_sql .= ' OR '; }
        }

        $sql = "SELECT DISTINCT p.id, p.title, p.user_id, u.id as user_id, u.nickname as nickname, u.login as login, 
                       IF(DATE_FORMAT(p.pubdate, '%d-%m-%Y')=DATE_FORMAT(NOW(), '%d-%m-%Y'), DATE_FORMAT(p.pubdate, 'Cегодня в %H:%i'),
                       IF(DATEDIFF(NOW(), p.pubdate)=1, DATE_FORMAT(p.pubdate, 'Вчера в %H:%i'),DATE_FORMAT(p.pubdate, '%d, %M') ))  as pubdate
                FROM cms_photo_files p, cms_users u
                WHERE p.user_id = u.id AND ({$friends_sql})
                ORDER BY p.pubdate DESC
                ";

        if ($limit) { $sql .= 'LIMIT '.$limit; }
        
        $result = $inDB->query($sql);

        $photos = array();

        if (!$inDB->num_rows($result)){ return false; }

        while ($photo = $inDB->fetch_assoc($result)){
            $photo['pubdate'] = $inCore->getRusDate($photo['pubdate']);
            $photos[] = $photo;
        }

        return $photos;
        
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает элементы  для списка пользователей
     * @param int $selected
     * @param array $exclude
     * @return html
     */
    public static function getUsersList($selected=0, $exclude=array()){

        $inDB   = cmsDatabase::getInstance();

        $html   = '';

        $sql    = "SELECT * FROM cms_users WHERE is_locked = 0 AND is_deleted = 0 ORDER BY nickname";
        $rs     = $inDB->query($sql);

        if (!$inDB->num_rows($rs)){ return; }

        while($u = $inDB->fetch_assoc($rs)){
            if(!in_array($u['id'], $exclude)){
                if ($selected){
                    if (in_array($u['id'], $selected)){
                        $html .= ''.$u['nickname'].'';
                    } else {
                        $html .= ''.$u['nickname'].'';
                    }
                } else {
                    $html .= ''.$u['nickname'].'';
                }
            }
        }

        return $html;
        
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает элементы  для списка пользователей
     * @param int $selected
     * @param array $exclude
     * @return html
     */
    public static function getAuthorsList($authors, $selected=''){

        if (!$authors) { return; }

        $inDB = cmsDatabase::getInstance();
        $html = '';

        $sql = "SELECT * FROM cms_users WHERE ";

        $a = 1;
        foreach($authors as $key=>$id){
            if ($a == 1) { $sql .= 'id = '.$id; }
            else {
                $sql .= ' OR id = '.$id;
            }
            $a++;
        }

        $rs = $inDB->query($sql);

        if ($inDB->num_rows($rs)){
            while($u = $inDB->fetch_assoc($rs)){
                if ($selected){
                    if (in_array($u['id'], $selected)){
                        $html .= ''.$u['nickname'].'';
                    } else {
                        $html .= ''.$u['nickname'].'';
                    }
                } else {
                    $html .= ''.$u['nickname'].'';
                }
            }
        }

        return $html;
        
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает элементы  для списка пользователей
     * @param int $selected
     * @param array $exclude
     * @return html
     */
    public static function getFullAwardsList($selected=''){

        $inDB = cmsDatabase::getInstance();
        $html = '';

        $awards = array();

        $sql = "SELECT title FROM cms_user_awards GROUP BY title";
        $rs = $inDB->query($sql);

        if ($inDB->num_rows($rs)){
            while($aw = $inDB->fetch_assoc($rs)){
                $awards[] = $aw['title'];
            }
        }

        $sql = "SELECT title FROM cms_user_autoawards GROUP BY title";
        $rs = $inDB->query($sql);

        if ($inDB->num_rows($rs)){
            while($aw = $inDB->fetch_assoc($rs)){
                if (!in_array($aw['title'], $awards))
                $awards[] = $aw['title'];
            }
        }

        foreach($awards as $aw){
            if ($selected){
                if ($selected == $aw){
                    $html .= ''.$aw.'';
                } else {
                    $html .= ''.$aw.'';
                }
            } else {
                $html .= ''.$aw.'';
            }
        }

        return $html;

    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает элементы  для списка друзей пользователя
     * @param int $user_id
     * @param int $selected
     * @return html
     */
    public static function getFriendsList($user_id, $selected=0){

        $inDB = cmsDatabase::getInstance();

        $html = '';

        $sql = "SELECT f.*
                FROM cms_user_friends f
                WHERE (f.to_id = $user_id OR f.from_id = $user_id) AND f.is_accepted = 1
                ORDER BY logdate ASC";
        $result = $inDB->query($sql);

        if ($inDB->num_rows($result)){
            while($friend = $inDB->fetch_assoc($result)){

                if ($friend['from_id']==$user_id) { $friend_id = $friend['to_id']; } else { $friend_id = $friend['from_id']; }

                $friend_nickname = $inDB->get_field('cms_users', 'id='.$friend_id, 'nickname');

                if (@$selected==$cat['id']){
                    $s = 'selected';
                } else {
                    $s = '';
                }
                
                $html .= ''.$friend_nickname.'';
            }
        } else {
            $html = '-- Нет друзей --';
        }
        return $html;

    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает список друзей пользователя
     * @param int $user_id
     * @return array
     */
    public static function getFriends($user_id){

        $inDB       = cmsDatabase::getInstance();

        $friends    = array();

        $sql = "SELECT f.*
                FROM cms_user_friends f
                WHERE (f.to_id = $user_id OR f.from_id = $user_id) AND f.is_accepted = 1
                ORDER BY logdate ASC";
        $result = $inDB->query($sql);

        if ($inDB->num_rows($result)){
            while($friend = $inDB->fetch_assoc($result)){

                $f = array();

                $f['id']        = ($friend['from_id']==$user_id) ? $friend['to_id'] : $friend['from_id'];
                $f['nickname']  = $inDB->get_field('cms_users', 'id='.$f['id'], 'nickname');

                $friends[] = $f;

            }
        }
        return $friends;

    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает html стены пользователя
     * @param int $selected
     * @param array $exclude
     * @return html
     */
    public static function getUserWall($user_id, $usertype='user', $page=1){

        $inDB       = cmsDatabase::getInstance();
        $inCore     = cmsCore::getInstance();
        $inUser     = self::getInstance();
        
        $menuid     = $inCore->menuId();

        $myprofile  = false;

        $perpage    = 10;

        if ($usertype=='user'){
            $myprofile = ($inUser->id == $user_id || $inUser->is_admin);
        } else {
            $inCore->loadLib('clubs');
            $myprofile = (clubUserIsRole($user_id, $inUser->id, 'moderator') || clubUserIsAdmin($user_id, $inUser->id) || $inUser->is_admin);
        }

        $records = array();

        $pagebar = '';

        //получаем общее число записей на стене этого пользователя
        $total = $inDB->rows_count('cms_user_wall', "user_id = $user_id AND usertype = '$usertype'");
        $pages = ceil($total / $perpage);
        
        if ($total){
            //получаем нужную страницу записей стены
            $sql = "SELECT w.*, u.nickname as author, u.login as author_login, DATE_FORMAT(w.pubdate, '%d-%m-%Y (%H:%i)') as fpubdate
                    FROM cms_user_wall w, cms_users u
                    WHERE w.user_id = $user_id AND w.author_id = u.id AND w.usertype = '$usertype'
                    ORDER BY w.pubdate DESC
                    LIMIT ".(($page-1)*$perpage).", $perpage";

            $result     = $inDB->query($sql);
            $total_page = $inDB->num_rows($result);

            $inCore->includeFile('components/users/includes/usercore.php');

            while($record = $inDB->fetch_assoc($result)){
                $record['content']  = nl2br($inCore->parseSmiles($record['content'], true));
                $record['avatar']   = usrImage($record['author_id'], 'small');
                $records[]          = $record;
            }

            if ($pages>1){
                $pagebar = cmsPage::getPagebar($total, $page, $perpage, 'javascript:wallPage(%page%)');
            }
        }

        ob_start();

        $smarty = $inCore->initSmarty('components', 'com_users_wall.tpl');

        $smarty->assign('menuid', $menuid);
        $smarty->assign('total', $total);
        $smarty->assign('records', $records);
        $smarty->assign('user_id', $inUser->id);
        $smarty->assign('wall_user_id', $user_id);
        $smarty->assign('myprofile', $myprofile);
        $smarty->assign('usertype', $usertype);
        $smarty->assign('pages', $pages);
        $smarty->assign('page', $page);
        $smarty->assign('total', $total);
        $smarty->assign('total_page', $total_page);
        $smarty->assign('pagebar', $pagebar);

        $smarty->display('com_users_wall.tpl');

        return ob_get_clean();
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает html формы "написать на стене"
     * @param int $user_id
     * @param string $usertype
     * @return html
     */
    public static function getUserAddWall($user_id, $usertype='user'){

        $inCore     = cmsCore::getInstance();

        $my_id      = self::getInstance()->id;

        $bb_toolbar = cmsPage::getBBCodeToolbar('message', false);
        $smilies    = cmsPage::getSmilesPanel('message');

        ob_start();

        $smarty = $inCore->initSmarty('components', 'com_users_addwall.tpl');

        $smarty->assign('user_id', $user_id);
        $smarty->assign('usertype', $usertype);
        $smarty->assign('my_id', $my_id);

        $smarty->assign('bb_toolbar', $bb_toolbar);
    	$smarty->assign('smilies', $smilies);

        $smarty->display('com_users_addwall.tpl');

        return ob_get_clean();
        
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает список наград пользователя
     * @param int $user_id
     * @return array
     */
    public static function getAwardsList($user_id){

        $inDB   = cmsDatabase::getInstance();

        $list   = false;

        $sql    = "SELECT title FROM cms_user_awards WHERE user_id = $user_id";
        $result = $inDB->query($sql);

        if ($inDB->num_rows($result)){
            $list = array();
            while($record = $inDB->fetch_assoc($result)){ $list[] = $record['title']; }
        }
        
        return $list;
        
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Проверяет, голосовал ли текущий пользователь в указанном опросе
     * @param int $poll_id
     * @return bool
     */
    public static function isUserVoted($poll_id){

        $inDB = cmsDatabase::getInstance();

        $user_id    = self::getInstance()->id;
        $ip         = self::getInstance()->ip;

        $sql = "SELECT *
                FROM cms_polls_log
                WHERE ((ip = '$ip' AND user_id = '0') OR (user_id > 0 AND user_id='$user_id')) AND poll_id = $poll_id";

        $result = $inDB->query($sql);
        
        return (bool)$inDB->num_rows($result);
        
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает ID группы "Гости"
     * @return int
     */
    public static function getGuestGroupId(){

        if (!self::$guest_group_id){

            $inDB = cmsDatabase::getInstance();
            $result = $inDB->query("SELECT id FROM cms_user_groups WHERE alias = 'guest'");
            if ($inDB->num_rows($result)){
                $data = $inDB->fetch_assoc($result);
                self::$guest_group_id = $data['id'];
            } else {
                self::$guest_group_id = 0;
            }

        }

        return self::$guest_group_id;

    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает массив с количеством гостей и пользователей онлайн
     * @return array
     */
    public static function getOnlineCount(){

        $inDB = cmsDatabase::getInstance();
        $people = array();

        $sql = "SELECT DISTINCT user_id, id FROM cms_online WHERE user_id = '0' OR user_id = ''";
        $result = $inDB->query($sql);
        $people['guests'] = $inDB->num_rows($result);

        $sql = "SELECT DISTINCT user_id, id FROM cms_online WHERE user_id > 0";
        $result = $inDB->query($sql);
        $people['users'] = $inDB->num_rows($result);

        return $people;

    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Проверяет, на сайте ли указанный пользователь
     * @param int $user_id
     * @return bool
     */
    public static function isOnline($user_id){
        $inDB = cmsDatabase::getInstance();
        $sql = "SELECT id FROM cms_online WHERE user_id = $user_id";
        $result = $inDB->query($sql);
        return (bool)$inDB->num_rows($result);
    }


// ============================================================================ //
// ============================================================================ //

    /**
     * Проверяет, находится ли указанный пользователь в бан-листе
     * @param int $user_id
     * @return bool
     */
    public static function isBanned($user_id){
        $inDB = cmsDatabase::getInstance();
        return (bool)$inDB->rows_count('cms_banlist', 'user_id='.$user_id.' AND status=1 LIMIT 1');
    }


// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает ссылку на "Мои сообщения" в виде количества новых сообщений
     * @param int $user_id
     * @return html
     */
    public static function isNewMessages($user_id){
        $inDB = cmsDatabase::getInstance();
        global $menuid;
        $sql = "SELECT id FROM cms_user_msg WHERE to_id = $user_id AND is_new = 1";
        $result = $inDB->query($sql);

        if($inDB->num_rows($result)) {
            $html =	' ('.$inDB->num_rows($result).')';
            return $html;
        } else { return false; }
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Проверяет условия получения наград и выдает награду пользователю, если нужно
     * @param int $user_id
     * @return bool
     */
    public static function checkAwards($user_id=0){
        $inDB = cmsDatabase::getInstance();
        if ($user_id>0){
            $user = $inDB->get_fields('cms_users', "id={$user_id}", 'login');

            $sql = "SELECT * FROM cms_user_autoawards WHERE published = 1";
            $rs = $inDB->query($sql) or die('Error processing autoawards');
            if (mysql_num_rows($rs)) {
                $p_content = dbRowsCount('cms_content', "user_id=$user_id AND published = 1");
                $p_comment = dbRowsCount('cms_comments', "user_id=$user_id");
                $p_blog = dbRowsCount('cms_blog_posts', "user_id=$user_id AND published = 1");
                $p_forum = dbRowsCount('cms_forum_posts', "user_id=$user_id");
                $p_photo = dbRowsCount('cms_photo_files', "user_id=$user_id AND published = 1");
                $p_privphoto = dbRowsCount('cms_user_photos', "user_id=$user_id");
                $p_karma = dbGetField('cms_user_profiles', "user_id=$user_id", 'karma');
                while ($award = mysql_fetch_assoc($rs)){
                    if (!dbRowsCount('cms_user_awards', "user_id=$user_id AND award_id={$award['id']}")) {
                        $granted = ($award['p_content'] get_table('cms_subscribe', "target = '$target' AND target_id = $target_id");
        if (is_array($userlist)){
            foreach ($userlist as $key=>$usr){
                $uid = $inUser->id;
                $subscribe_type = $inDB->get_field('cms_user_profiles', "user_id='{$usr['user_id']}'", 'cm_subscribe');
                if($usr['user_id'] != $uid){
                    if ($subscribe_type=='priv' || $subscribe_type=='both'){
                        self::sendMessage(USER_UPDATER, $usr['user_id'], $message);
                    }
                    if ($subscribe_type=='mail'){
                        $inConf = cmsConfig::getInstance();

                        $postdate = date('d/m/Y H:i:s');
                        $to_email = $inDB->get_field('cms_users', "id='{$usr['user_id']}'", 'email');

                        $author_nick = $inDB->get_field('cms_users u, cms_comments c', "c.user_id = u.id AND c.target = '$target' AND target_id = $target_id ORDER BY c.pubdate DESC LIMIT 1", 'u.nickname');

                        $pagetitle = strip_tags($clink);
                        $answerlink = $inCore->getCommentLink($target, $target_id, false, true);

                        $letter_path = PATH.'/includes/letters/newcomment.txt';
                        $letter = file_get_contents($letter_path);

                        $letter= str_replace('{sitename}', $inConf->sitename, $letter);
                        $letter= str_replace('{answerlink}', $answerlink, $letter);
                        $letter= str_replace('{pagetitle}', $pagetitle, $letter);
                        $letter= str_replace('{date}', $postdate, $letter);
                        $letter= str_replace('{author}', $author_nick, $letter);
                        $inCore->mailText($to_email, 'Новый комментарий! - '.$inConf->sitename, $letter);
                    }
                }
            }
        }
        return;
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает тег ссылки на профиль пользователя с иконкой его пола
     * @param int $user_id
     * @param string $nickname
     * @param int $menuid
     * @param char $gender = m / f
     * @param string $css_style
     * @return html
     */
    public static function getGenderLink($user_id, $nickname='', $menuid=0, $gender='m', $login='', $css_style=''){
        $inDB = cmsDatabase::getInstance();
        $gender_img = '/components/users/images/male.gif';
        if (!$gender){
            $user = $inDB->get_field('cms_user_profiles', 'user_id='.$user_id, 'gender');
        }
        if ($gender){
            switch($gender){
                case 'm': $gender_img = '/components/users/images/male.gif'; break;
                case 'f': $gender_img = '/components/users/images/female.gif'; break;
                default : $gender_img = '/components/users/images/male.gif'; break;
            }
        }
        if (!$nickname || !$login){
            $user       = $inDB->get_fields('cms_users', 'id='.$user_id, 'nickname, login');
            $nickname   = $user['nickname'];
            $login      = $user['login'];
        }
        return ''.$nickname.'';
    }

// ============================================================================ //
// ============================================================================ //

    /**
     * Возвращает список  с фотографиями из личного альбома указанного пользователя
     * @param int $user_id
     * @return html
     */
    public static function getPhotosList($user_id){
        
        $inDB = cmsDatabase::getInstance();

        $sql = "SELECT *
                FROM cms_user_photos
                WHERE user_id = $user_id
                ORDER BY title ASC";
        $rs = $inDB->query($sql);

        if ($inDB->num_rows($rs)){
            $html = ''."\n";
            while($photo = $inDB->fetch_assoc($rs)){
                $html .= ''.$photo['title'].''."\n";
            }
            $html .= ''."\n";
        } else {
            $html = 'В вашем альбоме нет фотографий'."\n";
        }

        return $html;
        
    }

// ============================================================================ //
// ============================================================================ //

    public static function getProfileURL($user_login) {
        return HOST . '/' . self::PROFILE_LINK_PREFIX . urlencode($user_login);
    }

// ============================================================================ //
// ============================================================================ //

    public static function getProfileLink($user_login, $user_nickname) {
        return ''.$user_nickname.'';
    }

// ============================================================================ //
// ============================================================================ //

    public static function updateStats($user_id){

        $inDB   = cmsDatabase::getInstance();
        $inCore = cmsCore::getInstance();

        $stats  = array();

        $stats['count']                     = array();
        $stats['count']['comments']         = (int)$inDB->rows_count('cms_comments', "user_id={$user_id} AND published = 1");
        $stats['count']['forum']            = (int)$inDB->rows_count('cms_forum_posts', "user_id={$user_id}");
        $stats['count']['photos']           = (int)$inDB->rows_count('cms_user_photos', "user_id={$user_id}");
        $stats['count']['board']            = (int)$inDB->rows_count('cms_board_items', "user_id={$user_id} AND published=1");
        $stats['count']['files_public']     = (int)$inDB->rows_count('cms_user_files', "user_id={$user_id} AND allow_who = 'all'");
        $stats['count']['files_private']    = (int)$inDB->rows_count('cms_user_files', "user_id={$user_id}");

        $stats['rating']                    = self::getRating($user_id);        

        $stats_yaml    = ($stats) ? $inCore->arrayToYaml($stats) : "---\n";
        
        $inDB->query("UPDATE cms_user_profiles SET stats = '{$stats_yaml}' WHERE user_id={$user_id}");
        
    }

// ============================================================================ //
// ============================================================================ //
 
0
Львенок Львенок 14 лет назад #
это вообще к чему???
когда буду user.class.php рассматривать, тогда и приведу...
написано же "базовой конфигурации движка"...

Еще от автора

Шаблоны и Стили. Что InstantCMS нам выдает...
Зайдите на страничку вашего сайта InstantCMS. Через контекстное меню откройте код HTML страницы... Понятно что-нибудь?? Сомневаюсь...
Шаблоны и стили. Пролог
Снова предварительный пост. Мы будем разбираться в задачах, с которыми мы будем сталкиваться при работе с шаблонами, и которые нам придется решать.
А что у нас за Яваскрипты в стандартном шаблоне???
Вот прежде чем начинать возиться со стилями компонентов и шаблона целиком будет полезно посмотреть, а что у нас в шаблоне за Яваскрипты подключаются..
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.