Вход Регистрация
Файл: InstantSocial/uploud/components/photos/model.php
Строк: 294
<?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_photos{

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

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

    
public function install(){

        return 
true;

    }

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

    
public function getCommentTarget($target, $target_id) {

        
$result = array();

        switch(
$target){

            case 
'palbum': $album           = $this->inDB->get_fields('cms_photo_albums', "id='{$target_id}'", 'title');
                           if (!
$album) { return false; }
                           
$result['link']  = '/photos/'.$target_id;
                           
$result['title'] = $album['title'];
                           break;

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

        }

        return (
$result ? $result : false);

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

        
$is_hidden = 0;

        switch(
$target){

            case 
'photo':      $photo = $this->getPhoto($target_id);
                            
$album = $this->getAlbum($photo['album_id']);
                            if(
strstr($album['NSDiffer'],'club') && $album['published']) {
                                
$clubtype = $this->inDB->get_field('cms_clubs', "id='{$album['user_id']}'", 'clubtype');
                                if(
$clubtype == 'private') { $is_hidden = 1; }
                            }
                               break;

        }

        return 
$is_hidden;

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

    
public function deletePhoto($id, $file=''){
        
        
$inCore = cmsCore::getInstance();
        
$inCore->loadLib('tags');

        
cmsCore::callEvent('DELETE_PHOTO', $id);

        if (!
$file){
            
$file = $this->inDB->get_field('cms_photo_files', "id='{$id}'", 'file');
        }
        if (!
$file){ return false; }

        
$this->deletePhotoFile($file, PATH.'/images/photos/');

        
$inCore->deleteComments('photo', $id);
        
$inCore->deleteRatings('photo', $id);

        
cmsActions::removeObjectLog('add_photo', $id);

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

        
cmsClearTags('photo', $id);
        
    }

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

    
public function deletePhotos($id_list){

        
cmsCore::callEvent('DELETE_PHOTOS', $id_list);

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

        return 
true;
        
    }

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

    
public function updatePhoto($id, $photo){
        
$inCore     = cmsCore::getInstance();
        
$inUser     = cmsUser::getInstance();

        
$photo      = cmsCore::callEvent('UPDATE_PHOTO', $photo);

        
$sql = "UPDATE cms_photo_files
                SET album_id = '
{$photo['album_id']}',
                    title='
{$photo['title']}',
                    file='
{$photo['filename']}',
                    description='
{$photo['description']}',
                    published='
{$photo['published']}',
                    showdate='
{$photo['showdate']}'
                WHERE id = '
$id'
                LIMIT 1"
;
        
$this->inDB->query($sql);

        
cmsInsertTags($photo['tags'], 'photo', $id);
    }

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

    
public function addPhoto($photo, $differ = '', $user_id = false){

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

        
$photo      = cmsCore::callEvent('ADD_PHOTO', $photo);

        
$user_id    = $user_id ? $user_id : $inUser->id;
        
        if (!
$user_id) { return false; }

        
$sql = "INSERT INTO cms_photo_files (album_id, title, description, pubdate, file, published, showdate, comments, user_id, owner)
                VALUES ('
{$photo['album_id']}', '{$photo['title']}', '{$photo['description']}', NOW(),
                        '
{$photo['filename']}', '{$photo['published']}', '{$photo['showdate']}', 1, '{$user_id}', '{$differ}')";
        
        
$this->inDB->query($sql);

        
$photo_id = $this->inDB->get_last_id('cms_photo_files');
        
        
cmsInsertTags($photo['tags'], 'photo', $photo_id);

        
cmsUser::checkAwards($user_id);

        
$album_title = $this->inDB->get_field('cms_photo_albums', "id='{$photo['album_id']}'", 'title');
        
        if (
$photo['published']) {
            
$description = $photo['is_hidden'] ? '' : '<a href="/photos/photo'.$photo_id.'.html" class="act_photo"><img border="0" src="/images/photos/small/'.$photo['filename'].'" /></a>';

            
cmsActions::log('add_photo', array(
                  
'object' => $photo['title'],
                  
'object_url' => '/photos/photo'.$photo_id.'.html',
                  
'object_id' => $photo_id,
                  
'target' => $album_title,
                  
'target_url' => '/photos/'.$photo['album_id'],
                  
'description' => $description
            
));
        }

        return 
$photo_id;
    }

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

    
public function randPhoto($album_id, $is_sub=false){

        
$catsql = 'AND f.album_id = '.$album_id;

        if (
$is_sub && $album_id != '0') {
            
$rootcat = $this->inDB->get_fields('cms_photo_albums', 'id='.$album_id, 'NSLeft, NSRight, NSDiffer');
            if (
$rootcat['NSDiffer']){
            
$catsql = " AND a.NSLeft >= {$rootcat['NSLeft']} AND a.NSRight <= {$rootcat['NSRight']} AND a.NSDiffer = '{$rootcat['NSDiffer']}'";
            } else {
            
$catsql = " AND a.NSLeft >= {$rootcat['NSLeft']} AND a.NSRight <= {$rootcat['NSRight']} AND a.NSDiffer = ''";
            }
        }

        
$sql = "SELECT f.file
                FROM cms_photo_files f, cms_photo_albums a
                WHERE f.published = 1 AND f.album_id = a.id "
.$catsql."
                ORDER BY RAND()
                LIMIT 1"
;
                    
        
$result = $this->inDB->query($sql);

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

        return 
$photo_url['file'];
    }

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

    
public function deleteAlbum($id, $differ = ''){
        
        
$inCore = cmsCore::getInstance();

        
cmsCore::callEvent('DELETE_ALBUM', $id);

        
$album  = $this->inDB->get_fields('cms_photo_albums', "id = '$id'", 'NSDiffer, NSLeft, NSRight');

        if (!
$album) { return false; }

        
$sql    = "SELECT f.id as id, f.file as file
                   FROM cms_photo_files f, cms_photo_albums a 
                   WHERE f.album_id = a.id AND a.NSDiffer = '
{$album['NSDiffer']}'
                         AND a.NSLeft >= 
{$album['NSLeft']} AND a.NSRight <= {$album['NSRight']}";
        
$result = $this->inDB->query($sql);

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

        
$ns = $inCore->nestedSetsInit('cms_photo_albums');

        return 
$ns->DeleteNode($id, $differ);
        
    }

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

    
public function updateAlbum($id, $album){

        
$old = $this->inDB->get_fields('cms_photo_albums', "id='$id'", '*');
        if(!
$old) { return false; }

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

        if(
$album['parent_id'] != $old['parent_id']){
            
$inCore = cmsCore::getInstance();
            
$ns = $inCore->nestedSetsInit('cms_photo_albums');
            
$ns->MoveNode($id, $album['parent_id']);
        }

        
$sql = "UPDATE cms_photo_albums
                SET title='
{$album['title']}',
                    description='
{$album['description']}',
                    published='
{$album['published']}',
                    showdate='
{$album['showdate']}',
                    iconurl='
{$album['iconurl']}',
                    orderby='
{$album['orderby']}',
                    orderto='
{$album['orderto']}',
                    public='
{$album['public']}',
                    perpage='
{$album['perpage']}',
                    cssprefix='
{$album['cssprefix']}',
                    thumb1='
{$album['thumb1']}',
                    thumb2='
{$album['thumb2']}',
                    thumbsqr='
{$album['thumbsqr']}',
                    showtype='
{$album['showtype']}',
                    nav='
{$album['nav']}',
                    uplimit='
{$album['uplimit']}',
                    maxcols='
{$album['maxcols']}',
                    orderform='
{$album['orderform']}',
                    showtags='
{$album['showtags']}',
                    bbcode='
{$album['bbcode']}',
                    is_comments='
{$album['is_comments']}'
                WHERE id = '
$id'";
        
        
$this->inDB->query($sql);
    }

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

    
public function getAlbumThumbsData($album_id){
        return 
$this->inDB->get_fields('cms_photo_albums', "id = '{$album_id}'", 'thumb1, thumb2, thumbsqr');
    }

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

    
public function addAlbum($album){
        
$inCore = cmsCore::getInstance();

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

        
$ns = $inCore->nestedSetsInit('cms_photo_albums');
        
$id = $ns->AddNode($album['parent_id']);

        if (
$id){
            
$sql = "UPDATE cms_photo_albums
                    SET title='
{$album['title']}',
                        description='
{$album['description']}',
                        published='
{$album['published']}',
                        showdate='
{$album['showdate']}',
                        iconurl='',
                        pubdate=NOW(),
                        orderby='
{$album['orderby']}',
                        orderto='
{$album['orderto']}',
                        public='
{$album['public']}',
                        perpage='
{$album['perpage']}',
                        cssprefix='
{$album['cssprefix']}',
                        thumb1='
{$album['thumb1']}',
                        thumb2='
{$album['thumb2']}',
                        thumbsqr='
{$album['thumbsqr']}',
                        showtype='
{$album['showtype']}',
                        nav='
{$album['nav']}',
                        uplimit='
{$album['uplimit']}',
                        maxcols='
{$album['maxcols']}',
                        orderform='
{$album['orderform']}',
                        showtags='
{$album['showtags']}',
                        bbcode='
{$album['bbcode']}',
                        is_comments='
{$album['is_comments']}'
                    WHERE id = '
$id'";
            
$this->inDB->query($sql);
        }

        return 
$id;
    }

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

    
public function getSubAlbums($parent_id, $left_key, $right_key, $albums_orderby, $albums_orderto) {

        
$subcats    = array();

        
$differ     = $this->inDB->get_field('cms_photo_albums', "id='{$parent_id}'", 'NSDiffer');

        if (!
$differ) { $differ = ''; }

        
$sql = "SELECT a.*, IFNULL(COUNT(f.id), 0) as content_count
                FROM cms_photo_albums a
                LEFT JOIN cms_photo_files f ON f.album_id = a.id AND f.published = 1
                WHERE (a.parent_id=
$parent_id) AND a.published = 1 AND a.NSDiffer = '{$differ}'
                GROUP BY a.id
                ORDER BY 
$albums_orderby $albums_orderto";

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

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

        while(
$subcat = $this->inDB->fetch_assoc($result)){
            
$subcats[] = $subcat;
        }

        
$subcats = cmsCore::callEvent('GET_SUBALBUMS', $subcats);

        return 
$subcats;

    }

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

    
public function getAlbum($id) {

        
$album = $this->inDB->get_fields('cms_photo_albums', "id = '$id'", '*');

        if (!
$album) { cmsCore::error404(); }

        return 
$album;

    }

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

    
public function getPhoto($id) {

        
$photo = $this->inDB->get_fields('cms_photo_files', "id = '$id'", '*');

        return 
$photo;

    }

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

    
public function loadedByUser24h($user_id, $album_id) {

        
$loaded = $this->inDB->rows_count('cms_photo_files', "user_id = '$user_id' AND album_id = '$album_id' AND pubdate >= DATE_SUB(NOW(), INTERVAL 1 DAY)");

        return 
$loaded;

    }

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

    
public function deletePhotoFile($file = false, $dir = false){
        
        if (!(
$file && $dir)) { return false; }
        
        @
chmod($dir . $file, 0777);
        @
unlink($dir . $file);
        @
chmod($dir.'small/'.$file, 0777);
        @
unlink($dir.'small/'.$file);
        @
chmod($dir.'medium/'.$file, 0777);
        @
unlink($dir.'medium/'.$file);

        return 
true;

    }

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

    
public function uploadPhoto($album, $photo_file = false) {
        
        if (!
$album) { return false; }

        
$inCore = cmsCore::getInstance();

        if (
$_FILES['Filedata']['name']){
            
            
$cfg = $inCore->loadComponentConfig('photos');
            if (!isset(
$cfg['watermark'])) { $cfg['watermark'] = 0; }

            
$inCore->includeGraphics();
            
            
$file = array();

            
$uploaddir                 = PATH.'/images/photos/';
            
$realfile                 = $this->inDB->escape_string($_FILES['Filedata']['name']);
        
            
$path_parts             = pathinfo($realfile);
            
$ext                    = strtolower($path_parts['extension']);
            
            
// убираем расширение файла вместе с точкой
            
$realfile = substr($realfile, 0, strrpos($realfile, '.'));
        
            if (
$ext != 'jpg' && $ext != 'jpeg' && $ext != 'gif' && $ext != 'png' && $ext != 'bmp') { return false; }
        
            
$lid                     = $this->inDB->get_fields('cms_photo_files', 'id>0', 'id', 'id DESC');
            
$lastid                 = $lid['id']+1;    
            
$filename                 = md5($lastid.$realfile).'.jpg';                    
        
            
$uploadfile                = $uploaddir . $realfile;
            
$uploadphoto             = $uploaddir . $filename;
            
$uploadthumb['small']     = $uploaddir . 'small/' . $filename;
            
$uploadthumb['medium']    = $uploaddir . 'medium/' . $filename;
        
            
$source                    = $_FILES['Filedata']['tmp_name'];
            
$errorCode                = $_FILES['Filedata']['error'];
        
            if (
$inCore->moveUploadedFile($source, $uploadphoto, $errorCode)) {
                
                
// если уже есть фото, то удаляем его
                
$this->deletePhotoFile($photo_file, $uploaddir);

                @
img_resize($uploadphoto, $uploadthumb['small'], $album['thumb1'], $album['thumb1'], $album['thumbsqr']);
                @
img_resize($uploadphoto, $uploadthumb['medium'], $album['thumb2'], $album['thumb2'], false, false);

                if (
$cfg['watermark']) { @img_add_watermark($uploadphoto); @img_add_watermark($uploadthumb['medium']); }
                if (@!
$cfg['saveorig']) { @unlink($uploadphoto);}

                
$file['filename'] = $filename;
                
                
$file['realfile'] = $inCore->inRequest('upload') ? $realfile : iconv('utf-8', 'cp1251', $realfile);
        
        
            } else {
        
                return 
false;
                
            }


        } else {
        
            return 
false;
            
        }

        return 
$file;

    }

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

    
public function checkAccess($album, $user_id){
        
        
$inCore = cmsCore::getInstance();
        
$inUser = cmsUser::getInstance();
        
        
$user_id    = $user_id ? $user_id : $inUser->id;
        
        if (!
$user_id) { return false; }

        
$user_karma = cmsUser::getKarma($user_id);
        
        global 
$_LANG;
        
        if (
$album['NSDiffer']=='') { 

            
$can_add    = $user_id; 
            
$min_karma  = false; 

        } elseif (
strstr($album['NSDiffer'],'club')){
            
            
$club =$this->inDB->get_fields('cms_clubs', 'id='.$album['user_id'], '*');

            
$can_add   = clubUserIsMember($club['id'], $user_id) || clubUserIsAdmin($club['id'], $user_id) || $inCore->userIsAdmin($user_id);
            
$min_karma = $club['photo_min_karma'];

        }
        
        if (
$album['public'] && $can_add){
            
            if (
$this->loadedByUser24h($user_id, $album['id'])<$album['uplimit'] || $album['uplimit'] == 0 || $inCore->userIsAdmin($user_id)){
                
                if (
$min_karma === false || $user_karma>=$min_karma || clubUserIsRole($club['id'], $user_id, 'moderator')){
                    
                    return 
true;
                    
                } else {
                    
                    
cmsCore::addSessionMessage('<p><strong>'.$_LANG['NEED_KARMA_TEXT'].'</strong></p><p>'.$_LANG['NEEDED'].' '.$min_karma.', '.$_LANG['HAVE_ONLY'].' '.$user_karma.'.</p><p>'.$_LANG['WANT_SEE'].' <a href="/users/'.$user_id.'/karma.html">'.$_LANG['HISTORY_YOUR_KARMA'].'</a>?</p>', 'error');
                
                    return 
false;
                    
                }
                
            } else {

                
cmsCore::addSessionMessage('<div><strong>'.$_LANG['MAX_UPLOAD_IN_DAY'].'</strong> '.$_LANG['CAN_UPLOAD_TOMORROW'].'</div>', 'error');
                return 
false;
            
            }
            
        } else {

            return 
false;

        }

    }

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

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