コード例 #1
0
ファイル: Rss.php プロジェクト: ASDAFF/advboard
 public function indexAction()
 {
     global $structure;
     if (!cot_module_active('rss')) {
         cot_die_message(404, TRUE);
     }
     $c = cot_import('c', 'G', 'TXT');
     if (!empty($c)) {
         if (!isset($structure['advboard'][$c])) {
             cot_die_message(404, TRUE);
         }
         list(cot::$usr['auth_read'], cot::$usr['auth_write'], cot::$usr['isadmin']) = cot_auth('advboard', $c);
         cot_block(cot::$usr['auth_read']);
     }
     $rss_title = cot::$L['advboard_rss_feed'] . cot::$cfg['maintitle'];
     $rss_link = cot::$cfg['mainurl'];
     $rss_description = cot::$cfg['subtitle'];
     $domain = cot::$sys['domain'];
     $condition = array(array('state', advboard_model_Advert::PUBLISHED), array('begin', cot::$sys['now'], '<='), array('SQL', "expire = 0 OR expire > " . cot::$sys['now']));
     if (!empty($c)) {
         $rss_title = cot::$L['advboard_rss_feed'] . $structure['advboard'][$c]['title'] . ' - ' . cot::$cfg['maintitle'];
         $condition[] = array('category', $c);
     }
     $advertisement = advboard_model_Advert::find($condition, cot::$cfg['rss']['rss_maxitems'], 0, array(array('sort', 'desc')));
     $t = new XTemplate(cot_tplfile('rss'));
     $now = cot::$sys['now'];
     $now += cot::$usr['timezone'] * 3600;
     $t->assign(array('RSS_ENCODING' => cot::$cfg['rss']['rss_charset'], 'RSS_TITLE' => htmlspecialchars($rss_title), 'RSS_LINK' => $rss_link, 'RSS_LANG' => cot::$cfg['defaultlang'], 'RSS_DESCRIPTION' => htmlspecialchars($rss_description), 'RSS_DATE' => $this->fixPubDate(date("r", $now))));
     if (!empty($advertisement)) {
         foreach ($advertisement as $advert) {
             $url = $advert->url;
             if (!cot_url_check($url)) {
                 $url = COT_ABSOLUTE_URL . $url;
             }
             $date = '';
             if (!empty($advert->created)) {
                 $date = strtotime($advert->created);
                 $date += cot::$usr['timezone'] * 3600;
                 $date = date('r', $date);
                 $date = $this->fixPubDate($date);
             }
             $text = $advert->text;
             $textlength = intval(cot::$cfg['rss']['rss_pagemaxsymbols']);
             if ($textlength > 0 && mb_strlen($text) > $textlength) {
                 $text = cot_string_truncate($text, $textlength, true, false, cot::$R['advboard_cuttext']);
             }
             $t->assign(array('RSS_ROW_TITLE' => htmlspecialchars($advert->title), 'RSS_ROW_DESCRIPTION' => $this->convertRelativeUrls($text), 'RSS_ROW_DATE' => $date, 'RSS_ROW_LINK' => $url));
             $t->parse('MAIN.ITEM_ROW');
         }
     }
     $t->parse('MAIN');
     //        ob_clean();
     header('Content-type: text/xml; charset=UTF-8');
     echo $t->text('MAIN');
     exit;
 }
コード例 #2
0
[BEGIN_COT_EXT]
Hooks=comments.send.new
[END_COT_EXT]
==================== */
/**
 * Ads board module for Cotonti Siena
 *
 * @package Advboard
 * @author Kalnov Alexey    <*****@*****.**>
 * @copyright (c) 2015 Portal30 Studio http://portal30.ru
 */
