function mod_latest_faq($module_id, $cfg) { $inDB = cmsDatabase::getInstance(); if (!isset($cfg['newscount'])) { $cfg['newscount'] = 2; } if (!isset($cfg['cat_id'])) { $cfg['cat_id'] = 0; } if (!isset($cfg['maxlen'])) { $cfg['maxlen'] = 120; } if ($cfg['cat_id']) { $catsql = 'AND category_id = ' . $cfg['cat_id']; } else { $catsql = ''; } $sql = "SELECT *\n FROM cms_faq_quests\n WHERE published = 1 " . $catsql . "\n ORDER BY pubdate DESC\n LIMIT " . $cfg['newscount']; $result = $inDB->query($sql); $faq = array(); if ($inDB->num_rows($result)) { while ($con = $inDB->fetch_assoc($result)) { $con['date'] = cmsCore::dateFormat($con['pubdate']); $con['href'] = '/faq/quest' . $con['id'] . '.html'; $faq[] = $con; } } cmsPage::initTemplate('modules', 'mod_latest_faq')->assign('faq', $faq)->assign('cfg', $cfg)->display('mod_latest_faq.tpl'); return true; }
function mod_calendar_eventview($module_id, $cfg) { $inCore = cmsCore::getInstance(); $inCore->loadModel('calendar'); $c_cfg = $inCore->loadComponentConfig('calendar'); $model = new cms_model_calendar(); if (!$cfg['event_rate']) { $cfg['event_rate'] = 7; } $start = time(); $end = $start + $cfg['event_rate'] * 24 * 60 * 60; $events = $model->getCalendar($start, $end); $smarty = cmsPage::initTemplate('modules', 'mod_calendar_eventview.tpl'); $smarty->assign('events', $events); $smarty->assign('start', $start); $smarty->assign('end', $end); $smarty->assign('f_start', cmsCore::dateFormat(date('Y-m-d H:i:s', $start), 0, 0, 0)); $smarty->assign('f_end', cmsCore::dateFormat(date('Y-m-d H:i:s', $end), 0, 0, 0)); $smarty->display('mod_calendar_eventview.tpl'); return true; }
function mod_latest_faq($mod, $cfg) { $cfg = array_merge(array( 'newscount' => 2, 'cat_id' => 0, 'maxlen' => 120 ), $cfg); if ($cfg['cat_id']) { $catsql = 'AND category_id = '. $cfg['cat_id']; } else { $catsql = ''; } $sql = "SELECT * FROM cms_faq_quests WHERE published = 1 ". $catsql ." ORDER BY pubdate DESC LIMIT ". $cfg['newscount']; $result = cmsCore::c('db')->query($sql) ; $faq = array(); if (cmsCore::c('db')->num_rows($result)) { while($con = cmsCore::c('db')->fetch_assoc($result)) { $con['date'] = cmsCore::dateFormat($con['pubdate']); $con['href'] = '/faq/quest'.$con['id'].'.html'; $faq[] = $con; } } cmsPage::initTemplate('modules', $cfg['tpl'])-> assign('faq', $faq)-> assign('cfg', $cfg)-> display(); return true; }
function applet_tickets() { global $adminAccess; if (!cmsUser::isAdminCan('admin/tickets', $adminAccess)) { cpAccessDenied(); } global $_LANG; cmsUser::sessionDel('ticket_cat'); $do = cmsCore::request('do', 'str', 'list'); $super_user = cmsCore::c('user')->id == 1; $toolmenu = array( array( 'icon' => 'new.gif', 'title' => $_LANG['AD_TICKET_CREATE'], 'link' => '?view=tickets&do=add' ), array( 'icon' => 'liststuff.gif', 'title' => $_LANG['AD_TICKET_LIST'], 'link' => '?view=tickets&do=list' ) ); cpToolMenu($toolmenu, 'list', 'do'); cmsCore::c('page')->setTitle($_LANG['AD_TICKETS']); cpAddPathway($_LANG['AD_TICKETS'], 'index.php?view=tickets'); if ($do == 'list') { $fields = array( array( 'title' => 'id', 'field' => 'id', 'width' => '40' ), array( 'title' => $_LANG['AD_TICKET_STATUS'], 'field' => 'status', 'width' => '100', 'filter' => 1, 'prc' => 'cpTicketStatus', 'filterlist' => cpGetTicketStatusList() ), array( 'title' => $_LANG['AD_TICKET_DATE'], 'field' => 'pubdate', 'width' => '80' ), array( 'title' => $_LANG['AD_TICKET_TITLE'], 'field' => 'title', 'width' => '', 'filter' => 32, 'link' => 'index.php?view=tickets&do=view&id=%id%' ), array( 'title' => $_LANG['AD_TICKET_LAST_MSG_DATE'], 'field' => 'last_msg_date', 'width' => '80' ), array( 'title' => $_LANG['AD_TICKET_CAT'], 'field' => 'cat_id', 'width' => '150', 'filter' => 1, 'prc' => 'cpTicketCategory', 'filter' => 1, 'filterlist' => cpGetTicketCats() ), array( 'title' => $_LANG['AD_TICKET_PRIORITY'], 'field' => 'priority', 'width' => '100', 'filter' => 1, 'prc' => 'cpTicketPriority', 'filterlist' => cpGetTicketPriorityList() ) ); if ($super_user) { $fields[] = array( 'title' => $_LANG['AD_TICKET_USER'], 'field' => 'user_id', 'width' => '110', 'prc' => 'cpTicketAuthor' ); } $actions = array( array( 'title' => $_LANG['AD_TICKET_CLOSE'], 'icon' => 'off.gif', 'link' => '?view=tickets&do=close_ticket&id=%id%', 'condition' => 'cpCheckTicketClose' ), array( 'title' => $_LANG['DELETE'], 'icon' => 'delete.gif', 'link' => '?view=tickets&do=delete&id=%id%', 'confirm' => $_LANG['AD_TICKET_DELETE'] ) ); cpListTable('cms_ticket', $fields, $actions, $super_user ? '' : 'user_id='. cmsCore::c('user')->id, 'last_msg_date DESC', 30); } if ($do == 'delete') { $id = cmsCore::request('id', 'int', 0); $item = cmsCore::c('db')->get_fields('cms_ticket', 'id='. $id, '*'); if (!empty($item)) { $server = cmsCore::c('db')->get_field('cms_ticket_cat', 'id='. $item['cat_id'], 'server'); if (empty($server)) { $server = 'http://ds-soft.ru/tickets.api.php'; } //Удаляем сам тиккет cmsCore::c('db')->delete('cms_ticket', 'id='. $item['id']); //Удаляем все сообщения тиккета cmsCore::c('db')->delete('cms_ticket_msg', 'ticket_id='. $item['id']); //Удаляем все прикрепленные изображения тиккета cmsCore::deleteUploadImages($item['id'], 'ticket'); if ($item['status'] != '3') { //Отправляем сообщение на сервер техподдержки что тикет удален cmsCore::c('curl')->ajax()->request('post', $server .'?do=ticket_deleted', array( 'ticket_id' => $item['id'], 'ticket_secret_key' => $item['secret_key'], 'host' => cmsCore::c('config')->host )); } cmsCore::addSessionMessage($_LANG['AD_TICKET_DELETE_SUCCESS'], 'success'); } else { cmsCore::addSessionMessage($_LANG['AD_TICKET_ERROR'], 'error'); } cmsCore::redirect('index.php?view=tickets'); } if ($do == 'close_ticket') { $id = cmsCore::request('id', 'int', 0); $item = cmsCore::c('db')->get_fields('cms_ticket', 'id='. $id, '*'); if (!empty($item)) { cmsCore::c('db')->setFlag('cms_ticket', $item['id'], 'status', '3'); $server = cmsCore::c('db')->get_field('cms_ticket_cat', 'id='. $item['cat_id'], 'server'); if (empty($server)) { $server = 'http://ds-soft.ru/tickets.api.php'; } //Отправляем сообщение на сервер техподдержки что тикет закрыт cmsCore::c('curl')->ajax()->request('post', $server .'?do=ticket_closed', array( 'ticket_id' => $item['id'], 'ticket_secret_key' => $item['secret_key'], 'host' => cmsCore::c('config')->host )); cmsCore::addSessionMessage($_LANG['AD_TICKET_CLOSE_SUCCESS'], 'success'); } else { cmsCore::addSessionMessage($_LANG['AD_TICKET_ERROR'], 'error'); } cmsCore::redirect('index.php?view=tickets'); } if ($do == 'add') { cpAddPathway($_LANG['AD_TICKET_CREATE'], 'index.php?view=tickets&do=add'); $cats = cpGetTicketCats(); ?> <form action="index.php?view=tickets&do=submit" method="post"> <input type="hidden" name="csrf_token" value="<?php echo cmsUser::getCsrfToken(); ?>" /> <div class="panel panel-default" style="width:650px;"> <div class="panel-body"> <div class="form-group"> <label><?php echo $_LANG['AD_TICKET_CAT']; ?></label> <select class="form-control" name="cat_id"> <?php foreach ($cats as $cat) { ?> <option value="<?php echo $cat['id']; ?>"><?php echo $cat['title']; ?></option> <?php } ?> </select> </div> <div class="form-group"> <label><?php echo $_LANG['AD_TICKET_PRIORITY']; ?></label> <select class="form-control" name="priority"> <option value="0"><?php echo $_LANG['AD_TICKET_PRIORITY_0']; ?></option> <option value="1"><?php echo $_LANG['AD_TICKET_PRIORITY_1']; ?></option> <option value="2"><?php echo $_LANG['AD_TICKET_PRIORITY_2']; ?></option> <option value="3"><?php echo $_LANG['AD_TICKET_PRIORITY_3']; ?></option> </select> </div> <div class="form-group"> <label><?php echo $_LANG['AD_TICKET_TITLE']; ?></label> <input type="text" class="form-control" name="title" value="" required="true" maxlength="256" /> </div> <div class="form-group"> <label><?php echo $_LANG['AD_TICKET_MSG']; ?></label> <textarea class="form-control" name="msg" style="height: 200px;"></textarea> </div> </div> </div> <div style="margin-top:5px"> <input type="submit" class="btn btn-primary" name="save" value="<?php echo $_LANG['AD_TICKET_SUBMIT']; ?>" /> <input type="button" class="btn btn-default" name="back" value="<?php echo $_LANG['CANCEL']; ?>" onclick="window.location.href='index.php?view=tickets';" /> </div> </form> <?php } if ($do == 'submit') { $cats = cpGetTicketCats(); $item = array( 'cat_id' => cmsCore::request('cat_id', 'int', 0), 'priority' => cmsCore::request('priority', array(0,1,2,3), 0), 'title' => cmsCore::request('title', 'str', ''), 'msg' => cmsCore::request('msg', 'str', '') ); if (!isset($cats[$item['cat_id']])) { $item['cat_id'] = 0; } if (!empty($item['title']) && !empty($item['msg'])) { $item['msg'] = cmsCore::c('db')->escape_string($item['msg']); $item['msg_count'] = 1; $item['pubdate'] = date('Y-m-d H:i:s'); $item['last_msg_date'] = $item['pubdate']; $item['user_id'] = cmsCore::c('user')->id; $item['id'] = cmsCore::c('db')->insert('cms_ticket', $item); cmsCore::addSessionMessage($_LANG['AD_TICKET_CREATED'], 'success'); $do = 'send'; } else { cmsCore::addSessionMessage($_LANG['AD_TICKET_ERROR_2'], 'error'); cmsCore::redirect('index.php?view=tickets&do=add'); } } if ($do == 'send') { if (empty($item)) { $id = cmsCore::request('id', 'int', 0); $item = cmsCore::c('db')->get_fields('cms_ticket', 'id='. $id, '*'); } if (!empty($item)) { $cat = cmsCore::c('db')->get_fields('cms_ticket_cat', 'id='. $item['cat_id'], '*'); $server = !empty($cat['server']) ? $cat['server'] : 'http://ds-soft.ru/tickets.api.php'; $ticket = array( 'ticket_id' => $item['id'], 'cat_id' => $item['cat_id'], 'priority' => $item['priority'], 'title' => $item['title'], 'msg' => $item['msg'], 'host' => cmsCore::c('config')->host, 'module' => $cat['module'] ); if ($ticket['cat_id'] > 0 && !empty($cat['module'])) { $ticket['module'] = $cat['module']; } //Отправляем тикет на сервер техподдержки $result = cmsCore::c('curl')->ajax()->request('post', $server .'?do=add_ticket', $ticket)->json(); if (!empty($result['error'])) { cmsCore::clearSessionMessages(); cmsCore::addSessionMessage($result['error'], 'error'); cmsCore::c('db')->delete('cms_ticket', 'id='. $item['id']); } else if (isset($result['secret_key'])) { cmsCore::c('db')->update( 'cms_ticket', array('status' => 1, 'secret_key' => $result['secret_key']), $item['id'] ); cmsCore::addSessionMessage($_LANG['AD_TICKET_SENDED'], 'success'); } else { cmsCore::addSessionMessage($_LANG['AD_TICKET_UNKNOWN_ERROR'], 'error'); cmsCore::c('db')->delete('cms_ticket', 'id='. $item['id']); } } else { cmsCore::addSessionMessage($_LANG['AD_TICKET_ERROR'], 'error'); } cmsCore::redirect('index.php?view=tickets'); } if ($do == 'view') { $id = cmsCore::request('id', 'int', 0); $item = cmsCore::c('db')->get_fields('cms_ticket', 'id='. $id, '*'); if (empty($item) || ($item['user_id'] != cmsCore::c('user')->id && !$super_user)) { cmsCore::addSessionMessage($_LANG['AD_TICKET_ERROR'], 'error'); cmsCore::redirect('index.php?view=tickets'); } cpAddPathway($item['title'], 'index.php?view=tickets&do=view&id='. $item['id']); if ($item['msg_count'] > 1) { $item['msgs'] = array(); $results = cmsCore::c('db')->query("SELECT * FROM cms_ticket_msg WHERE ticket_id=". $item['id'] ." ORDER BY pubdate ASC"); if (cmsCore::c('db')->num_rows($results)) { while($msg = cmsCore::c('db')->fetch_assoc($results)) { $msg['pubdate'] = cmsCore::dateFormat($msg['pubdate']); $item['msgs'][] = $msg; } } } if ($item['status'] != 3) { switch($item['priority']) { case 0: $class = 'info'; break; case 1: $class = 'success'; break; case 2: $class = 'primary'; break; case 3: $class = 'danger'; break; } }else { $class = 'default'; } ?> <div class="panel panel-<?php echo $class; ?>" style="width:650px;"> <div class="panel-heading"> <h4>Тема: <?php echo $item['title']; ?></h4> <div><?php echo $item['msg']; ?></div> </div> <div class="panel-body"> <?php if (!empty($item['msgs'])) { foreach ($item['msgs'] as $msg) { ?> <div style="text-align: <?php if (!empty($msg['support'])) { echo 'right'; } else { echo 'left'; } ?>;"> <span> <i class="fa fa-calendar-o"></i> <?php echo $msg['pubdate']; ?> </span> <?php if (!empty($msg['support'])) { ?> <span> <i class="fa fa-user"></i> <?php echo $msg['support']; ?> </span> <?php } ?> </div> <div class="alert alert-warning" style="margin-<?php if (!empty($msg['support'])) { echo 'left'; } else { echo 'right'; } ?>: 50px;"> <?php echo $msg['msg']; ?> </div> <?php } } ?> </div> <div class="panel-footer"> <?php if ($item['msg_count'] > 1 && $item['status'] != 3) { ?> <form id="ticket_msg_add" action="index.php?view=tickets&do=submit_msg" method="post"> <div class="form-group"> <label><?php echo $_LANG['AD_TICKET_MSG']; ?></label> <textarea class="form-control" name="msg" style="height: 200px;"></textarea> </div> <div style="margin-top:5px"> <input type="hidden" name="id" value="<?php echo $item['id']; ?>" /> <input type="submit" class="btn btn-primary" name="save" value="<?php echo $_LANG['SEND']; ?>" /> <input type="button" class="btn btn-warning" value="<?php echo $_LANG['AD_TICKET_CLOSE']; ?>" onclick="window.location.href='index.php?view=tickets&do=close_ticket&id=<?php echo $item['id']; ?>';return false;" /> <input type="button" class="btn btn-danger" value="<?php echo $_LANG['DELETE']; ?>" onclick="jsmsg('<?php echo $_LANG['AD_TICKET_DELETE']; ?>', '?view=tickets&do=delete&id=<?php echo $item['id']; ?>');" /> <input type="button" class="btn btn-default" value="<?php echo $_LANG['BACK']; ?>" onclick="window.location.href='index.php?view=tickets';return false;" /> </div> </form> <?php } else { ?> <div> <?php if ($item['status'] != 3) { ?> <input type="button" class="btn btn-warning" value="<?php echo $_LANG['AD_TICKET_CLOSE']; ?>" onclick="window.location.href='index.php?view=tickets&do=close_ticket&id=<?php echo $item['id']; ?>';return false;" /> <?php } ?> <input type="button" class="btn btn-danger" value="<?php echo $_LANG['DELETE']; ?>" onclick="jsmsg('<?php echo $_LANG['AD_TICKET_DELETE']; ?>', '?view=tickets&do=delete&id=<?php echo $item['id']; ?>');" /> <input type="button" class="btn btn-default" value="<?php echo $_LANG['BACK']; ?>" onclick="window.location.href='index.php?view=tickets';return false;" /> </div> <?php } ?> </div> </div> <script type="text/javascript"> $(function () { $('body').animate({ scrollTop: $('#ticket_msg_add').offset().top }, 1100); }); </script> <?php } if ($do == 'submit_msg') { $id = cmsCore::request('id', 'int', 0); $item = cmsCore::c('db')->get_fields('cms_ticket', 'id='. $id, '*'); if (empty($item) || ($item['user_id'] != cmsCore::c('user')->id && !$super_user)) { cmsCore::addSessionMessage($_LANG['AD_TICKET_ERROR'], 'error'); cmsCore::redirect('index.php?view=tickets'); } $msg = cmsCore::request('msg', 'str', ''); $date = date('Y-m-d H:i:s'); cmsCore::c('db')->insert('cms_ticket_msg', array('msg' => cmsCore::c('db')->escape_string($msg), 'ticket_id' => $item['id'], 'pubdate' => $date)); cmsCore::c('db')->query("UPDATE `cms_tickets` SET `last_msg_date` = '". $date ."', `msg_count` = `msg_count`+1 WHERE `id` = '". $item['id'] ."'"); $server = cmsCore::c('db')->get_field('cms_ticket_cat', 'id='. $item['cat_id'], 'server'); if (empty($server)) { $server = 'http://ds-soft.ru/tickets.api.php'; } //Отправляем тикет на сервер техподдержки $result = cmsCore::c('curl')->ajax()->request('post', $server .'?do=add_ticket_msg', array( 'msg' => $msg, 'ticket_id' => $item['id'], 'secret_key' => $item['secret_key'], 'host' => cmsCore::c('config')->host ))->json(); if (!empty($result['error'])) { cmsCore::addSessionMessage($result['error'], 'error'); } else { cmsCore::addSessionMessage($_LANG['AD_TICKET_MSG_SENDED'], 'success'); } cmsCore::redirect('index.php?view=tickets&do=view&id='. $item['id']); } }
public function getUserFiles($for_all=false){ if (!$for_all){ $allowsql = "allow_who='all'"; } else { $allowsql = '1=1'; } $sql = "SELECT * FROM cms_user_files WHERE {$allowsql} {$this->inDB->where} {$this->inDB->order_by}\n"; if ($this->inDB->limit){ $sql .= "LIMIT {$this->inDB->limit}"; } $result = $this->inDB->query($sql); $this->inDB->resetConditions(); if (!$this->inDB->num_rows($result)){ return array(); } $rownum = 0; while($file = $this->inDB->fetch_assoc($result)){ $file['pubdate'] = cmsCore::dateFormat($file['pubdate']); $file['filelink'] = HOST.'/users/files/download'.$file['id'].'.html'; $file['fileicon'] = cmsCore::fileIcon($file['filename']); $file['mb'] = round(($file['filesize']/1024)/1024, 2); if ($file['mb'] == '0') { $file['mb'] = '~ 0'; } $file['rownum'] = $rownum; $rownum++; $files[] = $file; } return $files; }
/** * Возвращает опрос * @param str $where условия запроса * @return int */ public function getPoll($where) { $poll = $this->inDB->get_fields('cms_forum_polls', $where, '*'); if (!$poll) { return false; } global $_LANG; $poll['answers'] = cmsCore::yamlToArray($poll['answers']); $num = 1; foreach ($poll['answers'] as $key => $value) { $poll['answers_key'][$num] = $key; $num++; } $poll['options'] = cmsCore::yamlToArray($poll['options']); switch ($poll['options']['result']) { case 0: $poll['options']['result_text'] = $_LANG['AVAILABLE_FOR_ALL']; break; case 1: $poll['options']['result_text'] = $_LANG['AVAILABLE_FOR_VOTERS']; break; case 2: $poll['options']['result_text'] = $_LANG['AVAILABLE_AFTER_VOTE']; break; } switch ($poll['options']['change']) { case 0: $poll['options']['change_text'] = $_LANG['PROHIBITED']; break; case 1: $poll['options']['change_text'] = $_LANG['ALLOW']; break; } $poll['days_left'] = round((strtotime($poll['enddate']) - time()) / 86400); $poll['days_left'] = $poll['days_left'] < 0 ? 0 : $poll['days_left']; $poll['is_closed'] = $poll['days_left'] <= 0; $poll['is_user_vote'] = $this->isUserVoted($poll['id']); // совместимость старых типов ответов, по id // если пользователь проголосовал if (!is_bool($poll['is_user_vote'])) { if (is_numeric($poll['is_user_vote'])) { $poll['is_user_vote'] = $poll['answers_key'][$poll['is_user_vote']]; } } $poll['vote_count'] = $this->getVoteCount($poll['answers']); $poll['fenddate'] = cmsCore::dateFormat($poll['enddate']); $poll['show_result'] = false; return cmsCore::callEvent('GET_THREAD_POLL', $poll); }
function calendar() { $inCore = cmsCore::getInstance(); $inPage = cmsPage::getInstance(); $inUser = cmsUser::getInstance(); $inCore->loadModel('calendar'); $model = new cms_model_calendar(); $do = $inCore->request('do', 'str', 'view'); $cfg = $inCore->loadComponentConfig('calendar'); if ($do == 'view') { $inPage->setTitle("Календарь событий"); $inPage->addPathway("Календарь", "/calendar"); $smarty = $inPage->initTemplate('components', 'com_calendar_view.tpl'); $category_id = $inCore->request('category_id', 'int', 0); $can_add = FALSE; $moderated = TRUE; if ($cfg['group_' . $inUser->group_id]) { $can_add = TRUE; $moderated = FALSE; } elseif ($cfg['m_group_' . $inUser->group_id]) { $can_add = TRUE; $moderated = TRUE; } if ($inUser->is_admin) { $can_add = TRUE; } $catigories = $model->getAllCategories(); if ($category_id) { $category = $category_id; $cat = $model->getCategory($category); $inPage->addPathway($cat['name']); } else { $category = "all"; } if ($cfg['calendar_view'] == 'afisha') { $inCore->redirect('/calendar/list.html'); } $smarty->assign('can_add', $can_add); $smarty->assign('cfg', $cfg); $smarty->assign('catigories', $catigories); $smarty->assign('category', $category); $smarty->display('com_calendar_view.tpl'); return; } if ($do == "list") { $inPage->addPathway("Календарь", "/calendar"); $inPage->addPathway("Афиша"); $per_day = 10; //Количество сообытий в дне максимум $display_days = 5; //количество дней которые показывается на странице $dayt = 60 * 60 * 24; //Продолжительность дня в секундах $start_time = strtotime(date('Y-m-d', time()) . " 00:00:00") - $dayt; //Определяем утро сегодняшнего дня $output = array(); for ($i = 0; $i < $display_days; $i++) { $start = strtotime(date('Y-m-d', $start_time + $dayt * $i)); $n = date("N", $start + 1); //Определяем заголовок блока дня if ($i == 0) { $day['title'] = "Сегодня"; } elseif ($i == 1) { $day['title'] = "Завтра"; } else { $day['title'] = $inCore->dateFormat(date('Y-m-d H:i:s', $start_time + $dayt * ($i + 1))); } $day['events'] = $model->getCalendar($start, $start + 86400); //Определяем активные встречи за временной период $output[] = $day; } $inPage->setTitle("Календарь событий"); $smarty = $inPage->initTemplate('components', 'com_calendar_list.tpl'); $smarty->assign('events', $output); $smarty->assign('cfg', $cfg); $smarty->display('com_calendar_list.tpl'); } if ($do == "view_event") { $event_id = $inCore->request('event_id', 'int', 0); $event = $model->getEvent($event_id); /*FOTOLIB*/ include 'fotolib.class.php'; $foto = new FotoLib(); //Проверяем можем ли добавлять фото $allow_add_foto = $foto->addAcces("calendar", $event); if ($_FILES) { $foto->uploadFoto($_FILES, "calendar", $event_id); } $images = $foto->loadImages("calendar", $event_id); /*FOTOLIB*/ if (!$event) { cmsCore::addSessionMessage('Ошибка запроса', 'error'); $inCore->redirect('/calendar'); exit; } elseif ($event['hide'] == 1 and !$inUser->is_admin) { cmsCore::addSessionMessage('Ошибка доступа', 'error'); $inCore->redirect('/calendar'); exit; } else { if ($event['type'] == 'private' and $event['author_id'] != $inUser->id) { cmsCore::addSessionMessage('Ошибка запроса', 'error'); $inCore->redirect('/calendar'); exit; } $msg = $inCore->parseSmiles($event['content'], true); if (count($event['parent']) != 0) { $delta = $event['end_time'] - $event['start_time']; $day = date("d", $event['start_time']); $month = date("n", $event['start_time']) - 1; //Яваскриптики считают с 0 $year = date("Y", $event['start_time']); if ($delta < 24 * 60 * 60) { $calendar_view = "agendaDay"; if (date("d", $event['start_time']) != date("d", $event['end_time'])) { //Если меньше 24 часов но всё же в разные дни включаем недельный вид $calendar_view = "agendaWeek"; } } elseif ($delta < 7 * 24 * 60 * 60) { $calendar_view = "agendaWeek"; } else { $calendar_view = "month"; } $events_string = ""; foreach ($event['parent'] as $parent) { $events_string .= "{\n\t id : '" . $parent['id'] . "',\n\t title : '" . str_replace("'", '"', $parent['title']) . "',\n\t start : '" . date("Y-m-d H:i:s", $parent['start_time']) . "',\n\t end : '" . date("Y-m-d H:i:s", $parent['end_time']) . "',\n\t url : '/calendar/event" . $parent['id'] . ".html',"; if ($parent['end_time'] - $parent['start_time'] > 60 * 60 * 8) { $events_string .= "allDay: true,"; } else { $events_string .= "allDay: false,"; } switch ($parent['type']) { case "public": if ($parent['author_id'] == $inUser->id) { $events_string .= "color: '#B9C3BC',\n"; } else { $events_string .= "color: '#C3BCB9',\n"; } $events_string .= "textColor: '#000000',\n"; break; case "private": $events_string .= "color: '#3366CC'\n"; } $events_string .= "},"; } } $issignup = $model->isSignup($event_id); $singups_user = $model->getSingupsUsers($event_id); $inPage->setTitle('Просмотр события "' . $event['title'] . '"'); $inPage->addPathway("Календарь", "/calendar"); if ($event['parent_id']) { $parent = $model->getEvent($event['parent_id']); $inPage->addPathway($parent['title'], "/calendar/event" . $parent['id'] . ".html"); } $inPage->addPathway($event['title'], "/calendar/event" . $event_id . ".html"); $smarty = $inPage->initTemplate('components', 'com_calendar_event_view.tpl'); $smarty->assign('user_id', $inUser->id); $smarty->assign('event', $event); $smarty->assign('content', $msg); $smarty->assign('parent', $event['parent']); $smarty->assign('calendar_view', $calendar_view); $smarty->assign('events_string', $events_string); $smarty->assign('year', $year); $smarty->assign('month', $month); $smarty->assign('day', $day); $smarty->assign('start_time', date("d.m.Y H:i", $event['start_time'])); $smarty->assign('end_time', date("d.m.Y H:i", $event['end_time'])); $smarty->assign('issngnup', $issignup); $smarty->assign('singups_user', $singups_user); $smarty->assign('images', $images); //fotolib $smarty->assign('allow_add_foto', $allow_add_foto); //fotolib if ($event['start_time'] - time() < 0) { $status = "Прошедшее событие"; } else { if ($event['start_time'] - time() > 86400) { $status = 'Осталось ' . declension(round(($event['start_time'] - time()) / 86400), array("день", "дня", "дней")); } else { $status = 'Осталось ' . declension(round(($event['start_time'] - time()) / 3600), array("час", "часа", "часов")); } } $smarty->assign('status', $status); if ($inUser->id == $event['author_id'] or $inUser->is_admin) { $smarty->assign('admin', TRUE); } $smarty->display('com_calendar_event_view.tpl'); $inCore->includeComments(); comments('calendar', $event_id); return; } } if ($do == "delete_event") { if ($inUser->id == 0) { $inCore->redirect('/'); exit; } $event_id = $inCore->request('event_id', 'int', 0); $deleted = $model->deleteEvent($event_id); if ($deleted) { cmsCore::addSessionMessage('Ваше мероприятие удалено!', 'success'); $inCore->redirect('/calendar'); exit; } else { cmsCore::addSessionMessage('Ошибка', 'error'); $inCore->redirect('/calendar'); exit; } } if ($do == "edit_event") { if ($inUser->id == 0) { $inCore->redirect('/'); exit; } $event_id = $inCore->request('event_id', 'int', 0); $event = $model->getEvent($event_id); if ($event["author_id"] != $inUser->id and !$inUser->is_admin) { cmsCore::addSessionMessage('Ошибка доступа', 'error'); $inCore->redirectBack(); exit; } if ($inUser->is_admin) { $can_moderate = true; } $is_send = $inCore->inRequest('title'); if ($is_send) { $title = $inCore->request('title', 'str'); $type = $inCore->request('type', 'str'); $date_start = $inCore->request('date_start', 'str'); $date_end = $inCore->request('date_end', 'str'); $hour_start = $inCore->request('hour_start', 'str'); $hour_end = $inCore->request('hour_end', 'str'); $min_start = $inCore->request('min_start', 'str'); $min_end = $inCore->request('min_end', 'str'); $content = $inCore->request('content', 'str'); if ($can_moderate) { $m_hide = $inCore->request('hide', 'str'); if ($m_hide == "on") { $hide = 1; } else { $hide = 0; } } if (!$title || !$type || !$date_start || !$hour_start || !$hour_end || !$min_start || !$min_end) { cmsCore::addSessionMessage('Ой, что то не было заполнено...', 'error'); $inCore->redirectBack(); exit; } else { $start_time = strtotime($date_start . ' ' . $hour_start . ':' . $min_start); if ($data_end == "" or $data_end < $data_start) { $data_end = $data_start; } $end_time = strtotime($date_end . ' ' . $hour_end . ':' . $min_end); if (!is_numeric($type)) { $category_id = "0"; } else { $category_id = $type; $type = "public"; } $update = $model->updateEvent($event_id, $type, $category_id, $start_time, $end_time, $title, $content, $hide); if ($update) { cmsCore::addSessionMessage('Ваше мероприятие изменено!', 'success'); $inCore->redirect('/calendar/event' . $event_id . '.html'); exit; } else { cmsCore::addSessionMessage('Ошибка добавления!', 'error'); $inCore->redirect('/calendar/edit' . $event_id . '.html'); exit; } } } else { $event = $model->getEvent($event_id); if (!$event) { cmsCore::addSessionMessage('Ошибка запроса тут', 'error'); $inCore->redirect('/calendar'); exit; } if ($event['category_id']) { $event['type'] = $event['category_id']; } $bb_toolbar = cmsPage::getBBCodeToolbar('calendar', 1, 'forum'); $smilies = cmsPage::getSmilesPanel('calendar'); //Проверяем присоедиялся ли пользователь ко встрече $catigories = $model->getAllCategories(); $inPage->setTitle("Редактировать событие"); $smarty = $inPage->initTemplate('components', 'com_calendar_add.tpl'); $smarty->assign('event', $event); $smarty->assign('edit', 1); $smarty->assign('cfg', $cfg); $smarty->assign('catigories', $catigories); $smarty->assign('title', $event['title']); $smarty->assign('content', $event['content']); $smarty->assign('type', $event['type']); $smarty->assign('start_date', date("d.m.Y", $event['start_time'])); $smarty->assign('start_hour', date("H", $event['start_time'])); $smarty->assign('start_min', date("i", $event['start_time'])); $smarty->assign('end_date', date("d.m.Y", $event['end_time'])); $smarty->assign('end_hour', date("H", $event['end_time'])); $smarty->assign('end_min', date("i", $event['end_time'])); $smarty->assign('bb_toolbar', $bb_toolbar); $smarty->assign('smilies', $smilies); $smarty->assign('can_moderate', $can_moderate); $smarty->display('com_calendar_add.tpl'); return; } } if ($do == "event_signup") { //Если не залогинились то возвращаем обратно if ($inUser->id == 0) { $inCore->redirectBack(); return; } $event_id = $inCore->request('event_id', 'int', 0); $event = $model->getEvent($event_id); //Если приватное событие то отправляем обратно if ($event["type"] == "private") { $inCore->redirectBack(); return; } //Если мероприятие уже прошло говорим ай-яй-яй if ($event['start_time'] - time() < 0) { cmsCore::addSessionMessage('Присоединиться к мероприятию уже невозможно', 'error'); $inCore->redirectBack(); exit; } //Проверяем статус присоединения ко встрече if ($model->isSignup($event_id)) { //Если уже присоединялись то удаляем и выводим статус $model->deleteSignup($event_id); cmsCore::addSessionMessage('Вы отказались от участия в мероприятии ' . $event["title"], 'success'); // Добавляем событие в ленту cmsActions::log('del_signup', array('object' => $event["title"], 'object_url' => '/calendar/event' . $event_id . '.html', 'object_id' => $event_id, 'target' => '', 'target_url' => '/calendar/event' . $event_id . '.html', 'target_id' => '0', 'description' => '')); $inCore->redirect('/calendar/event' . $event_id . '.html'); } else { //Если не присоединялись то добавляем в базу и выводим статус //Если уже присоединялись то удаляем и выводим статус $model->addSignup($event["id"]); cmsCore::addSessionMessage('Вы присоединились к событию ' . $event["title"], 'success'); // Добавляем событие в ленту cmsActions::log('add_signup', array('object' => $event["title"], 'object_url' => '/calendar/event' . $event_id . '.html', 'object_id' => $event["id"], 'target' => '', 'target_url' => '/calendar/event' . $event_id . '.html', 'target_id' => '0', 'description' => '')); $inCore->redirect('/calendar/event' . $event_id . '.html'); } return; } //AJAX if ($do == "ajax_add") { $can_add = FALSE; $moderated = TRUE; if ($cfg['group_' . $inUser->group_id] or $inUser->is_admin) { $can_add = TRUE; $moderated = FALSE; } elseif ($cfg['m_group_' . $inUser->group_id]) { $can_add = TRUE; $moderated = TRUE; } if ($can_add) { $title = $inCore->request('title', 'str'); $type = $inCore->request('type', 'str'); $date_start = $inCore->request('date_start', 'str'); $date_end = $inCore->request('date_end', 'str'); $hour_start = $inCore->request('hour_start', 'str'); $hour_end = $inCore->request('hour_end', 'str'); $min_start = $inCore->request('min_start', 'str'); $min_end = $inCore->request('min_end', 'str'); $content = $inCore->request('content', 'str'); $parent_id = $inCore->request('parent_id', 'int'); $m_hide = $inCore->request('hide', 'str'); if ($m_hide == "on" or $moderated) { $hide = 1; } else { $hide = 0; } $start_time = strtotime($date_start . ' ' . $hour_start . ':' . $min_start); $end_time = strtotime($date_end . ' ' . $hour_end . ':' . $min_end); if ($start_hour < $cfg['calendar_minTime']) { $output['error'] = TRUE; $output['errortext'] = "Событие начинается слишком рано"; } if ($end_hour > $cfg['calendar_maxTime']) { $output['error'] = TRUE; $output['errortext'] = "Событие заканчивается слишком поздно"; } if ($end_hour == $cfg['calendar_maxTime'] and $end_min != 0) { $output['error'] = TRUE; $output['errortext'] = "Событие заканчивается слишком поздно"; } if ($type == "private") { $category_id = 0; $type = "private"; } else { if (is_numeric($type)) { $category_id = $type; } else { $category_id = 0; } $type = "public"; } if ($parent_id) { $parent = $model->getEvent($parent_id); if (!$parent) { $output['error'] = TRUE; $output['errortext'] = "Родительское событие не найдено"; } elseif ($parent['user_id'] != $inUser->id or !$inUser->is_admin) { $output['error'] = TRUE; $output['errortext'] = "Ошибка прав доступа"; } elseif ($parent['hide'] == 1) { $output['error'] = TRUE; $output['errortext'] = "Нельзя добавлять события в скрытое событие"; } } if (!$output['error']) { $event_id = $model->addEvent($inUser->id, $type, $category_id, $start_time, $end_time, $title, $content, $parent_id, $hide); } $output = array(); if (!$event_id) { $output['error'] = TRUE; $output['errortext'] = "Ошибка БД"; } else { $output['error'] = FALSE; $event = $model->getEvent($event_id); $output['event_id'] = $event_id; $output['start'] = $event['start_time']; $output['end'] = $event['end_time']; $output['hide'] = $hide; if ($event['end_time'] - $event['start_time'] > 60 * 60 * 8) { $output['allDay'] = TRUE; } else { $output['allDay'] = FALSE; } $output['bg'] = $event['bg']; $output['tx'] = $event['tx']; if ($type != "private" and $hide != 1) { cmsActions::log('add_event', array('object' => 'событие', 'object_url' => '/calendar/event' . $event_id . '.html', 'object_id' => $event_id, 'target' => $title, 'target_url' => '/calendar/event' . $event_id . '.html', 'target_id' => '0', 'description' => $title)); } } } else { $output['error'] = TRUE; $output['errortext'] = "Ошибка доступа"; } print json_encode($output); exit; } if ($do == "ajax_edit") { $type_act = $inCore->request('type', 'str'); $id = $inCore->request('id', 'int'); $dayDelta = $inCore->request('dayDelta', 'str'); $minuteDelta = $inCore->request('minuteDelta', 'str'); $event = $model->getEvent($id); if ($event['author_id'] == $inUser->id or $inUser->is_admin) { $type = $event['type']; $category_id = $event['category_id']; $start_time = $event['start_time']; $end_time = $event['end_time']; $title = $event['title']; $content = $event['content']; $delta = $dayDelta * 24 * 60 * 60 + $minuteDelta * 60; if ($type_act == "drop") { $start_time = $start_time + $delta; $end_time = $end_time + $delta; } if ($type_act == "resize") { if ($end_time - $start_time > 0) { $end_time = $end_time + $delta; } else { print "Ошибка смещения"; } } $model->updateEvent($id, $type, $category_id, $start_time, $end_time, $title, $content); } else { print "Ошибка доступа"; } exit; } if ($do == "ajax_get_event") { $starttime = $inCore->request('start', 'int'); $endtime = $inCore->request('end', 'int'); $parent_id = $inCore->request('parent_id', 'parent_id'); $category = $inCore->request('category', 'int'); if ($category == "all" and !is_numeric($category)) { $category = FALSE; } if (!$parent_id) { $parent_id = 0; } if ($inUser->is_admin) { $show_hidden = true; } $events = $model->getCalendar($starttime, $endtime, $category, $parent_id, $show_hidden); $output = array(); foreach ($events as $data) { $data['start'] = date("Y-m-d H:i:s", $data["start_time"]); $data['end'] = date("Y-m-d H:i:s", $data["end_time"]); $data['url'] = "/calendar/event" . $data['id'] . ".html"; // $data['image'] = "/components/calendar/images/no_image.png"; if ($data["author_id"] == $inUser->id or $inUser->is_admin) { $data['editable'] = true; } else { $data['editable'] = false; } if ($data["end_time"] - $data["start_time"] > 60 * 60 * 8) { $data['allDay'] = "true"; } if (!$data['category_id']) { switch ($data["type"]) { case "public": $data['color'] = $cfg['public_bg_color']; $data['textColor'] = $cfg['public_tx_color']; break; case "private": $data['color'] = $cfg['private_bg_color']; $data['textColor'] = $cfg['private_tx_color']; break; } } else { $data['color'] = $data['bg']; $data['textColor'] = $data['tx']; } if ($data["type"] == "private" and $data['author_id'] != $inUser->id) { } else { $output[] = $data; } } print json_encode($output); exit; } if ($do == "isc_calendar") { header('Content-type: text/calendar; charset=utf-8'); header('Content-Disposition: inline; filename=calendar.ics'); echo "BEGIN:VCALENDAR\n"; echo "VERSION:2.0\n"; echo "PRODID:-//hacksw/handcal//NONSGML v1.0//EN'\n"; $events = $model->getCalendar(time() - 60 * 60 * 24 * 30, time() + 60 * 60 * 24 * 30, 0); foreach ($events as $event) { if ($event['type'] == "public") { $title = $event["title"]; $dtstart = date("Ymd", $event["start_time"] - 60 * 60 * 4) . "T" . date("His", $event["start_time"] - 60 * 60 * 4); $dtend = date("Ymd", $event["end_time"] - 60 * 60 * 4) . "T" . date("His", $event["end_time"] - 60 * 60 * 4); echo "BEGIN:VEVENT\n"; echo "DTSTART:{$dtstart}\n"; echo "DTEND:{$dtend}\n"; echo "SUMMARY:{$title}\n"; echo "END:VEVENT\n"; } } echo "END:VCALENDAR\n"; exit; } if ($do == "ajax_add_form") { $start = strtotime($inCore->request('start', 'str')); $end = strtotime($inCore->request('end', 'str')); if ($start < strtotime('now 00:00:00')) { echo 'error'; exit; } if (!$cfg['group_' . $inUser->group_id] and !$inUser->is_admin and !$cfg['m_group_' . $inUser->group_id]) { echo 'error'; exit; } //Коректность времени добавления $start_hour = date("H", $start); if ($start_hour < $cfg['calendar_minTime']) { $start_hour = $cfg['calendar_minTime']; } $end_hour = date("H", $end); $end_min = date("i", $end); if ($end_hour > $cfg['calendar_maxTime']) { $end_hour = $cfg['calendar_maxTime']; $end_min = "00"; } if ($inUser->is_admin) { $can_moderate = true; } $catigories = $model->getAllCategories(); $bb_toolbar = cmsPage::getBBCodeToolbar('message', $cfg['img_on'], 'forum'); $smilies = cmsPage::getSmilesPanel('message'); $smarty = $inPage->initTemplate('components', 'com_calendar_add.tpl'); $smarty->assign('catigories', $catigories); $smarty->assign('start_date', date("d.m.Y", $start)); $smarty->assign('start_hour', $start_hour); $smarty->assign('start_min', date("i", $start)); $smarty->assign('end_date', date("d.m.Y", $end)); $smarty->assign('end_hour', $end_hour); $smarty->assign('end_min', $end_min); $smarty->assign('can_moderate', $can_moderate); $smarty->assign('bb_toolbar', $bb_toolbar); $smarty->assign('smilies', $smilies); $smarty->assign('cfg', $cfg); //print_r($cfg); $smarty->display('com_calendar_add.tpl'); exit; } if ($do == "ajax_get_config") { print json_encode($cfg); exit; } // FOTOLIB if ($do == "imagerotate") { $side = $md5 = $inCore->request('side', 'str'); $image_id = $inCore->request('image_id', 'int'); include 'fotolib.class.php'; $foto = new FotoLib(); $foto->Rotate($side, $image_id); $inCore->redirectBack(); exit; } if ($do == "imagedelete") { include 'fotolib.class.php'; $image_id = $inCore->request('image_id', 'int'); $foto = new FotoLib(); $foto->Delete($image_id); $inCore->redirectBack(); exit; } if ($do == "ajax_format_date") { print cmsCore::dateFormat(date('Y-m-d H:i:s', $inCore->request('time', 'int')), 0, 0, 0); exit; } }
/** * Возвращает блог по ссылке или по id * @param int or string $id_or_link * @return array $blog */ public function getPost($id_or_link = 0) { if (is_numeric($id_or_link)) { $where = "p.id = '{$id_or_link}'"; } else { $where = "p.seolink = '{$id_or_link}'"; } $sql = "SELECT p.*,\r\n\t\t\t\t\t u.nickname as author_nickname,\r\n\t\t\t\t\t u.login as author_login,\r\n\t\t\t\t\t up.imageurl as author_image,\r\n\t\t\t\t\t u.is_deleted as author_deleted\r\n\t\t\t\tFROM cms_blog_posts p\r\n\t\t\t\tLEFT JOIN cms_users u ON u.id = p.user_id\r\n\t\t\t\tLEFT JOIN cms_user_profiles up ON up.user_id = u.id\r\n\t\t\t\tWHERE {$where} LIMIT 1"; $result = $this->inDB->query($sql); if (!$this->inDB->num_rows($result)) { return false; } global $_LANG; $post = $this->inDB->fetch_assoc($result); $post['feditdate'] = cmsCore::dateFormat($post['edit_date']); $post['fpubdate'] = cmsCore::dateDiffNow($post['pubdate']) . ' ' . $_LANG['BACK'] . ' (' . cmsCore::dateFormat($post['pubdate']) . ')'; //Убираем тег [cut] $post['content_html'] = preg_replace('/\\[(cut=)\\s*(.*?)\\]/ui', '', $post['content_html']); $post['author_avatar'] = cmsUser::getUserAvatarUrl($post['user_id'], 'small', $post['author_image'], $post['author_deleted']); return cmsCore::callEvent('GET_POST', $post); }
if (!$usr) { cmsCore::error404(); } cmsCore::loadLib('tags'); $sql = "SELECT p.*, a.title as album, pr.gender\n FROM cms_user_photos p\n\t\t\tINNER JOIN cms_user_albums a ON a.id = p.album_id\n\t\t\tINNER JOIN cms_user_profiles pr ON pr.user_id = p.user_id\n WHERE p.id = '{$photoid}' AND p.user_id = '{$id}' LIMIT 1"; $result = $inDB->query($sql); if (!$inDB->num_rows($result)) { cmsCore::error404(); } $photo = $inDB->fetch_assoc($result); $inPage->setTitle($photo['title']); $inPage->addPathway($usr['nickname'], cmsUser::getProfileURL($usr['login'])); $inPage->addPathway($_LANG['PHOTOALBUMS'], '/users/' . $usr['id'] . '/photoalbum.html'); $inPage->addPathway($photo['album'], '/users/' . $usr['login'] . '/photos/private' . $photo['album_id'] . '.html'); $inPage->addPathway($photo['title']); $photo['pubdate'] = cmsCore::dateFormat($photo['pubdate'], true, false, false); $photo['genderlink'] = cmsUser::getGenderLink($usr['id'], $usr['nickname'], $photo['gender'], $usr['login']); $photo['filesize'] = round(filesize(PATH . '/images/users/photos/medium/' . $photo['imageurl']) / 1024, 2); //ссылки на предыдущую и следующую фотографии $previd = $inDB->get_fields('cms_user_photos', "id>'{$photo['id']}' AND user_id = '{$usr['id']}' AND album_id='{$photo['album_id']}'", 'id, title, pubdate', 'id ASC'); $nextid = $inDB->get_fields('cms_user_photos', "id<'{$photo['id']}' AND user_id = '{$usr['id']}' AND album_id='{$photo['album_id']}'", 'id, title, pubdate', 'id DESC'); // Проверяем права доступа $is_allow = cmsUser::checkUserContentAccess($photo['allow_who'], $id); // Если видим фото, обновляем просмотры if ($is_allow) { $inDB->query("UPDATE cms_user_photos SET hits = hits + 1 WHERE id = " . $photo['id']); } cmsPage::initTemplate('components', 'com_users_photos_view')->assign('photo', $photo)->assign('bbcode', '[IMG]' . HOST . '/images/users/photos/medium/' . $photo['imageurl'] . '[/IMG]')->assign('previd', $previd)->assign('nextid', $nextid)->assign('usr', $usr)->assign('myprofile', $myprofile)->assign('is_admin', cmsUser::userIsAdmin($inUser->id))->assign('is_allow', $is_allow)->assign('tagbar', $is_allow ? cmsTagBar('userphoto', $photo['id']) : '')->display('com_users_photos_view.tpl'); if ($inCore->isComponentInstalled('comments') && $is_allow) { cmsCore::includeComments(); comments('userphoto', $photo['id']);
function mod_photo($mod, $cfg) { $cfg = array_merge(array( 'user_photos' => 0, 'is_full' => 1, 'showmore' => 1, 'album_id' => 0, 'whatphoto' => 'all', 'shownum' => 5, 'maxcols' => 2, 'sort' => 'pubdate', 'showclubs' => 0, 'is_subs' => 1, 'is_lightbox' => 1 ), $cfg); // Задаем период cmsCore::c('photo')->wherePeriodIs($cfg['whatphoto']); //устанавливаем номер текущей страницы и кол-во фото на странице cmsCore::c('db')->limit($cfg['shownum']); if (!$cfg['user_photos']) { // выбираем категории фото cmsCore::c('db')->addJoin('INNER JOIN cms_photo_albums a ON a.id = f.album_id AND a.published = 1'); cmsCore::c('db')->addSelect('a.title as cat_title, a.NSDiffer'); // если категория задана, выбираем из нее if ($cfg['album_id']) { // Если выбирать нужно включая вложенные if ($cfg['is_subs']) { // получаем категорию $album = cmsCore::c('db')->getNsCategory('cms_photo_albums', $cfg['album_id']); if (!$album) { return false; } cmsCore::c('photo')->whereThisAndNestedCats($album['NSLeft'], $album['NSRight']); } else { cmsCore::c('photo')->whereAlbumIs($cfg['album_id']); } } // если фото клубов не нужны if (!$cfg['showclubs']) { cmsCore::c('db')->where("f.owner = 'photos'"); } //устанавливаем сортировку cmsCore::c('db')->orderBy('f.'.$cfg['sort'], 'DESC'); // получаем фото $photos = cmsCore::c('photo')->getPhotos(false, $cfg['is_full']); if (empty($photos)) { return false; } $tpl = $cfg['tpl']; } else { if ($cfg['sort'] == 'rating') { $cfg['sort'] = 'hits'; } $sql = "SELECT u.id uid, u.nickname author, u.login as login, f.title, f.id, f.album_id, pr.gender gender, f.imageurl as file, f.pubdate, a.title as album_title FROM cms_user_photos f INNER JOIN cms_user_albums a ON a.id = f.album_id LEFT JOIN cms_users u ON u.id = f.user_id LEFT JOIN cms_user_profiles pr ON pr.user_id = u.id WHERE f.allow_who='all' AND u.is_deleted = 0 AND u.is_locked = 0 AND f.album_id > 0 AND a.allow_who = 'all' ". cmsCore::c('db')->where ." ORDER BY f.". $cfg['sort'] ." DESC \n"; if (cmsCore::c('db')->limit) { $sql .= "LIMIT ". cmsCore::c('db')->limit; } $result = cmsCore::c('db')->query($sql); cmsCore::c('db')->resetConditions(); if (!cmsCore::c('db')->num_rows($result)) { return false; } $photos = array(); while ($photo = cmsCore::c('db')->fetch_assoc($result)) { if ($cfg['is_full']) { $photo['comments'] = cmsCore::getCommentsCount('userphoto', $photo['id']); } $photo['pubdate'] = cmsCore::dateFormat($photo['pubdate'], false, false, false); $photos[] = $photo; } cmsCore::callEvent('GET_PHOTOS', $photos); $tpl = 'mod_user_photo'; } cmsPage::initTemplate('modules', $tpl)-> assign('photos', $photos)-> assign('cfg', $cfg)-> display(); return true; }
/** * Возвращает html стены пользователя * @param int $selected * @param array $exclude * @return html */ public static function getUserWall($target_id, $component = 'users', $my_profile = 0, $is_admin = 0) { $inDB = cmsDatabase::getInstance(); $inUser = self::getInstance(); cmsCore::loadLanguage('components/' . $component); if (!$my_profile && !$is_admin) { $my_profile = $inUser->is_admin; } $records = array(); //получаем общее число записей на стене этого пользователя $total = $inDB->rows_count('cms_user_wall', "user_id = '{$target_id}' AND usertype = '{$component}'"); if ($total) { $sql = "SELECT w.*, g.gender, g.imageurl, u.nickname as author, u.login as author_login, u.is_deleted, w.pubdate\n FROM cms_user_wall w\n\t\t\t\t\tINNER JOIN cms_users u ON u.id = w.author_id\n\t\t\t\t\tINNER JOIN cms_user_profiles g ON g.user_id = u.id\n WHERE w.user_id = '{$target_id}' AND w.usertype = '{$component}'\n ORDER BY w.pubdate DESC\n"; if ($inDB->limit) { $sql .= "LIMIT {$inDB->limit}"; } $result = $inDB->query($sql); $inDB->resetConditions(); while ($record = $inDB->fetch_assoc($result)) { $record['is_today'] = time() - strtotime($record['pubdate']) < 86400; $record['fpubdate'] = $record['is_today'] ? cmsCore::dateDiffNow($record['pubdate']) : cmsCore::dateFormat($record['pubdate']); $record['avatar'] = cmsUser::getUserAvatarUrl($record['author_id'], 'small', $record['imageurl'], $record['is_deleted']); $records[] = $record; } $records = cmsCore::callEvent('GET_WALL_POSTS', $records); } ob_start(); cmsPage::initTemplate('components', 'com_users_wall')->assign('records', $records)->assign('user_id', $inUser->id)->assign('target_id', $target_id)->assign('my_profile', $my_profile)->assign('is_admin', $is_admin)->assign('component', $component)->assign('total', $total)->assign('pagebar', cmsPage::getPagebar($total, $inDB->page, $inDB->perpage, 'javascript:wallPage(%page%)'))->display('com_users_wall.tpl'); return ob_get_clean(); }
/** * Получаем статьи по заданным параметрам * @return array */ public function getArticlesList($only_published=true) { $today = date("Y-m-d H:i:s"); if ($only_published) { cmsCore::c('db')->where("con.published = 1 AND con.pubdate <= '". $today ."'"); } $sql = "SELECT con.*, con.pubdate as fpubdate, cat.title as cat_title, cat.seolink as catseolink, cat.showdesc, u.nickname as author, u.login as user_login FROM cms_content con INNER JOIN cms_category cat ON cat.id = con.category_id LEFT JOIN cms_users u ON u.id = con.user_id WHERE con.is_arhive = 0 ". cmsCore::c('db')->where ." ". cmsCore::c('db')->group_by ." ". cmsCore::c('db')->order_by. "\n"; if (cmsCore::c('db')->limit) { $sql .= "LIMIT ". cmsCore::c('db')->limit; } $result = cmsCore::c('db')->query($sql); cmsCore::c('db')->resetConditions(); if (!cmsCore::c('db')->num_rows($result)) { return false; } while ($article = cmsCore::c('db')->fetch_assoc($result)) { $article['fpubdate'] = cmsCore::dateFormat($article['fpubdate']); $article['tagline'] = cmsTagLine('content', $article['id'], true); $article['comments'] = cmsCore::getCommentsCount('article', $article['id']); $article['url'] = $this->getArticleURL(null, $article['seolink']); $article['cat_url'] = $this->getCategoryURL(null, $article['catseolink']); if (file_exists(PATH .'/images/content/medium/'. ceil($article['id']/100) .'/article'. $article['id' ] .'.jpg')) { $article['image'] = '/images/content/medium/'. ceil($article['id']/100) .'/article'. $article['id' ] .'.jpg'; $article['image_small'] = '/images/content/small/'. ceil($article['id']/100) .'/article'. $article['id' ] .'.jpg'; } if (!empty($article['images'])) { $article['images'] = json_decode($article['images'], true); } $articles[] = $article; } $articles = cmsCore::callEvent('GET_ARTICLES', $articles); return $articles; }
/** * Возвращает массив фотографий по заданным условиям * @param bool $show_all * @param bool $is_rating * @return array $photos */ public function getPhotos($show_all = false, $is_comments_count = false) { $pub_where = $show_all ? '1=1' : 'f.published = 1'; $sql = "SELECT f.* {$this->inDB->select}\r\n\r\n FROM cms_photo_files f\r\n\t\t\t\t{$this->inDB->join}\r\n WHERE {$pub_where}\r\n {$this->inDB->where}\r\n\r\n {$this->inDB->group_by}\r\n\r\n {$this->inDB->order_by}\n"; if ($this->inDB->limit) { $sql .= "LIMIT {$this->inDB->limit}"; } $result = $this->inDB->query($sql); $this->inDB->resetConditions(); if (!$this->inDB->num_rows($result)) { return false; } $photos = array(); while ($photo = $this->inDB->fetch_assoc($result)) { if ($is_comments_count) { $photo['comments'] = cmsCore::getCommentsCount($photo['owner'] == 'photos' ? 'photo' : 'club_photo', $photo['id']); } $photo['pubdate'] = cmsCore::dateFormat($photo['pubdate'], false, false, false); $photos[] = $photo; } return cmsCore::callEvent('GET_PHOTOS', $photos); }
public function getRecord($item_id) { $this->deleteOldRecords(); $this->clearOldVips(); $sql = "SELECT i.*,\r\n a.id as cat_id,\r\n\t\t\t\t\t a.form_id,\r\n a.NSLeft as NSLeft,\r\n a.NSRight as NSRight,\r\n a.title as cat_title,\r\n a.title as category,\r\n a.public as public,\r\n a.thumb1 as thumb1,\r\n a.thumb2 as thumb2,\r\n a.thumbsqr as thumbsqr,\r\n u.nickname as user,\r\n u.is_deleted as user_is_deleted,\r\n u.login as user_login\r\n FROM cms_board_items i\r\n\t\t\t\tINNER JOIN cms_board_cats a ON a.id = i.category_id\r\n\t\t\t\tLEFT JOIN cms_users u ON u.id = i.user_id\r\n WHERE i.id = '{$item_id}'"; $result = $this->inDB->query($sql); if (!$this->inDB->num_rows($result)) { return false; } $record = $this->inDB->fetch_assoc($result); $timedifference = strtotime("now") - strtotime($record['pubdate']); $record['is_overdue'] = round($timedifference / 86400) > $record['pubdays'] && $record['pubdays'] > 0; $record['fpubdate'] = $record['pubdate']; $record['pubdate'] = cmsCore::dateFormat($record['pubdate']); $record['vipdate'] = cmsCore::dateFormat($record['vipdate']); $record['enc_city'] = urlencode($record['city']); $record['moderator'] = $this->checkAccess($record['user_id']); if (!$record['file'] || !file_exists(PATH . '/images/board/small/' . $record['file'])) { $record['file'] = ''; } if (!$record['formsdata']) { $record['form_array'] = array(); } else { $record['form_array'] = cmsCore::yamlToArray($record['formsdata']); } return cmsCore::callEvent('GET_BOARD_RECORD', $record); }
/** * Получаем комментарии по заданным параметрам * @return array */ public function getComments($only_published = true, $is_tree = false, $from_module = false) { $inUser = cmsUser::getInstance(); $comments = array(); global $_LANG; $published = $only_published ? 'c.published = 1' : '1=1'; $sql = "SELECT c.*,\r\n\t\t\t\t\t IFNULL(u.nickname, 0) as nickname,\r\n\t\t\t\t\t IFNULL(u.login, 0) as login,\r\n\t\t\t\t\t IFNULL(u.is_deleted, 0) as is_deleted,\r\n\t\t\t\t\t IFNULL(p.imageurl, 0) as imageurl,\r\n\t\t\t\t\t IFNULL(p.gender, 0) as gender\r\n FROM cms_comments c\r\n\t\t\t\tLEFT JOIN cms_users u ON u.id = c.user_id\r\n\t\t\t\tLEFT JOIN cms_user_profiles p ON p.user_id = u.id\r\n WHERE {$published}\r\n\t\t\t\t\t{$this->inDB->where}\r\n\r\n {$this->inDB->group_by}\r\n\r\n {$this->inDB->order_by}\n"; if ($this->inDB->limit) { $sql .= "LIMIT {$this->inDB->limit}"; } $result = $this->inDB->query($sql); $this->inDB->resetConditions(); if (!$this->inDB->num_rows($result)) { return array(); } while ($comment = $this->inDB->fetch_assoc($result)) { $comment['level'] = 0; $comment['is_editable'] = $this->isEditable($comment['pubdate']); $comment['fpubdate'] = cmsCore::dateFormat($comment['pubdate'], true, true); if ($comment['guestname']) { $comment['author'] = $comment['guestname']; $comment['is_profile'] = false; $comment['ip'] = in_array($this->config['cmm_ip'], array(1, 2)) ? $comment['ip'] : ''; } else { $comment['author']['nickname'] = $comment['nickname']; $comment['author']['login'] = $comment['login']; $comment['is_profile'] = true; $comment['user_image'] = cmsUser::getUserAvatarUrl($comment['user_id'], 'small', $comment['imageurl'], $comment['is_deleted']); $comment['ip'] = $this->config['cmm_ip'] == 2 && $comment['ip'] ? $comment['ip'] : ''; } switch ($comment['gender']) { case 'm': $comment['gender'] = $_LANG['COMMENTS_MALE']; break; case 'f': $comment['gender'] = $_LANG['COMMENTS_FEMALE']; break; default: $comment['gender'] = $_LANG['COMMENTS_GENDER']; } $comment['show'] = !$this->config['min_karma'] || $comment['rating'] >= $this->config['min_karma_show'] || cmsUser::userIsAdmin($comment['user_id']); $comment['is_my'] = $inUser->id == $comment['user_id']; if ($inUser->id) { $comment['is_voted'] = $comment['is_my'] ? true : cmsUser::isRateUser('comment', $inUser->id, $comment['id']); } else { $comment['is_voted'] = true; } $comments[] = $comment; } if ($is_tree) { $comments = $this->buildTree(0, 0, $comments); } return $from_module ? cmsCore::callEvent('GET_COMMENTS_MODULE', $comments) : cmsCore::callEvent('GET_COMMENTS', $comments); }
/** * Получаем статьи по id категориям * @return array */ public function getArticlesList2($only_published = true, $cat_id = '1') { $today = date("Y-m-d H:i:s"); if ($only_published) { $this->inDB->where("con.published = 1 AND con.pubdate <= '{$today}' AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '{$today}')) AND con.category_id = '{$cat_id}'"); } $sql = "SELECT con.*,\n con.pubdate as fpubdate,\n\t\t\t\t\t cat.title as cat_title, cat.seolink as catseolink,\n\t\t\t\t\t cat.showdesc, cat.description as catdescription,\n u.nickname as author,\n u.login as user_login\n FROM cms_content con\n\t\t\t\tINNER JOIN cms_category cat ON cat.id = con.category_id\n\t\t\t\tLEFT JOIN cms_users u ON u.id = con.user_id\n WHERE con.is_arhive = 0\n {$this->inDB->where}\n\n {$this->inDB->group_by}\n\n ORDER BY con.ordering\n"; if ($this->inDB->limit) { $sql .= "LIMIT {$this->inDB->limit}"; } $result = $this->inDB->query($sql); $this->inDB->resetConditions(); if (!$this->inDB->num_rows($result)) { return false; } while ($article = $this->inDB->fetch_assoc($result)) { $article['fpubdate'] = cmsCore::dateFormat($article['fpubdate']); $article['tagline'] = cmsTagLine('content', $article['id'], true); $article['comments'] = cmsCore::getCommentsCount('article', $article['id']); $article['url'] = $this->getArticleURL(null, $article['seolink']); $article['cat_url'] = $this->getCategoryURL(null, $article['catseolink']); if (isset($_SESSION['lang']) && $_SESSION['lang'] != 'ru') { $article['image'] = file_exists(PATH . '/images/photos/small/article' . $article['id'] . '_' . $_SESSION['lang'] . '.jpg') ? 'article' . $article['id'] . '_' . $_SESSION['lang'] . '.jpg' : ''; } else { $article['image'] = file_exists(PATH . '/images/photos/small/article' . $article['id'] . '.jpg') ? 'article' . $article['id'] . '.jpg' : ''; } $articles[] = $article; } $articles = cmsCore::callEvent('GET_ARTICLES', $articles); return $articles; }
/** * Возвращает массив фотографий по заданным условиям * @param bool $show_all * @param bool $is_rating * @return array $photos */ public function getPhotos($show_all = false, $is_comments_count = false){ $pub_where = ($show_all ? '1=1' : 'f.published = 1'); $sql = "SELECT f.* ". cmsCore::c('db')->select ." FROM cms_photo_files f ". cmsCore::c('db')->join ." WHERE ". $pub_where ." ". cmsCore::c('db')->where ." ". cmsCore::c('db')->group_by ." ". cmsCore::c('db')->order_by ."\n"; if (cmsCore::c('db')->limit){ $sql .= "LIMIT ". cmsCore::c('db')->limit; } $result = cmsCore::c('db')->query($sql); cmsCore::c('db')->resetConditions(); if(!cmsCore::c('db')->num_rows($result)){ return false; } $photos = array(); while ($photo = cmsCore::c('db')->fetch_assoc($result)){ if($is_comments_count){ $photo['comments'] = cmsCore::getCommentsCount(($photo['owner']=='photos' ? 'photo' : 'club_photo'), $photo['id']); } $photo['pubdate'] = cmsCore::dateFormat($photo['pubdate'], false, false, false); $photos[] = $photo; } return cmsCore::callEvent('GET_PHOTOS', $photos); }
/** * Получает массив результатов поиска (постранично) * выполняя подсветку искомых слов * @return array $rs */ public function getResults() { $sql = "SELECT pubdate, title, description, link, place, placelink, imageurl FROM cms_search WHERE 1=1 ". cmsCore::c('db')->where ." ". cmsCore::c('db')->group_by ." ". cmsCore::c('db')->order_by ." LIMIT ". (($this->page-1)*$this->config['perpage']) .", ". $this->config['perpage']; $result = cmsCore::c('db')->query($sql); cmsCore::c('db')->resetConditions(); if (!cmsCore::c('db')->num_rows($result)) { return false; } $rs = array(); while ($res = cmsCore::c('db')->fetch_assoc($result)) { $res['pubdate'] = $res['pubdate'] ? cmsCore::dateFormat($res['pubdate'], true, false, false) : ''; // заголовок с учетом подсветки слов поиска $res['s_title'] = $this->getHighlightedText($res['title']); // описание с учетом подсветки слов поиска $res['description'] = $this->getHighlightedText($res['description']); $rs[] = $res; } return cmsCore::callEvent('GET_SEARCH_RESULT', $rs); }
/** * Возвращает массив событий для ленты активности * @return array */ public function getActionsLog() { $inUser = cmsUser::getInstance(); if (!$this->only_friends) { $this->inDB->where('log.is_friends_only = 0'); } if (!$inUser->id) { $this->inDB->where('log.is_users_only = 0'); } $pactions = cmsCore::callEvent('GET_BEFORE_ACTIONS', false); if ($pactions !== false) { return $pactions; } $sql = "SELECT log.*,\r\n\t\t log.pubdate as orig_pubdate,\r\n a.message,\r\n a.name,\r\n u.nickname as user_nickname,\r\n u.login as user_login\r\n FROM cms_actions_log log\r\n LEFT JOIN cms_actions a ON a.id = log.action_id AND a.is_visible = 1\r\n LEFT JOIN cms_users u ON u.id = log.user_id\r\n WHERE 1=1 {$this->inDB->where}\r\n ORDER BY log.id DESC\r\n\t\t\t\t"; if ($this->inDB->limit) { $sql .= "LIMIT {$this->inDB->limit}"; } $result = $this->inDB->query($sql); // Сбрасываем условия $this->inDB->resetConditions(); if (!$this->inDB->num_rows($result)) { return false; } $actions = array(); global $_LANG; $last_date = ''; $today_date = date('j F Y'); $yesterday_date = date('j F Y', time() - 3600 * 24); while ($action = $this->inDB->fetch_assoc($result)) { $action['item_date'] = ''; $item_date = date('j F Y', strtotime($action['orig_pubdate'])); if ($item_date != $last_date) { switch ($item_date) { case $today_date: $date = icms_ucfirst($_LANG['TODAY']); break; case $yesterday_date: $date = icms_ucfirst($_LANG['YESTERDAY']); break; default: $date = cmsCore::dateFormat($item_date, true, false, false); } $action['item_date'] = $date; $last_date = $item_date; } $action['object_link'] = $action['target_link'] = ''; if ($action['object']) { $action['object_link'] = $action['object_url'] ? '<a href="' . $action['object_url'] . '" class="act_obj_' . $action['name'] . '">' . $action['object'] . '</a>' : $action['object']; } if ($action['target']) { $action['target_link'] = '<a href="' . $action['target_url'] . '" class="act_tgt_' . $action['name'] . '">' . $action['target'] . '</a>'; } if ($action['message']) { $target_pos = mb_strpos($action['message'], '|'); if ($target_pos !== false) { if (!$this->show_targets || !$action['target']) { $action['message'] = mb_substr($action['message'], 0, $target_pos); } else { $action['message'] = str_replace('|', '', $action['message']); } } $action['message'] = sprintf($action['message'], $action['object_link'], $action['target_link']); } $action['is_new'] = (bool) (strtotime($action['pubdate']) > strtotime($inUser->logdate)); $action['user_url'] = cmsUser::getProfileURL($action['user_login']); $action['pubdate'] = cmsCore::dateDiffNow($action['pubdate']); $actions[] = $action; } return cmsCore::callEvent('GET_ACTIONS', $actions); }
function applet_tickets() { global $adminAccess; if (!cmsUser::isAdminCan('admin/tickets', $adminAccess)) { cpAccessDenied(); } global $_LANG; cmsUser::sessionDel('ticket_cat'); $do = cmsCore::request('do', 'str', 'list'); $super_user = cmsCore::c('user')->id == 1; $toolmenu = array(array('icon' => 'new.gif', 'title' => $_LANG['AD_TICKET_CREATE'], 'link' => '?view=tickets&do=add'), array('icon' => 'liststuff.gif', 'title' => $_LANG['AD_TICKET_LIST'], 'link' => '?view=tickets&do=list')); cpToolMenu($toolmenu, 'list', 'do'); cmsCore::c('page')->setTitle($_LANG['AD_TICKETS']); cpAddPathway($_LANG['AD_TICKETS'], 'index.php?view=tickets'); if ($do == 'list') { $fields = array(array('title' => 'id', 'field' => 'id', 'width' => '40'), array('title' => $_LANG['AD_TICKET_STATUS'], 'field' => 'status', 'width' => '100', 'filter' => 1, 'prc' => 'cpTicketStatus', 'filterlist' => cpGetTicketStatusList()), array('title' => $_LANG['AD_TICKET_DATE'], 'field' => 'pubdate', 'width' => '80'), array('title' => $_LANG['AD_TICKET_TITLE'], 'field' => 'title', 'width' => '', 'filter' => 32, 'link' => 'index.php?view=tickets&do=view&id=%id%'), array('title' => $_LANG['AD_TICKET_LAST_MSG_DATE'], 'field' => 'last_msg_date', 'width' => '80'), array('title' => $_LANG['AD_TICKET_CAT'], 'field' => 'cat_id', 'width' => '150', 'filter' => 1, 'prc' => 'cpTicketCategory', 'filter' => 1, 'filterlist' => cpGetTicketCats()), array('title' => $_LANG['AD_TICKET_PRIORITY'], 'field' => 'priority', 'width' => '100', 'filter' => 1, 'prc' => 'cpTicketPriority', 'filterlist' => cpGetTicketPriorityList())); if ($super_user) { $fields[] = array('title' => $_LANG['AD_TICKET_USER'], 'field' => 'user_id', 'width' => '110', 'prc' => 'cpTicketAuthor'); } $actions = array(array('title' => $_LANG['AD_TICKET_CLOSE'], 'icon' => 'off.gif', 'link' => '?view=tickets&do=close_ticket&id=%id%', 'condition' => 'cpCheckTicketClose'), array('title' => $_LANG['DELETE'], 'icon' => 'delete.gif', 'link' => '?view=tickets&do=delete&id=%id%', 'confirm' => $_LANG['AD_TICKET_DELETE'])); cpListTable('cms_ticket', $fields, $actions, $super_user ? '' : 'user_id=' . cmsCore::c('user')->id, 'last_msg_date DESC', 30); } if ($do == 'delete') { $id = cmsCore::request('id', 'int', 0); $item = cmsCore::c('db')->get_fields('cms_ticket', 'id=' . $id, '*'); if (!empty($item)) { $server = cmsCore::c('db')->get_field('cms_ticket_cat', 'id=' . $item['cat_id'], 'server'); if (empty($server)) { $server = 'http://ds-soft.ru/tickets.api.php'; } //Удаляем сам тиккет cmsCore::c('db')->delete('cms_ticket', 'id=' . $item['id']); //Удаляем все сообщения тиккета cmsCore::c('db')->delete('cms_ticket_msg', 'ticket_id=' . $item['id']); //Удаляем все прикрепленные изображения тиккета cmsCore::deleteUploadImages($item['id'], 'ticket'); if ($item['status'] != '3') { //Отправляем сообщение на сервер техподдержки что тикет удален cmsCore::c('curl')->ajax()->request('post', $server . '?do=ticket_deleted', array('ticket_id' => $item['id'], 'ticket_secret_key' => $item['secret_key'], 'host' => cmsCore::c('config')->host)); } cmsCore::addSessionMessage($_LANG['AD_TICKET_DELETE_SUCCESS'], 'success'); } else { cmsCore::addSessionMessage($_LANG['AD_TICKET_ERROR'], 'error'); } cmsCore::redirect('index.php?view=tickets'); } if ($do == 'close_ticket') { $id = cmsCore::request('id', 'int', 0); $item = cmsCore::c('db')->get_fields('cms_ticket', 'id=' . $id, '*'); if (!empty($item)) { cmsCore::c('db')->setFlag('cms_ticket', $item['id'], 'status', '3'); $server = cmsCore::c('db')->get_field('cms_ticket_cat', 'id=' . $item['cat_id'], 'server'); if (empty($server)) { $server = 'http://ds-soft.ru/tickets.api.php'; } //Отправляем сообщение на сервер техподдержки что тикет закрыт cmsCore::c('curl')->ajax()->request('post', $server . '?do=ticket_closed', array('ticket_id' => $item['id'], 'ticket_secret_key' => $item['secret_key'], 'host' => cmsCore::c('config')->host)); cmsCore::addSessionMessage($_LANG['AD_TICKET_CLOSE_SUCCESS'], 'success'); } else { cmsCore::addSessionMessage($_LANG['AD_TICKET_ERROR'], 'error'); } cmsCore::redirect('index.php?view=tickets'); } if ($do == 'add') { cpAddPathway($_LANG['AD_TICKET_CREATE'], 'index.php?view=tickets&do=add'); cmsCore::c('page')->initTemplate('applets', 'tickets_add')->assign('cats', cpGetTicketCats())->display(); } if ($do == 'submit') { $cats = cpGetTicketCats(); $item = array('cat_id' => cmsCore::request('cat_id', 'int', 0), 'priority' => cmsCore::request('priority', array(0, 1, 2, 3), 0), 'title' => cmsCore::request('title', 'str', ''), 'msg' => cmsCore::request('msg', 'str', '')); if (!isset($cats[$item['cat_id']])) { $item['cat_id'] = 0; } if (!empty($item['title']) && !empty($item['msg'])) { $item['msg'] = cmsCore::c('db')->escape_string($item['msg']); $item['msg_count'] = 1; $item['pubdate'] = date('Y-m-d H:i:s'); $item['last_msg_date'] = $item['pubdate']; $item['user_id'] = cmsCore::c('user')->id; $item['id'] = cmsCore::c('db')->insert('cms_ticket', $item); cmsCore::addSessionMessage($_LANG['AD_TICKET_CREATED'], 'success'); $do = 'send'; } else { cmsCore::addSessionMessage($_LANG['AD_TICKET_ERROR_2'], 'error'); cmsCore::redirect('index.php?view=tickets&do=add'); } } if ($do == 'send') { if (empty($item)) { $id = cmsCore::request('id', 'int', 0); $item = cmsCore::c('db')->get_fields('cms_ticket', 'id=' . $id, '*'); } if (!empty($item)) { $cat = cmsCore::c('db')->get_fields('cms_ticket_cat', 'id=' . $item['cat_id'], '*'); $server = !empty($cat['server']) ? $cat['server'] : 'http://ds-soft.ru/tickets.api.php'; $ticket = array('ticket_id' => $item['id'], 'cat_id' => $item['cat_id'], 'priority' => $item['priority'], 'title' => $item['title'], 'msg' => $item['msg'], 'host' => cmsCore::c('config')->host, 'module' => $cat['module']); if ($ticket['cat_id'] > 0 && !empty($cat['module'])) { $ticket['module'] = $cat['module']; } //Отправляем тикет на сервер техподдержки $result = cmsCore::c('curl')->ajax()->request('post', $server . '?do=add_ticket', $ticket)->json(); if (!empty($result['error'])) { cmsCore::clearSessionMessages(); cmsCore::addSessionMessage($result['error'], 'error'); cmsCore::c('db')->delete('cms_ticket', 'id=' . $item['id']); } else { if (isset($result['secret_key'])) { cmsCore::c('db')->update('cms_ticket', array('status' => 1, 'secret_key' => $result['secret_key']), $item['id']); cmsCore::addSessionMessage($_LANG['AD_TICKET_SENDED'], 'success'); } else { cmsCore::addSessionMessage($_LANG['AD_TICKET_UNKNOWN_ERROR'], 'error'); cmsCore::c('db')->delete('cms_ticket', 'id=' . $item['id']); } } } else { cmsCore::addSessionMessage($_LANG['AD_TICKET_ERROR'], 'error'); } cmsCore::redirect('index.php?view=tickets'); } if ($do == 'view') { $id = cmsCore::request('id', 'int', 0); $item = cmsCore::c('db')->get_fields('cms_ticket', 'id=' . $id, '*'); if (empty($item) || $item['user_id'] != cmsCore::c('user')->id && !$super_user) { cmsCore::addSessionMessage($_LANG['AD_TICKET_ERROR'], 'error'); cmsCore::redirect('index.php?view=tickets'); } cpAddPathway($item['title'], 'index.php?view=tickets&do=view&id=' . $item['id']); if ($item['msg_count'] > 1) { $item['msgs'] = array(); $results = cmsCore::c('db')->query("SELECT * FROM cms_ticket_msg WHERE ticket_id=" . $item['id'] . " ORDER BY pubdate ASC"); if (cmsCore::c('db')->num_rows($results)) { while ($msg = cmsCore::c('db')->fetch_assoc($results)) { $msg['pubdate'] = cmsCore::dateFormat($msg['pubdate']); $item['msgs'][] = $msg; } } } if ($item['status'] != 3) { switch ($item['priority']) { case 0: $class = 'info'; break; case 1: $class = 'success'; break; case 2: $class = 'primary'; break; case 3: $class = 'danger'; break; } } else { $class = 'default'; } cmsCore::c('page')->initTemplate('applets', 'tickets_view')->assign('item', $item)->display(); } if ($do == 'submit_msg') { $id = cmsCore::request('id', 'int', 0); $item = cmsCore::c('db')->get_fields('cms_ticket', 'id=' . $id, '*'); if (empty($item) || $item['user_id'] != cmsCore::c('user')->id && !$super_user) { cmsCore::addSessionMessage($_LANG['AD_TICKET_ERROR'], 'error'); cmsCore::redirect('index.php?view=tickets'); } $msg = cmsCore::request('msg', 'str', ''); $date = date('Y-m-d H:i:s'); cmsCore::c('db')->insert('cms_ticket_msg', array('msg' => cmsCore::c('db')->escape_string($msg), 'ticket_id' => $item['id'], 'pubdate' => $date)); cmsCore::c('db')->query("UPDATE `cms_tickets` SET `last_msg_date` = '" . $date . "', `msg_count` = `msg_count`+1 WHERE `id` = '" . $item['id'] . "'"); $server = cmsCore::c('db')->get_field('cms_ticket_cat', 'id=' . $item['cat_id'], 'server'); if (empty($server)) { $server = 'http://ds-soft.ru/tickets.api.php'; } //Отправляем тикет на сервер техподдержки $result = cmsCore::c('curl')->ajax()->request('post', $server . '?do=add_ticket_msg', array('msg' => $msg, 'ticket_id' => $item['id'], 'secret_key' => $item['secret_key'], 'host' => cmsCore::c('config')->host))->json(); if (!empty($result['error'])) { cmsCore::addSessionMessage($result['error'], 'error'); } else { cmsCore::addSessionMessage($_LANG['AD_TICKET_MSG_SENDED'], 'success'); } cmsCore::redirect('index.php?view=tickets&do=view&id=' . $item['id']); } }
public function getClubPreMembers($club_id, $role = '', $prem = '') { $club_members = array(); $role_where = $role ? "AND c.role = '{$role}'" : ''; $prem_where = $prem ? "AND premoderlist = '{$prem}'" : ''; $sql = "SELECT c.user_id, c.role, u.nickname, u.login, u.status, u.logdate, p.karma, p.gender, p.imageurl as admin_avatar, u.is_deleted\n\t\t\t\tFROM cms_user_clubs c\n\t\t\t\tLEFT JOIN cms_users u ON u.id = c.user_id\n\t\t\t\tLEFT JOIN cms_user_profiles p ON p.user_id = u.id\n\t\t\t\tWHERE club_id = '{$club_id}' {$role_where} {$prem_where}\n\t\t\t\tORDER BY c.role DESC, u.logdate DESC\n"; if ($this->inDB->limit) { $sql .= "LIMIT {$this->inDB->limit}"; } $rs = $this->inDB->query($sql); $this->inDB->resetConditions(); if (!$this->inDB->num_rows($rs)) { return $club_members; } while ($u = $this->inDB->fetch_assoc($rs)) { $u['admin_avatar'] = cmsUser::getUserAvatarUrl($u['user_id'], 'small', $u['admin_avatar'], $u['is_deleted']); $u['is_online'] = cmsUser::isOnline($u['user_id']); $u['logdate'] = cmsCore::dateFormat($u['logdate'], true, true); $club_members[] = $u; } return $club_members; }
function content() { $inCore = cmsCore::getInstance(); $inPage = cmsPage::getInstance(); $inDB = cmsDatabase::getInstance(); $inUser = cmsUser::getInstance(); $model = new cms_model_content(); define('IS_BILLING', $inCore->isComponentInstalled('billing')); if (IS_BILLING) { cmsCore::loadClass('billing'); } global $_LANG; $id = cmsCore::request('id', 'int', 0); $do = $inCore->do; $seolink = cmsCore::strClear(urldecode(cmsCore::request('seolink', 'html', ''))); if (is_numeric($seolink)) { cmsCore::error404(); } $page = cmsCore::request('page', 'int', 1); ///////////////////////////////////// VIEW CATEGORY //////////////////////////////////////////////////////////////////////////////// if ($do == 'view') { $cat = $inDB->getNsCategory('cms_category', $seolink); // если не найдена категория и мы не на главной, 404 if (!$cat && $inCore->menuId() !== 1) { cmsCore::error404(); } // языки $cat = translations::process(cmsConfig::getConfig('lang'), 'content_category', $cat); // Плагины $cat = cmsCore::callEvent('GET_CONTENT_CAT', $cat); // Неопубликованные показываем только админам if (!$cat['published'] && !$inUser->is_admin) { cmsCore::error404(); } // Проверяем доступ к категории if (!$inCore->checkUserAccess('category', $cat['id'])) { cmsCore::addSessionMessage($_LANG['NO_PERM_FOR_VIEW_TEXT'] . '<br>' . $_LANG['NO_PERM_FOR_VIEW_RULES'], 'error'); cmsCore::redirect('/content'); } // если не корень категорий if ($cat['NSLevel'] > 0) { $inPage->setTitle($cat['pagetitle'] ? $cat['pagetitle'] : $cat['title']); $pagetitle = $cat['title']; $showdate = $cat['showdate']; $showcomm = $cat['showcomm']; $inPage->addHead('<link rel="alternate" type="application/rss+xml" title="' . htmlspecialchars($cat['title']) . '" href="' . HOST . '/rss/content/' . $cat['id'] . '/feed.rss">'); } // Если корневая категория if ($cat['NSLevel'] == 0) { if ($model->config['hide_root']) { cmsCore::error404(); } $inPage->setTitle($_LANG['CATALOG_ARTICLES']); $pagetitle = $_LANG['CATALOG_ARTICLES']; $showdate = 1; $showcomm = 1; } // Получаем дерево категорий $path_list = $inDB->getNsCategoryPath('cms_category', $cat['NSLeft'], $cat['NSRight'], 'id, title, NSLevel, seolink, url'); if ($path_list) { $path_list = translations::process(cmsConfig::getConfig('lang'), 'content_category', $path_list); foreach ($path_list as $pcat) { if (!$inCore->checkUserAccess('category', $pcat['id'])) { cmsCore::addSessionMessage($_LANG['NO_PERM_FOR_VIEW_TEXT'] . '<br>' . $_LANG['NO_PERM_FOR_VIEW_RULES'], 'error'); cmsCore::redirect('/content'); } $inPage->addPathway($pcat['title'], $model->getCategoryURL(null, $pcat['seolink'])); } } // Получаем подкатегории $subcats_list = $model->getSubCats($cat['id']); // Привязанный фотоальбом $cat_photos = $model->getCatPhotoAlbum($cat['photoalbum']); // Получаем статьи // Редактор/администратор $is_editor = $cat['modgrp_id'] == $inUser->group_id && cmsUser::isUserCan('content/autoadd') || $inUser->is_admin; // Условия $model->whereCatIs($cat['id']); // Общее количество статей $total = $model->getArticlesCount($is_editor); // Сортировка и разбивка на страницы $inDB->orderBy($cat['orderby'], $cat['orderto']); $inDB->limitPage($page, $model->config['perpage']); // Получаем статьи $content_list = $total ? $model->getArticlesList(!$is_editor) : array(); $inDB->resetConditions(); if (!$content_list && $page > 1) { cmsCore::error404(); } $pagebar = cmsPage::getPagebar($total, $page, $model->config['perpage'], $model->getCategoryURL(null, $cat['seolink'], 0, true)); $template = $cat['tpl'] ? $cat['tpl'] : 'com_content_view.tpl'; if ($cat['NSLevel'] > 0) { // meta description if ($cat['meta_desc']) { $meta_desc = $cat['meta_desc']; } elseif (mb_strlen(strip_tags($cat['description'])) >= 250) { $meta_desc = crop($cat['description']); } else { $meta_desc = $cat['title']; } $inPage->setDescription($meta_desc); // meta keywords if ($cat['meta_keys']) { $meta_keys = $cat['meta_keys']; } elseif ($content_list) { foreach ($content_list as $c) { $k[] = $c['title']; } $meta_keys = implode(', ', $k); } else { $meta_keys = $cat['title']; } $inPage->setKeywords($meta_keys); } cmsPage::initTemplate('components', $template)->assign('cat', $cat)->assign('is_homepage', (bool) ($inCore->menuId() == 1))->assign('showdate', $showdate)->assign('showcomm', $showcomm)->assign('pagetitle', $pagetitle)->assign('subcats', $subcats_list)->assign('cat_photos', $cat_photos)->assign('articles', $content_list)->assign('pagebar', $pagebar)->display($template); } ///////////////////////////////////// READ ARTICLE //////////////////////////////////////////////////////////////////////////////// if ($do == 'read') { // Получаем статью $article = $model->getArticle($seolink); if (!$article) { cmsCore::error404(); } $article = translations::process(cmsConfig::getConfig('lang'), 'content_content', $article); $article = cmsCore::callEvent('GET_ARTICLE', $article); $is_admin = $inUser->is_admin; $is_author = $inUser->id == $article['user_id']; $is_author_del = cmsUser::isUserCan('content/delete'); $is_editor = $article['modgrp_id'] == $inUser->group_id && cmsUser::isUserCan('content/autoadd'); // если статья не опубликована или дата публикации позже, 404 if ((!$article['published'] || strtotime($article['pubdate']) > time()) && !$is_admin && !$is_editor && !$is_author) { cmsCore::error404(); } if (!$inCore->checkUserAccess('material', $article['id'])) { cmsCore::addSessionMessage($_LANG['NO_PERM_FOR_VIEW_TEXT'] . '<br>' . $_LANG['NO_PERM_FOR_VIEW_RULES'], 'error'); cmsCore::redirect($model->getCategoryURL(null, $article['catseolink'])); } // увеличиваем кол-во просмотров if (@(!$is_author)) { $inDB->setFlag('cms_content', $article['id'], 'hits', $article['hits'] + 1); } // Картинка статьи $article['image'] = file_exists(PATH . '/images/photos/medium/article' . $article['id'] . '.jpg') ? 'article' . $article['id'] . '.jpg' : ''; // Заголовок страницы $article['pagetitle'] = $article['pagetitle'] ? $article['pagetitle'] : $article['title']; // Тело статьи в зависимости от настроек $article['content'] = $model->config['readdesc'] ? $article['description'] . $article['content'] : $article['content']; // Дата публикации $article['pubdate'] = cmsCore::dateFormat($article['pubdate']); // Шаблон статьи $article['tpl'] = $article['tpl'] ? $article['tpl'] : 'com_content_read.tpl'; $inPage->setTitle($article['pagetitle']); // Получаем дерево категорий $path_list = $article['showpath'] ? $inDB->getNsCategoryPath('cms_category', $article['leftkey'], $article['rightkey'], 'id, title, NSLevel, seolink, url') : array(); if ($path_list) { $path_list = translations::process(cmsConfig::getConfig('lang'), 'content_category', $path_list); foreach ($path_list as $pcat) { if (!$inCore->checkUserAccess('category', $pcat['id'])) { cmsCore::addSessionMessage($_LANG['NO_PERM_FOR_VIEW_TEXT'] . '<br>' . $_LANG['NO_PERM_FOR_VIEW_RULES'], 'error'); cmsCore::redirect('/content'); } $inPage->addPathway($pcat['title'], $model->getCategoryURL(null, $pcat['seolink'])); } } $inPage->addPathway($article['title']); // Мета теги KEYWORDS и DESCRIPTION if ($article['meta_keys']) { $inPage->setKeywords($article['meta_keys']); } else { if (mb_strlen($article['content']) > 30) { $inPage->setKeywords(cmsCore::getKeywords(cmsCore::strClear($article['content']))); } } if (mb_strlen($article['meta_desc'])) { $inPage->setDescription($article['meta_desc']); } // Выполняем фильтры $article['content'] = cmsCore::processFilters($article['content']); // Разбивка статей на страницы $pt_pages = array(); if (!empty($GLOBALS['pt'])) { foreach ($GLOBALS['pt'] as $num => $page_title) { $pt_pages[$num]['title'] = $page_title; $pt_pages[$num]['url'] = $model->getArticleURL(null, $article['seolink'], $num + 1); } } // Рейтинг статьи if ($model->config['rating'] && $article['canrate']) { $karma = cmsKarma('content', $article['id']); $karma_points = cmsKarmaFormatSmall($karma['points']); $btns = cmsKarmaButtonsText('content', $article['id'], $karma['points'], $is_author); } cmsPage::initTemplate('components', $article['tpl'])->assign('article', $article)->assign('cfg', $model->config)->assign('page', $page)->assign('is_pages', !empty($GLOBALS['pt']))->assign('pt_pages', $pt_pages)->assign('is_admin', $is_admin)->assign('is_editor', $is_editor)->assign('is_author', $is_author)->assign('is_author_del', $is_author_del)->assign('tagbar', cmsTagBar('content', $article['id']))->assign('karma_points', @$karma_points)->assign('karma_votes', @$karma['votes'])->assign('karma_buttons', @$btns)->display($article['tpl']); // Комментарии статьи if ($article['published'] && $article['comments'] && $inCore->isComponentInstalled('comments')) { cmsCore::includeComments(); comments('article', $article['id'], array(), $is_author); } } ///////////////////////////////////// ADD ARTICLE ////////////////////////////////////////////////////////////////////////////////// if ($do == 'addarticle' || $do == 'editarticle') { $is_add = cmsUser::isUserCan('content/add'); // может добавлять статьи $is_auto_add = cmsUser::isUserCan('content/autoadd'); // добавлять статьи без модерации if (!$is_add && !$is_auto_add) { cmsCore::error404(); } // Для редактирования получаем статью и проверяем доступ if ($do == 'editarticle') { // Получаем статью $item = $model->getArticle($id); if (!$item) { cmsCore::error404(); } $pubcats = array(); // доступ к редактированию админам, авторам и редакторам if (!$inUser->is_admin && $item['user_id'] != $inUser->id && !($item['modgrp_id'] == $inUser->group_id && cmsUser::isUserCan('content/autoadd'))) { cmsCore::error404(); } } // Для добавления проверяем не вводили ли мы данные ранее if ($do == 'addarticle') { $item = cmsUser::sessionGet('article'); if ($item) { cmsUser::sessionDel('article'); } // Категории, в которые разрешено публиковать $pubcats = $model->getPublicCats(); if (!$pubcats) { cmsCore::addSessionMessage($_LANG['ADD_ARTICLE_ERR_CAT'], 'error'); cmsCore::redirectBack(); } } // не было запроса на сохранение, показываем форму if (!cmsCore::inRequest('add_mod')) { $dynamic_cost = false; // Если добавляем статью if ($do == 'addarticle') { $pagetitle = $_LANG['ADD_ARTICLE']; $inPage->setTitle($pagetitle); $inPage->addPathway($_LANG['USERS'], '/' . str_replace('/', '', cmsUser::PROFILE_LINK_PREFIX)); $inPage->addPathway($inUser->nickname, cmsUser::getProfileURL($inUser->login)); $inPage->addPathway($_LANG['MY_ARTICLES'], '/content/my.html'); $inPage->addPathway($pagetitle); // поддержка биллинга if (IS_BILLING) { $action = cmsBilling::getAction('content', 'add_content'); foreach ($pubcats as $p => $pubcat) { if ($pubcat['cost']) { $dynamic_cost = true; } else { $pubcats[$p]['cost'] = $action['point_cost'][$inUser->group_id]; } } cmsBilling::checkBalance('content', 'add_content', $dynamic_cost); } } // Если редактируем статью if ($do == 'editarticle') { $pagetitle = $_LANG['EDIT_ARTICLE']; $inPage->setTitle($pagetitle); $inPage->addPathway($_LANG['USERS'], '/' . str_replace('/', '', cmsUser::PROFILE_LINK_PREFIX)); if ($item['user_id'] != $inUser->id) { $user = $inDB->get_fields('cms_users', "id='{$item['user_id']}'", 'login, nickname'); $inPage->addPathway($user['nickname'], cmsUser::getProfileURL($user['login'])); } else { $inPage->addPathway($inUser->nickname, cmsUser::getProfileURL($inUser->login)); } $inPage->addPathway($_LANG['MY_ARTICLES'], '/content/my.html'); $inPage->addPathway($pagetitle); $item['tags'] = cmsTagLine('content', $item['id'], false); $item['image'] = file_exists(PATH . '/images/photos/small/article' . $item['id'] . '.jpg') ? 'article' . $item['id'] . '.jpg' : ''; if (!$is_auto_add) { cmsCore::addSessionMessage($_LANG['ATTENTION'] . ': ' . $_LANG['EDIT_ARTICLE_PREMODER'], 'info'); } } $inPage->initAutocomplete(); $autocomplete_js = $inPage->getAutocompleteJS('tagsearch', 'tags'); $item = cmsCore::callEvent('PRE_EDIT_ARTICLE', @$item ? $item : array()); cmsPage::initTemplate('components', 'com_content_edit')->assign('mod', $item)->assign('do', $do)->assign('cfg', $model->config)->assign('pubcats', $pubcats)->assign('pagetitle', $pagetitle)->assign('is_admin', $inUser->is_admin)->assign('is_billing', IS_BILLING)->assign('dynamic_cost', $dynamic_cost)->assign('autocomplete_js', $autocomplete_js)->display('com_content_edit.tpl'); } // Пришел запрос на сохранение статьи if (cmsCore::inRequest('add_mod')) { $errors = false; $article['category_id'] = cmsCore::request('category_id', 'int', 1); $article['user_id'] = $item['user_id'] ? $item['user_id'] : $inUser->id; $article['title'] = cmsCore::request('title', 'str', ''); $article['tags'] = cmsCore::request('tags', 'str', ''); $article['description'] = cmsCore::request('description', 'html', ''); $article['content'] = cmsCore::request('content', 'html', ''); $article['description'] = cmsCore::badTagClear($article['description']); $article['content'] = cmsCore::badTagClear($article['content']); $article['published'] = $is_auto_add ? 1 : 0; if ($do == 'editarticle') { $article['published'] = $item['published'] == 0 ? $item['published'] : $article['published']; } $article['pubdate'] = $do == 'editarticle' ? $item['pubdate'] : date('Y-m-d H:i'); $article['enddate'] = $do == 'editarticle' ? $item['enddate'] : $article['pubdate']; $article['is_end'] = $do == 'editarticle' ? $item['is_end'] : 0; $article['showtitle'] = $do == 'editarticle' ? $item['showtitle'] : 1; $article['meta_desc'] = $do == 'addarticle' ? mb_strtolower($article['title']) : $inDB->escape_string($item['meta_desc']); $article['meta_keys'] = $do == 'addarticle' ? $inCore->getKeywords($article['content']) : $inDB->escape_string($item['meta_keys']); $article['showdate'] = $do == 'editarticle' ? $item['showdate'] : 1; $article['showlatest'] = $do == 'editarticle' ? $item['showlatest'] : 1; $article['showpath'] = $do == 'editarticle' ? $item['showpath'] : 1; $article['comments'] = $do == 'editarticle' ? $item['comments'] : 1; $article['canrate'] = $do == 'editarticle' ? $item['canrate'] : 1; $article['pagetitle'] = ''; if ($do == 'editarticle') { $article['tpl'] = $item['tpl']; } if (mb_strlen($article['title']) < 2) { cmsCore::addSessionMessage($_LANG['REQ_TITLE'], 'error'); $errors = true; } if (mb_strlen($article['content']) < 10) { cmsCore::addSessionMessage($_LANG['REQ_CONTENT'], 'error'); $errors = true; } if ($errors) { // При добавлении статьи при ошибках сохраняем введенные поля if ($do == 'addarticle') { cmsUser::sessionPut('article', $article); } cmsCore::redirectBack(); } $article['description'] = $inDB->escape_string($article['description']); $article['content'] = $inDB->escape_string($article['content']); $article = cmsCore::callEvent('AFTER_EDIT_ARTICLE', $article); // добавление статьи if ($do == 'addarticle') { $article_id = $model->addArticle($article); } // загрузка фото $file = 'article' . (@$article_id ? $article_id : $item['id']) . '.jpg'; if (cmsCore::request('delete_image', 'int', 0)) { @unlink(PATH . "/images/photos/small/{$file}"); @unlink(PATH . "/images/photos/medium/{$file}"); } // Загружаем класс загрузки фото cmsCore::loadClass('upload_photo'); $inUploadPhoto = cmsUploadPhoto::getInstance(); // Выставляем конфигурационные параметры $inUploadPhoto->upload_dir = PATH . '/images/photos/'; $inUploadPhoto->small_size_w = $model->config['img_small_w']; $inUploadPhoto->medium_size_w = $model->config['img_big_w']; $inUploadPhoto->thumbsqr = $model->config['img_sqr']; $inUploadPhoto->is_watermark = $model->config['watermark']; $inUploadPhoto->input_name = 'picture'; $inUploadPhoto->filename = $file; // Процесс загрузки фото $inUploadPhoto->uploadPhoto(); // операции после добавления/редактирования статьи // добавление статьи if ($do == 'addarticle') { // Получаем добавленную статью $article = $model->getArticle($article_id); if (!$article['published']) { cmsCore::addSessionMessage($_LANG['ARTICLE_PREMODER_TEXT'], 'info'); // отсылаем уведомление администраторам $link = '<a href="' . $model->getArticleURL(null, $article['seolink']) . '">' . $article['title'] . '</a>'; $message = str_replace('%user%', cmsUser::getProfileLink($inUser->login, $inUser->nickname), $_LANG['MSG_ARTICLE_SUBMIT']); $message = str_replace('%link%', $link, $message); cmsUser::sendMessageToGroup(USER_UPDATER, cmsUser::getAdminGroups(), $message); } else { //регистрируем событие cmsActions::log('add_article', array('object' => $article['title'], 'object_url' => $model->getArticleURL(null, $article['seolink']), 'object_id' => $article['id'], 'target' => $article['cat_title'], 'target_url' => $model->getCategoryURL(null, $article['catseolink']), 'target_id' => $article['category_id'], 'description' => '')); if (IS_BILLING) { $category_cost = $article['cost'] === '' ? false : (int) $article['cost']; cmsBilling::process('content', 'add_content', $category_cost); } cmsUser::checkAwards($inUser->id); } cmsCore::addSessionMessage($_LANG['ARTICLE_SAVE'], 'info'); cmsCore::redirect('/my.html'); } // Редактирование статьи if ($do == 'editarticle') { $model->updateArticle($item['id'], $article, true); cmsActions::updateLog('add_article', array('object' => $article['title']), $item['id']); if (!$article['published']) { $link = '<a href="' . $model->getArticleURL(null, $item['seolink']) . '">' . $article['title'] . '</a>'; $message = str_replace('%user%', cmsUser::getProfileLink($inUser->login, $inUser->nickname), $_LANG['MSG_ARTICLE_EDITED']); $message = str_replace('%link%', $link, $message); cmsUser::sendMessageToGroup(USER_UPDATER, cmsUser::getAdminGroups(), $message); } $mess = $article['published'] ? $_LANG['ARTICLE_SAVE'] : $_LANG['ARTICLE_SAVE'] . ' ' . $_LANG['ARTICLE_PREMODER_TEXT']; cmsCore::addSessionMessage($mess, 'info'); cmsCore::redirect($model->getArticleURL(null, $item['seolink'])); } } } ///////////////////////// PUBLISH ARTICLE ///////////////////////////////////////////////////////////////////////////// if ($do == 'publisharticle') { if (!$inUser->id) { cmsCore::error404(); } $article = $model->getArticle($id); if (!$article) { cmsCore::error404(); } // Редактор с правами на добавление без модерации или администраторы могут публиковать if (!($article['modgrp_id'] == $inUser->group_id && cmsUser::isUserCan('content/autoadd')) && !$inUser->is_admin) { cmsCore::error404(); } $inDB->setFlag('cms_content', $article['id'], 'published', 1); cmsCore::callEvent('ADD_ARTICLE_DONE', $article); if (IS_BILLING) { $author = $inDB->get_fields('cms_users', "id='{$article['user_id']}'", '*'); $category_cost = $article['cost'] === '' ? false : (int) $article['cost']; cmsBilling::process('content', 'add_content', $category_cost, $author); } //регистрируем событие cmsActions::log('add_article', array('object' => $article['title'], 'user_id' => $article['user_id'], 'object_url' => $model->getArticleURL(null, $article['seolink']), 'object_id' => $article['id'], 'target' => $article['cat_title'], 'target_url' => $model->getCategoryURL(null, $article['catseolink']), 'target_id' => $article['cat_id'], 'description' => '')); $link = '<a href="' . $model->getArticleURL(null, $article['seolink']) . '">' . $article['title'] . '</a>'; $message = str_replace('%link%', $link, $_LANG['MSG_ARTICLE_ACCEPTED']); cmsUser::sendMessage(USER_UPDATER, $article['user_id'], $message); cmsUser::checkAwards($article['user_id']); cmsCore::redirectBack(); } ///////////////////////////////////// DELETE ARTICLE /////////////////////////////////////////////////////////////////////////////////// if ($do == 'deletearticle') { if (!$inUser->id) { cmsCore::error404(); } $article = $model->getArticle($id); if (!$article) { cmsCore::error404(); } // права доступа $is_author = cmsUser::isUserCan('content/delete') && $article['user_id'] == $inUser->id; $is_editor = $article['modgrp_id'] == $inUser->group_id && cmsUser::isUserCan('content/autoadd'); if (!$is_author && !$is_editor && !$inUser->is_admin) { cmsCore::error404(); } if (!cmsCore::inRequest('goadd')) { $inPage->setTitle($_LANG['ARTICLE_REMOVAL']); $inPage->addPathway($_LANG['ARTICLE_REMOVAL']); $confirm['title'] = $_LANG['ARTICLE_REMOVAL']; $confirm['text'] = $_LANG['ARTICLE_REMOVAL_TEXT'] . ' <a href="' . $model->getArticleURL(null, $article['seolink']) . '">' . $article['title'] . '</a>?'; $confirm['action'] = $_SERVER['REQUEST_URI']; $confirm['yes_button'] = array(); $confirm['yes_button']['type'] = 'submit'; $confirm['yes_button']['name'] = 'goadd'; cmsPage::initTemplate('components', 'action_confirm')->assign('confirm', $confirm)->display('action_confirm.tpl'); } else { $model->deleteArticle($article['id']); if ($_SERVER['HTTP_REFERER'] == '/my.html') { cmsCore::addSessionMessage($_LANG['ARTICLE_DELETED'], 'info'); cmsCore::redirectBack(); } else { // если удалили как администратор или редактор и мы не авторы статьи, отсылаем сообщение автору if (($is_editor || $inUser->is_admin) && $article['user_id'] != $inUser->id) { $link = '<a href="' . $model->getArticleURL(null, $article['seolink']) . '">' . $article['title'] . '</a>'; $message = str_replace('%link%', $link, $article['published'] ? $_LANG['MSG_ARTICLE_DELETED'] : $_LANG['MSG_ARTICLE_REJECTED']); cmsUser::sendMessage(USER_UPDATER, $article['user_id'], $message); } else { cmsCore::addSessionMessage($_LANG['ARTICLE_DELETED'], 'info'); } cmsCore::redirect($model->getCategoryURL(null, $article['catseolink'])); } } } ///////////////////////////////////// MY ARTICLES /////////////////////////////////////////////////////////////////////////////////// if ($do == 'my') { if (!cmsUser::isUserCan('content/add')) { cmsCore::error404(); } $inPage->setTitle($_LANG['MY_ARTICLES']); $inPage->addPathway($_LANG['USERS'], '/' . str_replace('/', '', cmsUser::PROFILE_LINK_PREFIX)); $inPage->addPathway($inUser->nickname, cmsUser::getProfileURL($inUser->login)); $inPage->addPathway($_LANG['MY_ARTICLES']); $perpage = 15; // Условия $model->whereUserIs($inUser->id); // Общее количество статей $total = $model->getArticlesCount(false); // Сортировка и разбивка на страницы $inDB->orderBy('con.pubdate', 'DESC'); $inDB->limitPage($page, $perpage); // Получаем статьи $content_list = $total ? $model->getArticlesList(false) : array(); $inDB->resetConditions(); cmsPage::initTemplate('components', 'com_content_my')->assign('articles', $content_list)->assign('total', $total)->assign('user_can_delete', cmsUser::isUserCan('content/delete'))->assign('pagebar', cmsPage::getPagebar($total, $page, $perpage, '/content/my%page%.html'))->display('com_content_my.tpl'); } ///////////////////////////////////// BEST ARTICLES /////////////////////////////////////////////////////////////////////////////////// if ($do == 'best') { $inPage->setTitle($_LANG['ARTICLES_RATING']); $inPage->addPathway($_LANG['ARTICLES_RATING']); // Только статьи, за которые можно голосовать $inDB->where("con.canrate = 1"); // Сортировка и разбивка на страницы $inDB->orderBy('con.rating', 'DESC'); $inDB->limitPage(1, 30); // Получаем статьи $content_list = $model->getArticlesList(); cmsPage::initTemplate('components', 'com_content_rating')->assign('articles', $content_list)->display('com_content_rating.tpl'); } }
/** * Получаем статьи по заданным параметрам * @return array */ public function getArticlesList($only_published = true) { $today = date("Y-m-d H:i:s"); if ($only_published) { $this->inDB->where("con.published = 1 AND con.pubdate <= '{$today}' AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '{$today}'))"); } $sql = "SELECT con.*,\r\n\t\t\t\t\t cat.title as cat_title, cat.seolink as catseolink,\r\n\t\t\t\t\t cat.showdesc,\r\n u.nickname as author,\r\n u.login as user_login\r\n FROM cms_content con\r\n\t\t\t\tINNER JOIN cms_category cat ON cat.id = con.category_id\r\n\t\t\t\tLEFT JOIN cms_users u ON u.id = con.user_id\r\n WHERE con.is_arhive = 0\r\n {$this->inDB->where}\r\n\r\n {$this->inDB->group_by}\r\n\r\n {$this->inDB->order_by}\n"; if ($this->inDB->limit) { $sql .= "LIMIT {$this->inDB->limit}"; } $result = $this->inDB->query($sql); $this->inDB->resetConditions(); if (!$this->inDB->num_rows($result)) { return false; } while ($article = $this->inDB->fetch_assoc($result)) { $article['fpubdate'] = cmsCore::dateFormat($article['pubdate']); $article['ffpubdate'] = date('c', strtotime($article['pubdate'])); $article['tagline'] = cmsTagLine('content', $article['id'], true); $article['comments'] = cmsCore::getCommentsCount('article', $article['id']); $article['url'] = $this->getArticleURL(null, $article['seolink']); $article['cat_url'] = $this->getCategoryURL(null, $article['catseolink']); $article['image'] = file_exists(PATH . '/images/photos/small/article' . $article['id'] . '.jpg') ? 'article' . $article['id'] . '.jpg' : ''; $articles[] = $article; } $articles = cmsCore::callEvent('GET_ARTICLES', $articles); return translations::process(cmsConfig::getConfig('lang'), 'content_content', $articles); }
public function getArhiveContent() { $sql = "SELECT {$this->inDB->select}\n FROM cms_content con\n\t\t\t\t{$this->inDB->join}\n WHERE 1=1 {$this->inDB->where}\n {$this->inDB->group_by}\n {$this->inDB->order_by}\n"; if ($this->inDB->limit) { $sql .= "LIMIT {$this->inDB->limit}"; } $result = $this->inDB->query($sql); $this->inDB->resetConditions(); if (!$this->inDB->num_rows($result)) { return array(); } cmsCore::loadModel('content'); $content_model = new cms_model_content(); while ($item = $this->inDB->fetch_assoc($result)) { if (!isset($item['seolink'])) { $item['fmonth'] = cmsCore::intMonthToStr($item['month']); } else { $item['url'] = $content_model->getArticleURL(0, $item['seolink']); $item['category_url'] = $content_model->getCategoryURL(0, $item['cat_seolink']); $item['fpubdate'] = cmsCore::dateFormat($item['pubdate']); } $item['image'] = file_exists(PATH . '/images/photos/small/article' . $item['id'] . '.jpg') ? 'article' . $item['id'] . '.jpg' : ''; $content[] = $item; } return cmsCore::callEvent('GET_ARHIVE', $content); }
function mod_uc($module_id, $cfg) { $inDB = cmsDatabase::getInstance(); cmsCore::loadModel('catalog'); if (!in_array(@$cfg['sort'], array('rating', 'hits', 'pubdate'))) { $cfg['sort'] = 'pubdate'; } global $_LANG; if (@$cfg['cat_id'] > 0) { if (!@$cfg['subs']) { //select from category $catsql = ' AND i.category_id = ' . $cfg['cat_id']; } else { //select from category and subcategories $rootcat = $inDB->get_fields('cms_uc_cats', "id='{$cfg['cat_id']}'", 'NSLeft, NSRight'); if (!$rootcat) { return false; } $catsql = "AND (c.NSLeft >= {$rootcat['NSLeft']} AND c.NSRight <= {$rootcat['NSRight']})"; } } else { $catsql = ''; } $sql = "SELECT i.* , IFNULL(AVG( r.points ), 0) AS rating, c.view_type as viewtype\n FROM cms_uc_items i\n LEFT JOIN cms_uc_cats c ON c.id = i.category_id\n LEFT JOIN cms_uc_ratings r ON r.item_id = i.id\n WHERE i.published = 1 {$catsql}\n GROUP BY i.id\n ORDER BY {$cfg['sort']} DESC\n LIMIT " . $cfg['num']; $result = $inDB->query($sql); $items = array(); if (!$inDB->num_rows($result)) { return false; } cmsCore::includeFile('components/catalog/includes/shopcore.php'); if ($cfg['showtype'] == 'thumb') { while ($item = $inDB->fetch_assoc($result)) { if (mb_strlen($item['imageurl']) < 4) { $item['imageurl'] = 'nopic.jpg'; } elseif (!file_exists(PATH . '/images/catalog/small/' . $item['imageurl'])) { $item['imageurl'] = 'nopic.jpg'; } if ($item['viewtype'] == 'shop') { $item['price'] = number_format(shopDiscountPrice($item['id'], $item['category_id'], $item['price']), 2, '.', ' '); } $items[] = $item; } } if ($cfg['showtype'] == 'list') { while ($item = $inDB->fetch_assoc($result)) { $item['fieldsdata'] = cmsCore::yamlToArray($item['fieldsdata']); $item['title'] = mb_substr($item['title'], 0, 40); for ($f = 0; $f < $cfg['showf']; $f++) { $item['fdata'][] = cms_model_catalog::getUCSearchLink($item['category_id'], $item['fieldsdata'][$f]); } if ($cfg['sort'] == 'rating') { $item['key'] = '<a href="/catalog/item' . $item['id'] . '.html" title="' . $_LANG['UC_MODULE_RATING'] . ': ' . round($item['rating'], 2) . '">' . cms_model_catalog::buildRating(round($item['rating'], 2)) . '</a>'; } elseif ($cfg['sort'] == 'hits') { $item['key'] = $_LANG['UC_MODULE_VIEWS'] . ': <a href="/catalog/item' . $item['id'] . '.html" title="' . $_LANG['UC_MODULE_VIEWS'] . '">' . $item['hits'] . '</a>'; } else { $item['key'] = cmsCore::dateFormat($item['pubdate']); } if ($item['viewtype'] == 'shop') { $item['price'] = number_format(shopDiscountPrice($item['id'], $item['category_id'], $item['price']), 2, '.', ' '); } $items[] = $item; } } cmsPage::initTemplate('modules', 'mod_uc')->assign('items', $items)->assign('cfg', $cfg)->display('mod_uc.tpl'); return true; }
public function getArhiveContent(){ $sql = "SELECT ". cmsCore::c('db')->select ." FROM cms_content con ". cmsCore::c('db')->join ." WHERE 1=1 ". cmsCore::c('db')->where ." ". cmsCore::c('db')->group_by ." ". cmsCore::c('db')->order_by ."\n"; if (cmsCore::c('db')->limit){ $sql .= "LIMIT ". cmsCore::c('db')->limit; } $result = cmsCore::c('db')->query($sql); cmsCore::c('db')->resetConditions(); if (!cmsCore::c('db')->num_rows($result)) { return array(); } while ($item = cmsCore::c('db')->fetch_assoc($result)){ if(!isset($item['seolink'])){ $item['fmonth'] = cmsCore::intMonthToStr($item['month']); } else { $item['url'] = cmsCore::m('content')->getArticleURL(0, $item['seolink']); $item['category_url'] = cmsCore::m('content')->getCategoryURL(0, $item['cat_seolink']); $item['fpubdate'] = cmsCore::dateFormat($item['pubdate']); } $item['image'] = (file_exists(PATH.'/images/photos/small/article'.$item['id'].'.jpg') ? 'article'.$item['id'].'.jpg' : ''); $content[] = $item; } return cmsCore::callEvent('GET_ARHIVE', $content); }
function getCalendar($start_time, $end_time, $category_id, $parent_id, $show_hidden = FALSE) { if ($start_time and $end_time) { $sql = "SELECT cms_events.*,\n cms_events_category.name as category_name,\n cms_events_category.bg,\n cms_events_category.tx,\n cms_events_category.id as category_id\n FROM cms_events \n LEFT JOIN cms_events_category ON cms_events.category_id = cms_events_category.id\n WHERE cms_events.parent_id = '{$parent_id}' \n AND cms_events.start_time > '{$start_time}'\n AND cms_events.end_time < '{$end_time}'"; } else { $sql = "SELECT cms_events.*,\n cms_events_category.name as category_name,\n cms_events_category.bg,\n cms_events_category.tx,\n cms_events_category.id as category_id\n FROM cms_events \n LEFT JOIN cms_events_category ON cms_events.category_id = cms_events_category.id"; } if (!$show_hidden) { $sql .= 'AND cms_events.hide = 0'; } if ($category_id) { $sql .= " AND category_id = {$category_id}"; } $sql .= " ORDER BY cms_events.start_time ASC"; $result = $this->inDB->query($sql); if ($this->inDB->error()) { print mysql_error(); return false; } if (!$this->inDB->num_rows($result)) { return false; } $output = array(); while ($row = $this->inDB->fetch_assoc($result)) { $row['start_date'] = date("Y-m-d H:i", $row['start_time']); $row['end_date'] = date("Y-m-d H:i", $row['end_time']); $row['f_start_date'] = cmsCore::dateFormat(date("Y-m-d H:i", $row['start_time'])); $row['f_end_date'] = cmsCore::dateFormat(date("Y-m-d H:i", $row['end_time'])); if ($row['bg'] == "") { $row['bg'] = $this->config['public_bg_color']; $row['tx'] = $this->config['public_tx_color']; } $output[] = $row; } return $output; }