Esempio n. 1
0
 /**
  * Ставим хук на вызов неизвестного метода
  * @param string [component|module]_[method]
  * @param array $aArgs
  * @return unknown
  */
 public function __call($sName, $aArgs = array())
 {
     //Ищем среди прикрепленный компонентов
     if ($this->_c !== null) {
         $aArgsRef = array();
         foreach ($aArgs as $key => $v) {
             $aArgsRef[] =& $aArgs[$key];
         }
         //$sName == [component name]_[method name]
         $aName = explode("_", $sName, 2);
         if (sizeof($aName) == 2) {
             $sComponent = mb_strtolower($aName[0]);
             $sMethod = $aName[1];
             if (!empty($sMethod) && isset($this->_c[$sComponent])) {
                 if (method_exists($this->_c[$sComponent], $sMethod)) {
                     return call_user_func_array(array($this->_c[$sComponent], $sMethod), $aArgsRef);
                 }
                 Errors::i()->set("Компонент не имеет требуемого метода <b>{$sComponent}" . '->' . $sMethod . '()</b>')->autohide(false);
                 return null;
             }
         }
         //$sName == [method name]
         foreach ($this->_c as $name => $component) {
             if (method_exists($component, $sName)) {
                 return call_user_func_array(array($component, $sName), $aArgsRef);
             }
         }
     }
     return null;
 }
Esempio n. 2
0
 public function init()
 {
     if ($this->getIsInitialized()) {
         return false;
     }
     global $oDb, $oSm, $oSecurity;
     $this->errors =& Errors::i();
     $this->security =& $oSecurity;
     $this->db =& $oDb;
     $this->sm =& $oSm;
     $this->input =& CInputCleaner::i();
     $this->setIsInitialized();
 }
Esempio n. 3
0
 /**
  * Проверяет забанен ли пользователь по ip,id,email. Если параметры не переданы, берем из текущей сессии.
  * Если параметр $return - false, тогда ничего не возвращаем, выводим сообщение и останавливаем выполнение скрипта.
  * @param string|array   $mUserIPs   строка с одним IP или массив IPшников
  */
 function checkBan($mUserIPs = false, $nUserID = false, $sUserEmail = false, $return = false)
 {
     $banned = false;
     $aQueryWhere = array();
     $sQuery = 'SELECT ip, uid, email, exclude, reason, finished FROM ' . TABLE_USERS_BANLIST . ' WHERE ';
     if ($sUserEmail === false) {
         $aQueryWhere[] = "email = ''";
     }
     if ($mUserIPs === false) {
         $aQueryWhere[] = "(ip = '' OR exclude = 1)";
     }
     if ($nUserID === false) {
         $aQueryWhere[] = '(uid = 0 OR exclude = 1)';
     } else {
         $sql = '(uid = ' . $nUserID;
         if ($sUserEmail !== false) {
             $sql .= " OR email <> ''";
         }
         if ($mUserIPs !== false) {
             $sql .= " OR ip <> ''";
         }
         $aQueryWhere[] = $sql . ')';
     }
     $sQuery .= sizeof($aQueryWhere) ? implode(' AND ', $aQueryWhere) : '';
     $aResult = $this->db->select($sQuery . ' ORDER BY exclude ASC');
     $banTriggeredBy = 'user';
     foreach ($aResult as $ban) {
         if ($ban['finished'] && $ban['finished'] < time()) {
             continue;
         }
         $ip_banned = false;
         if (!empty($ban['ip'])) {
             if (!is_array($mUserIPs)) {
                 $ip_banned = preg_match('#^' . str_replace('\\*', '.*?', preg_quote($ban['ip'], '#')) . '$#i', $mUserIPs);
             } else {
                 foreach ($mUserIPs as $sUserIP) {
                     if (preg_match('#^' . str_replace('\\*', '.*?', preg_quote($ban['ip'], '#')) . '$#i', $sUserIP)) {
                         $ip_banned = true;
                         break;
                     }
                 }
             }
             if ($ip_banned && !empty($ban['exclude'])) {
                 $ip_banned = false;
                 #echo 'unbanned by <b>ip</b><br />'; //debug
             }
         }
         if (!empty($ban['uid']) && intval($ban['uid']) == $nUserID || $ip_banned || !empty($ban['email']) && preg_match('#^' . str_replace('\\*', '.*?', preg_quote($ban['email'], '#')) . '$#i', $sUserEmail)) {
             if (!empty($ban['exclude'])) {
                 $banned = false;
                 break;
             } else {
                 $banned = true;
                 $banData = $ban;
                 if (!empty($ban['uid']) && intval($ban['uid']) == $nUserID) {
                     $banTriggeredBy = 'user';
                 } else {
                     if ($ip_banned) {
                         $banTriggeredBy = 'ip';
                     } else {
                         $banTriggeredBy = 'email';
                     }
                 }
                 # Не делаем break, т.к. возможно есть exclude правило для этого юзера
                 # echo 'banned by <b>'.$banTriggeredBy.'</b><br />'; //debug
             }
         }
     }
     //echo '<u>banned result: '.($banned?1:0).'</u>'; exit; //debug
     if ($banned && !$return) {
         $aMessageLang = array('BAN_PERMISSION' => 'Для получения дополнительной информации %2$sсвяжитесь с администратором%3$s.', 'BAN_TIME' => 'Доступ до <strong>%1$s</strong>.<br /><br />Для получения дополнительной информации %2$sсвяжитесь с администратором%3$s.', 'bannedby_email' => 'Доступ закрыт для вашего адреса email.', 'bannedby_ip' => 'Доступ закрыт для вашего IP-адреса.', 'bannedby_user' => 'Доступ закрыт для вашей учётной записи.');
         $tillDate = $banData['finished'] ? date('Y-m-d H:i', $banData['finished']) : '';
         $message = sprintf($aMessageLang[$banData['finished'] ? 'BAN_TIME' : 'BAN_PERMISSION'], $tillDate, '<a href="mailto:' . config::get('mail_admin') . '">', '</a>');
         $message .= $banData['reason'] ? '<br /><br /> Причина: <strong>' . $banData['reason'] . '</strong>' : '';
         $message .= '<br /><br /><em>' . $aMessageLang['bannedby_' . $banTriggeredBy] . '</em>';
         session_destroy();
         echo Errors::i()->showError('Доступ закрыт', $message, 'ban');
         exit;
     }
     return $banned && $banData['reason'] ? $banData['reason'] : $banned;
 }
