Example #1
1
 /**
  * @return bffBase object
  */
 function init($isFrontend = true)
 {
     global $oDb, $oSm, $oSecurity;
     self::$isFrontend = $isFrontend;
     self::$isAjax = func::isAjaxRequest();
     self::$isPost = func::isPostMethod();
     if ($isFrontend) {
         define('TPL_PATH', PATH_BASE . 'tpl/main/');
         $oSm->template_dir = TPL_PATH;
     } else {
         define('TPL_PATH', PATH_BASE . 'tpl/main/admin/');
         define('THEME_URL', SITEURL . '/styles/default');
         //default admin theme!
         $oSm->template_dir = TPL_PATH;
     }
     spl_autoload_register(array('bffBase', 'autoload'));
     $oSecurity->checkExpired();
     if (!defined('THEME_URL')) {
         define('THEME_URL', SITEURL . '/styles/' . THEMES_DEFAULTTHEME_KEY);
     }
     $oSm->assign('theme_url', THEME_URL);
     $oSm->assign('class', self::$class = substr(strtolower(func::GETPOST('s')), 0, 30));
     $oSm->assign('event', self::$event = substr(strtolower(func::GETPOST('ev')), 0, 30));
     $oSm->assign_by_ref('tplJSIncludes', self::$includesJS);
     $oSm->assign_by_ref('tplCSSIncludes', self::$includesCSS);
     bff::initApp($isFrontend);
     return $this;
 }