defined('COT_CODE') or die('Wrong URL.');
require_once cot_incfile('advboard', 'module');
$adv_cat = '';
if ($comarray['com_area'] == 'advboard' && cot::$cfg['advboard']['notifyUserNewComment'] == 1 && $comarray['com_code'] > 0) {
    $advert = advboard_model_Advert::getById($comarray['com_code']);
    if ($advert && $advert->issetEmail(true)) {
        // Очистить кеш
        // todo очистка кеша в одном файле с мультихуком
        //        if (ab_inBoardCat($adv_cat) && $cache && $cfg['plugin']['advboard']['recentAdvCacheTime'] > 0) {
        //            /** @var Memcache_driver $ab_CacheDrv  */
        //            $ab_CacheDrv = ab_getCacheDrv();
        //            $cache_key = 'RECENT_ADVS';
        //            $advRealm = COT_DEFAULT_REALM;
        //            $ab_CacheDrv->remove($cache_key, $advRealm);
        //        }
        //Очистить кеш
        $advertUrl = $advert->getUrl();
        if (!cot_url_check($advertUrl)) {
            $advertUrl = COT_ABSOLUTE_URL . $advertUrl;
        }
コード例 #3
0
ファイル: Compare.php プロジェクト: ASDAFF/advboard
 public function ajxAddAction()
 {
     $ret = array('error' => '', 'added' => array(), 'addedIds' => array(), 'removedIds' => array());
     $ids = null;
     if (isset($_POST['ids'])) {
         if (is_array($_POST['ids'])) {
             $ids = cot_import('ids', 'P', 'ARR');
             $ids = array_unique(array_map('intval', $ids));
         } elseif (is_int($_POST['ids']) || ctype_digit($_POST['ids'])) {
             $tmp = cot_import('ids', 'P', 'INT');
             if ($tmp) {
                 $ids = array($tmp);
             }
         }
     }
     if (!$ids) {
         $ret['error'] = cot::$L['advboard_not_found'];
         echo json_encode($ret);
         exit;
     }
     $advertisement = advboard_model_Advert::find(array(array('id', $ids)));
     if (!$advertisement) {
         $ret['error'] = cot::$L['advboard_not_found'];
         echo json_encode($ret);
         exit;
     }
     foreach ($advertisement as $advRow) {
         if ($tmp = $this->addToCompare($advRow)) {
             $ret['added'][] = $tmp;
         }
     }
     $ret['count'] = count($_SESSION['advboard_compare'][cot::$sys['site_id']]);
     echo json_encode($ret);
     exit;
 }
コード例 #4
0
ファイル: User.php プロジェクト: ASDAFF/advboard
 /**
  * Рассылка уведомлений об истечении сроков публикации объявления
  */
 public static function sendExpireNotify()
 {
     global $L;
     $cacheFileName = cot::$cfg["modules_dir"] . '/advboard/inc/send.txt';
     if (file_exists($cacheFileName)) {
         $adv_send = file_get_contents($cacheFileName);
     } else {
         $adv_send = 0;
     }
     $tmp = getdate(cot::$sys['now']);
     $today = mktime(0, 0, 0, $tmp["mon"], $tmp["mday"], $tmp["year"]);
     // Рассылаем раз в сутки
     if ($today - $adv_send >= 86400) {
         // Период за который рассылаем
         if ($adv_send == 0) {
             // не разу не рассылали еще
             $adv_sendPer = cot::$cfg['advboard']['expNotifyPeriod'];
         } else {
             $adv_sendPer = floor(($today - $adv_send) / 86400);
         }
         // Уведомляем об истечении
         // Пока тупо шлем напоминание всем объявлениям у которых дата истечения
         // Больше той, когда заходили последний раз, но меньше текущей минус <уведомить за>
         $stDay = $tmp["mday"] + cot::$cfg['advboard']['expNotifyPeriod'] - $adv_sendPer;
         $periodStart = mktime(0, 0, 0, $tmp["mon"], $stDay, $tmp["year"]);
         if ($periodStart < cot::$sys['now']) {
             $periodStart = cot::$sys['now'];
         }
         $periodEnd = mktime(0, 0, 0, $tmp["mon"], $tmp["mday"] + cot::$cfg['advboard']['expNotifyPeriod'], $tmp["year"]);
         $condition = array(array('expire', $periodStart, '>='), array('expire', $periodEnd, '<'), array('state', advboard_model_Advert::PUBLISHED), array('user', 0, '>'));
         $advertisement = advboard_model_Advert::find($condition, 0, 0, array(array('id', 'ASC')));
         $cnt = 0;
         if ($advertisement) {
             foreach ($advertisement as $advRow) {
                 if (!$advRow->issetEmail(true)) {
                     return false;
                 }
                 $advertUrl = $advRow->getUrl();
                 if (!cot_url_check($advertUrl)) {
                     $advertUrl = COT_ABSOLUTE_URL . $advertUrl;
                 }
                 $advertEditUrl = $advRow->getEditUrl();
                 if (!cot_url_check($advertEditUrl)) {
                     $advertEditUrl = COT_ABSOLUTE_URL . $advertEditUrl;
                 }
                 $myAdvsUrl = cot_url('advboard', 'm=user');
                 if (!cot_url_check($myAdvsUrl)) {
                     $myAdvsUrl = COT_ABSOLUTE_URL . $myAdvsUrl;
                 }
                 $tmpL = $L;
                 $text = $advRow->description;
                 if (empty($text)) {
                     $text = $advRow->text;
                 }
                 $user = null;
                 $userLang = cot::$cfg['defaultlang'];
                 $owner = $advRow->getOwner();
                 if ($owner['user_id'] > 0) {
                     if (cot::$cfg['defaultlang'] != $owner['user_lang']) {
                         $userLang = $owner['user_lang'];
                         include cot_langfile('main', 'core', cot::$cfg['defaultlang'], $owner['user_lang']);
                         include cot_langfile('advboard', 'module', cot::$cfg['defaultlang'], $owner['user_lang']);
                     }
                 }
                 $mailView = new View();
                 $mailView->advert = $advRow;
                 $mailView->user = $owner;
                 $mailView->advertUrl = $advertUrl;
                 $mailView->advertEditUrl = $advertEditUrl;
                 $mailView->myAdvsUrl = $myAdvsUrl;
                 $mailView->advertText = $text;
                 $mailSubject = cot::$L['advboard_expire_title'];
                 $mailBody = $mailView->render('advboard.notify_expire.' . $userLang . '.' . $advRow->category);
                 if (cot_mail($advRow->getEmail(false, true), $mailSubject, $mailBody, '', false, null, true)) {
                     $cnt++;
                 }
                 // Вернем язык на место
                 $L = $tmpL;
             }
         }
         file_put_contents($cacheFileName, $today);
         return $cnt;
     }
     return 0;
 }
コード例 #5
0
ファイル: Widget.php プロジェクト: ASDAFF/advboard
 public static function adsList($condition = array(), $tpl = 'advboard.widget.list', $items = 0, $order = '', $onlyActive = true, $pagination = 'pld', $params = array())
 {
     // Get pagination number if necessary
     if (!empty($pagination)) {
         list($pg, $d, $durl) = cot_import_pagenav($pagination, $items);
     } else {
         $d = 0;
     }
     if (empty($condition)) {
         $condition = array();
     }
     if ($onlyActive) {
         $condition[] = array('begin', cot::$sys['now'], '<=');
         $condition[] = array('SQL', "expire = 0 OR expire > " . cot::$sys['now']);
         $condition[] = array('state', advboard_model_Advert::PUBLISHED);
     }
     if (empty($order)) {
         $order = array(array('state', 'ASC'), array('sort', 'DESC'));
     }
     /* === Hook === */
     foreach (cot_getextplugins('advboard.widget.list.query') as $pl) {
         include $pl;
     }
     /* ===== */
     $totallines = advboard_model_Advert::count($condition);
     $advertisement = advboard_model_Advert::find($condition, $items, $d, $order);
     // Render pagination
     if (empty($params['module'])) {
         $params['module'] = defined('COT_PLUG') ? 'plug' : cot::$env['ext'];
     }
     if (empty($params['urlParams'])) {
         if (defined('COT_LIST')) {
             global $list_url_path;
             $params['urlParams'] = $list_url_path;
         } elseif (defined('COT_PAGES')) {
             global $al, $id, $pag;
             $params['urlParams'] = empty($al) ? array('c' => $pag['page_cat'], 'id' => $id) : array('c' => $pag['page_cat'], 'al' => $al);
         } else {
             $params['urlParams'] = array();
         }
     }
     if (empty($params['ajax'])) {
         $params['ajax'] = false;
     }
     if (empty($params['target_div'])) {
         $params['target_div'] = '';
     }
     if (empty($params['ajax_module'])) {
         $params['ajax_module'] = '';
     }
     if (empty($params['ajax_params'])) {
         $params['ajax_params'] = array();
     }
     $pagenav = cot_pagenav($params['module'], $params['urlParams'], $d, $totallines, $items, $pagination, '', $params['ajax'], $params['target_div'], $params['ajax_module'], $params['ajax_params']);
     if (empty($pagenav['current'])) {
         $pagenav['current'] = 1;
     }
     $view = new View();
     /* === Hook === */
     foreach (cot_getextplugins('advboard.widget.list.view') as $pl) {
         include $pl;
     }
     /* ===== */
     $view->advertisement = $advertisement;
     $view->totalitems = $totallines;
     $view->pagenav = $pagenav;
     return $view->render($tpl);
 }
コード例 #6
0
ファイル: Main.php プロジェクト: ASDAFF/advboard
 public function deleteAction()
 {
     $id = cot_import('id', 'G', 'INT');
     // id Объявления
     $b = cot_import('b', 'G', 'HTM');
     // Куда вернуться
     /* === Hook === */
     foreach (cot_getextplugins('advboard.delete.first') as $pl) {
         include $pl;
     }
     /* ===== */
     // Права на любую категорию доски объявлений
     list(cot::$usr['auth_read'], cot::$usr['auth_write'], cot::$usr['isadmin']) = cot_auth('advboard', 'any');
     cot_block(cot::$usr['auth_write']);
     $advert = advboard_model_Advert::getById($id);
     if (!$advert) {
         cot_die_message(404, TRUE);
     }
     if (!cot::$usr['isadmin']) {
         if ($advert->user != cot::$usr['id']) {
             cot_die_message(404, TRUE);
         }
     }
     $title = $advert->title;
     $userId = $advert->user;
     $advert->delete();
     /* === Hook === */
     foreach (cot_getextplugins('advboard.delete.done') as $pl) {
         include $pl;
     }
     /* ===== */
     if (!empty($b)) {
         $b = unserialize(base64_decode($b));
     } elseif (!empty($_SESSION['cot_com_back']) && !empty($_SESSION['cot_com_back']['advboard'])) {
         $b = $_SESSION['cot_com_back']['advboard'];
         unset($_SESSION['cot_com_back']['advboard']);
     }
     if (empty($b)) {
         $b = array('m' => 'user');
         if ($userId != cot::$usr['id']) {
             $b['uid'] = $userId;
         }
     }
     cot_message(sprintf(cot::$L['advboard_deleted'], $title));
     cot_redirect(cot_url('advboard', $b, '', true));
 }
コード例 #7
0
$sitemap_where['begin'] = array('begin', cot::$sys['now'], '<=');
$sitemap_where['expire'] = array('SQL', "expire = 0 OR expire > " . cot::$sys['now']);
/* === Hook === */
foreach (cot_getextplugins('sitemap.advboard.query') as $pl) {
    include $pl;
}
/* ===== */
$condition = array();
foreach ($sitemap_where as $key => $val) {
    $condition[] = $val;
}
$order = array(array('sort', 'DESC'));
$cnt = advboard_model_Advert::count($condition);
if ($cnt > 0) {
    $i = 0;
    while ($i <= $cnt) {
        $advertisement = advboard_model_Advert::find($condition, 20, $i, $order);
        if (!$advertisement) {
            break;
        }
        foreach ($advertisement as $advert) {
            $i++;
            if (!$auth_cache[$advert->category]) {
                continue;
            }
            sitemap_parse($t, $items, array('url' => $advert->url, 'date' => !empty($advert->updated) ? strtotime($advert->updated) : '', 'freq' => cot::$cfg['plugin']['sitemap']['freq'], 'prio' => cot::$cfg['plugin']['sitemap']['prio']));
            unset($advert);
        }
        unset($advertisement);
    }
}
コード例 #8
0
<?php

/* ====================
[BEGIN_COT_EXT]
Hooks=users.edit.update.delete
[END_COT_EXT]
==================== */
/**
 * Ads board module for Cotonti Siena
 *
 * @package Advboard
 * @author Kalnov Alexey    <*****@*****.**>
 * @copyright (c) Portal30 Studio http://portal30.ru
 */
defined('COT_CODE') or die('Wrong URL');
require_once cot_incfile('advboard', 'module');
// Удалить все объявления пользователя
$condition = array(array('user', $id));
$advertisement = advboard_model_Advert::find($condition, 20, $i, array(array('id', 'ASC')));
if (!empty($advertisement)) {
    foreach ($advertisement as $advert) {
        $advert->delete();
        unset($advert);
    }
    unset($advertisement);
}
コード例 #9
0
Hooks=users.details.tags
Tags=users.details.tpl:{USERS_DETAILS_ADVERT_SUBMITNEW}, {USERS_DETAILS_ADVERT_SUBMITNEW_URL}, {USERS_DETAILS_ADVERT_COUNT}, {USERS_DETAILS_ADVERT_URL}
[END_COT_EXT]
==================== */
/**
 * Ads board module for Cotonti Siena
 *
 * @package Advboard
 * @author Kalnov Alexey    <*****@*****.**>
 * @copyright (c) 2015 Portal30 Studio http://portal30.ru
 */
defined('COT_CODE') or die('Wrong URL');
require_once cot_incfile('advboard', 'module');
$submitNewAdv = '';
$submitNewAdvUrl = '';
if (cot_auth('advboard', 'any', 'W') || cot::$usr["isadmin"]) {
    $submitNewAdvUrl = cot_url('advboard', array('a' => 'edit'));
    $submitNewAdv = cot_rc_link($submitNewAdvUrl, cot::$L['advboard_add_new']);
}
$advUnValidated = $urr['user_id'] == cot::$usr['id'] || cot::$usr["isadmin"] || cot_auth('advboard', 'any', 'A');
$advCond = array(array('user', $urr['user_id']));
if (!$advUnValidated) {
    $advCond[] = array('begin', cot::$sys['now'], '<=');
    $advCond[] = array('SQL', "expire = 0 OR expire > " . cot::$sys['now']);
    $advCond[] = array('state', advboard_model_Advert::PUBLISHED);
}
//$advUrlParams = array('m'=>'details', 'id'=>$urr['user_id'],'u'=>$urr['user_name']);
//
//$advAjaxPParams = array('a'=>'userDetailsAdvList', 'uid'=>$urr['user_id']);
$t->assign(array("USERS_DETAILS_ADVERT_SUBMITNEW" => $submitNewAdv, "USERS_DETAILS_ADVERT_SUBMITNEW_URL" => $submitNewAdvUrl, "USERS_DETAILS_ADVERT_COUNT" => advboard_model_Advert::count($advCond), "USERS_DETAILS_ADVERT_URL" => cot_url('advboard', array('m' => 'user', 'uid' => $urr['user_id']))));
コード例 #10
0
ファイル: Advert.php プロジェクト: ASDAFF/advboard
 protected function afterDelete()
 {
     // Обновить структуру
     // Наверное не учитываем состояние объявления, а считаем все.
     $count = advboard_model_Advert::count(array(array('category', $this->_data['category'])));
     static::$_db->update(cot::$db->structure, array('structure_count' => $count), "structure_area='advboard' AND structure_code = ?", $this->_data['category']);
     // Сбросим кеш структуры и главной страницы
     if (!empty(cot::$cache)) {
         cot::$cache->db->remove('structure', 'system');
         if (cot::$cfg['cache_index']) {
             cot::$cache->page->clear('index');
         }
     }
     return parent::afterDelete();
 }
コード例 #11
0
/**
 * Рендерит строку для сравнения объявлений
 *
 * Используется в шаблоне страницы сравнения
 * В Вашем шаблоне, возможно нужно будет использовать свою функцию
 *
 * @param advboard_model_Advert[] $compare
 * @param $field
 * @param string|array $params - Название или Массив параметров поля:
 *                                              'title'   => название поля
 *                                              'prefix'  => префикс
 *                                              'postfix' => постфикс
 * @return string
 */
function adv_compare_renderRow($compare, $field, $params = array())
{
    $predifined = array();
    static $modelFields = false;
    static $counter = 0;
    if (empty($modelFields)) {
        $modelFields = advboard_model_Advert::fields();
    }
    //    if(empty($modelFields[$field]) && !in_array($field, $predifined)) return '';
    $ret = '';
    $found = false;
    $tmpVal = '';
    $style = '';
    if ($counter == 0) {
        $style = ' style="width: 130px"';
    }
    foreach ($compare as $item) {
        $val = $item->{$field};
        //        var_dump($val);
        if (!empty($val)) {
            $found = true;
        }
        // Обработка значения
        if (isset($modelFields[$field])) {
            switch ($modelFields[$field]['type']) {
                case 'tinyint':
                case 'bool':
                    $val = adv_YesNo(intval($val));
                    break;
                case 'int':
                case 'double':
                    $val = $val != 0 ? $val : '';
                    break;
                case 'varchar':
                    $val = $val != '' ? htmlspecialchars($val) : '';
                    break;
            }
            if (!in_array($modelFields[$field]['type'], array('tinyint', 'bool'))) {
                if (isset(cot::$L[$field . '_' . $val])) {
                    $val = cot::$L[$field . '_' . $val];
                }
            }
        }
        if ($val != '') {
            if ($field == 'price') {
                $val = number_format($val, 0, ',', ' ');
            }
            if (isset($params['prefix'])) {
                $val = $params['prefix'] . $val;
            }
            if (isset($params['postfix'])) {
                $val .= $params['postfix'];
            }
        }
        $tmpVal .= '<td class="text-center"' . $style . '>' . $val . '</td>';
    }
    if (!$found) {
        return '';
    }
    if (is_string($params)) {
        $params = array('title' => $params);
    }
    $params['title'] = isset($params['title']) ? $params['title'] : "";
    if (empty($params['title']) && isset($modelFields[$field]['description'])) {
        $params['title'] = $modelFields[$field]['description'];
    }
    $style = '';
    if ($counter == 0) {
        $style = ' style="width: 200px"';
    }
    $ret = '<tr><td class="text-right"' . $style . '>' . htmlspecialchars($params['title']) . "</td>{$tmpVal}<td style=\"border: none\"></td></tr>";
    $counter++;
    return $ret;
}