Esempio n. 4
0
/*
* Период выполнения: ежедневно, каждые 3 часа
*/
$log = new CFileLogger(PATH_BASE . 'files/logs/', 'cron.log');
$log->log('bbs.items.status: started...');
$oBff->GetModule('bbs', false);
$oBff->GetModule('services');
$oDb->execute('START TRANSACTION');
$sqlNOW = $oDb->getNOW();
$sqlEmptyDate = $oDb->str2sql('0000-00-00 00:00:00');
//снимаем с публикации ОБ, у которых закончился срок публикации
$oDb->execute('UPDATE ' . TABLE_BBS_ITEMS . ' SET 
                    status_prev = status, status = ' . BBS_STATUS_PUBLICATED_OUT . ',
                    svc = 0, premium_to = ' . $sqlEmptyDate . ', marked_to = ' . $sqlEmptyDate . ' 
               WHERE status = ' . BBS_STATUS_PUBLICATED . ' AND publicated_to<=' . $sqlNOW);
// снимаем статус "Премиум", и изменяем на "Выделенные" (+ изменяем порядок публикации, чтобы не упали вниз)
$oDb->execute('UPDATE ' . TABLE_BBS_ITEMS . ' SET 
                    svc = ' . Services::typeMark . ', publicated_order = ' . $sqlNOW . ', premium_to = ' . $sqlEmptyDate . '
               WHERE svc = ' . Services::typePremium . ' AND premium_to<=' . $sqlNOW);
// снимаем статус "Выделенных"
// выполняем после снятия "Премиум" ^, т.к. "Выделенные", получившиеся из "Премиум", также возможно необходимо снять с публикации
$oDb->execute('UPDATE ' . TABLE_BBS_ITEMS . ' SET 
                    svc = 0, marked_to = ' . $sqlEmptyDate . ' 
               WHERE svc = ' . Services::typeMark . ' AND marked_to<=' . $sqlNOW);
$oDb->execute('COMMIT');
$err = Errors::i()->get();
if (!empty($err)) {
    $log->log("bbs.items.status errors:\n" . print_r($err, true));
}
echo "OK\n";
exit;
Esempio n. 5
0
<?php

require '../general.config.php';
bff::sessionStart('a');
if (FORDEV) {
    func::tt_start($tt, $tt_mem);
}
require PATH_CORE . 'init.php';
$oBff = bff::i()->init(false);
if (bff::$class) {
    $htmlCenterArea = $oBff->callModule(bff::$class . '_' . bff::$event, array());
    Errors::i()->assign();
}
if (!$oSecurity->haveAccessToAdminPanel()) {
    func::JSRedirect('index.php?s=users&ev=login');
}
# Формируем меню
require PATH_CORE . 'menu.php';
$oMenu = new CMenu(array('Объявления', 'Пользователи', 'Счета', 'Баннеры', 'Страницы', 'FAQ', 'Работа с почтой', 'Регионы', 'Связь с редактором', 'Меню сайта', 'Настройка сайта'));
$firstUrl = $oMenu->build('declareadminmenu', true);
if (!bff::$class) {
    func::JSRedirect($firstUrl);
}
$oSm->assign('user_login', $oSecurity->getUserLogin());
$oSm->assign_by_ref('center_area', $htmlCenterArea);
$oSm->display('template.tpl', __FILE__, __FILE__);
if (FORDEV) {
    func::tt_finish($tt, $tt_mem);
    echo $oDb->getStatistic();
}
exit;
Esempio n. 6
0
 static function sendMailTemplate($tplVars, $tplName, $to, $subject = false, $from = '', $fromName = '')
 {
     try {
         //if(BFF_LOCALHOST)
         //    return true;
         if (empty($fromName) && defined('BFF_EMAIL_FROM_NAME')) {
             $fromName = BFF_EMAIL_FROM_NAME;
         }
         if (empty($from)) {
             $from = config::get('mail_noreply', BFF_EMAIL_NOREPLY);
         }
         $aTplData = self::i()->Sendmail_getMailTemplate($tplName, $tplVars);
         return self::i()->Sendmail_sendMail($to, $subject !== false ? $subject : $aTplData['subject'], $aTplData['body'], $from, $fromName);
     } catch (Exception $e) {
         Errors::i()->set($e->getMessage());
     }
 }
Esempio n. 7
0
 /**
  * Приводим данные GET-POST-COOKIE к безопасной форме
  * @param string Сокращение для суперглобального массива: g, p, c, r или f (get, post, cookie, request или files)
  * @param array Массив имя переменной и тип, которые необходимо извлечь
  * @return array
  */
 function &clean_array_gpc($source, $variables, &$return = array(), $no_emtpy_vars = array())
 {
     $sg =& $GLOBALS[$this->superglobal_lookup["{$source}"]];
     $check_empty = !empty($no_emtpy_vars);
     if ($check_empty) {
         $errors =& Errors::i();
     }
     foreach ($variables as $varname => $vartype) {
         $return["{$varname}"] =& $this->clean($sg["{$varname}"], $vartype, isset($sg["{$varname}"]));
         if ($check_empty && (!isset($sg["{$varname}"]) || empty($return["{$varname}"])) && in_array($varname, $no_emtpy_vars)) {
             $errors->field($varname, 'empty');
         }
     }
     return $return;
 }
Esempio n. 8
0
 function error($errno, $extra = '')
 {
     $errorMsg = '';
     switch ($errno) {
         case 'no_file':
             $errorMsg = 'Please upload file';
             break;
         case 'upload_img':
             $errorMsg = 'Please upload image file';
             break;
         case 'size_0':
             $errorMsg = 'The size of uploaded file should be more then "0"';
             break;
         case 'size_max':
             $errorMsg = 'The size of uploaded file should be less then: ' . $extra;
             break;
         case 'cant_write_file':
             $errorMsg = 'Cant write file: ' . $extra;
             break;
         case 'no_thumbnail.class':
             $errorMsg = 'Thumbnail class is required';
             break;
         case 'upload_audio_or_video':
             $errorMsg = 'Please upload audio or video files';
             break;
     }
     $this->errors[] = $errorMsg;
     Errors::i()->set($errorMsg);
     return false;
 }
Esempio n. 9
0
 private function initErrors()
 {
     $this->lang = array('no_init_watermark' => 'Инициализируйте водяной знак', 'no_watermark_src' => 'Не указан источник водяного знака', 'gd_not_loaded' => 'Библиотека GD не загружена', 'no_file' => 'Файла не существует', 'wrong_path' => 'Неверный путь', 'no_language_support' => 'Шрифт не поддерживает данный язык', 'file_isnt_image' => 'Файл не является изображением', 'wrong_file_format' => 'Неверный формат файла', 'no_th_size' => 'Не указаны размеры thumbnaila', 'watermark_src_isnt_image' => 'Источник водяного знака не является изображением', 'no_imagick_path' => 'Не указан путь к ImageMagick', 'no_rouncorners' => 'Невозможно выполнить закругление углов', 'im_prop_w_err' => 'ImageMagick:Невозможно пропорционально уменишить изображение по ширине', 'im_prop_h_err' => 'ImageMagick:Невозможно пропорционально уменишить изображение по высоте', 'im_croping_err' => 'ImageMagick:Невозможно обрезать изображение до заданных размеров', 'im_unprop_h_err' => 'ImageMagick:Невозможно непропорционально уменишить изображение по высоте', 'im_unprop_w_err' => 'ImageMagick:Невозможно непропорционально уменишить изображение по ширине', 'im_unprop_err' => 'ImageMagick:Невозможно непропорционально уменишить изображение', 'im_wmorig_err' => 'ImageMagick:Невозможно нанести wmark на оригинал изображения', 'im_wmcreate_err' => 'ImageMagick:Невозможно создать изображение для wmark', 'im_wmadd_err' => 'ImageMagick:Невозможно добавить wmark на изображение', 'im_wmresize_err' => 'ImageMagick:Невозможно изменить размер wmark', 'im_wmanimate_err' => 'ImageMagick:Невозможно взять первый кадр анимированного gif изображения');
     $this->errors =& Errors::i($this->lang);
 }