Example #2
0
 function group_edit()
 {
     if (!FORDEV && !$this->manageNonSystemGroups) {
         return $this->showAccessDenied();
     }
     if (!$this->haveAccessTo('groups-edit')) {
         return $this->showAccessDenied();
     }
     $aData = array();
     if (!($nGroupID = $this->input->id())) {
         $this->adminRedirect(Errors::IMPOSSIBLE, 'group_listing');
     }
     $aGroupInfo = $this->getGroup($nGroupID);
     if ($aGroupInfo && $aGroupInfo['issystem'] && !FORDEV) {
         return $this->showAccessDenied();
     }
     if (func::isPostMethod()) {
         $this->input->postm(array('title' => TYPE_STR, 'keyword' => TYPE_STR, 'adminpanel' => TYPE_BOOL, 'color' => TYPE_STR, 'issystem' => TYPE_BOOL), $aData);
         if (!$aData['title']) {
             $this->errors->set('no_group_title');
         }
         if (empty($aData['keyword'])) {
             $this->errors->set('no_group_keyword');
         } else {
             $aData['keyword'] = mb_strtolower($aData['keyword']);
             if ($this->isGroupKeywordExists($aData['keyword'])) {
                 $this->errors->set('group_keyword_exists');
             }
         }
         if (empty($aData['color'])) {
             $aData['color'] = '#000';
         }
         if ($this->errors->no()) {
             $sQueryAdd = '';
             if (isset($aData['keyword']) && $aData['keyword']) {
                 $sQueryAdd .= ' keyword = ' . $this->db->str2sql($aData['keyword']) . ', ';
             }
             $this->db->execute('UPDATE ' . TABLE_USERS_GROUPS . '
                         SET title = ' . $this->db->str2sql($aData['title']) . ',
                             color = ' . $this->db->str2sql($aData['color']) . ',
                             adminpanel = ' . $aData['adminpanel'] . ',
                             ' . (FORDEV ? 'issystem = ' . $this->db->str2sql($aData['issystem']) . ', ' : '') . '
                             ' . $sQueryAdd . ' modified = ' . $this->db->getNOW() . '
                         WHERE group_id=' . $nGroupID);
             $this->adminRedirect(Errors::SUCCESSFULL, 'group_listing');
         }
     } else {
         $aData = $aGroupInfo;
     }
     $aData['deletable'] = !in_array($nGroupID, array(self::GROUPID_MEMBER, self::GROUPID_MODERATOR, self::GROUPID_SUPERADMIN));
     $this->tplAssign('aData', $aData);
     return $this->tplFetch('admin.group.form.tpl', PATH_CORE . 'modules/users/tpl/' . LANG_DEFAULT . '/');
 }
Example #3
0
 function edit()
 {
     if (!$this->haveAccessTo('edit')) {
         return $this->showAccessDenied();
     }
     $aData = array('content' => '', 'title' => '', 'filename' => '');
     $nRecordID = func::POSTGET('rec', false, true);
     if ($nRecordID <= 0) {
         $this->adminRedirect(Errors::IMPOSSIBLE);
     }
     if (func::isPostMethod()) {
         $sFilename = func::POST('filename', true);
         $sTitle = func::POST('title', true);
         $sMetaDescription = func::POST('mdescription', true);
         $sMetaKeywords = func::POST('mkeywords', true);
         $sContent = stripslashes(func::POST('content'));
         $sContent = eregi_replace('\\\\"', '"', $sContent);
         $sContent = eregi_replace('\\"', '"', $sContent);
         $sContent = eregi_replace('\\"', '"', $sContent);
         $sFilename = $this->db->one_data('SELECT filename FROM ' . TABLE_PAGES . ' WHERE id=' . $nRecordID . ' LIMIT 1');
         if ($this->errors->no()) {
             CDir::putFileContent(PAGES_PATH . $sFilename . PAGES_EXTENSION, $sContent);
             if (BFF_GENERATE_META_AUTOMATICALY) {
                 if ((empty($sMetaKeywords) || empty($sMetaDescription)) && !empty($sContent)) {
                     func::generateMeta($sContent, $aData);
                     if (empty($sMetaDescription)) {
                         $sMetaDescription = $aData['mdescription'];
                     }
                     if (empty($sMetaKeywords)) {
                         $sMetaKeywords = $aData['mkeywords'];
                     }
                 }
             }
             $this->db->execute('UPDATE ' . TABLE_PAGES . '
                              SET title = ' . $this->db->str2sql($sTitle) . ', 
                                  mkeywords = ' . $this->db->str2sql($sMetaKeywords) . ',
                                  mdescription = ' . $this->db->str2sql($sMetaDescription) . ", \n                                     modified = {$this->db->getNOW()}\n                                 WHERE id={$nRecordID}");
             $this->adminRedirect(Errors::SUCCESSFULL);
         }
         $aData = $_POST;
     } else {
         $aData = $this->db->one_array('SELECT * FROM ' . TABLE_PAGES . ' WHERE id=' . $nRecordID . ' LIMIT 1');
         $aData['content'] = CDir::getFileContent(PAGES_PATH . $aData['filename'] . PAGES_EXTENSION);
     }
     $this->tplAssign('aData', $aData);
     return $this->tplFetch('admin.form.tpl');
 }
Example #4
0
 function subscribe()
 {
     $aData = array();
     if (func::isPostMethod()) {
         $this->input->postm(array('name' => TYPE_NOHTML, 'email' => TYPE_NOHTML), $aData);
         $sEmail =& $aData['email'];
         if (!$aData['name']) {
             $this->errors->set('no_subscriber_name');
         }
         if (!$sEmail) {
             $this->errors->set('no_subscriber_email');
         } elseif (!func::IsEmailAddress($sEmail)) {
             ${$this}->errors->set('subscriber_wrong_email');
         } elseif ($this->isSubscribed($sEmail)) {
             $this->errors->set('subscriber_email_exists');
         }
         if ($this->errors->no()) {
             $this->db->execute('INSERT INTO ' . DB_PREFIX . 'subscribers (name, email, create_datetime)
                         VALUES (' . $this->db->str2sql($aData['name']) . ', ' . $this->db->str2sql($sEmail) . ', ' . $this->db->getNOW() . ')');
         }
     }
     Func::JSRedirect('/');
 }
Example #5
0
 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');
 }
Example #6
0
 function subscriber_edit()
 {
     if (!$this->haveAccessTo('subscribers-edit')) {
         return $this->showAccessDenied();
     }
     $nRecordID = func::POSTGET('rec', false, true);
     if (!$nRecordID) {
         $this->adminRedirect(Errors::IMPOSSIBLE, 'subscriber_listing');
     }
     $aData = $this->db->one_array('SELECT * FROM ' . DB_PREFIX . 'subscribers WHERE id=' . $nRecordID . ' LIMIT 1');
     if (!$aData) {
         $this->adminRedirect(Errors::IMPOSSIBLE, 'subscriber_listing');
     }
     if (func::isPostMethod()) {
         $sName = $aData['name'] = func::POST('name');
         $sEmail = $aData['email'] = func::POST('email');
         if (!$sName) {
             $aErrors[] = $this->errors->set('no_subscriber_name');
         }
         if (!$sEmail) {
             $this->errors->set('no_subscriber_email');
         } elseif (!func::IsEmailAddress($sEmail)) {
             $this->errors->set('subscriber_wrong_email');
         } elseif ($aData['email'] != $sEmail && $this->isSubscribed($sEmail)) {
             $this->errors->set('subscriber_email_exists');
         }
         if ($this->errors->no()) {
             $this->db->execute('UPDATE ' . DB_PREFIX . 'subscribers
                            SET name=' . $this->db->str2sql($sName) . ', email=' . $this->db->str2sql($sEmail) . ', create_datetime=' . $this->db->getNOW() . '
                            WHERE id=' . $nRecordID);
             $this->adminRedirect(Errors::SUCCESSFULL, 'subscriber_listing');
         }
     }
     $this->tplAssign('rec', $nRecordID);
     $this->tplAssign('aData', $aData);
     return $this->tplFetch('admin.subscriber.form.tpl');
 }
Example #7
0
 function cities_regions()
 {
     if (!$this->haveAccessTo('cities')) {
         return $this->showAccessDenied();
     }
     $nCityID = $this->input->id('city');
     if (bff::$isAjax) {
         $nRegionID = $this->input->id('region', 'p');
         if (!$nCityID || !$nRegionID) {
             $this->ajaxResponse(Errors::IMPOSSIBLE);
         }
         switch (func::GET('act')) {
             case 'edit':
                 $aRegionData = $this->db->one_array('SELECT * FROM ' . TABLE_REGION . ' WHERE region_id=' . $nRegionID . ' AND city_id=' . $nCityID);
                 $this->ajaxResponse($aRegionData);
                 break;
             case 'delete':
                 $this->db->execute('DELETE FROM ' . TABLE_REGION . ' WHERE region_id=' . $nRegionID . ' AND city_id=' . $nCityID);
                 $this->geoRegionsCacheDelete($nCityID);
                 $this->ajaxResponse(Errors::SUCCESS);
                 break;
         }
         $this->ajaxResponse(Errors::IMPOSSIBLE);
     }
     if ($nCityID && func::isPostMethod()) {
         switch (func::POSTGET('act')) {
             case 'add':
                 $sYBounds = Func::POSTGET('ybounds', true);
                 $sYPoly = Func::POSTGET('ypoly', true);
                 $sTitle = func::POSTGET('title', true);
                 if (empty($sTitle)) {
                     $this->errors->set('empty:title');
                 }
                 if ($this->errors->no()) {
                     $this->db->execute('INSERT INTO ' . TABLE_REGION . ' (city_id, title, ybounds, ypoly) 
                         VALUES(' . $nCityID . ',' . $this->db->str2sql($sTitle) . ',' . $this->db->str2sql($sYBounds) . ',' . $this->db->str2sql($sYPoly) . ')');
                     $this->geoRegionsCacheDelete($nCityID);
                 }
                 break;
             case 'add_many':
                 $aRegionBounds = Func::POSTGET('regionbounds', false);
                 $aRegionPoly = Func::POSTGET('regionpoly', false);
                 if (!empty($aRegionBounds)) {
                     $aRegions = array();
                     foreach ($aRegionBounds as $k => $v) {
                         $aRegions[$k] = array('ybounds' => $v, 'ypoly' => isset($aRegionPoly[$k]) ? $aRegionPoly[$k] : '');
                     }
                     $aExistentRegions = $this->db->select_one_column('SELECT title FROM ' . TABLE_REGION . ' WHERE city_id=' . $nCityID);
                     $aQueryRegions = array();
                     foreach ($aRegions as $title => $v) {
                         if (!in_array($title, $aExistentRegions)) {
                             $aQueryRegions[] = '(' . $nCityID . ',' . $this->db->str2sql($title) . ',' . $this->db->str2sql($v['ybounds']) . ',' . $this->db->str2sql($v['ypoly']) . ')';
                         }
                     }
                     if (!empty($aQueryRegions)) {
                         $this->db->execute('INSERT INTO ' . TABLE_REGION . ' (city_id, title, ybounds, ypoly) 
                             VALUES' . implode(',', $aQueryRegions));
                         $this->geoRegionsCacheDelete($nCityID);
                     }
                 }
                 break;
             case 'edit':
                 $this->input->postm(array('region' => TYPE_UINT, 'title' => TYPE_STR, 'ybounds' => TYPE_STR, 'ypoly' => TYPE_STR), $aData, array('title'));
                 if (!$nRegionID) {
                     $this->errors->set(Errors::UNKNOWNRECORD);
                 }
                 if ($this->errors->no()) {
                     $this->db->execute('UPDATE ' . TABLE_REGION . ' 
                         SET title = ' . $this->db->str2sql($aData['title']) . ',
                             ybounds = ' . $this->db->str2sql($aData['ybounds']) . ',
                             ypoly = ' . $this->db->str2sql($aData['ypoly']) . '
                         WHERE region_id=' . $aData['region'] . ' AND city_id = ' . $nCityID);
                     $this->geoRegionsCacheDelete($nCityID);
                 }
                 break;
         }
         $this->adminRedirect('', 'cities_edit&rec=' . $nCityID);
     }
     $this->adminRedirect(Errors::IMPOSSIBLE, 'cities_edit&rec=' . $nCityID);
 }
Example #8
0
 function member_edit()
 {
     if (!$this->haveAccessTo('members-edit')) {
         return $this->showAccessDenied();
     }
     if (!($nRecordID = $this->input->id())) {
         $this->adminRedirect(Errors::IMPOSSIBLE, 'listing');
     }
     $sTUID = func::GET('tuid');
     if (!$this->checkTUID($sTUID, $nRecordID)) {
         return $this->showAccessDenied();
     }
     $aData = array('admin' => 0);
     if (func::isPostMethod()) {
         $this->input->postm(array('name' => TYPE_STR, 'email' => TYPE_STR, 'changepass' => TYPE_BOOL, 'password' => TYPE_STR, 'skype' => TYPE_STR, 'email2' => TYPE_STR, 'phone' => TYPE_STR), $aData);
         if (empty($aData['email'])) {
             $this->errors->set('empty:email');
         } elseif (!func::IsEmailAddress($aData['email'])) {
             $this->errors->set('wrong:email');
         }
         if ($aData['changepass']) {
             if (empty($aData['password'])) {
                 $this->errors->set('empty:password');
             } else {
                 $aData['password'] = $this->security->getUserPasswordMD5($aData['password']);
             }
         } else {
             unset($aData['password']);
         }
         //            if($aData['city_id']<=0)
         //                $this->errors->set('wrong:city');
         $aData['email_hash'] = func::getEmailHash($aData['email']);
         if ($this->isEmailExists($aData['email_hash'], $nRecordID)) {
             $this->errors->set('email_exist');
         }
         if ($this->errors->no()) {
             #update user data
             unset($aData['changepass']);
             $aData['member'] = 1;
             $aData['login'] = $aData['email'];
             $this->userUpdate($nRecordID, $aData);
             $avatar = new CAvatar(TABLE_USERS, USERS_AVATAR_PATH, 'avatar', 'user_id');
             $avatar->update($nRecordID, true, true);
             $this->adminRedirect(Errors::SUCCESSFULL, (!func::GET('members') ? 'admin_' : '') . 'listing');
         }
     }
     $aUserInfo = $this->db->one_array('SELECT U.*, C.title as city, R.region_id, R.title as region 
                                     FROM ' . TABLE_USERS . ' U
                                     LEFT JOIN ' . TABLE_CITY . ' C   ON U.city_id=C.city_id
                                     LEFT JOIN ' . TABLE_REGION . ' R ON C.region_id=R.region_id
                                    WHERE U.user_id=' . $nRecordID . ' LIMIT 1');
     $aData = func::array_2_htmlspecialchars(array_merge($aUserInfo, $aData), null, true);
     $aData['social_link'] = '';
     if ($aData['social']) {
         switch ($aData['social']) {
             case 'vk':
                 $aData['social_link'] = 'http://vkontakte.ru/id' . $aData['vk_id'];
         }
     }
     $aData['tuid'] = $sTUID;
     $aData['edit'] = true;
     $this->tplAssignByRef('aData', $aData);
     return $this->tplFetch('admin.member.form.tpl');
 }
Example #9
0
 function categories_delete()
 {
     if (!$this->haveAccessTo('categories-edit')) {
         return $this->showAccessDenied();
     }
     if (($nRecordID = func::GETPOST('rec', false, true)) <= 0) {
         $this->adminRedirect(Errors::IMPOSSIBLE, 'categories_listing');
     }
     $aData = $this->db->one_array('SELECT FC.id, FC.title, COUNT(F.id) as cnt_items 
                FROM ' . TABLE_FAQ_CATEGORIES . ' FC
                     LEFT JOIN ' . TABLE_FAQ . ' F on FC.id=F.category_id
                WHERE FC.id=' . $nRecordID . '
                GROUP BY FC.id 
                LIMIT 1');
     if (!$aData) {
         $this->adminRedirect(Errors::IMPOSSIBLE, 'categories_listing');
     }
     if (func::isPostMethod()) {
         $nNextCategoryID = func::POST('next', false, true);
         if ($nNextCategoryID > 0) {
             //проверяем: ее ID не равен ID удаляемой, категория не является подкатегорией
             $nResultID = $this->db->one_data('SELECT id FROM ' . TABLE_FAQ_CATEGORIES . ' WHERE id=' . $nNextCategoryID . ' LIMIT 1');
             if ($nResultID != $nNextCategoryID || $nNextCategoryID == $nRecordID) {
                 $this->adminRedirect(Errors::IMPOSSIBLE, 'categories_listing');
             }
             //перемещаем вопросы
             $this->db->execute('UPDATE ' . TABLE_FAQ . ' SET category_id=' . $nNextCategoryID . ' WHERE category_id=' . $nRecordID);
             //удаляем категорию
             $this->db->execute('DELETE FROM ' . TABLE_FAQ_CATEGORIES . ' WHERE id=' . $nRecordID);
         } else {
             if ($aData['cnt_items']) {
                 //удаляем вопросы
                 $this->db->execute('DELETE FROM ' . TABLE_FAQ . ' WHERE category_id = ' . $nRecordID);
                 //удаляем категорию
                 $this->db->execute('DELETE FROM ' . TABLE_FAQ_CATEGORIES . ' WHERE id=' . $nRecordID);
             } else {
                 //удаляем категорию
                 $this->db->execute('DELETE FROM ' . TABLE_FAQ_CATEGORIES . ' WHERE id=' . $nRecordID);
             }
         }
         $this->adminRedirect(Errors::SUCCESSFULL, 'categories_listing');
     }
     $aData['categories'] = $this->getCategoriesOptions(0, false, array($nRecordID));
     $this->tplAssign('aData', $aData);
     return $this->tplFetch('admin.categories.delete.tpl');
 }
Example #10
0
 /** 
  * Загрузка файлов изображений, при помощи input=file
  * @param integer ID записи
  * @param integer кол-во букв в сгенерированном имени файла
  * @return string имена загруженных файлов @example: '1.jpg,2.jpg' (CSV)
  */
 function uploadImages($ID, $nGenerateLettersCount = 5)
 {
     $aFilenames = array();
     if (func::isPostMethod()) {
         $ID = intval($ID);
         if (empty($nGenerateLettersCount)) {
             $nGenerateLettersCount = 5;
         }
         foreach ($_FILES as $sInputName => $aFile) {
             if ($aFile['name'] != '') {
                 $pUpload = new Upload($sInputName);
                 $aImageSize = getimagesize($pUpload->getFilenameUploaded());
                 if ($aImageSize !== FALSE && $pUpload->isSuccessfull() && in_array($aImageSize[2], array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG))) {
                     $sExtension = func::image_type_to_extension($aImageSize[2], false);
                     $sFilename = Func::generateRandomName($nGenerateLettersCount, false, true);
                     $sFilenameFull = "{$sFilename}.{$sExtension}";
                     if ($this->saveImageFile($ID, $sFilenameFull, $pUpload, array('name' => $sFilename, 'ext' => $sExtension))) {
                         $aFilenames[] = $sFilenameFull;
                     }
                 }
             }
         }
     }
     if (count($aFilenames) > 0) {
         $sFilenames = implode(',', $aFilenames);
     }
     return isset($sFilenames) ? $sFilenames : '';
 }
Example #11
0
 function module_create()
 {
     if (!FORDEV) {
         return $this->showAccessDenied();
     }
     //получаем список существующих модулей
     $aModules = CDir::getDirs(PATH_MODULES, false, false, false);
     foreach ($aModules as $k => $v) {
         if ($v[0] != '.' && $v[0] != '_') {
             $aModules[$v] = $v;
         }
         unset($aModules[$k]);
     }
     $aData = array('modules' => $aModules, 'title' => '', 'languages' => '');
     if (func::isPostMethod()) {
         $aData['title'] = mb_strtolower(func::POST('title', true));
         $aData['languages'] = func::POST('languages', true);
         $aData['aLanguages'] = !empty($aData['languages']) ? explode(',', $aData['languages']) : array(LANG_DEFAULT);
         do {
             if (empty($aData['title'])) {
                 $this->errors->set('no_title');
                 break;
             }
             if (in_array($aData['title'], $aData['modules'])) {
                 $this->errors->set('title_exists');
                 break;
             }
             $sModuleName = ucfirst($aData['title']);
             $sModuleFileName = mb_strtolower($sModuleName);
             $sModulesPath = PATH_MODULES;
             if (file_exists($sModulesPath . $sModuleFileName . DIRECTORY_SEPARATOR . $sModuleName . '.class.php')) {
                 $this->errors->set('title_exists');
                 break;
             }
             $sModuleDirectory = $sModulesPath . $sModuleFileName . DIRECTORY_SEPARATOR;
             if (!@mkdir($sModuleDirectory, 0666)) {
                 $this->errors->set('create_dir_error', '', false, $sModulesPath . $sModuleFileName);
                 break;
             }
             //create Template Directories
             if (!@mkdir($sModuleDirectory . 'tpl', 0666)) {
                 $this->errors->set('create_dir_error', '', false, $sModuleDirectory . 'tpl');
                 break;
             }
             foreach ($aData['aLanguages'] as $lng) {
                 @mkdir($sModuleDirectory . 'tpl' . DIRECTORY_SEPARATOR . $lng . DIRECTORY_SEPARATOR, 0666);
             }
             //create Language Files [+directory]
             if (!@mkdir($sModuleDirectory . 'lang', 0666)) {
                 $this->errors->set('create_dir_error', '', false, $sModuleDirectory . 'lang');
                 break;
             }
             foreach ($aData['aLanguages'] as $lng) {
                 CDir::putFileContent($sModuleDirectory . 'lang' . DIRECTORY_SEPARATOR . "{$lng}.inc.php", "<?php\n" . ($lng != 'def' ? "include_once 'def.inc.php';" : '') . "\n\n");
             }
             //create BL file
             if (!CDir::putFileContent($sModuleDirectory . $sModuleFileName . '.bl.class.php', "<?php\n\nabstract class {$sModuleName}Base extends Module\n{\n    var \$securityKey = '" . md5(uniqid($sModuleName)) . "';\n}\n")) {
                 $this->errors->set('create_file_error', '', false, $sModuleFileName . '.bl.class.php');
                 break;
             }
             //create Menu file
             if (!CDir::putFileContent($sModuleDirectory . 'm.' . $sModuleFileName . '.class.php', "<?php\n\nclass M_{$sModuleName}\n{\n    function declareAdminMenu()\n    {\n        global \$oMenu;\n\n        \$oMenu->assign('{$sModuleName}', 'Список', '{$sModuleFileName}', 'listing', true, 1);\n\n    }\n\n}\n")) {
                 $this->errors->set('create_file_error', '', false, 'm.' . $sModuleFileName . '.class.php');
                 break;
             }
             //create Install.SQL file
             if (!CDir::putFileContent($sModuleDirectory . 'install.sql', "")) {
                 $this->errors->set('create_file_error', '', false, 'install.sql');
                 break;
             }
             //[create Admin directory]
             $sModuleAdmDirectory = $sModuleDirectory;
             //create Admin file
             if (!CDir::putFileContent($sModuleAdmDirectory . $sModuleFileName . '.adm.class.php', "<?php\n\nclass {$sModuleName} extends {$sModuleName}Base\n{\n\n\n}\n")) {
                 $this->errors->set('create_file_error', '', false, $sModuleFileName . '.adm.class.php');
                 break;
             }
             //create Frontend file
             if (!CDir::putFileContent($sModuleDirectory . $sModuleFileName . '.class.php', "<?php\n\nclass {$sModuleName} extends {$sModuleName}Base\n{\n\n\n}\n")) {
                 $this->errors->set('create_file_error', '', false, $sModuleFileName . '.class.php');
                 break;
             }
             $this->adminRedirect(Errors::SUCCESSFULL, 'module_create');
         } while (false);
     }
     $this->tplAssign('aData', $aData);
     return $this->tplFetch('admin.module.create.tpl');
 }