Вход Регистрация
Файл: 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($filePATH.'/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 $file0777);
        @
unlink($dir $file);
        @
chmod($dir.'small/'.$file0777);
        @
unlink($dir.'small/'.$file);
        @
chmod($dir.'medium/'.$file0777);
        @
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($realfile0strrpos($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'], falsefalse);

                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'] == || $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
Реклама