function show($nPageID = null) { $nRecordID = !isset($nPageID) ? func::POSTGET('page') : (int) $nPageID; $aData = $this->db->one_array('SELECT title, mkeywords, mdescription, filename FROM ' . TABLE_PAGES . ' WHERE filename = ' . $this->db->str2sql($nRecordID) . ' LIMIT 1'); if (empty($aData)) { Errors::httpError(404); } //get page content $aData['content'] = CDir::getFileContent(PAGES_PATH . $aData['filename'] . PAGES_EXTENSION); config::set(array('title' => $aData['title'] . ' | ' . config::get('title', ''), 'mkeywords' => $aData['mkeywords'], 'mdescription' => $aData['mdescription'])); if ($aData['content'] === false) { Errors::httpError(404); } $aData['menu'] = bff::i()->Sitemap_getmenu('info', 'all-sub'); // echo '<pre>', print_r($aData['menu'], true), '</pre>'; exit; $this->tplAssign('aData', $aData); return $this->tplFetch('page.tpl'); }
function main() { $aData['tabs'] = array('stat' => array('t' => 'Сводная информация', 'a' => 0), 'profile' => array('t' => 'Мой профиль', 'a' => 0)); $sTab = func::GET('tab'); if (empty($sTab)) { $sTab = 'stat'; } switch ($sTab) { case 'profile': $aData['tabContent'] = bff::i()->Users_profile(); break; case 'stat': $aData['subscribers'] = $this->db->one_data('SELECT COUNT(*) FROM ' . TABLE_USERS . ' WHERE subscribed=1'); break; } $aData['tabs'][$sTab]['a'] = 1; $this->tplAssign('tab', $sTab); $this->tplAssignByRef('aData', $aData); $this->adminCustomCenterArea(); return $this->tplFetch('admin.main.tpl'); }
public function init() { parent::init(); $this->items_images_path = bff::buildPath('items', 'images'); $this->items_images_url = bff::buildUrl('items', 'images'); # nested sets tree $tree = $this->attachComponent('tree', new dbNestedSetsTree(TABLE_BBS_CATEGORIES)); bff::i()->GetModule('Services'); if (bff::$isFrontend) { return; } # ! # проверяем наличие корневого элемента if ($tree->checkRootNode($nRootID)) { # если только-что создан, создаем категорию $this->db->execute('UPDATE ' . TABLE_BBS_CATEGORIES . ' SET title = ' . $this->db->str2sql('Корневой раздел') . ', created = ' . $this->db->getNOW() . ' WHERE id = ' . $nRootID); } $this->initDynprops(); }
function getBBSCategories($aSelectedID = array(), $bOptions = false) { if (!is_array($aSelectedID)) { $aSelectedID = array($aSelectedID); } bff::i()->GetModule('bbs'); $aCats = $this->db->select('SELECT id, title, 0 as disabled FROM ' . TABLE_BBS_CATEGORIES . ' WHERE numlevel=1 ORDER BY numleft'); if ($bOptions) { $sOptions = ''; array_unshift($aCats, array('id' => 0, 'title' => 'любой', 'disabled' => 0), array('id' => -2, 'title' => '------------------------', 'disabled' => 1), array('id' => 1, 'title' => 'Все разделы сайта', 'disabled' => 0)); foreach ($aCats as $v) { $sOptions .= '<option value="' . $v['id'] . '" class="' . ($v['id'] == 0 || $v['id'] == 1 ? 'bold' : '') . '" ' . ($v['id'] == -2 ? 'disabled' : '') . ' ' . (in_array($v['id'], $aSelectedID) ? ' selected="selected"' : '') . '>' . $v['title'] . '</option>'; } } else { array_unshift($aCats, array('id' => 1, 'title' => 'Все разделы сайта')); $sCheckbox = ''; foreach ($aCats as $v) { $sCheckbox .= '<label><input type="checkbox" name="cat[]" class="catcheck ' . ($v['id'] == 1 ? 'all bold' : 'cat') . '" value="' . $v['id'] . '"' . (in_array($v['id'], $aSelectedID) ? ' checked="checked"' : '') . '/> ' . $v['title'] . '</label><br/>'; } } $aCats = func::array_transparent($aCats, 'id', true); return array('cats' => $aCats, 'options' => !empty($sOptions) ? $sOptions : '', 'checks' => !empty($sCheckbox) ? $sCheckbox : ''); }
/** * @return BBS объект */ function getBBSModule() { return bff::i()->GetModule('bbs'); }
function sendspam() { if (!$this->haveAccessTo('admin-message')) { return $this->showAccessDenied(); } //get sender information $nUserID = $this->security->getUserID(); $aSenderInfo = bff::i()->Users_getUserInfo($nUserID, false); //получаем список пользователей (members) $nCount = bff::i()->Users_getGroupUsersCount(USERS_GROUPS_MEMBER, ''); //generate pagenation $this->generatePagenation($nCount, 20, $this->adminCreateLink('sendspam&{pageId}'), $sqlLimit); if (func::isPostMethod()) { $aRecipients = func::POST('recipients', false); $sMessage = func::POST('message', true); $all = func::POST('all', false, true); if (!$sMessage) { $this->errors->set('no_message'); } if ($aRecipients == false && !$all) { $this->errors->set('no_recipient'); } if ($this->errors->no()) { if ($all) { $this->sendMessageToUsersGroupFromAdmin($sMessage, USERS_GROUPS_MEMBER); } else { $this->sendMessage($aRecipients, $sMessage, false); } //Сообщение успешно отправлено $this->adminRedirect(Errors::SUCCESSFULL, 'sendspam'); } else { $this->tplAssign('message', $sMessage); } } $this->tplAssign('user_info', $aSenderInfo); $this->tplAssign('aData', bff::i()->Users_getGroupUsers(USERS_GROUPS_MEMBER, $sqlLimit)); return $this->tplFetch('admin.sendspam.tpl'); }
function publicate() { $sessionPublishedKey = 'BBS_ITEM_PUBLISHED_ID'; $nUserID = $this->security->getUserID(); if (bff::$isAjax) { $this->input->postm(array('id' => TYPE_UINT, 'p' => TYPE_STR, 'period' => TYPE_UINT), $p); $nItemID = $p['id']; if (!$nItemID || empty($p['p'])) { $this->ajaxResponse(Errors::ACCESSDENIED); } $sqlCheck = ' WHERE id = ' . $nItemID . ' AND pass = '******'p']); if ($nUserID > 0) { $sqlCheck .= ' AND user_id = ' . $nUserID; } $aData = $this->db->one_array('SELECT id, uid, user_id, status, cat_id, cat1_id, cat2_id, cat_type FROM ' . TABLE_BBS_ITEMS . $sqlCheck); if (empty($aData)) { $this->ajaxResponse(Errors::ACCESSDENIED); } else { if ($aData['status'] != BBS_STATUS_NEW) { $this->ajaxResponse(Errors::IMPOSSIBLE); } } //проверяем корректность периода публикации if (!($p['period'] >= 1 && $p['period'] <= 6)) { $p['period'] = 1; // не корректная, ставим "1 неделю" } if ($this->errors->no()) { $bActivatedFromUserBalance = false; // Превышен лимит бесплатных объявлений с одинаковой контактной информацией. Каждое последующее объявление становится платным. $bPayPublication = !$this->checkFreePublicationsLimit($aData['cat1_id'], $nUserID, $aData['uid']); if ($bPayPublication) { /** @var Bills module */ $oBills = bff::i()->GetModule('Bills'); $oServices = bff::i()->GetModule('Services'); $nSvcID = Services::typePublicate; $sDescription = $oServices->buildServiceBillDescription($nSvcID, $nItemID); $resp = array('pay' => false); do { $svcPublicate = $oServices->getServiceSettings($nSvcID); if (empty($svcPublicate)) { //не удалось получить информацию об услуге $this->errors->set('Ошибка активации услуги'); break; } $price = $svcPublicate['price']; if ($nUserID > 0) { $balance = $this->security->getBalance(); if ($price > $balance) { // не достаточно денег на счету $price = $price - $balance; $resp['pay'] = true; } else { // оплачиваем услугу платной публикации, снимаем деньги со счета пользователя $nBillID = $oBills->createBill_OutService($nItemID, $nSvcID, $nUserID, 0, $price, Bills::statusProcessing, $sDescription); if (!$nBillID) { $this->errors->set('Ошибка формирования счета'); break; } $bActivatedFromUserBalance = true; break; } } else { $balance = 0; $resp['pay'] = true; } if ($resp['pay']) { $nBillID = $oBills->createBill_InPay($nUserID, $balance, $price, $price, 'rur', Bills::psystemRobox, Bills::typeInPay, Bills::statusWaiting, 'Пополнение счета', $nItemID, $nSvcID); if (!$nBillID) { $this->errors->set('Ошибка при создании счета'); } $resp['form'] = $oBills->buildPayForm($price, Bills::psystemRobox, $nBillID, $nItemID, $nSvcID, $p['period']); } } while (false); if (!$bActivatedFromUserBalance) { $resp['res'] = $this->errors->no(); $this->ajaxResponse($resp); } } $p['to'] = $this->preparePublicatePeriodTo($p['period'], time()); $sqlNOW = $this->db->getNOW(); $res = $this->db->execute('UPDATE ' . TABLE_BBS_ITEMS . ' SET publicated = ' . $sqlNOW . ', publicated_to = ' . $this->db->str2sql($p['to']) . ', publicated_order = ' . $sqlNOW . ', status_prev = status, status = ' . BBS_STATUS_PUBLICATED . ', moderated = 0 WHERE id = ' . $nItemID . ' AND status = ' . BBS_STATUS_NEW . ' '); if (!empty($res)) { # накручиваем счетчики кол-ва опубликованных объявлений: # в категориях и типах: $this->itemsCounterUpdate(array($aData['cat1_id'], $aData['cat2_id'], $aData['cat_id']), !empty($aData['cat_type']) ? array($aData['cat_type']) : array(), true, true); $this->security->setSESSION($sessionPublishedKey, $nItemID); if ($bActivatedFromUserBalance) { // списываем с баланса пользователя $res = $oBills->updateBalance($nUserID, $price, '-'); if ($res) { $balance -= $price; $this->security->setBalance($balance); } //актуaлизируем информацию о счете $oBills->updateBill($nBillID, $balance, false, Bills::statusCompleted); } $this->ajaxResponse(array('res' => $this->errors->no(), 'pay' => false)); } } $this->ajaxResponse(null); } $nItemID = (int) $this->security->getSESSION($sessionPublishedKey); if (empty($nItemID) || $nItemID < 0) { func::JSRedirect('/items/add'); } $aData = $this->db->one_array('SELECT I.id, ' . $this->security->decodeBBSEditPass('I.pass') . ', I.cat1_id, CAT1.title as cat1_title, I.cat2_id, CAT2.title as cat2_title, I.cat_id, C.regions as cat_regions, C.prices as cat_prices, C.prices_sett as cat_prices_sett, I.cat_type, CT.title as cat_type_title, I.cat_subtype, CST.title as cat_subtype_title, I.imgfav, I.imgcnt, I.title, I.descr, I.descr_regions, I.price, I.price_torg, I.price_bart FROM ' . TABLE_BBS_ITEMS . ' I LEFT JOIN ' . TABLE_BBS_CATEGORIES . ' CAT2 ON I.cat2_id = CAT2.id LEFT JOIN ' . TABLE_BBS_CATEGORIES_TYPES . ' CT ON I.cat_type = CT.id LEFT JOIN ' . TABLE_BBS_CATEGORIES_SUBTYPES . ' CST ON I.cat_subtype = CST.id, ' . TABLE_BBS_CATEGORIES . ' CAT1, ' . TABLE_BBS_CATEGORIES . ' C WHERE I.id = ' . $nItemID . ' AND I.status = ' . BBS_STATUS_PUBLICATED . ' AND CAT1.id = I.cat1_id AND C.id = I.cat_id '); if (empty($aData)) { func::JSRedirect('/items/add'); } /** @var Services module */ $oServices = bff::i()->GetModule('Services'); $aServices = $this->db->select('SELECT id, keyword, settings, description FROM ' . TABLE_SERVICES . ' ORDER BY id'); $aServicesData = array(); foreach ($aServices as $v) { $sett = unserialize($v['settings']); $sett['desc'] = $v['description']; $aServicesData[$v['keyword']] = $sett; } $aData['svc'] = $aServicesData; config::set('bbs_instruction', true); $this->tplAssign('bbsInstructions', array('i' => config::get($this->module_name . '_add_instruct4', ''), 'cur' => 4)); $aData['member'] = $nUserID > 0; return $this->tplFetchPHP($aData, 'item.add.success.php'); }
function success() { // пополнение и активация услуги $nItemID = !empty($_REQUEST['shp_item']) ? $_REQUEST['shp_item'] : ''; $nSvcID = !empty($_REQUEST['shp_svc']) ? $_REQUEST['shp_svc'] : ''; if ($nItemID > 0 && $nSvcID > 0) { /** @var Services module */ $oServices = bff::i()->GetModule('Services'); /** @var Bbs module */ $oBbs = bff::i()->GetModule('Bbs'); $sTitle = 'Активация услуги'; $sDesc = 'Вы успешно активировали услугу'; switch ($nSvcID) { case Services::typePublicate: $sTitle = 'Публикация'; $sDesc = 'Вы успешно опубликовали объявление.'; if ($oBbs->isEditPassGranted($nItemID)) { $aItemData = $this->db->one_array('SELECT id, ' . $this->security->decodeBBSEditPass('pass') . ' FROM ' . TABLE_BBS_ITEMS . ' WHERE id = ' . $nItemID); $sDesc .= '<br/>Пароль к вашему объявлению: <b>' . $aItemData['pass'] . '</b>'; } break; case Services::typeUp: $sDesc = 'Вы успешно активировали услугу "Поднять объявление".'; break; case Services::typeMark: $sDesc = 'Вы успешно активировали услугу "Выделить объявление".'; break; case Services::typePremium: $sDesc = 'Вы успешно активировали услугу "Премиум".'; break; case Services::typePress: $sDesc = 'Вы успешно активировали услугу "Публикация в прессе".'; break; } return $this->errors->showSuccess($sTitle, $sDesc . '<br/><a href="' . SITEURL . '/item/' . $nItemID . '">перейти к объявлению № ' . $nItemID . '</a>'); } // только пополнение $nBalance = $this->security->getBalance(true); // актуализируем информацию о балансе в сессии return $this->errors->showSuccess('Пополнение счета', 'Вы успешно пополнили счет<br/> На вашем счету: <a href="' . SITEURL . '/bill">' . $nBalance . ' $.</a>'); }
function ajax() { $nUserID = $this->security->getUserID(); if (!bff::$isAjax) { $this->errors->set(Errors::IMPOSSIBLE); } $aResponse = array(); switch (func::GET('act')) { case 'init': $aData =& $aResponse; $this->input->postm(array('type' => TYPE_UINT), $aData); $aServices = $this->db->select('SELECT id, keyword, settings, description FROM ' . TABLE_SERVICES . ' ORDER BY id'); $aServicesData = array(); foreach ($aServices as $v) { $sett = unserialize($v['settings']); $sett['desc'] = $v['description']; $aServicesData[$v['keyword']] = $sett; } $aData['popup'] = $this->tplFetchPHP($aServicesData, 'items.svc.popup.php'); break; case 'activate': $this->input->postm(array('item' => TYPE_UINT, 'svc' => TYPE_UINT), $aResponse); $nItemID = $aResponse['item']; $nSvcID = $aResponse['svc']; if (!$nItemID || !$nSvcID) { $this->errors->set(Errors::IMPOSSIBLE); break; } if ($nUserID > 0) { $aUserData = $this->db->one_array('SELECT blocked, blocked_reason, balance, login as email FROM ' . TABLE_USERS . ' WHERE user_id = ' . $nUserID); if ($aUserData['blocked']) { $this->errors->set('Ваш аккаунт заблокирован по причине:<br/>' . $aUserData['blocked_reason']); break; } $balance =& $aUserData['balance']; if ($balance <= 0) { $balance = 0; } } else { $balance = 0; } /** @var Bills module */ $oBills = bff::i()->GetModule('Bills'); $svc = $this->getServiceSettings($nSvcID); if (empty($svc) || !$svc['price']) { $this->errors->set(Errors::IMPOSSIBLE); break; } $price = $svc['price']; $sDescription = $this->buildServiceBillDescription($nSvcID, $nItemID); // денег на счету не хватило(или неавторизованный пользователь), выставляем счет, формируем форму оплаты if (!$nUserID || $price > $balance) { $fAmount = round($price - $balance); $nPaymentSystem = Bills::psystemRobox; $nBillID = $oBills->createBill_InPay($nUserID, $balance, $fAmount, $fAmount, 'rur', $nPaymentSystem, Bills::typeInPay, Bills::statusWaiting, 'Пополнение счета', $nItemID, $nSvcID); $aResponse['pay'] = true; $aResponse['form'] = $oBills->buildPayForm($fAmount, $nPaymentSystem, $nBillID, $nItemID, $nSvcID); break; } // создаем счет $nBillID = $oBills->createBill_OutService($nItemID, $nSvcID, $nUserID, 0, $price, Bills::statusProcessing, $sDescription); if (!$nBillID) { $this->errors->set(Errors::IMPOSSIBLE); break; } // активируем услугу $res = $this->activateItemSvc($nItemID, $nSvcID, 0); if (!$res) { break; } // ^ ошибки выставляются тут // списываем с баланса пользователя $res = $oBills->updateBalance($nUserID, $price, '-'); if ($res) { $balance -= $price; $this->security->setBalance($balance); } $aResponse['balance'] = $balance; //актуaлизируем информацию о счете $oBills->updateBill($nBillID, $balance, false, Bills::statusCompleted); if ($nSvcID == self::typePress) { // уведомляем о скором размещении в прессе bff::sendMailTemplate(array('item_url' => SITEURL . '/item/' . $nItemID, 'email' => $aUserData['email']), 'member_bbs_press_payed', $aUserData['email']); } break; default: $this->errors->set(Errors::IMPOSSIBLE); } $aResponse['res'] = $this->errors->no(); $this->ajaxResponse($aResponse); }
<?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;
function login() { if ($this->security->haveAccessToAdminPanel()) { $this->adminRedirect(null, 'profile'); } $sLogin = ''; if (bff::$isPost) { $sLogin = func::POST('login', true); if (!$sLogin) { $this->errors->set('no_login'); } $sPassword = func::POST('password', true); if (!$sPassword) { $this->errors->set('no_password'); } if ($this->errors->no()) { $sPassword = $this->security->getUserPasswordMD5($sPassword); $sQuery = 'SELECT user_id, login, email, name, avatar, admin, cat FROM ' . TABLE_USERS . ' WHERE login = '******' AND password = '******' LIMIT 1'; $aUserData = $this->db->one_array($sQuery); if (!$aUserData) { $this->errors->set('login_and_password_unknow', '', false, $sLogin); } else { $nUserID = $aUserData['user_id']; if (bff::i()->Ban_checkBan(Func::getRemoteAddress(), false, false, true)) { $this->errors->set(Errors::ACCESSDENIED); } else { if (!$this->security->haveAccessToAdminPanel($nUserID)) { $this->errors->set(Errors::ACCESSDENIED); } } if ($this->errors->no()) { $aUserGroups = $this->getUserGroups($nUserID, true); //стартуем сессию администратора session_set_cookie_params(0, '/admin/'); $this->security->sessionStart('a', false); //update login_last_datetime, login_datetime to current time $this->db->execute('UPDATE ' . TABLE_USERS . ' SET login_last_ts=login_ts, login_ts=' . $this->db->getNOW() . ', ip_login= '******', session_id=' . $this->db->str2sql(session_id()) . ' WHERE user_id=' . $nUserID); $this->security->setUserInfo($nUserID, $aUserData['login'], $aUserData['email'], $aUserGroups, array('avatar' => $aUserData['avatar'], 'name' => $aUserData['name'], 'surname' => $aUserData['surname'], 'admin' => $aUserData['admin'], 'cat' => explode(',', $aUserData['cat']))); Func::JSRedirect('index.php'); } } } } $this->errors->assign(); $this->tplAssign('login', $sLogin); $this->tplDisplay('login.tpl', TPL_PATH, '', ''); exit(0); }
function checkRememberMe($cookiePrefix = 'u') { if (!$this->isLogined() && $this->isRememberMe($cookiePrefix, $sLogin, $sPasswordMD5)) { $sPassword = bff::i()->Users_getUserPassword($sLogin); if ($sPasswordMD5 === $this->getRememberMePasswordMD5($sPassword)) { if (bff::i()->Users_userAUTH($sLogin, $sPassword) != 1) { $this->clearRememberMe($cookiePrefix); } else { $this->setRememberMe($cookiePrefix, $sLogin, $sPassword); } } } }
function ajax() { if (bff::$isAjax) { switch (func::GETPOST('act')) { case 'subscribe': /* * При подписке: * - email выступает в дальнейшем в качестве логина * - пароль генерируется автоматически */ $sName = $this->input->post('name', TYPE_NOHTML); $sEmail = mb_strtolower($this->input->post('email', TYPE_NOHTML)); $response = ''; do { if (empty($sEmail) || !func::IsEmailAddress($sEmail)) { $response = 0; break; // некорректно указан email } $isSubscribed = $this->db->one_data('SELECT user_id FROM ' . TABLE_USERS . ' WHERE login='******'email' - для рассылки, 'login' - для авторизации $nUserID = $this->userCreate(array('login' => $sEmail, 'email' => $sEmail, 'password' => $sPassword, 'name' => $sName, 'subscribed' => 1, 'ip_reg' => func::getRemoteAddress(true)), self::GROUPID_MEMBER); if ($nUserID) { $response = 1; // успешно подписались # высылаем письмо (ставим в очередь на рассылку) CMail::SendQueue('subscribe', array('user_id' => $nUserID)); } else { $response = 4; // системная ошибка } } while (false); $this->ajaxResponse(array('result' => $response)); break; case 'enter': if ($this->security->isLogined()) { $this->ajaxResponse(array('result' => 'login-ok')); } $aData = $this->input->postm(array('email' => TYPE_STR, 'pass' => TYPE_STR, 'reg' => TYPE_BOOL)); if (!func::IsEmailAddress($aData['email'])) { $this->errors->set('wrong:email'); break; //email не корректный } if ($this->security->checkBan(false, func::getRemoteAddress(), $aData['email'], true)) { $this->errors->set(Errors::ACCESSDENIED); break; //не прошли бан-фильтр } if ($aData['reg']) { //регистрация if (empty($aData['pass']) || strlen($aData['pass']) < 3) { $this->errors->set('password_short'); break; //пароль слишком короткий } $aData['email_hash'] = func::getEmailHash($aData['email']); if ($this->isEmailExists($aData['email_hash'])) { $this->errors->set('email_exist'); break; //email уже занят } $this->getActivationInfo($sCode, $sLink); $nUserID = $this->userCreate(array('login' => $aData['email'], 'email' => $aData['email'], 'email_hash' => $aData['email_hash'], 'password' => $aData['pass'], 'ip_reg' => Func::getRemoteAddress(true), 'activatekey' => $sCode, 'activated' => 0), self::GROUPID_MEMBER); if ($nUserID) { //$this->userAUTH($aData['email'], $aData['pass'], null, true); $res = bff::sendMailTemplate(array('password' => $aData['pass'], 'email' => $aData['email'], 'activate_link' => "<a href=\"{$sLink}\">{$sLink}</a>"), 'member_registration', $aData['email']); $this->ajaxResponse(array('result' => 'reg-ok')); } else { $this->ajaxResponse(Errors::IMPOSSIBLE); } } else { //авторизация $nResult = $this->userAUTH($aData['email'], $aData['pass'], null, true); if ($nResult == 1) { //$this->security->setRememberMe('u', $aData['email'], $aData['pass']); bff::i()->Bbs_getFavorites(true); $bReload = false; if (!empty($_SERVER['HTTP_REFERER'])) { if (stripos($_SERVER['HTTP_REFERER'], '/item/') !== FALSE || stripos($_SERVER['HTTP_REFERER'], '/items/fav') !== FALSE) { $bReload = true; } } $userMenu = $this->tplFetch('user.menu.tpl'); $this->ajaxResponse(array('result' => 'login-ok', 'usermenu' => $userMenu, 'reload' => $bReload)); } else { $mResponse = null; switch ($nResult) { case 0: $this->errors->set('email_or_pass_incorrect'); break; case -3: $this->errors->set('activate_first'); break; //активируйте ваш аккаунт //активируйте ваш аккаунт case -2: $this->errors->set(Errors::ACCESSDENIED); break; //удален } if (is_array($nResult)) { if ($nResult['res'] == -1) { $this->errors->set('Аккаунт заблокирован.' . (!empty($nResult['reason']) ? ' <br/><b>Причина:</b>' . nl2br($nResult['reason']) : '')); } } } } break; } } $this->ajaxResponse(null); }
<div class="categories" id="indexCategoriesList"> <?php $aCats = bff::i()->Bbs_getIndexCategories(); $k = 0; ?> <div class="blockCat" rel="<?php echo $v['id']; ?> "> <div class="center"> <a href="/search?c=1"><span class="caption">Все объявления</span></a> </div> </div> <?php foreach ($aCats as $v) { $k++; ?> <div class="blockCat" rel="<?php echo $v['id']; ?> "> <!-- <div class="top"></div>--> <div class="center"> <!-- <div onclick="blockClick(--><?php //= $v['id'] ?> <!--)" class="blockClick" >--> <div class="blockClick" > <span class="caption"><?php echo $v['title']; ?>
<div class="top"><span class="left"> </span><div class="clear"></div></div> <div class="center"> <?php $total = bff::i()->Bbs_getTotalItemsCount(); ?> поиск среди <b class="f18 orange"><?php echo $total; ?> </b> <?php echo tpl::declension($total, array('объявления', 'объявлений', 'объявлений'), false); ?> <div class="padTop"> <form action="/search" method="get"> <input type="hidden" name="quick" value="1" /> <span class="left"><input type="text" class="searchInput" name="q" /></span> <span class="left"><select class="inputText" name="p" style="width:160px; :margin-top:3px;"><?php echo bff::i()->Bbs_periodSelect(); ?> </select></span> <div class="button left"> <span class="left"> </span> <input type="button" value="НАЙТИ" onclick="if($.trim(this.form.q.value)=='') this.form.q.focus(); else this.form.submit();" /> </div> <div class="clear"></div> </form> </div> </div> <div class="bottom"><span class="left"> </span><div class="clear"></div></div> </div> </div>
function settings() { if (!$this->haveAccessTo('settings')) { return $this->showAccessDenied(); } $configPrefix = $this->module_name . '_'; $sCurrentTab = func::POSTGET('tab'); if (empty($sCurrentTab)) { $sCurrentTab = 'general'; } if (bff::$isPost && func::POST('save') == 1) { $confTmp = func::POST('config', false); $this->input->clean_array($confTmp, array('items_perpage' => TYPE_UINT, 'items_freepubl_category_limit' => TYPE_UINT, 'items_freepubl_category_limit_reg' => TYPE_UINT, 'adtxt_limit' => TYPE_UINT, 'svc_up_price' => TYPE_NUM, 'svc_mark_price' => TYPE_NUM, 'svc_premium_price' => TYPE_NUM, 'svc_press_price' => TYPE_NUM, 'svc_up_desc' => TYPE_STR, 'svc_mark_desc' => TYPE_STR, 'svc_premium_desc' => TYPE_STR, 'svc_press_desc' => TYPE_STR, 'images_limit' => TYPE_UINT, 'images_limit_reg' => TYPE_UINT, 'add_instruct1' => TYPE_STR, 'add_instruct2' => TYPE_STR, 'add_instruct3' => TYPE_STR, 'add_instruct4' => TYPE_STR)); $conf = array(); foreach ($confTmp as $k => $v) { $conf[$configPrefix . $k] = $v; } bff::i()->Sites_saveConfig($conf, false); //в БД $configAll = config::getAll(); bff::i()->Sites_saveConfig(array_merge($configAll, $conf), true); //в файл $this->adminRedirect(Errors::SUCCESS, 'settings&tab=' . $sCurrentTab); } $aConfig = config::getWithPrefix($this->module_name . '_'); $aConfig = array_map('stripslashes', $aConfig); $aConfig['options'] = array(); $aConfig['options']['limit10'] = array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10, 11 => 11, 12 => 12, 13 => 13, 14 => 14, 15 => 15); $aData = $aConfig; $aData['tabs'] = array('general' => array('t' => 'Общие настройки', 'a' => 0), 'files' => array('t' => 'Загрузка файлов', 'a' => 0), 'add_instruction' => array('t' => 'Инструкция при добавлении', 'a' => 0)); $aData['tabs'][$sCurrentTab]['a'] = 1; $this->tplAssign('tab', $sCurrentTab); $this->tplAssignByRef('aData', $aData); $this->adminCustomCenterArea(); $this->includeJS('wysiwyg'); return $this->tplFetch('admin.settings.tpl'); }
<?php require dirname(dirname(__FILE__)) . '/general.config.php'; bff::sessionStart('u'); require PATH_CORE . 'init.php'; $oBff = bff::i()->init(true); error_reporting(E_ALL & ~E_DEPRICATED); ini_set('display_errors', 1); set_time_limit(0); ignore_user_abort(true); /* * Период выполнения: каждые 15 минут */ $log = new CFileLogger(PATH_BASE . 'files/logs/', 'cron.log'); $log->log('bbs.items.comments.enotify: started...'); $oBff->GetModule('bbs'); //echo "start\r\n"; $oDb->execute('START TRANSACTION'); $aNotify = $oDb->select('SELECT EN.* FROM ' . TABLE_BBS_ITEMS_COMMENTS_ENOTIFY . ' EN WHERE EN.sended = 0 ORDER BY EN.created LIMIT 100 FOR UPDATE'); // <- lock пока не разошлём письма (100) if (!empty($aNotify)) { $mail = new CMail(); $tpl = $oBff->Sendmail_getMailTemplate('bbs_comments_notify'); foreach ($aNotify as $v) { try { $mail->From = BFF_EMAIL_NOREPLY;
function activateItemSvc($nItemID, $nSvcID, $mSvcExtra = 0) { /** @var Bbs module */ $oBbs = bff::i()->GetModule('Bbs'); $sqlNow = $this->db->getNOW(); $aItem = $this->db->one_array('SELECT status, press, publicated, publicated_to, DATEDIFF(publicated_to, ' . $sqlNow . ') as days_left, svc FROM ' . TABLE_BBS_ITEMS . ' WHERE id = ' . $nItemID . ' '); if (empty($aItem)) { return false; } if ($nSvcID == self::typePublicate) { if ($aItem['status'] != BBS_STATUS_NEW) { func::log('Объявление #' . $nItemID . ' уже опубликовано, невозможно выполнить платную публикацию'); $this->errors->set('Объявление уже опубликовано'); return false; } } else { if ($aItem['status'] != BBS_STATUS_PUBLICATED) { func::log('Объявление #' . $nItemID . ' должно быть опубликовано'); $this->errors->set('Объявление должно быть опубликовано'); return false; } } // у объявления уже активирована данная услуга if ($aItem['svc'] == $nSvcID) { switch ($nSvcID) { case self::typeMark: $this->errors->set('Объявление уже выделено'); return false; case self::typePremium: $this->errors->set('Объявление уже находится в статусе <b>Премиум</b>'); return false; } } $sql = ''; switch ($nSvcID) { case self::typePublicate: $nPeriod = intval($mSvcExtra); if (!($nPeriod >= 1 && $nPeriod <= 4)) { $nPeriod = 1; } $toStr = $oBbs->preparePublicatePeriodTo($nPeriod, time()); $sql = 'publicated = ' . $sqlNow . ', publicated_to = ' . $this->db->str2sql($toStr) . ', publicated_order = ' . $sqlNow . ', status_prev = status, status = ' . BBS_STATUS_PUBLICATED . ', moderated = 0'; break; case self::typeUp: if ($aItem['svc'] == self::typePremium) { $this->errors->set('Объявление не может быть поднято, поскольку находится в статусе <b>Премиум</b>'); return false; } if ($aItem['svc'] != self::typeMark) { $sql .= ' svc = ' . $nSvcID . ', '; } $sql .= ' publicated_order = ' . $sqlNow; break; case self::typeMark: if ($aItem['svc'] == self::typePremium) { $this->errors->set('Объявление не может выделено, поскольку находится в статусе <b>Премиум</b>'); return false; } $sql .= ' svc = ' . $nSvcID . ', marked_to = ' . $this->db->str2sql($aItem['publicated_to']); $sDescription = 'Выделено до ' . $aItem['publicated_to']; break; case self::typePremium: $sql .= ' svc = ' . $nSvcID; if ($aItem['days_left'] < 7) { // в случае если дата публикация объявления завешается менее чем через 7 дней: // продлеваем публикацию, на недостающее кол-во дней $to = strtotime($aItem['publicated_to']); $to += 60 * 60 * 24 * (7 - $aItem['days_left']); //прибавляем недостающие дни $toStr = date('Y-m-d H:i:s', $to); $sDescription = 'Премиум до ' . $toStr; $to = $this->db->str2sql($toStr); $sql .= ', publicated_to = ' . $to; $sql .= ', premium_to = ' . $to; $sql .= ', marked_to = ' . $to; // помечаем дату "выделения", такой же датой как действие "премиум" } else { // помечаем срок действия премиум на период: 1 неделя // помечаем срок действия "выделения" на период до окончания публикации, // т.к. после окончания действия "премиум" объявление переходит в статус "выделено". $to = date('Y-m-d H:i:s', strtotime('+1 week')); $sDescription = 'Премиум до ' . $to; $sql .= ', premium_to = ' . $this->db->str2sql($to) . ' , marked_to = ' . $this->db->str2sql($aItem['publicated_to']); } break; case self::typePress: if ($aItem['press'] > 0) { switch ($aItem['press']) { case BBS_PRESS_PAYED: $this->errors->set('Объявление будет опубликовано в ближайшее время'); return false; case BBS_PRESS_PUBLICATED: $this->errors->set('Объявление уже опубликовано прессе'); return false; } } $sql .= ' press = ' . BBS_PRESS_PAYED; break; } $res = $this->db->execute('UPDATE ' . TABLE_BBS_ITEMS . ' SET ' . $sql . ' WHERE id = ' . $nItemID); return !empty($res); }