/** * Ставим хук на вызов неизвестного метода * @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; }
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(); }
/** * Проверяет забанен ли пользователь по 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; }
/* * Период выполнения: ежедневно, каждые 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;
<?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;
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()); } }
/** * Приводим данные 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; }
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; }
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); }