Вход Регистрация
Файл: sys/inc/classes/class.Diary.php
Строк: 330
<?php 

class Diary
{
    
/**
     *
     * @param int $num
     * @param string $one
     * @param string $two
     * @param string $more
     * @return string
     */
    
static function number($num$one$two$more)
    {
        
$num = (int)$num;
        
$l2 substr($numis_strlen($num) - 22);

        if (
$l2 >= && $l2 <= 20)
            return 
$more;
        
$l substr($numis_strlen($num) - 11);
        switch (
$l) {
            case 
1:
                return 
$one;
                break;
            case 
2:
                return 
$two;
                break;
            case 
3:
                return 
$two;
                break;
            case 
4:
                return 
$two;
                break;
            default:
                return 
$more;
                break;
        }
    }
    
    
/**
     * читабельное представление времени с учетом часового пояса пользователя
     * @global user $user
     * @param int $time Время в формате timestamp
     * @param boolean $adaptive Адаптивное представлени (вместо полной даты использовать "сегодня", "вчера")
     * @return string
     */
    
public static function vremja($time$adaptive true) {
        if (!
$time) {
            
$time time();
        }
        
        
$realTime time();
        
        if (
$time $realTime) {
            
$time -= $realTime;
            
$mes 0;
            
$day 0;
            
$hour 0;
            
$min 0;
            
$sec 0;
            if (
$time) {
                
$sec $time 60;
            }
            if (
$time >= 60) {
                
$min floor($time 60 60);
            }
            if (
$time >= 3600) {
                
$hour floor($time 3600 24);
            }
            if (
$time >= 86400) {
                
$day floor($time 86400 30);
            }
            if (
$time >= 2592000) {
                
$mes floor($time 2592000 12);
            }

            if (
$mes) {
                return 
$mes ' месяц' self::number($mes'''а''ев') . ($day ? (', ' $day ' ' self::number($day'день''дня''дней') . ($hour ' и ' $hour ' час' self::number($hour'''а''ов') : '')) : '');
            }
            if (
$day) {
                return 
$day ' ' self::number($day'день''дня''дней') . ($hour ? (', ' $hour ' час' self::number($hour'''а''ов') . ($min ' и ' $min ' минут' self::number($min'а''ы''') : '')) : '');
            }
            if (
$hour) {
                return 
$hour ' час' self::number($hour'''а''ов') . ($min ? (', ' $min ' минут' self::number($min'а''ы''') . ($sec ' и ' $sec ' секунд' self::number($sec'а''ы''') : '')) : '');
            }
            if (
$min) {
                return 
$min ' минут' self::number($min'а''ы''') . ($sec ' и ' $sec ' секунд' self::number($sec'а''ы''') : '');
            }
            return 
$sec ' секунд' self::number($sec'а''ы''');
        } else {
            global 
$user;

            if (
$user['set_timesdvig']) {
                
$time_shift $user['set_timesdvig'];
            } else {
                
$time_shift 0;
            }
            
$time $time $time_shift 3600;
            
$vremja date('j M'$time);
            
$time_p[0] = date('j n Y'$time);
            
$time_p[1] = date('H:i'$time);
            
            if (
$adaptive && $time_p[0] == date('j n Y'$realTime $time_shift 60 60)) {
                
$vremja date('H:i'$time);
            }
            
            if (
$adaptive && $time_p[0] == date('j n Y'$realTime 60 60 * (24 $time_shift))) {
                
$vremja __("Вчера");
            }
            
            
$vremja str_replace('Jan'__('Янв'), $vremja);
            
$vremja str_replace('Feb'__('Фев'), $vremja);
            
$vremja str_replace('Mar'__('Мар'), $vremja);
            
$vremja str_replace('May'__('Мая'), $vremja);
            
$vremja str_replace('Apr'__('Апр'), $vremja);
            
$vremja str_replace('Jun'__('Июн'), $vremja);
            
$vremja str_replace('Jul'__('Июл'), $vremja);
            
$vremja str_replace('Aug'__('Авг'), $vremja);
            
$vremja str_replace('Sep'__('Сен'), $vremja);
            
$vremja str_replace('Oct'__('Окт'), $vremja);
            
$vremja str_replace('Nov'__('Ноя'), $vremja);
            
$vremja str_replace('Dec'__('Дек'), $vremja);
            return 
$vremja;
        }
    }
    
    
