Вход Регистрация
Файл: InstantSocial/uploud/components/users/model.php
Строк: 704
<?php
/******************************************************************************/
//                                                                            //
//                             InstantCMS v1.9                                //
//                        http://www.instantcms.ru/                           //
//                                                                            //
//                   written by InstantCMS Team, 2007-2011                    //
//                produced by InstantSoft, (www.instantsoft.ru)               //
//                                                                            //
//                        LICENSED BY GNU/GPL v2                              //
//                                                                            //
/******************************************************************************/

if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }

class 
cms_model_users{

    function 
__construct(){
        
$this->inDB = cmsDatabase::getInstance();
    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function install(){

        return 
true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */








/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function getCommentTarget($target, $target_id) {

        
$result = array();

        switch(
$target){

            case 
'userphoto': $photo = $this->inDB->get_fields('cms_user_photos', "id='{$target_id}'", 'user_id, title');
                              if (!
$photo) { return false; }
                              
$result['link']  = '/users/'.$photo['user_id'].'/photo'.$target_id.'.html';
                              
$result['title'] = $photo['title'];
                              break;

        }

        return (
$result ? $result : false);

    }
    
    
    
    
    
    
    
  
 

        
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * Возвращает кофигурацию компонента в виде массива
     * @param string $plugin
     * @return float
     */
    
public function loadUsersConfig($target, $user_id){
   
     
 
$inDB = cmsDatabase::getInstance();
 
$inCore = cmsCore::getInstance();
        
$config = array();

        if (isset(
$this->torg_configs[$target])) { return $this->torg_configs[$target]; }

        
$config_yaml = $inDB->get_field('cms_users_config', "id='{$user_id}' AND target='{$target}'", 'config');

        
$config = $inCore->yamlToArray($config_yaml);
    

        
$this->cacheUsersConfig($target, $config, $user_id);

        return 
$config;

    }
     
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * Сохраняет настройки компонента в базу
     * @param string $plugin_name
     * @param array $config
     * @return bool
     */
    
public function saveUsersConfig($target, $config, $user_id) {

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

        
//конвертируем массив настроек в YAML
        
$config_yaml   = $inCore->arrayToYaml($config);
$s = ($inDB->rows_count('cms_users_config', "id=$user_id") ? true:false);                    
if (
$s) {
        
//обновляем плагин в базе
        
$save  = "UPDATE cms_users_config
                          SET config='
{$config_yaml}'
                          WHERE target = '
{$target}' AND id='{$user_id}'";
} else if (!
$s){
$save= "INSERT INTO cms_users_config (id, config, target)
VALUES (
{$user_id}, '$config', '$target')";    
}

        
$inDB->query($save);

        
//настройки успешно сохранены
        
return true;

    }

    
/**
     * Кэширует конфигурацию компонента на время выполнения скрипта
     * @param string $component
     * @param array $config
     * @return boolean
     */
    
public function cacheUsersConfig($target, $config, $user_id){
       
$this->users_configs[$target] = $config;
        return 
true;
    }    
    
 
/* ==================================================================================================== */
/* ====================================Стена================================================================ */   
public function getWallTarget($target, $target_id) {

        
$result = array();

        switch(
$target){

            case 
'wall': $usr = $this->inDB->get_fields('cms_users', "id='{$target_id}'", 'nickname, login');
                              if (!
$usr) { return false; }
                              
$result['link']  = '/users/'.$usr['login'].'/'.$target_id.'.html';
                              
$result['title'] = $usr['nickname'];
                              break;

        }

        return (
$result ? $result : false);

    }
/* ==================================================================================================== */
/* ==================================================================================================== */
   //
   // этот метод вызывается компонентом comments при создании нового комментария
   //
   // метод должен вернуть 0 или 1
   //
   
public function getVisibility($target, $target_id) {

        
$is_hidden = 0;

        switch(
$target){

            case 
'userphoto':     $photo = $this->inDB->get_fields('cms_user_photos', "id='{$target_id}'", 'album_id, allow_who');
                                if(
$photo['allow_who'] != 'all') { $is_hidden = 1; }
                                
$album = $this->getPhotoAlbum('private', $photo['album_id']);
                                if(
$album['allow_who'] != 'all') { $is_hidden = 1; }
                                  break;

        }

        return 
$is_hidden;

    }
/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function getUser($user_id){

        
$sql = "SELECT                
                u.id as id,
                u.login,
                u.nickname,
                u.email,
                u.icq,
                u.is_deleted as is_deleted,
                u.regdate fregdate,
                u.birthdate as birthdate,
                u.status as status_text,
                DATE_FORMAT(u.status_date, '%d-%m-%Y %H:%i') as status_date,
                u.logdate as flogdate,
                u.rating as user_rating,
                p.city, p.description, p.showmail, p.showbirth, p.showicq,
                p.karma, p.imageurl, p.allow_who,
                p.gender as gender,    p.formsdata,            
                u.group_id,
                g.title as grp,
                g.alias as group_alias,
                o.user_id as status,
                b.user_id as banned,
                IFNULL(ui.login, '') as inv_login,
                IFNULL(ui.nickname, '') as inv_nickname
                FROM cms_users u
                INNER JOIN cms_user_profiles p ON p.user_id = u.id
                INNER JOIN cms_user_groups g ON g.id = u.group_id
                LEFT JOIN cms_online o ON o.user_id = u.id
                LEFT JOIN cms_banlist b ON b.user_id = u.id
                LEFT JOIN cms_users ui ON ui.id = u.invited_by
                WHERE u.is_locked = 0 AND u.id = '
$user_id'
                LIMIT 1"
;

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

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

        
$user = cmsCore::callEvent('GET_USER', $user);

        return 
$user;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function getUserShort($user_id = 0){
                
        
$inUser = cmsUser::getInstance();
                
        if (
$inUser->id == $user_id) { 
        
            
$user['id']         = $user_id;
            
$user['login']         = $inUser->login;
            
$user['nickname']     = $inUser->nickname;
        
        } else {
        
            
$user = $this->inDB->get_fields('cms_users', "id = '$user_id'", 'id, nickname, login');
        
        }
        
        if (!
$user){ return false; }

        return 
$user;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function getUserTotal($online = false){
        
        if (!
$online) {
            
$total = $this->inDB->rows_count('cms_users', 'is_locked=0 AND is_deleted=0');
        } else {
            
$total = $this->inDB->rows_count('cms_online o LEFT JOIN cms_users u ON  u.id = o.user_id', 'u.is_locked = 0 AND u.is_deleted = 0 GROUP BY o.user_id');
        }
        if (!
$total ){ return false; }

        return 
$total ;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function isNewFriends($user_id, $from_id=0){

        if (!
$from_id){
            
$sql = "SELECT 1 FROM cms_user_friends WHERE to_id = '$user_id' AND is_accepted = 0";
        } else {
            
$sql = "SELECT 1 FROM cms_user_friends WHERE to_id = '$user_id' AND from_id = '$from_id' AND is_accepted = 0";
        }

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

        return (bool)
$this->inDB->num_rows($result);
        
    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function getNewFriends($user_id){

        
$inCore  = cmsCore::getInstance();

        
$friends = array();

        
$sql = "SELECT f.*, u.nickname as sender, u.login as sender_login, p.imageurl as sender_img
                FROM cms_user_friends f
                INNER JOIN cms_users u ON f.from_id = u.id
                INNER JOIN cms_user_profiles p ON p.user_id = u.id
                WHERE f.to_id = '
$user_id' AND f.is_accepted = 0";

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

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

        while(
$friend = $this->inDB->fetch_assoc($result)){
            
$friend['sender_img'] = ($friend['sender_img']) ? '/images/users/avatars/small/'.$friend['sender_img'] : '/images/users/avatars/small/nopic.jpg';
            
$friends[] = $friend;
        }

        
$friends = cmsCore::callEvent('GET_NEW_FRIENDS', $friends);

        
ob_start();
    
        
$smarty = $inCore->initSmarty('components', 'com_users_newfriends.tpl');
    
        
$smarty->assign('friends', $friends);
    
        
$smarty->display('com_users_newfriends.tpl');
    
        return 
ob_get_clean();
        
    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function deleteUser($user_id, $is_delete = false){

        
cmsCore::callEvent('DELETE_USER', $user_id);

        if (
$user_id == 1) { return false; }

        if (
$is_delete) {

            
$avatar = $this->inDB->get_field('cms_user_profiles', "user_id = '$user_id'", 'imageurl');
            if (
$avatar && $avatar != 'nopic.jpg'){
                 @
unlink(PATH.'/images/users/avatars/'.$avatar);
                 @
unlink(PATH.'/images/users/avatars/small/'.$avatar);
            }

            
$this->inDB->query("DELETE FROM cms_users WHERE id = '$user_id' LIMIT 1");
            
$this->inDB->query("DELETE FROM cms_user_profiles WHERE user_id = '$user_id' LIMIT 1");
            
$this->inDB->query("DELETE FROM cms_user_wall WHERE user_id = '$user_id' AND usertype = 'user'");
            
        } else {
            
$this->inDB->query("UPDATE cms_users SET is_deleted = 1 WHERE id = '$user_id'");
        }
        
$this->inDB->query("DELETE FROM cms_user_friends WHERE to_id = '$user_id' OR from_id = '$user_id'");
        
$this->inDB->query("DELETE FROM cms_user_clubs WHERE user_id = '$user_id'");
        
$this->inDB->query("DELETE FROM cms_user_awards WHERE user_id = '$user_id'");
        
$this->inDB->query("DELETE FROM cms_subscribe WHERE user_id = '$user_id'");

        
cmsActions::removeUserLog($user_id);
        
    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function deleteUsers($id_list){

        foreach(
$id_list as $key=>$id){
            
$this->deleteUser($id);
        }

        return 
true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function deleteGroup($group_id){

        
cmsCore::callEvent('DELETE_USER_GROUP', $group_id);

        
$sql = "SELECT id FROM cms_users WHERE group_id = '$group_id'";

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

        if (
$this->inDB->num_rows($result)){
            while(
$user = $this->inDB->fetch_assoc($result)){
                
$this->deleteUser($user['id']);
            }
        }

        
$this->inDB->query("DELETE FROM cms_user_groups WHERE id = '$group_id'");

        return 
true;
        
    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function deleteGroups($id_list){

        foreach(
$id_list as $key=>$id){
            
$this->deleteGroup($id);
        }

        return 
true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function getPluginsOutput($user){

        
$inCore         = cmsCore::getInstance();

        
$plugins_list   = array();

        
$plugins        = $inCore->getEventPlugins('USER_PROFILE');

        foreach(
$plugins as $plugin_name){

            
$html   = '';

            
$plugin = $inCore->loadPlugin( $plugin_name );

            if (
$plugin!==false){                
                
$html = $plugin->execute('USER_PROFILE', $user);
            }

            if (
$html){

                
$p['name']      = $plugin_name;
                
$p['title']     = $plugin->info['tab'] ? $plugin->info['tab'] : $plugin->info['title'];
                
$p['html']      = $html;

                
$plugins_list[] = $p;

                
$inCore->unloadPlugin($plugin);

            }

        }

        return 
$plugins_list;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function addInvite($invite) {

        
$sql = "INSERT INTO cms_user_invites (code, owner_id, createdate, is_used, is_sended)
                VALUES ('
{$invite['code']}', '{$invite['owner_id']}', NOW(), 0, 0)";

        
$this->inDB->query($sql);

        return 
true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function giveInvites($count, $has_karma, $inv_period=false) {

        if (!
$inv_period) { $sql_period = 'DAY'; } else { $sql_period = $inv_period; }

        
$sql = "SELECT  u.id as id,
                        IFNULL((u.invdate < DATE_SUB(NOW(), INTERVAL 1 
{$sql_period})) OR u.invdate is NULL, 0) as is_time,
                        IFNULL(SUM(k.points), 0) as karma
                FROM cms_users u
                LEFT JOIN cms_user_karma k ON k.user_id = u.id
                WHERE is_deleted = 0
                GROUP BY u.id
                "
;

        
$res = $this->inDB->query($sql);

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

        
$given = 0;

        while(
$user = $this->inDB->fetch_assoc($res)){

            if (
$user['karma'] < $has_karma){ continue; }
            if (
$inv_period && !$user['is_time']){ continue; }

            for(
$c=1; $c<=$count; $c++){

                
$invite['code']     = md5($user['id'] .'$'. rand(10000,65535) . '$' . time() . '$' . $c);
                
$invite['owner_id'] = $user['id'];
                
                
$this->addInvite($invite);

                
$given++;

            }

            
$this->inDB->query("UPDATE cms_users SET invdate = NOW() WHERE id = '{$user['id']}'");

        }

        return 
$given;

    }

    public function 
giveInvitesCron() {

        
$inCore = cmsCore::getInstance();

        
$cfg = $inCore->loadComponentConfig('registration');

        if (!isset(
$cfg['reg_type'])) { $cfg['reg_type'] = 'open'; }
        if (!isset(
$cfg['inv_count'])) { $cfg['inv_count'] = 5; }
        if (!isset(
$cfg['inv_karma'])) { $cfg['inv_karma'] = 50; }
        if (!isset(
$cfg['inv_period'])) { $cfg['inv_period'] = 'WEEK'; }

        if (
$cfg['reg_type'] != 'invite') { return false; }

        
$this->giveInvites($cfg['inv_count'], $cfg['inv_karma'], $cfg['inv_period']);

        return 
true;

    }

    public function 
checkInvite($code) {

        if (!
preg_match('/^([a-z0-9]{32})$/i', $code)) { return false; }

        
$correct = $this->inDB->get_field('cms_user_invites', "code='{$code}' AND is_used = 0", 'id');

        return (bool)
$correct;

    }

    public function 
getInviteOwner($code) {

        if (!
preg_match('/^([a-z0-9]{32})$/i', $code)) { return false; }

        
$owner_id = $this->inDB->get_field('cms_user_invites', "code='{$code}' AND is_used = 0", 'owner_id');

        return 
$owner_id;

    }

    public function 
getInvite($owner_id) {

        
$invite = $this->inDB->get_fields('cms_user_invites', "owner_id='{$owner_id}' AND is_used = 0 AND is_sended=0", '*');

        return 
$invite;

    }

    public function 
getUserInvitesCount($owner_id) {

        
$count = $this->inDB->rows_count('cms_user_invites', "owner_id='{$owner_id}' AND is_used = 0 AND is_sended = 0");

        return 
$count;

    }

    public function 
sendInvite($owner_id, $email) {

        
$inCore = cmsCore::getInstance();
        
$inConf = cmsConfig::getInstance();

        global 
$_LANG;

        
$user = $this->getUserShort($owner_id);

        if (!
$user) { return false; }

        
$invite = $this->getInvite($owner_id);

        if (!
$invite) { return false; }

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

        
$letter = str_replace('{sitename}', $inConf->sitename, $letter);
        
$letter = str_replace('{site_url}', HOST, $letter);
        
$letter = str_replace('{invite_code}', $invite['code'], $letter);
        
$letter = str_replace('{username}', $user['nickname'], $letter);

        
$inCore->mailText($email, sprintf($_LANG['INVITE_SUBJECT'], $user['nickname']), $letter);

        
$this->inDB->query("UPDATE cms_user_invites SET is_sended=1 WHERE id='{$invite['id']}'");

        return 
true;

    }

    public function 
closeInvite($code){

        if (!
preg_match('/^([a-z0-9]{32})$/i', $code)) { return false; }

        
$this->inDB->query("UPDATE cms_user_invites SET is_used = 1 WHERE code='{$code}'");

        return 
true;
       
    }

    public function 
deleteInvites() {

        
$this->inDB->query('DELETE FROM cms_user_invites WHERE is_used = 0');

        return 
true;

    }

    public function 
clearInvites() {

        
$this->inDB->query('DELETE FROM cms_user_invites WHERE is_used = 1 AND is_sended = 1');

        return 
true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function addPhotoAlbum($album) {

        
$inCore     = cmsCore::getInstance();

        
$album      = cmsCore::callEvent('ADD_USER_PHOTO_ALBUM', $album);

        if (!
$album['allow_who']) { $album['allow_who'] = 'all'; }

        
$sql = "INSERT INTO cms_user_albums (user_id, title, pubdate, allow_who, description)
                VALUES (
{$album['user_id']}, '{$album['title']}', NOW(), '{$album['allow_who']}', '{$album['description']}')";

        
$this->inDB->query($sql);

        
$album_id = $this->inDB->get_last_id('cms_user_albums');

        return 
$album_id;
        
    }
    
    public function 
updatePhotoAlbum($album) {

        if (!
$album['allow_who']) { $album['allow_who'] = 'all'; }

        
$sql = "UPDATE cms_user_albums
                        SET title = '
{$album['title']}',
                            description = '
{$album['description']}',
                            allow_who = '
{$album['allow_who']}'
                        WHERE id = '
{$album['id']}'
                        LIMIT 1"
;

        
$this->inDB->query($sql);

        return 
true;
        
    }

    public function 
getPhotoAlbum($type, $id) {

        
$album = array();

        if (
$type == 'private'){
            
$album = $this->inDB->get_fields('cms_user_albums', "id='{$id}'", 'id, user_id, title, allow_who, description');
        }

        if (
$type == 'public'){
            
$album = $this->inDB->get_fields('cms_photo_albums', "id='{$id}'", 'id, user_id, title');
        }

        return 
$album ? $album : false;

    }

    public function 
getPhoto($id) {

        
$photo = $this->inDB->get_fields('cms_user_photos', "id='{$id}'", 'id, user_id, title');

        return 
$photo ? $photo : false;

    }

    public function 
getAlbumPhotos($user_id, $album_type, $album_id, $is_friends=false) {

        
$inUser     = cmsUser::getInstance();
        
$is_my      = $inUser->id == $user_id;
        
$is_friends = (int)$is_friends;
        
$filter     = '';
        
$photos     = array();

        if (
$album_type == 'private'){

            if (!
$is_my){
                
$filter = "AND (
                                    allow_who='all'
                                    OR
                                    (allow_who='registered' AND (
{$inUser->id}>0))
                                    OR
                                    (allow_who='friends' AND (
{$is_friends}=1))
                                )"
;
            }

            
//Получаем личные фотографии
            
$private_sql = "SELECT id, pubdate, imageurl as file, hits, title
                            FROM cms_user_photos
                            WHERE user_id = '
{$user_id}' AND album_id = '{$album_id}' $filter
                            ORDER BY id DESC"
;

            
$private_res = $this->inDB->query($private_sql);

            if (
$this->inDB->num_rows($private_res)) {
                while(
$photo = $this->inDB->fetch_assoc($private_res)){
                    
$photo['file']  = '/images/users/photos/small/'.$photo['file'];
                    
$photo['url']   = '/users/'.$user_id.'/photo'.$photo['id'].'.html';
                    
$photo['fpubdate'] = cmsCore::dateFormat($photo['pubdate']);
                    
$photos[]       = $photo;
                }
            }

        }

        if (
$album_type == 'public'){

            
//Получаем фотографии из галереи
            
$public_sql = "SELECT id, pubdate, file, hits, title
                            FROM cms_photo_files
                            WHERE user_id = '
{$user_id}' AND album_id = '{$album_id}' AND published = 1";

            
$public_res = $this->inDB->query($public_sql);

            if (
$this->inDB->num_rows($public_res)) {
                while(
$photo = $this->inDB->fetch_assoc($public_res)){
                    
$photo['file']  = '/images/photos/small/'.$photo['file'];
                    
$photo['url']   = '/photos/photo'.$photo['id'].'.html';
                    
$photo['fpubdate'] = cmsCore::dateFormat($photo['pubdate']);
                    
$photos[]       = $photo;
                }
            }

        }

        return 
$photos;

    }

    public function 
getPhotoAlbums($user_id, $is_friends=false, $only_private=false) {

        
$inUser     = cmsUser::getInstance();
        
$is_my      = $inUser->id == $user_id || $inUser->is_admin;
        
$is_friends = (int)$is_friends;
        
$filter     = '';
        
$albums     = array();
        
        if (!
$is_my){
            
$filter = "AND (
                                a.allow_who='all'
                                OR
                                (a.allow_who='registered' AND (
{$inUser->id}>0))
                                OR
                                (a.allow_who='friends' AND (
{$is_friends}=1))
                            )"
;
        }

        
$sql = "SELECT a.id as id,
                       a.title as title,
                       a.pubdate as pubdate,
                       a.allow_who as allow_who,
                       'private' as type,
                       p.imageurl as imageurl,
                       COUNT(p.id) as photos_count
                FROM cms_user_photos p
                INNER JOIN cms_user_albums a ON a.id = p.album_id
                WHERE p.user_id='
{$user_id}' {$filter}
                GROUP BY p.album_id"
;

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

        if (
$this->inDB->num_rows($result)) { 
            while(
$album = $this->inDB->fetch_assoc($result)){
                
$album['imageurl'] = "/images/users/photos/small/{$album['imageurl']}";
                
$album['pubdate']  = cmsCore::dateFormat($album['pubdate']);
                
$albums[] = $album;
            }
        }

        if (
$only_private){
            
$albums = cmsCore::callEvent('GET_USER_ALBUMS', $albums);
            return 
$albums;
        }

        
$sql = "SELECT  a.id as id,
                        a.title as title,
                        a.pubdate as pubdate,
                        'all' as allow_who,
                        'public' as type,
                        f.file as imageurl,
                        COUNT(f.id) as photos_count
                FROM cms_photo_files f
                LEFT JOIN cms_photo_albums a ON a.id = f.album_id
                WHERE f.user_id='
{$user_id}' AND f.published = 1
                GROUP BY f.album_id"
;

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

        if (
$this->inDB->num_rows($result)) {
            while(
$album = $this->inDB->fetch_assoc($result)){
                
$album['imageurl'] = "/images/photos/small/{$album['imageurl']}";
                
$album['pubdate']  = cmsCore::dateFormat($album['pubdate']);
                
$albums[] = $album;
            }
        }

        
$albums = cmsCore::callEvent('GET_USER_ALBUMS', $albums);

        return 
$albums;

    }


    public function 
addUploadedPhoto($user_id, $photo) {

        
$photo['filename'] = iconv('utf-8', 'cp1251', $photo['filename']);

        
$sql = "INSERT INTO cms_user_photos (user_id, album_id, pubdate, title, description, allow_who, hits, imageurl)
                VALUES('
{$user_id}', '0', NOW(), '{$photo['filename']}', '', 'none', 0, '{$photo['imageurl']}')";

        
$this->inDB->query($sql);

        return 
true;

    }

    public function 
getUploadedPhotos($user_id) {

        
$photos = array();

        if (
cmsUser::sessionGet('photos_list')){
            
$sess_ids = 'id IN ('.rtrim(implode(',', cmsUser::sessionGet('photos_list')), ',').')';
        } else {
            
$sess_ids = '1=0';
        }

        
$sql = "SELECT id, user_id, album_id, title, description, allow_who, imageurl
                FROM cms_user_photos
                WHERE user_id='
{$user_id}' AND (album_id = 0 OR ({$sess_ids}))";

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

        if (
$this->inDB->num_rows($result)) {
            while(
$photo = $this->inDB->fetch_assoc($result)){
                
$photos[$photo['id']] = $photo;
            }
        }

        
$photos = cmsCore::callEvent('GET_USER_UPLOADED_PHOTOS', $photos);

        return 
$photos ? $photos : false;

    }

    public function 
deletePhoto($photo_id) {

        
$inCore = cmsCore::getInstance();

        
$inCore->loadLib('tags');

        
$sql = "SELECT imageurl FROM cms_user_photos WHERE id = '{$photo_id}'";
        
$result = $this->inDB->query($sql);
        
        if (
$this->inDB->num_rows($result)){
            
$photo = $this->inDB->fetch_assoc($result);
            @
unlink(PATH.'/images/users/photos/'.$photo['imageurl']);
            @
unlink(PATH.'/images/users/photos/small/'.$photo['imageurl']);
            @
unlink(PATH.'/images/users/photos/medium/'.$photo['imageurl']);
            
$this->inDB->query("DELETE FROM cms_user_photos WHERE id = $photo_id") ;
            
$inCore->deleteComments('userphoto', $photo_id);
            
cmsActions::removeObjectLog('add_user_photo', $photo_id);
            
cmsClearTags('userphoto', $photo_id);
        }

        return 
true;

    }

    public function 
deletePhotoAlbum($user_id, $album_id) {

        
$inUser = cmsUser::getInstance();

        
$photos = $this->getAlbumPhotos($user_id, 'private', $album_id);

        if (
$photos){
            foreach(
$photos as $photo){
                
$this->deletePhoto($photo['id']);
            }
        }

        
cmsActions::removeTargetLog('add_user_photo_multi', $album_id);

        
$this->inDB->query("DELETE FROM cms_user_albums WHERE id = '$album_id'") ;

        return 
true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function deleteInactiveUsers() {

        
$inCore = cmsCore::getInstance();

        
$inCore->loadClass('actions');

        
$cfg    = $inCore->loadComponentConfig('users');

        
$month  = $cfg['deltime'] ? $cfg['deltime'] : 6;

        
$users_list = $this->inDB->get_table('cms_users', "DATE_SUB(NOW(), INTERVAL $month MONTH) > logdate", 'id');

        foreach(
$users_list as $usr){
            
$this->deleteUser($usr['id'], true);
        }

        return 
true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function deleteOldNotification() {

        
$this->inDB->query("DELETE FROM cms_user_msg WHERE from_id IN (-1, -2) AND is_new =0 AND DATE_SUB(NOW(), INTERVAL 1 MONTH) > senddate");

        return 
true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function clearUploadedPhotos() {

        
$photos = array();

        
$sql = "SELECT id
                FROM cms_user_photos
                WHERE album_id = 0 OR allow_who = 'none'
                ORDER BY id ASC"
;

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

        if (
$this->inDB->num_rows($result)) {
            while(
$photo = $this->inDB->fetch_assoc($result)){
                
$this->deletePhoto($photo['id']);
            }
        }

        return 
true;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */

    
public function sendNotificationByEmail($to_id=0, $from_id=0, $msg_id=0) {

        if(!
$from_id || !$to_id || !$msg_id) { return false; }

        
$inUser = cmsUser::getInstance();
        
$inCore = cmsCore::getInstance();
        
$inConf = cmsConfig::getInstance();

        global 
$_LANG;

        
//проверяем подписку на уведомления
        
$needmail = $this->inDB->get_field('cms_user_profiles', "user_id='{$to_id}'", 'email_newmsg');

        
//если подписан и не онлайн, отправляем уведомление на email
        
if (!$inUser->isOnline($to_id) && $needmail){

            
$postdate   = date('d/m/Y H:i:s');
            
$to_email   = $this->inDB->get_field('cms_users', "id='{$to_id}'", 'email');
            
$from_nick  = $inUser->nickname;
            
$answerlink = HOST.'/users/'.$from_id.'/reply'.$msg_id.'.html';

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

            
$letter= str_replace('{sitename}', $inConf->sitename, $letter);
            
$letter= str_replace('{answerlink}', $answerlink, $letter);
            
$letter= str_replace('{date}', $postdate, $letter);
            
$letter= str_replace('{from}', $from_nick, $letter);
            
$inCore->mailText($to_email, $_LANG['YOU_HAVE_NEW_MESS'].'! - '.$inConf->sitename, $letter);
            
            return 
true;
        }

        return 
false;

    }

/* ==================================================================================================== */
/* ==================================================================================================== */


}
Онлайн: 3
Реклама