/**
    * 
    * @param undefined $data
    * @param undefined $type
    * 
    * @return
    */
    
protected function get_data_type($data$type 'return') {
        if (isset(
$_GET['type']) && $_GET['type'] == 'json') {
            die(
json_encode($data));
        } else {
            return 
$data;
        }
    }
    
    
/**
    * Like & Dislike
    * @param undefined $like
    * @param undefined $diary_id
    * @param undefined $user_id
    * 
    * @return array()
    */
    
public function get_like($diary_id$user_id$like) {
        
$user_id = (int) $user_id;
        
$diary_id = (int) $diary_id;
        
$like = ($like == 1);
        
$like_count = ($like == ? -1);
        
        
$diary mysql_fetch_assoc(mysql_query("SELECT n.*, 
                                                  (SELECT COUNT(*) FROM notes_like AS l WHERE l.id_notes = n.id AND l.id_user = '
$user_id') AS 'like'
                                                FROM notes AS n
                                                WHERE n.id = '
$diary_id
                                                LIMIT 1"
));
        
        
$err = array();
        
        if (
$diary['id']) {
            if (
$diary['like'] == 0) {
                
mysql_query("INSERT INTO `notes_like` (`id_notes`, `id_user`, `like`) VALUES ('$diary[id]', '$user_id', '$like')");
                      
mysql_query("UPDATE `notes` SET `count` = '" . ($diary['count'] + $like_count) . "' WHERE `id` = '$diary[id]' LIMIT 1");
            } else {
                
$err[] = 'Вы уже голосовали';
            }
        } else {
            
$err[] = 'Дневник не существует';
        }
        
        if (
$err) {
            return 
$this->get_data_type(array(
                
'error' => $err,
            ));
        }
        
        return 
$this->get_data_type(array(
            
'success' => ($like == '1' 'like' 'dislike'),
            
'like' => $like,
        ));
    } 
    
    
/**
    * Отправка комментария
    */
    
public function get_comment($diary_id$user_id$msg$reply) {
        
$user_id = (int) $user_id;
        
$diary_id = (int) $diary_id;
        
$reply = (int) $reply;
        
$user user::get_user($user_id);
        
$time time();
        
        
$diary mysql_fetch_assoc(mysql_query("SELECT n.*
                                                FROM notes AS n
                                                WHERE n.id = '
$diary_id
                                                LIMIT 1"
));
        
        
$is_err $this->is_strlen($msg22048);
        
        if (
$is_err !== true) {
            
$err[] = 'Текст сообщения слишком ' . ($is_err == 'to' 'длинный' 'короткий');
        }
        
        if (
$this->is_access($diary$user_id'private_komm') == false) {
            
$err[] = 'Автор ограничил комментирование этой записи.';
        }
        
        
$msg my_esc($msg);
        
        if (!
$diary['id']) {
            
$err[] = 'Дневник не найден';
        }
        
        if (!isset(
$err)) {
            
mysql_query("INSERT INTO `notes_komm` (`id_user`, `time`, `msg`, `id_notes`) values('$user_id', '$time', '$msg', '$diary_id')");
            
            
// Обсуждения
            
$this->get_disc($user_id$diary['id_user'], $diary_id);
            
            
// Ответы
            
if ($reply != 0) {
                
$set mysql_fetch_assoc(mysql_query("SELECT * FROM `notification_set` WHERE `id_user` = '$reply' LIMIT 1"));
                
                if (
$set['komm'] == && $reply != $user_id) {
                    
mysql_query("INSERT INTO `notification` (`avtor`, `id_user`, `id_object`, `type`, `time`) VALUES ('$user_id', '$reply', '$diary_id', 'notes_komm', '$time')");
                }
            }
            
            return 
$this->get_data_type(array(
                
'success' => array(
                    
'msg' => output_text($msg),
                    
'user_id' => $user['id'],
                    
'link' => $user['link'],
                    
'avatar' => $user['avatar'],
                    
'icon' => $user['icon'],
                    
'online' => $user['online'],
                    
'time' => vremja($time),
                ),
                
'msg' => 'Сообщение успешно отправлено',
            ));
        }
        
        return 
$this->get_data_type(array(
            
'error' => $err,
        ));
    }
    
    
/**
    * Проверка доступа приватности
    */
    
public function is_access($diary$user_id$type 'private'
    {
        
$token true;

        if (
$diary[$type] == 2) {
            
$token false;
        } 

        else {
            if (
$diary[$type] == 1) {
                if (
$user_id) {
                    
$is_friends mysql_fetch_assoc(mysql_query("SELECT *
                                                         FROM frends AS f
                                                         WHERE (f.user = '
$user_id' AND f.frend = '$diary[id_user]') 
                                                         OR (f.frend = '
$user_id' AND f.user = '$diary[id_user]')"));
                    if (!
$is_friends) {
                        
$token false;
                    }
                } else {
                    
$token false;
                }
            }
        }

        if (
$user_id && ( $user_id == $diary['id_user'] || user_access('notes_delete') )) {
            
$token true;
        }
        
        return 
$token;
    }
    
    
/**
    * Редактирование прав доступа
    */
    
public function get_edit_access($diary_id$type$select) {
        global 
$user;
        
$diary_id = (int) $diary_id;
        
$type_sess = ($type == 'private' 'diary_access' 'diary_comment');
        
        if (
$diary_id != 0) {
            
$diary mysql_fetch_assoc(mysql_query("SELECT n.*
                                                    FROM notes AS n
                                                    WHERE n.id = '
$diary_id
                                                    LIMIT 1"
));
            
            if (isset(
$diary['id']) && (user_access('notes_edit') || $user['id'] == $diary['id_user'])) {
                
mysql_query("UPDATE notes SET $type = '$select' WHERE id = " $diary_id);
            } else {
                
$err true;
            }
        } else {
            
$_SESSION[$type_sess] = (int) $select;
        }

        if (!isset(
$err)) {
            return 
$this->get_data_type(array(
                
'success' => array($type => $select),
                
'msg' => 'Настроки доступа сохранены',
            ));            
        }

        return 
$this->get_data_type(array(
            
'error' => 'Не удалось изменить права доступа',
        ));
    }
    
    
/**
    * Редактирование и создание дневника
    */
    
    
public function get_edit($diary_id$user_id$data) {
        
$user_id = (int) $user_id;
        
$diary_id = (int) $diary_id;
        
$edit false;
        
$time time();
        
        if (
$diary_id != 0) {
            
$diary mysql_fetch_assoc(mysql_query("SELECT n.*
                                                    FROM notes AS n
                                                    WHERE n.id = '
$diary_id
                                                    LIMIT 1"
));
            
            if (
$diary['id_user'] != $user_id && !user_access('notes_edit')) {
                
$err[] = 'У вас не прав доступа';
            }
            
            
$edit true;
        }
        
        
$is_err $this->is_strlen($data['msg'], 24096);
        
        if (
$is_err !== true) {
            
$err[] = 'Текст слишком ' . ($is_err == 'to' 'длинный' 'короткий');
            
$_SESSION['diary_message'] = $data['msg'];
        }
        
        
$is_err $this->is_strlen($data['name'], 3128);
        
        if (
$is_err === 'to') {
            
$err[] = 'Название слишком ' . ($is_err === 'to' 'длинное' 'короткое');
            
$_SESSION['diary_name'] = $data['name'];
        }
        
        
$attach = array();
        
        if (isset(
$diary) && $diary['attachments']) {
            
$attach unserialize($diary['attachments']);
        }
        
        if (isset(
$_SESSION['diary']['attachments'])) {
            
$attach array_merge($attach$_SESSION['diary']['attachments']);
        }
        
        if (isset(
$attach['photo']) && count($attach['photo']) > 10) {
            
$err[] = 'Допускается не более 10 вложений';
        }
       
        if (!isset(
$err)) {
            if (
$edit == false) {
                
mysql_query("INSERT INTO `notes` (`time`, `msg`, `name`, `id_user`, `private`, `attachments`) 
                              VALUES('
$time', '" my_esc($data['msg']) . "', '" my_esc($data['name']) . "', '$user_id', '" . (int) $data['private'] . "', '" serialize($attach) . "')");
                
$diary $data;
                
$diary['id'] = mysql_insert_id();
                
$diary['time'] = $time;
                
                if (
$diary['private'] != 2) {
                  
$this->get_tape($user_id$diary['id']);
                }
                
            } else {
                
mysql_query("UPDATE `notes` 
                             SET `name` = '" 
my_esc($data['name']) . "', `msg` = '" my_esc($data['msg']) . "', `attachments` = '" serialize($attach) . "'
                             WHERE `id` = '
$diary_id' LIMIT 1");
            }    
            
            unset(
$_SESSION['diary_message'], $_SESSION['diary_name'], $_SESSION['diary_access'], $_SESSION['diary_comment'], $_SESSION['diary']);
            
            return 
$this->get_data_type(array(
                
'success' => array(
                    
'id' => $diary['id'],
                    
'name' => $diary['name'],
                    
'msg' => output_text($diary['msg']),
                    
'id_user' => $user_id,
                    
'time' => $this->vremja($diary['time']),
                ),
                
'msg' => 'Запись успешно ' . ($edit 'отредактирована' 'создана'),
                
'maps' => array(
                    
'diary_id' => $diary['id'],
                    
'r' => 'diary',
                ),
            ));  
        }
        
        return 
$this->get_data_type(array(
            
'error' => $err,
        ));
    }
    
    
/**
    * Рассылка обсуждений друзьям и автору
    * @param undefined $user_id
    * @param undefined $author_id
    * @param undefined $diary_id
    */
    
protected function get_disc($user_id$author_id$diary_id) {
        
        
$time time();
        
        
// Друзьям
        
$q mysql_query("SELECT f.frend AS id, f.disc_notes AS set_user, d.disc_notes AS 'set'
                          FROM frends AS f
                          LEFT JOIN discussions_set AS d ON d.id_user = f.frend
                          WHERE (f.user = '
$user_id' OR f.user = '$author_id') AND f.i = '1' AND f.user != '$user_id' AND f.user != '$author_id'");
        
        while (
$ank mysql_fetch_assoc($q))
        {
            if (
$ank['set'] == && $ank['set_user'] == 1)
            {
                
$count mysql_result(mysql_query("SELECT COUNT(*) 
                                                   FROM `discussions` 
                                                   WHERE `id_user` = '
$ank[id]' AND `type` = 'notes' AND `id_sim` = '$diary_id'"), 0);
                
                if (
$count == 0)
                {
                    
mysql_query("INSERT INTO `discussions` (`id_user`, `avtor`, `type`, `time`, `id_sim`, `count`) 
                                 VALUES('
$ank[id]', '$author_id', 'notes', '$time', '$diary_id', '1')"); 
                } else {
                    
mysql_query("UPDATE discussions 
                                 SET `count` = `count` + '1', `time` = '
$time
                                 WHERE `id_user` = '
$ank[id]' AND `type` = 'notes' AND `id_sim` = '$diary_id' LIMIT 1");
                }
            }
        }
        
        
// Автору
        
$author mysql_fetch_assoc(mysql_query("
                          SELECT d.count, d.id
                          FROM discussions AS d
                          WHERE d.id_user = '
$author_id' AND d.type = 'notes' AND d.id_sim = '$diary_id'"));
        
        if (!
$author['id'])
        {
            
mysql_query("INSERT INTO `discussions` (`id_user`, `avtor`, `type`, `time`, `id_sim`, `count`) 
                         VALUES('
$author_id', '$author_id', 'notes', '$time', '$diary_id', '1')"); 
        } else {
            
mysql_query("UPDATE `discussions` 
                         SET `count` = `count` + '1', `time` = '
$time
                         WHERE `id_user` = '
$author_id' AND `type` = 'notes' AND `id_sim` = '$diary_id
                         LIMIT 1"
);
        }
    }
    
    
/**
    * Рассылка в ленту друзьям
    * @param undefined $user_id
    * @param undefined $diary_id
    */
    
protected function get_tape($user_id$diary_id) {

        
$time time();
        
        
$q mysql_query("SELECT f.frend AS id, f.lenta_notes AS set_user, t.lenta_notes AS 'set'
                          FROM frends AS f
                          LEFT JOIN tape_set AS t ON t.id_user = f.frend
                          WHERE f.user = '
$user_id' AND f.i = '1'");
        
        while (
$ank mysql_fetch_assoc($q))
        {
            if (
$ank['set'] == && $ank['set_user'] == 1)
            {
                
mysql_query("INSERT INTO `tape` (`id_user`,`avtor`, `type`, `time`, `id_file`) 
                                 VALUES('
$ank[id]', '$user_id', 'notes', '$time', '$diary_id')");
            }
        }
    }
    
    
/**
    * Удаление комментариев
    * @param undefined $id
    * @param undefined $type
    * 
    * @return
    */
    
public function get_delete($type$id) {
        global 
$user;
        
        if (
$id == 0) {
            
$err[] = 'Ошибка данных';
        } 
        
        if (
$type == 'comment') {
            
$comment mysql_fetch_assoc(mysql_query("
                            SELECT k.*
                            FROM notes_komm AS k WHERE k.id = '" 
. (int) $id "' LIMIT 1"));
        }
        
        
$diary mysql_fetch_assoc(mysql_query("
                            SELECT n.*
                            FROM notes AS n WHERE n.id = '" 
. ($type == 'diary' $id $comment['id_notes']) . "' LIMIT 1"));

        if (!isset(
$diary['id'])) {
            
$err[] = 'Дневник не найден';
        }
        
        if (
$user['id'] != $diary['id_user'] && !user_access('notes_delete')) {
            
$err[] = 'У вас не прав доступа';
        }
        
        if (!isset(
$err)) {
            if (
$type == 'comment') {
                
mysql_query("DELETE FROM notes_komm WHERE id = " . (int) $id);
            } elseif (
$type == 'diary') {
                
mysql_query("DELETE FROM notes WHERE id = " . (int) $id);
                
mysql_query("DELETE FROM notes_komm WHERE id_notes = " . (int) $id);
                
mysql_query("DELETE FROM notes_count WHERE id_notes = " . (int) $id);
                
mysql_query("DELETE FROM notes_like WHERE id_notes = " . (int) $id);
                
                
mysql_query("DELETE FROM tape WHERE type = 'notes' AND id_file = '$diary[id]'");
                
mysql_query("DELETE FROM notification WHERE type = 'notes' AND id_object = '$diary[id]'");
                
mysql_query("DELETE FROM discussions WHERE type = 'notes' AND id_sim = '$diary[id]'");
            }  
            
            return 
$this->get_data_type(array(
                
'success' => array('id' => (int) $id),
                
'msg' => $type == 'comment' 'Комментарий успешно удален' 'Запись успешно удалена',
            ));       
        }
        
        return 
$this->get_data_type(array(
            
'error' => $err,
        ));
    }
    
    
/**
    * Cоздание заголовка при отсутствии его
    * @param undefined $name
    * @param undefined $msg
    * 
    * @return $name 
    */
    
public static function get_name($name$msg$size 32) {
        if (
$name) {
            return 
text($name);
        } else {
            
$text explode(" "$msg);
            
$str '';
            
            foreach(
$text AS $key => $value) {
                if (
strlen2($str) < $size && strlen2($value) < $size) {
                    
$str .= $value ' ';
                } elseif (
strlen2($value) >= $size) {
                    
$str .= substr($value0$size);
                    break;
                } else {
                    break;
                }
            }
            
            return 
text($str);
        }
    }
    
    
/**
    * Проверка длинны символов
    */
    
protected function is_strlen($msg$from 2$to 1024) {
        if (
strlen2($msg) > $to) {
            return 
'to';
        } elseif (
strlen2($msg) < $from) {
            return 
'from';
        } else {
            return 
true;
        }
    }
}
Онлайн: 0
Реклама