From 479e97bea183b8ab863d45b8150fe6549b42f8ce Mon Sep 17 00:00:00 2001 From: Mzhelskiy Maxim Date: Mon, 21 Jan 2013 15:46:16 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BE=20=D0=B2=D1=81=D0=B5=D1=85=20?= =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=D0=BE=D0=B2=20=D1=8F=D0=B4=D1=80=D0=B0?= =?UTF-8?q?=20=D0=B8=D0=B7=20=D1=82=D1=80=D0=B0=D0=BD=D0=BA=D0=BE=D0=B2?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .htaccess | 17 +++- classes/actions/ActionAdmin.class.php | 40 +++++----- classes/actions/ActionAjax.class.php | 66 +++++++--------- classes/actions/ActionBlog.class.php | 78 ++++++++++--------- classes/actions/ActionBlogs.class.php | 6 +- classes/actions/ActionIndex.class.php | 14 ++-- classes/actions/ActionLink.class.php | 20 ++--- classes/actions/ActionLogin.class.php | 8 +- classes/actions/ActionPeople.class.php | 4 +- classes/actions/ActionPersonalBlog.class.php | 10 +-- classes/actions/ActionPhotoset.class.php | 36 ++++----- classes/actions/ActionProfile.class.php | 24 +++--- classes/actions/ActionQuestion.class.php | 21 ++--- classes/actions/ActionRegistration.class.php | 20 ++--- classes/actions/ActionSearch.class.php | 2 +- classes/actions/ActionSettings.class.php | 57 +++++++------- classes/actions/ActionStream.class.php | 30 +++---- classes/actions/ActionSubscribe.class.php | 6 +- classes/actions/ActionTalk.class.php | 30 +++---- classes/actions/ActionTopic.class.php | 16 ++-- classes/actions/ActionUserfeed.class.php | 20 ++--- classes/blocks/BlockUserfeedBlogs.class.php | 2 +- classes/modules/acl/ACL.class.php | 31 ++++++-- .../comment/mapper/Comment.mapper.class.php | 1 + classes/modules/subscribe/Subscribe.class.php | 4 +- classes/modules/talk/Talk.class.php | 13 +++- classes/modules/tools/Tools.class.php | 13 ++++ classes/modules/topic/Topic.class.php | 10 ++- .../topic/entity/Topic.entity.class.php | 45 ++++++++++- classes/modules/user/User.class.php | 46 ++++++++--- .../modules/user/entity/User.entity.class.php | 14 +++- config/config.php | 23 +++--- config/jevix.php | 8 +- engine/classes/Action.class.php | 2 +- engine/classes/Engine.class.php | 17 ++-- engine/classes/EntityORM.class.php | 7 +- engine/classes/ManyToManyRelation.class.php | 7 ++ engine/classes/MapperORM.class.php | 40 ++++++++-- engine/classes/ModuleORM.class.php | 24 +++--- engine/console/.htaccess | 2 + .../protected/plugin/PluginExample.class.php | 7 +- engine/include/.htaccess | 2 + engine/include/function.php | 16 +++- engine/lib/external/Jevix/jevix.class.php | 24 +++++- engine/lib/external/jquery/jquery.file.js | 2 +- engine/lib/external/kcaptcha/index.php | 4 +- engine/lib/internal/ConfigSimple/.htaccess | 2 + .../internal/ConfigSimple/Config.class.php | 11 ++- engine/lib/internal/ProfilerSimple/.htaccess | 2 + engine/modules/.htaccess | 2 + engine/modules/message/Message.class.php | 14 ++-- engine/modules/plugin/Plugin.class.php | 3 +- .../entity/ValidatorEmail.entity.class.php | 4 +- .../entity/ValidatorNumber.entity.class.php | 4 +- engine/modules/viewer/Viewer.class.php | 53 +++++++++++-- install/language/english.php | 6 +- install/language/russian.php | 6 +- templates/.htaccess | 2 +- templates/language/english.php | 22 +++--- templates/language/russian.php | 24 +++--- .../skin/synio/settings/language/english.php | 5 +- .../skin/synio/settings/language/russian.php | 5 +- 62 files changed, 663 insertions(+), 391 deletions(-) create mode 100644 engine/console/.htaccess create mode 100644 engine/include/.htaccess create mode 100644 engine/lib/internal/ConfigSimple/.htaccess create mode 100644 engine/lib/internal/ProfilerSimple/.htaccess create mode 100644 engine/modules/.htaccess diff --git a/.htaccess b/.htaccess index 2b5f7303..1ee336a7 100644 --- a/.htaccess +++ b/.htaccess @@ -8,8 +8,17 @@ RewriteRule ^(.*)$ ./index.php # Alternative rule #RewriteRule ^(.*)$ /index.php - -order allow,deny -deny from all - +# Deny access + + order allow,deny + deny from all + + + order allow,deny + deny from all + + + Order allow,deny + Deny from all + \ No newline at end of file diff --git a/classes/actions/ActionAdmin.class.php b/classes/actions/ActionAdmin.class.php index abb62789..efbe9410 100644 --- a/classes/actions/ActionAdmin.class.php +++ b/classes/actions/ActionAdmin.class.php @@ -148,7 +148,7 @@ class ActionAdmin extends Action { /** * Получаем название плагина и действие */ - if($sPlugin=getRequest('plugin',null,'get') and $sAction=getRequest('action',null,'get')) { + if($sPlugin=getRequestStr('plugin',null,'get') and $sAction=getRequestStr('action',null,'get')) { return $this->SubmitManagePlugin($sPlugin,$sAction); } /** @@ -171,7 +171,7 @@ class ActionAdmin extends Action { */ protected function EventUserFields() { - switch(getRequest('action')) { + switch(getRequestStr('action')) { /** * Создание нового поля */ @@ -184,11 +184,11 @@ class ActionAdmin extends Action { return; } $oField = Engine::GetEntity('User_Field'); - $oField->setName(getRequest('name')); - $oField->setTitle(getRequest('title')); - $oField->setPattern(getRequest('pattern')); - if (in_array(getRequest('type'),$this->User_GetUserFieldTypes())) { - $oField->setType(getRequest('type')); + $oField->setName(getRequestStr('name')); + $oField->setTitle(getRequestStr('title')); + $oField->setPattern(getRequestStr('pattern')); + if (in_array(getRequestStr('type'),$this->User_GetUserFieldTypes())) { + $oField->setType(getRequestStr('type')); } else { $oField->setType(''); } @@ -214,11 +214,11 @@ class ActionAdmin extends Action { * Обрабатываем как ajax запрос (json) */ $this->Viewer_SetResponseAjax('json'); - if (!getRequest('id')) { + if (!getRequestStr('id')) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } - $this->User_deleteUserField(getRequest('id')); + $this->User_deleteUserField(getRequestStr('id')); $this->Message_AddNotice($this->Lang_Get('user_field_deleted'),$this->Lang_Get('attention')); break; /** @@ -229,11 +229,11 @@ class ActionAdmin extends Action { * Обрабатываем как ajax запрос (json) */ $this->Viewer_SetResponseAjax('json'); - if (!getRequest('id')) { + if (!getRequestStr('id')) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } - if (!$this->User_userFieldExistsById(getRequest('id'))) { + if (!$this->User_userFieldExistsById(getRequestStr('id'))) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); return false; } @@ -241,12 +241,12 @@ class ActionAdmin extends Action { return; } $oField = Engine::GetEntity('User_Field'); - $oField->setId(getRequest('id')); - $oField->setName(getRequest('name')); - $oField->setTitle(getRequest('title')); - $oField->setPattern(getRequest('pattern')); - if (in_array(getRequest('type'),$this->User_GetUserFieldTypes())) { - $oField->setType(getRequest('type')); + $oField->setId(getRequestStr('id')); + $oField->setName(getRequestStr('name')); + $oField->setTitle(getRequestStr('title')); + $oField->setPattern(getRequestStr('pattern')); + if (in_array(getRequestStr('type'),$this->User_GetUserFieldTypes())) { + $oField->setType(getRequestStr('type')); } else { $oField->setType(''); } @@ -280,18 +280,18 @@ class ActionAdmin extends Action { */ public function checkUserField() { - if (!getRequest('title')) { + if (!getRequestStr('title')) { $this->Message_AddError($this->Lang_Get('user_field_error_add_no_title'),$this->Lang_Get('error')); return false; } - if (!getRequest('name')) { + if (!getRequestStr('name')) { $this->Message_AddError($this->Lang_Get('user_field_error_add_no_name'),$this->Lang_Get('error')); return false; } /** * Не допускаем дубликатов по имени */ - if ($this->User_userFieldExistsByName(getRequest('name'), getRequest('id'))) { + if ($this->User_userFieldExistsByName(getRequestStr('name'), getRequestStr('id'))) { $this->Message_AddError($this->Lang_Get('user_field_error_name_exists'),$this->Lang_Get('error')); return false; } diff --git a/classes/actions/ActionAjax.class.php b/classes/actions/ActionAjax.class.php index 6bd8a9c1..ba2ed21a 100644 --- a/classes/actions/ActionAjax.class.php +++ b/classes/actions/ActionAjax.class.php @@ -124,7 +124,7 @@ class ActionAjax extends Action { * Получение списка регионов по стране */ protected function EventGeoGetRegions() { - $iCountryId=getRequest('country'); + $iCountryId=getRequestStr('country'); $iLimit=200; if (is_numeric(getRequest('limit')) and getRequest('limit')>0) { $iLimit=getRequest('limit'); @@ -156,7 +156,7 @@ class ActionAjax extends Action { * Получение списка городов по региону */ protected function EventGeoGetCities() { - $iRegionId=getRequest('region'); + $iRegionId=getRequestStr('region'); $iLimit=500; if (is_numeric(getRequest('limit')) and getRequest('limit')>0) { $iLimit=getRequest('limit'); @@ -199,7 +199,7 @@ class ActionAjax extends Action { /** * Комментарий существует? */ - if (!($oComment=$this->Comment_GetCommentById(getRequest('idComment',null,'post')))) { + if (!($oComment=$this->Comment_GetCommentById(getRequestStr('idComment',null,'post')))) { $this->Message_AddErrorSingle($this->Lang_Get('comment_vote_error_noexists'),$this->Lang_Get('error')); return; } @@ -234,7 +234,7 @@ class ActionAjax extends Action { /** * Как именно голосует пользователь */ - $iValue=getRequest('value',null,'post'); + $iValue=getRequestStr('value',null,'post'); if (!in_array($iValue,array('1','-1'))) { $this->Message_AddErrorSingle($this->Lang_Get('comment_vote_error_value'),$this->Lang_Get('attention')); return; @@ -279,7 +279,7 @@ class ActionAjax extends Action { /** * Топик существует? */ - if (!($oTopic=$this->Topic_GetTopicById(getRequest('idTopic',null,'post')))) { + if (!($oTopic=$this->Topic_GetTopicById(getRequestStr('idTopic',null,'post')))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } @@ -307,7 +307,7 @@ class ActionAjax extends Action { /** * Как проголосовал пользователь */ - $iValue=getRequest('value',null,'post'); + $iValue=getRequestStr('value',null,'post'); if (!in_array($iValue,array('1','-1','0'))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('attention')); return; @@ -372,7 +372,7 @@ class ActionAjax extends Action { /** * Блог существует? */ - if (!($oBlog=$this->Blog_GetBlogById(getRequest('idBlog',null,'post')))) { + if (!($oBlog=$this->Blog_GetBlogById(getRequestStr('idBlog',null,'post')))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } @@ -395,7 +395,7 @@ class ActionAjax extends Action { */ switch($this->ACL_CanVoteBlog($this->oUserCurrent,$oBlog)) { case ModuleACL::CAN_VOTE_BLOG_TRUE: - $iValue=getRequest('value',null,'post'); + $iValue=getRequestStr('value',null,'post'); if (in_array($iValue,array('1','-1'))) { $oBlogVote=Engine::GetEntity('Vote'); $oBlogVote->setTargetId($oBlog->getId()); @@ -450,7 +450,7 @@ class ActionAjax extends Action { /** * Пользователь существует? */ - if (!($oUser=$this->User_GetUserById(getRequest('idUser',null,'post')))) { + if (!($oUser=$this->User_GetUserById(getRequestStr('idUser',null,'post')))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } @@ -478,7 +478,7 @@ class ActionAjax extends Action { /** * Как проголосовал */ - $iValue=getRequest('value',null,'post'); + $iValue=getRequestStr('value',null,'post'); if (!in_array($iValue,array('1','-1'))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('attention')); return; @@ -525,8 +525,8 @@ class ActionAjax extends Action { /** * Параметры голосования */ - $idAnswer=getRequest('idAnswer',null,'post'); - $idTopic=getRequest('idTopic',null,'post'); + $idAnswer=getRequestStr('idAnswer',null,'post'); + $idTopic=getRequestStr('idTopic',null,'post'); /** * Топик существует? */ @@ -596,11 +596,11 @@ class ActionAjax extends Action { /** * Объект уже должен быть в избранном */ - if ($oFavourite=$this->Favourite_GetFavourite(getRequest('target_id'),getRequest('target_type'),$this->oUserCurrent->getId())) { + if ($oFavourite=$this->Favourite_GetFavourite(getRequestStr('target_id'),getRequestStr('target_type'),$this->oUserCurrent->getId())) { /** * Обрабатываем теги */ - $aTags=explode(',',trim((string)getRequest('tags'),"\r\n\t\0\x0B .")); + $aTags=explode(',',trim(getRequestStr('tags'),"\r\n\t\0\x0B .")); $aTagsNew=array(); $aTagsNewLow=array(); $aTagsReturn=array(); @@ -642,7 +642,7 @@ class ActionAjax extends Action { /** * Можно только добавить или удалить из избранного */ - $iType=getRequest('type',null,'post'); + $iType=getRequestStr('type',null,'post'); if (!in_array($iType,array('1','0'))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; @@ -650,7 +650,7 @@ class ActionAjax extends Action { /** * Топик существует? */ - if (!($oTopic=$this->Topic_GetTopicById(getRequest('idTopic',null,'post')))) { + if (!($oTopic=$this->Topic_GetTopicById(getRequestStr('idTopic',null,'post')))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } @@ -719,7 +719,7 @@ class ActionAjax extends Action { /** * Можно только добавить или удалить из избранного */ - $iType=getRequest('type',null,'post'); + $iType=getRequestStr('type',null,'post'); if (!in_array($iType,array('1','0'))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; @@ -727,7 +727,7 @@ class ActionAjax extends Action { /** * Комментарий существует? */ - if (!($oComment=$this->Comment_GetCommentById(getRequest('idComment',null,'post')))) { + if (!($oComment=$this->Comment_GetCommentById(getRequestStr('idComment',null,'post')))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } @@ -789,7 +789,7 @@ class ActionAjax extends Action { /** * Можно только добавить или удалить из избранного */ - $iType=getRequest('type',null,'post'); + $iType=getRequestStr('type',null,'post'); if (!in_array($iType,array('1','0'))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; @@ -797,7 +797,7 @@ class ActionAjax extends Action { /** * Сообщение существует? */ - if (!($oTalk=$this->Talk_GetTalkById(getRequest('idTalk',null,'post')))) { + if (!($oTalk=$this->Talk_GetTalkById(getRequestStr('idTalk',null,'post')))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } @@ -965,7 +965,7 @@ class ActionAjax extends Action { /** * Допустимый тип топика? */ - if (!$this->Topic_IsAllowTopicType($sType=getRequest('topic_type'))) { + if (!$this->Topic_IsAllowTopicType($sType=getRequestStr('topic_type'))) { $this->Message_AddErrorSingle($this->Lang_Get('topic_create_type_error'),$this->Lang_Get('error')); return; } @@ -975,9 +975,9 @@ class ActionAjax extends Action { $oTopic=Engine::GetEntity('ModuleTopic_EntityTopic'); $oTopic->_setValidateScenario($sType); // зависит от типа топика - $oTopic->setTitle(strip_tags(getRequest('topic_title'))); - $oTopic->setTextSource(getRequest('topic_text')); - $oTopic->setTags(getRequest('topic_tags')); + $oTopic->setTitle(strip_tags(getRequestStr('topic_title'))); + $oTopic->setTextSource(getRequestStr('topic_text')); + $oTopic->setTags(getRequestStr('topic_tags')); $oTopic->setDateAdd(date("Y-m-d H:i:s")); $oTopic->setUserId($this->oUserCurrent->getId()); $oTopic->setType($sType); @@ -992,16 +992,10 @@ class ActionAjax extends Action { /** * Формируем текст топика */ - if (in_array($sType,array('link','question'))) { - $oTopic->setCutText(null); - $oTopic->setText(htmlspecialchars($oTopic->getTextSource())); - $oTopic->setTextShort(htmlspecialchars($oTopic->getTextSource())); - } else { - list($sTextShort,$sTextNew,$sTextCut) = $this->Text_Cut($oTopic->getTextSource()); - $oTopic->setCutText($sTextCut); - $oTopic->setText($this->Text_Parser($sTextNew)); - $oTopic->setTextShort($this->Text_Parser($sTextShort)); - } + list($sTextShort,$sTextNew,$sTextCut) = $this->Text_Cut($oTopic->getTextSource()); + $oTopic->setCutText($sTextCut); + $oTopic->setText($this->Text_Parser($sTextNew)); + $oTopic->setTextShort($this->Text_Parser($sTextShort)); /** * Рендерим шаблон для предпросмотра топика */ @@ -1023,7 +1017,7 @@ class ActionAjax extends Action { * */ protected function EventPreviewText() { - $sText=(string)getRequest('text',null,'post'); + $sText=getRequestStr('text',null,'post'); $bSave=getRequest('save',null,'post'); /** * Экранировать или нет HTML теги @@ -1163,7 +1157,7 @@ class ActionAjax extends Action { /** * Комментарий существует? */ - $idComment=getRequest('idComment',null,'post'); + $idComment=getRequestStr('idComment',null,'post'); if (!($oComment=$this->Comment_GetCommentById($idComment))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; diff --git a/classes/actions/ActionBlog.class.php b/classes/actions/ActionBlog.class.php index 7f412afd..f4f65e2e 100644 --- a/classes/actions/ActionBlog.class.php +++ b/classes/actions/ActionBlog.class.php @@ -198,16 +198,16 @@ class ActionBlog extends Action { */ $oBlog=Engine::GetEntity('Blog'); $oBlog->setOwnerId($this->oUserCurrent->getId()); - $oBlog->setTitle(strip_tags(getRequest('blog_title'))); + $oBlog->setTitle(strip_tags(getRequestStr('blog_title'))); /** * Парсим текст на предмет разных ХТМЛ тегов */ - $sText=$this->Text_Parser(getRequest('blog_description')); + $sText=$this->Text_Parser(getRequestStr('blog_description')); $oBlog->setDescription($sText); - $oBlog->setType(getRequest('blog_type')); + $oBlog->setType(getRequestStr('blog_type')); $oBlog->setDateAdd(date("Y-m-d H:i:s")); - $oBlog->setLimitRatingTopic(getRequest('blog_limit_rating_topic')); - $oBlog->setUrl((string)getRequest('blog_url')); + $oBlog->setLimitRatingTopic(getRequestStr('blog_limit_rating_topic')); + $oBlog->setUrl(getRequestStr('blog_url')); $oBlog->setAvatar(null); /** * Загрузка аватара, делаем ресайзы @@ -299,23 +299,23 @@ class ActionBlog extends Action { if (!$this->checkBlogFields($oBlog)) { return false; } - $oBlog->setTitle(strip_tags(getRequest('blog_title'))); + $oBlog->setTitle(strip_tags(getRequestStr('blog_title'))); /** * Парсим описание блога на предмет ХТМЛ тегов */ - $sText=$this->Text_Parser(getRequest('blog_description')); + $sText=$this->Text_Parser(getRequestStr('blog_description')); $oBlog->setDescription($sText); /** * Сбрасываем кеш, если поменяли тип блога * Нужна доработка, т.к. в этом блоге могут быть топики других юзеров */ - if ($oBlog->getType()!=getRequest('blog_type')) { + if ($oBlog->getType()!=getRequestStr('blog_type')) { $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("topic_update_user_{$oBlog->getOwnerId()}")); } - $oBlog->setType(getRequest('blog_type')); - $oBlog->setLimitRatingTopic(getRequest('blog_limit_rating_topic')); + $oBlog->setType(getRequestStr('blog_type')); + $oBlog->setLimitRatingTopic(getRequestStr('blog_limit_rating_topic')); if ($this->oUserCurrent->isAdministrator()) { - $oBlog->setUrl((string)getRequest('blog_url')); // разрешаем смену URL блога только админу + $oBlog->setUrl(getRequestStr('blog_url')); // разрешаем смену URL блога только админу } /** * Загрузка аватара, делаем ресайзы @@ -399,6 +399,7 @@ class ActionBlog extends Action { $aUserRank=array(); } foreach ($aUserRank as $sUserId => $sRank) { + $sRank=(string)$sRank; if (!($oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$sUserId))) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); break; @@ -498,14 +499,14 @@ class ActionBlog extends Action { /** * Проверяем есть ли название блога */ - if (!func_check(getRequest('blog_title'),'text',2,200)) { + if (!func_check(getRequestStr('blog_title'),'text',2,200)) { $this->Message_AddError($this->Lang_Get('blog_create_title_error'),$this->Lang_Get('error')); $bOk=false; } else { /** * Проверяем есть ли уже блог с таким названием */ - if ($oBlogExists=$this->Blog_GetBlogByTitle(getRequest('blog_title'))) { + if ($oBlogExists=$this->Blog_GetBlogByTitle(getRequestStr('blog_title'))) { if (!$oBlog or $oBlog->getId()!=$oBlogExists->getId()) { $this->Message_AddError($this->Lang_Get('blog_create_title_error_unique'),$this->Lang_Get('error')); $bOk=false; @@ -517,9 +518,9 @@ class ActionBlog extends Action { * Проверяем есть ли URL блога, с заменой всех пробельных символов на "_" */ if (!$oBlog or $this->oUserCurrent->isAdministrator()) { - $blogUrl=preg_replace("/\s+/",'_',(string)getRequest('blog_url')); + $blogUrl=preg_replace("/\s+/",'_',getRequestStr('blog_url')); $_REQUEST['blog_url']=$blogUrl; - if (!func_check(getRequest('blog_url'),'login',2,50)) { + if (!func_check(getRequestStr('blog_url'),'login',2,50)) { $this->Message_AddError($this->Lang_Get('blog_create_url_error'),$this->Lang_Get('error')); $bOk=false; } @@ -527,14 +528,14 @@ class ActionBlog extends Action { /** * Проверяем на счет плохих УРЛов */ - if (in_array(getRequest('blog_url'),$this->aBadBlogUrl)) { + if (in_array(getRequestStr('blog_url'),$this->aBadBlogUrl)) { $this->Message_AddError($this->Lang_Get('blog_create_url_error_badword').' '.join(',',$this->aBadBlogUrl),$this->Lang_Get('error')); $bOk=false; } /** * Проверяем есть ли уже блог с таким URL */ - if ($oBlogExists=$this->Blog_GetBlogByUrl((string)getRequest('blog_url'))) { + if ($oBlogExists=$this->Blog_GetBlogByUrl(getRequestStr('blog_url'))) { if (!$oBlog or $oBlog->getId()!=$oBlogExists->getId()) { $this->Message_AddError($this->Lang_Get('blog_create_url_error_unique'),$this->Lang_Get('error')); $bOk=false; @@ -543,21 +544,21 @@ class ActionBlog extends Action { /** * Проверяем есть ли описание блога */ - if (!func_check(getRequest('blog_description'),'text',10,3000)) { + if (!func_check(getRequestStr('blog_description'),'text',10,3000)) { $this->Message_AddError($this->Lang_Get('blog_create_description_error'),$this->Lang_Get('error')); $bOk=false; } /** * Проверяем доступные типы блога для создания */ - if (!in_array(getRequest('blog_type'),array('open','close'))) { + if (!in_array(getRequestStr('blog_type'),array('open','close'))) { $this->Message_AddError($this->Lang_Get('blog_create_type_error'),$this->Lang_Get('error')); $bOk=false; } /** * Преобразуем ограничение по рейтингу в число */ - if (!func_check(getRequest('blog_limit_rating_topic'),'float')) { + if (!func_check(getRequestStr('blog_limit_rating_topic'),'float')) { $this->Message_AddError($this->Lang_Get('blog_create_rating_error'),$this->Lang_Get('error')); $bOk=false; } @@ -573,8 +574,8 @@ class ActionBlog extends Action { */ protected function EventTopics() { $sPeriod=1; // по дефолту 1 день - if (in_array(getRequest('period'),array(1,7,30,'all'))) { - $sPeriod=getRequest('period'); + if (in_array(getRequestStr('period'),array(1,7,30,'all'))) { + $sPeriod=getRequestStr('period'); } $sShowType=$this->sCurrentEvent; if (!in_array($sShowType,array('discussed','top'))) { @@ -738,6 +739,7 @@ class ActionBlog extends Action { $sTextSeo=strip_tags($oTopic->getText()); $this->Viewer_SetHtmlDescription(func_text_words($sTextSeo, Config::Get('seo.description_words_count'))); $this->Viewer_SetHtmlKeywords($oTopic->getTags()); + $this->Viewer_SetHtmlCanonical($oTopic->getUrl()); /** * Вызов хуков */ @@ -812,8 +814,8 @@ class ActionBlog extends Action { */ protected function EventShowBlog() { $sPeriod=1; // по дефолту 1 день - if (in_array(getRequest('period'),array(1,7,30,'all'))) { - $sPeriod=getRequest('period'); + if (in_array(getRequestStr('period'),array(1,7,30,'all'))) { + $sPeriod=getRequestStr('period'); } $sBlogUrl=$this->sCurrentEvent; $sShowType=in_array($this->GetParamEventMatch(0,0),array('bad','new','newall','discussed','top')) ? $this->GetParamEventMatch(0,0) : 'good'; @@ -959,7 +961,7 @@ class ActionBlog extends Action { /** * Проверяем топик */ - if (!($oTopic=$this->Topic_GetTopicById(getRequest('cmt_target_id')))) { + if (!($oTopic=$this->Topic_GetTopicById(getRequestStr('cmt_target_id')))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } @@ -994,7 +996,7 @@ class ActionBlog extends Action { /** * Проверяем текст комментария */ - $sText=$this->Text_Parser(getRequest('comment_text')); + $sText=$this->Text_Parser(getRequestStr('comment_text')); if (!func_check($sText,'text',2,10000)) { $this->Message_AddErrorSingle($this->Lang_Get('topic_comment_add_text_error'),$this->Lang_Get('error')); return; @@ -1123,14 +1125,14 @@ class ActionBlog extends Action { /** * Топик существует? */ - $idTopic=getRequest('idTarget',null,'post'); + $idTopic=getRequestStr('idTarget',null,'post'); if (!($oTopic=$this->Topic_GetTopicById($idTopic))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } - $idCommentLast=getRequest('idCommentLast',null,'post'); - $selfIdComment=getRequest('selfIdComment',null,'post'); + $idCommentLast=getRequestStr('idCommentLast',null,'post'); + $selfIdComment=getRequestStr('selfIdComment',null,'post'); $aComments=array(); /** * Если используется постраничность, возвращаем только добавленный комментарий @@ -1190,7 +1192,7 @@ class ActionBlog extends Action { */ $this->Viewer_SetResponseAjax('json'); $sUsers=getRequest('users',null,'post'); - $sBlogId=getRequest('idBlog',null,'post'); + $sBlogId=getRequestStr('idBlog',null,'post'); /** * Если пользователь не авторизирован, возвращаем ошибку */ @@ -1336,8 +1338,8 @@ class ActionBlog extends Action { * Устанавливаем формат Ajax ответа */ $this->Viewer_SetResponseAjax('json'); - $sUserId=getRequest('idUser',null,'post'); - $sBlogId=getRequest('idBlog',null,'post'); + $sUserId=getRequestStr('idUser',null,'post'); + $sBlogId=getRequestStr('idBlog',null,'post'); /** * Если пользователь не авторизирован, возвращаем ошибку */ @@ -1386,8 +1388,8 @@ class ActionBlog extends Action { * Устанавливаем формат Ajax ответа */ $this->Viewer_SetResponseAjax('json'); - $sUserId=getRequest('idUser',null,'post'); - $sBlogId=getRequest('idBlog',null,'post'); + $sUserId=getRequestStr('idUser',null,'post'); + $sBlogId=getRequestStr('idBlog',null,'post'); /** * Если пользователь не авторизирован, возвращаем ошибку */ @@ -1488,7 +1490,7 @@ class ActionBlog extends Action { /** * Получаем код подтверждения из ревеста и дешефруем его */ - $sCode=xxtea_decrypt(base64_decode(rawurldecode((string)getRequest('code'))), Config::Get('module.blog.encrypt')); + $sCode=xxtea_decrypt(base64_decode(rawurldecode(getRequestStr('code'))), Config::Get('module.blog.encrypt')); if (!$sCode) { return $this->EventNotFound(); } @@ -1602,7 +1604,7 @@ class ActionBlog extends Action { * * (-1) - выбран пункт меню "удалить топики". */ - if($sBlogIdNew=getRequest('topic_move_to') and ($sBlogIdNew!=-1) and is_array($aTopics) and count($aTopics)) { + if($sBlogIdNew=getRequestStr('topic_move_to') and ($sBlogIdNew!=-1) and is_array($aTopics) and count($aTopics)) { if(!$oBlogNew = $this->Blog_GetBlogById($sBlogIdNew)){ $this->Message_AddErrorSingle($this->Lang_Get('blog_admin_delete_move_error'),$this->Lang_Get('error'),true); Router::Location($oBlog->getUrlFull()); @@ -1644,7 +1646,7 @@ class ActionBlog extends Action { * Устанавливаем формат Ajax ответа */ $this->Viewer_SetResponseAjax('json'); - $sBlogId=getRequest('idBlog',null,'post'); + $sBlogId=getRequestStr('idBlog',null,'post'); /** * Определяем тип блога и получаем его */ @@ -1682,7 +1684,7 @@ class ActionBlog extends Action { /** * Блог существует? */ - $idBlog=getRequest('idBlog',null,'post'); + $idBlog=getRequestStr('idBlog',null,'post'); if (!($oBlog=$this->Blog_GetBlogById($idBlog))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; diff --git a/classes/actions/ActionBlogs.class.php b/classes/actions/ActionBlogs.class.php index fa7fe759..6f92418a 100644 --- a/classes/actions/ActionBlogs.class.php +++ b/classes/actions/ActionBlogs.class.php @@ -58,7 +58,7 @@ class ActionBlogs extends Action { /** * Получаем из реквеста первые буквы блога */ - if ($sTitle=getRequest('blog_title') and is_string($sTitle)) { + if ($sTitle=getRequestStr('blog_title')) { $sTitle=str_replace('%','',$sTitle); } if (!$sTitle) { @@ -87,14 +87,14 @@ class ActionBlogs extends Action { */ $sOrder='blog_rating'; if (getRequest('order')) { - $sOrder=(string)getRequest('order'); + $sOrder=getRequestStr('order'); } /** * В каком направлении сортировать */ $sOrderWay='desc'; if (getRequest('order_way')) { - $sOrderWay=(string)getRequest('order_way'); + $sOrderWay=getRequestStr('order_way'); } /** * Фильтр поиска блогов diff --git a/classes/actions/ActionIndex.class.php b/classes/actions/ActionIndex.class.php index ae4ace2f..5d670e78 100644 --- a/classes/actions/ActionIndex.class.php +++ b/classes/actions/ActionIndex.class.php @@ -79,8 +79,8 @@ class ActionIndex extends Action { $this->AddEventPreg('/^(page([1-9]\d{0,5}))?$/i','EventIndex'); $this->AddEventPreg('/^new$/i','/^(page([1-9]\d{0,5}))?$/i','EventNew'); $this->AddEventPreg('/^newall$/i','/^(page([1-9]\d{0,5}))?$/i','EventNewAll'); - $this->AddEventPreg('/^discussed/i','/^(page([1-9]\d{0,5}))?$/i','EventDiscussed'); - $this->AddEventPreg('/^top/i','/^(page([1-9]\d{0,5}))?$/i','EventTop'); + $this->AddEventPreg('/^discussed$/i','/^(page([1-9]\d{0,5}))?$/i','EventDiscussed'); + $this->AddEventPreg('/^top$/i','/^(page([1-9]\d{0,5}))?$/i','EventTop'); } @@ -94,8 +94,8 @@ class ActionIndex extends Action { */ protected function EventTop() { $sPeriod=1; // по дефолту 1 день - if (in_array(getRequest('period'),array(1,7,30,'all'))) { - $sPeriod=getRequest('period'); + if (in_array(getRequestStr('period'),array(1,7,30,'all'))) { + $sPeriod=getRequestStr('period'); } /** * Меню @@ -145,8 +145,8 @@ class ActionIndex extends Action { */ protected function EventDiscussed() { $sPeriod=1; // по дефолту 1 день - if (in_array(getRequest('period'),array(1,7,30,'all'))) { - $sPeriod=getRequest('period'); + if (in_array(getRequestStr('period'),array(1,7,30,'all'))) { + $sPeriod=getRequestStr('period'); } /** * Меню @@ -319,4 +319,4 @@ class ActionIndex extends Action { $this->Viewer_Assign('iCountTopicsPersonalNew',$this->iCountTopicsPersonalNew); } } -?> \ No newline at end of file +?> diff --git a/classes/actions/ActionLink.class.php b/classes/actions/ActionLink.class.php index fc5e79ec..83d9e8db 100644 --- a/classes/actions/ActionLink.class.php +++ b/classes/actions/ActionLink.class.php @@ -219,13 +219,13 @@ class ActionLink extends Action { /** * Заполняем поля для валидации */ - $oTopic->setBlogId(getRequest('blog_id')); - $oTopic->setTitle(strip_tags(getRequest('topic_title'))); - $oTopic->setTextSource(getRequest('topic_text')); - $oTopic->setTags(getRequest('topic_tags')); + $oTopic->setBlogId(getRequestStr('blog_id')); + $oTopic->setTitle(strip_tags(getRequestStr('topic_title'))); + $oTopic->setTextSource(getRequestStr('topic_text')); + $oTopic->setTags(getRequestStr('topic_tags')); $oTopic->setUserId($this->oUserCurrent->getId()); $oTopic->setType('link'); - $oTopic->setLinkUrl(getRequest('topic_link_url')); + $oTopic->setLinkUrl(getRequestStr('topic_link_url')); $oTopic->setDateAdd(date("Y-m-d H:i:s")); $oTopic->setUserIp(func_getIp()); /** @@ -347,11 +347,11 @@ class ActionLink extends Action { /** * Заполняем поля для валидации */ - $oTopic->setBlogId(getRequest('blog_id')); - $oTopic->setTitle(strip_tags(getRequest('topic_title'))); - $oTopic->setLinkUrl(getRequest('topic_link_url')); - $oTopic->setTextSource(getRequest('topic_text')); - $oTopic->setTags(getRequest('topic_tags')); + $oTopic->setBlogId(getRequestStr('blog_id')); + $oTopic->setTitle(strip_tags(getRequestStr('topic_title'))); + $oTopic->setLinkUrl(getRequestStr('topic_link_url')); + $oTopic->setTextSource(getRequestStr('topic_text')); + $oTopic->setTags(getRequestStr('topic_tags')); $oTopic->setUserIp(func_getIp()); /** * Проверка корректности полей формы diff --git a/classes/actions/ActionLogin.class.php b/classes/actions/ActionLogin.class.php index f0753921..92213b36 100644 --- a/classes/actions/ActionLogin.class.php +++ b/classes/actions/ActionLogin.class.php @@ -87,8 +87,8 @@ class ActionLogin extends Action { * Определяем редирект */ $sUrl=Config::Get('module.user.redirect_after_login'); - if (getRequest('return-path')) { - $sUrl=getRequest('return-path'); + if (getRequestStr('return-path')) { + $sUrl=getRequestStr('return-path'); } $this->Viewer_AssignAjax('sUrlRedirect',$sUrl ? $sUrl : Config::Get('path.root.web')); return; @@ -112,7 +112,7 @@ class ActionLogin extends Action { protected function EventAjaxReactivation() { $this->Viewer_SetResponseAjax('json'); - if ((func_check(getRequest('mail'), 'mail') and $oUser = $this->User_GetUserByMail(getRequest('mail')))) { + if ((func_check(getRequestStr('mail'), 'mail') and $oUser = $this->User_GetUserByMail(getRequestStr('mail')))) { if ($oUser->getActivate()) { $this->Message_AddErrorSingle($this->Lang_Get('registration_activate_error_reactivate')); return; @@ -162,7 +162,7 @@ class ActionLogin extends Action { /** * Пользователь с таким емайлом существует? */ - if ((func_check(getRequest('mail'),'mail') and $oUser=$this->User_GetUserByMail(getRequest('mail')))) { + if ((func_check(getRequestStr('mail'),'mail') and $oUser=$this->User_GetUserByMail(getRequestStr('mail')))) { /** * Формируем и отправляем ссылку на смену пароля */ diff --git a/classes/actions/ActionPeople.class.php b/classes/actions/ActionPeople.class.php index 2b5bed5f..28f6e827 100644 --- a/classes/actions/ActionPeople.class.php +++ b/classes/actions/ActionPeople.class.php @@ -236,14 +236,14 @@ class ActionPeople extends Action { */ $sOrder='user_rating'; if (getRequest('order')) { - $sOrder=(string)getRequest('order'); + $sOrder=getRequestStr('order'); } /** * В каком направлении сортировать */ $sOrderWay='desc'; if (getRequest('order_way')) { - $sOrderWay=(string)getRequest('order_way'); + $sOrderWay=getRequestStr('order_way'); } $aFilter=array( 'activate' => 1 diff --git a/classes/actions/ActionPersonalBlog.class.php b/classes/actions/ActionPersonalBlog.class.php index d9fb6a59..e4994efc 100644 --- a/classes/actions/ActionPersonalBlog.class.php +++ b/classes/actions/ActionPersonalBlog.class.php @@ -58,8 +58,8 @@ class ActionPersonalBlog extends Action { $this->AddEventPreg('/^bad$/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics'); $this->AddEventPreg('/^new$/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics'); $this->AddEventPreg('/^newall$/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics'); - $this->AddEventPreg('/^discussed/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics'); - $this->AddEventPreg('/^top/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics'); + $this->AddEventPreg('/^discussed$/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics'); + $this->AddEventPreg('/^top$/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics'); } @@ -74,8 +74,8 @@ class ActionPersonalBlog extends Action { */ protected function EventTopics() { $sPeriod=1; // по дефолту 1 день - if (in_array(getRequest('period'),array(1,7,30,'all'))) { - $sPeriod=getRequest('period'); + if (in_array(getRequestStr('period'),array(1,7,30,'all'))) { + $sPeriod=getRequestStr('period'); } $sShowType=$this->sCurrentEvent; if (!in_array($sShowType,array('discussed','top'))) { @@ -152,4 +152,4 @@ class ActionPersonalBlog extends Action { $this->Viewer_Assign('iCountTopicsNew',$iCountTopicsNew); } } -?> \ No newline at end of file +?> diff --git a/classes/actions/ActionPhotoset.class.php b/classes/actions/ActionPhotoset.class.php index 5120f247..6c14ae9f 100644 --- a/classes/actions/ActionPhotoset.class.php +++ b/classes/actions/ActionPhotoset.class.php @@ -97,7 +97,7 @@ class ActionPhotoset extends Action { /** * Существует ли топик */ - $oTopic = $this->Topic_getTopicById(getRequest('topic_id')); + $oTopic = $this->Topic_getTopicById(getRequestStr('topic_id')); if (!$oTopic || !getRequest('last_id')) { $this->Message_AddError($this->Lang_Get('system_error'), $this->Lang_Get('error')); return false; @@ -105,7 +105,7 @@ class ActionPhotoset extends Action { /** * Получаем список фото */ - $aPhotos = $oTopic->getPhotosetPhotos(getRequest('last_id'), Config::Get('module.topic.photoset.per_page')); + $aPhotos = $oTopic->getPhotosetPhotos(getRequestStr('last_id'), Config::Get('module.topic.photoset.per_page')); $aResult = array(); if (count($aPhotos)) { /** @@ -137,7 +137,7 @@ class ActionPhotoset extends Action { /** * Поиск фото по id */ - $oPhoto = $this->Topic_getTopicPhotoById(getRequest('id')); + $oPhoto = $this->Topic_getTopicPhotoById(getRequestStr('id')); if ($oPhoto) { if ($oPhoto->getTopicId()) { /** @@ -188,16 +188,16 @@ class ActionPhotoset extends Action { /** * Поиск фото по id */ - $oPhoto = $this->Topic_getTopicPhotoById(getRequest('id')); + $oPhoto = $this->Topic_getTopicPhotoById(getRequestStr('id')); if ($oPhoto) { if ($oPhoto->getTopicId()) { // проверяем права на топик if ($oTopic=$this->Topic_GetTopicById($oPhoto->getTopicId()) and $this->ACL_IsAllowEditTopic($oTopic,$this->oUserCurrent)) { - $oPhoto->setDescription(htmlspecialchars(strip_tags(getRequest('text')))); + $oPhoto->setDescription(htmlspecialchars(strip_tags(getRequestStr('text')))); $this->Topic_updateTopicPhoto($oPhoto); } } else { - $oPhoto->setDescription(htmlspecialchars(strip_tags(getRequest('text')))); + $oPhoto->setDescription(htmlspecialchars(strip_tags(getRequestStr('text')))); $this->Topic_updateTopicPhoto($oPhoto); } } @@ -232,12 +232,12 @@ class ActionPhotoset extends Action { return false; } - $iTopicId = getRequest('topic_id'); + $iTopicId = getRequestStr('topic_id'); $sTargetId = null; $iCountPhotos = 0; // Если от сервера не пришёл id топика, то пытаемся определить временный код для нового топика. Если и его нет. то это ошибка if (!$iTopicId) { - $sTargetId = empty($_COOKIE['ls_photoset_target_tmp']) ? getRequest('ls_photoset_target_tmp') : $_COOKIE['ls_photoset_target_tmp']; + $sTargetId = empty($_COOKIE['ls_photoset_target_tmp']) ? getRequestStr('ls_photoset_target_tmp') : $_COOKIE['ls_photoset_target_tmp']; if (!$sTargetId) { $this->Message_AddError($this->Lang_Get('system_error'), $this->Lang_Get('error')); return false; @@ -430,10 +430,10 @@ class ActionPhotoset extends Action { /** * Заполняем поля для валидации */ - $oTopic->setBlogId(getRequest('blog_id')); - $oTopic->setTitle(strip_tags(getRequest('topic_title'))); - $oTopic->setTextSource(getRequest('topic_text')); - $oTopic->setTags(getRequest('topic_tags')); + $oTopic->setBlogId(getRequestStr('blog_id')); + $oTopic->setTitle(strip_tags(getRequestStr('topic_title'))); + $oTopic->setTextSource(getRequestStr('topic_text')); + $oTopic->setTags(getRequestStr('topic_tags')); $oTopic->setUserId($this->oUserCurrent->getId()); $oTopic->setType('photoset'); $oTopic->setDateAdd(date("Y-m-d H:i:s")); @@ -488,7 +488,7 @@ class ActionPhotoset extends Action { $sTargetTmp=$_COOKIE['ls_photoset_target_tmp']; $aPhotos = $this->Topic_getPhotosByTargetTmp($sTargetTmp); - if (!($oPhotoMain=$this->Topic_getTopicPhotoById(getRequest('topic_main_photo')) and $oPhotoMain->getTargetTmp()==$sTargetTmp)) { + if (!($oPhotoMain=$this->Topic_getTopicPhotoById(getRequestStr('topic_main_photo')) and $oPhotoMain->getTargetTmp()==$sTargetTmp)) { $oPhotoMain=$aPhotos[0]; } $oTopic->setPhotosetMainPhotoId($oPhotoMain->getId()); @@ -586,10 +586,10 @@ class ActionPhotoset extends Action { /** * Заполняем поля для валидации */ - $oTopic->setBlogId(getRequest('blog_id')); - $oTopic->setTitle(strip_tags(getRequest('topic_title'))); - $oTopic->setTextSource(getRequest('topic_text')); - $oTopic->setTags(getRequest('topic_tags')); + $oTopic->setBlogId(getRequestStr('blog_id')); + $oTopic->setTitle(strip_tags(getRequestStr('topic_title'))); + $oTopic->setTextSource(getRequestStr('topic_text')); + $oTopic->setTags(getRequestStr('topic_tags')); $oTopic->setUserIp(func_getIp()); /** * Проверка корректности полей формы @@ -640,7 +640,7 @@ class ActionPhotoset extends Action { $oTopic->setTextShort($this->Text_Parser($sTextShort)); $aPhotos = $oTopic->getPhotosetPhotos(); - if (!($oPhotoMain=$this->Topic_getTopicPhotoById(getRequest('topic_main_photo')) and $oPhotoMain->getTopicId()==$oTopic->getId())) { + if (!($oPhotoMain=$this->Topic_getTopicPhotoById(getRequestStr('topic_main_photo')) and $oPhotoMain->getTopicId()==$oTopic->getId())) { $oPhotoMain=$aPhotos[0]; } $oTopic->setPhotosetMainPhotoId($oPhotoMain->getId()); diff --git a/classes/actions/ActionProfile.class.php b/classes/actions/ActionProfile.class.php index e0798285..1f68936b 100644 --- a/classes/actions/ActionProfile.class.php +++ b/classes/actions/ActionProfile.class.php @@ -454,8 +454,8 @@ class ActionProfile extends Action { $oWall->_setValidateScenario('add'); $oWall->setWallUserId($this->oUserProfile->getId()); $oWall->setUserId($this->oUserCurrent->getId()); - $oWall->setText(getRequest('sText')); - $oWall->setPid(getRequest('iPid')); + $oWall->setText(getRequestStr('sText')); + $oWall->setPid(getRequestStr('iPid')); $this->Hook_Run('wall_add_validate_before', array('oWall'=>$oWall)); if ($oWall->_Validate()) { @@ -506,7 +506,7 @@ class ActionProfile extends Action { /** * Получаем запись */ - if (!($oWall=$this->Wall_GetWallById(getRequest('iId')))) { + if (!($oWall=$this->Wall_GetWallById(getRequestStr('iId')))) { return parent::EventNotFound(); } /** @@ -565,7 +565,7 @@ class ActionProfile extends Action { if (!$this->CheckUserProfile()) { return parent::EventNotFound(); } - if (!($oWall=$this->Wall_GetWallById(getRequest('iPid'))) or $oWall->getPid()) { + if (!($oWall=$this->Wall_GetWallById(getRequestStr('iPid'))) or $oWall->getPid()) { return parent::EventNotFound(); } /** @@ -611,9 +611,9 @@ class ActionProfile extends Action { * Создаем заметку и проводим валидацию */ $oNote=Engine::GetEntity('ModuleUser_EntityNote'); - $oNote->setTargetUserId(getRequest('iUserId')); + $oNote->setTargetUserId(getRequestStr('iUserId')); $oNote->setUserId($this->oUserCurrent->getId()); - $oNote->setText((string)getRequest('text')); + $oNote->setText(getRequestStr('text')); if ($oNote->_Validate()) { /** @@ -641,7 +641,7 @@ class ActionProfile extends Action { return parent::EventNotFound(); } - if (!($oUserTarget=$this->User_GetUserById(getRequest('iUserId')))) { + if (!($oUserTarget=$this->User_GetUserById(getRequestStr('iUserId')))) { return parent::EventNotFound(); } if (!($oNote=$this->User_GetUserNote($oUserTarget->getId(),$this->oUserCurrent->getId()))) { @@ -696,7 +696,7 @@ class ActionProfile extends Action { /** * Из реквеста дешефруем ID польователя */ - $sUserId=xxtea_decrypt(base64_decode(rawurldecode((string)getRequest('code'))), Config::Get('module.talk.encrypt')); + $sUserId=xxtea_decrypt(base64_decode(rawurldecode(getRequestStr('code'))), Config::Get('module.talk.encrypt')); if (!$sUserId) { return $this->EventNotFound(); } @@ -776,7 +776,7 @@ class ActionProfile extends Action { * Устанавливаем формат Ajax ответа */ $this->Viewer_SetResponseAjax('json'); - $sUserId=getRequest('idUser',null,'post'); + $sUserId=getRequestStr('idUser',null,'post'); /** * Если пользователь не авторизирован, возвращаем ошибку */ @@ -896,8 +896,8 @@ class ActionProfile extends Action { * Устанавливаем формат Ajax ответа */ $this->Viewer_SetResponseAjax('json'); - $sUserId=getRequest('idUser'); - $sUserText=getRequest('userText',''); + $sUserId=getRequestStr('idUser'); + $sUserText=getRequestStr('userText',''); /** * Если пользователь не авторизирован, возвращаем ошибку */ @@ -1120,7 +1120,7 @@ class ActionProfile extends Action { * Устанавливаем формат Ajax ответа */ $this->Viewer_SetResponseAjax('json'); - $sUserId=getRequest('idUser',null,'post'); + $sUserId=getRequestStr('idUser',null,'post'); /** * Если пользователь не авторизирован, возвращаем ошибку */ diff --git a/classes/actions/ActionQuestion.class.php b/classes/actions/ActionQuestion.class.php index 2c79610b..c9ac0030 100644 --- a/classes/actions/ActionQuestion.class.php +++ b/classes/actions/ActionQuestion.class.php @@ -190,10 +190,10 @@ class ActionQuestion extends Action { /** * Заполняем поля для валидации */ - $oTopic->setBlogId(getRequest('blog_id')); - $oTopic->setTitle(strip_tags(getRequest('topic_title'))); - $oTopic->setTextSource(getRequest('topic_text')); - $oTopic->setTags(getRequest('topic_tags')); + $oTopic->setBlogId(getRequestStr('blog_id')); + $oTopic->setTitle(strip_tags(getRequestStr('topic_title'))); + $oTopic->setTextSource(getRequestStr('topic_text')); + $oTopic->setTags(getRequestStr('topic_tags')); $oTopic->setUserId($this->oUserCurrent->getId()); $oTopic->setType('question'); $oTopic->setDateAdd(date("Y-m-d H:i:s")); @@ -246,7 +246,7 @@ class ActionQuestion extends Action { */ $oTopic->clearQuestionAnswer(); foreach (getRequest('answer',array()) as $sAnswer) { - $oTopic->addQuestionAnswer($sAnswer); + $oTopic->addQuestionAnswer((string)$sAnswer); } /** * Публикуем или сохраняем @@ -324,12 +324,12 @@ class ActionQuestion extends Action { /** * Заполняем поля для валидации */ - $oTopic->setBlogId(getRequest('blog_id')); + $oTopic->setBlogId(getRequestStr('blog_id')); if ($oTopic->getQuestionCountVote()==0) { - $oTopic->setTitle(strip_tags(getRequest('topic_title'))); + $oTopic->setTitle(strip_tags(getRequestStr('topic_title'))); } - $oTopic->setTextSource(getRequest('topic_text')); - $oTopic->setTags(getRequest('topic_tags')); + $oTopic->setTextSource(getRequestStr('topic_text')); + $oTopic->setTags(getRequestStr('topic_tags')); $oTopic->setUserIp(func_getIp()); /** * Проверка корректности полей формы @@ -380,7 +380,7 @@ class ActionQuestion extends Action { if ($oTopic->getQuestionCountVote()==0) { $oTopic->clearQuestionAnswer(); foreach (getRequest('answer',array()) as $sAnswer) { - $oTopic->addQuestionAnswer($sAnswer); + $oTopic->addQuestionAnswer((string)$sAnswer); } } /** @@ -476,6 +476,7 @@ class ActionQuestion extends Action { */ $aAnswers=getRequest('answer',array()); foreach ($aAnswers as $key => $sAnswer) { + $sAnswer=(string)$sAnswer; if (trim($sAnswer)=='') { unset($aAnswers[$key]); continue; diff --git a/classes/actions/ActionRegistration.class.php b/classes/actions/ActionRegistration.class.php index 633a7721..536393a2 100644 --- a/classes/actions/ActionRegistration.class.php +++ b/classes/actions/ActionRegistration.class.php @@ -148,11 +148,11 @@ class ActionRegistration extends Action { /** * Заполняем поля (данные) */ - $oUser->setLogin(getRequest('login')); - $oUser->setMail(getRequest('mail')); - $oUser->setPassword(getRequest('password')); - $oUser->setPasswordConfirm(getRequest('password_confirm')); - $oUser->setCaptcha(getRequest('captcha')); + $oUser->setLogin(getRequestStr('login')); + $oUser->setMail(getRequestStr('mail')); + $oUser->setPassword(getRequestStr('password')); + $oUser->setPasswordConfirm(getRequestStr('password_confirm')); + $oUser->setCaptcha(getRequestStr('captcha')); $oUser->setDateRegister(date("Y-m-d H:i:s")); $oUser->setIpRegister(func_getIp()); /** @@ -198,10 +198,10 @@ class ActionRegistration extends Action { /** * Отправляем на мыло письмо о подтверждении регистрации */ - $this->Notify_SendRegistrationActivate($oUser,getRequest('password')); + $this->Notify_SendRegistrationActivate($oUser,getRequestStr('password')); $this->Viewer_AssignAjax('sUrlRedirect',Router::GetPath('registration').'confirm/'); } else { - $this->Notify_SendRegistration($oUser,getRequest('password')); + $this->Notify_SendRegistration($oUser,getRequestStr('password')); $oUser=$this->User_GetUserById($oUser->getId()); /** * Сразу авторизуем @@ -212,8 +212,8 @@ class ActionRegistration extends Action { * Определяем URL для редиректа после авторизации */ $sUrl=Config::Get('module.user.redirect_after_registration'); - if (getRequest('return-path')) { - $sUrl=getRequest('return-path'); + if (getRequestStr('return-path')) { + $sUrl=getRequestStr('return-path'); } $this->Viewer_AssignAjax('sUrlRedirect',$sUrl ? $sUrl : Config::Get('path.root.web')); $this->Message_AddNoticeSingle($this->Lang_Get('registration_ok')); @@ -304,7 +304,7 @@ class ActionRegistration extends Action { if ($this->CheckInviteRegister()) { $sInviteId=$this->GetInviteRegister(); } else { - $sInviteId=getRequest('invite_code'); + $sInviteId=getRequestStr('invite_code'); } $oInvate=$this->User_GetInviteByCode($sInviteId); if ($oInvate) { diff --git a/classes/actions/ActionSearch.class.php b/classes/actions/ActionSearch.class.php index 063d7152..b144b3ab 100644 --- a/classes/actions/ActionSearch.class.php +++ b/classes/actions/ActionSearch.class.php @@ -169,7 +169,7 @@ class ActionSearch extends Action { * @return array */ private function PrepareRequest(){ - $aReq['q'] = getRequest('q'); + $aReq['q'] = getRequestStr('q'); if (!func_check($aReq['q'],'text', 2, 255)) { /** * Если запрос слишком короткий перенаправляем на начальную страницу поиска diff --git a/classes/actions/ActionSettings.class.php b/classes/actions/ActionSettings.class.php index 09684375..20262ec3 100644 --- a/classes/actions/ActionSettings.class.php +++ b/classes/actions/ActionSettings.class.php @@ -360,8 +360,8 @@ class ActionSettings extends Action { if (isPost('submit_settings_tuning')) { $this->Security_ValidateSendForm(); - if (in_array(getRequest('settings_general_timezone'),$aTimezoneList)) { - $this->oUserCurrent->setSettingsTimezone(getRequest('settings_general_timezone')); + if (in_array(getRequestStr('settings_general_timezone'),$aTimezoneList)) { + $this->oUserCurrent->setSettingsTimezone(getRequestStr('settings_general_timezone')); } $this->oUserCurrent->setSettingsNoticeNewTopic( getRequest('settings_notice_new_topic') ? 1 : 0 ); @@ -420,7 +420,7 @@ class ActionSettings extends Action { /** * Емайл корректен? */ - if (!func_check(getRequest('invite_mail'),'mail')) { + if (!func_check(getRequestStr('invite_mail'),'mail')) { $this->Message_AddError($this->Lang_Get('settings_invite_mail_error'),$this->Lang_Get('error')); $bError=true; } @@ -433,7 +433,7 @@ class ActionSettings extends Action { */ if (!$bError) { $oInvite=$this->User_GenerateInvite($this->oUserCurrent); - $this->Notify_SendInvite($this->oUserCurrent,getRequest('invite_mail'),$oInvite); + $this->Notify_SendInvite($this->oUserCurrent,getRequestStr('invite_mail'),$oInvite); $this->Message_AddNoticeSingle($this->Lang_Get('settings_invite_submit_ok')); $this->Hook_Run('settings_invate_send_after', array('oUser'=>$this->oUserCurrent)); } @@ -461,8 +461,8 @@ class ActionSettings extends Action { /** * Проверка мыла */ - if (func_check(getRequest('mail'),'mail')) { - if ($oUserMail=$this->User_GetUserByMail(getRequest('mail')) and $oUserMail->getId()!=$this->oUserCurrent->getId()) { + if (func_check(getRequestStr('mail'),'mail')) { + if ($oUserMail=$this->User_GetUserByMail(getRequestStr('mail')) and $oUserMail->getId()!=$this->oUserCurrent->getId()) { $this->Message_AddError($this->Lang_Get('settings_profile_mail_error_used'),$this->Lang_Get('error')); $bError=true; } @@ -473,11 +473,11 @@ class ActionSettings extends Action { /** * Проверка на смену пароля */ - if (getRequest('password','')!='') { - if (func_check(getRequest('password'),'password',5)) { - if (getRequest('password')==getRequest('password_confirm')) { - if (func_encrypt(getRequest('password_now'))==$this->oUserCurrent->getPassword()) { - $this->oUserCurrent->setPassword(func_encrypt(getRequest('password'))); + if (getRequestStr('password','')!='') { + if (func_check(getRequestStr('password'),'password',5)) { + if (getRequestStr('password')==getRequestStr('password_confirm')) { + if (func_encrypt(getRequestStr('password_now'))==$this->oUserCurrent->getPassword()) { + $this->oUserCurrent->setPassword(func_encrypt(getRequestStr('password'))); } else { $bError=true; $this->Message_AddError($this->Lang_Get('settings_profile_password_current_error'),$this->Lang_Get('error')); @@ -508,9 +508,13 @@ class ActionSettings extends Action { /** * Подтверждение смены емайла */ - if (getRequest('mail') and getRequest('mail')!=$this->oUserCurrent->getMail()) { - if ($this->User_MakeUserChangemail($this->oUserCurrent,getRequest('mail'))) { - $this->Message_AddNotice($this->Lang_Get('settings_profile_mail_change_from_notice')); + if (getRequestStr('mail') and getRequestStr('mail')!=$this->oUserCurrent->getMail()) { + if ($oChangemail=$this->User_MakeUserChangemail($this->oUserCurrent,getRequestStr('mail'))) { + if ($oChangemail->getMailFrom()) { + $this->Message_AddNotice($this->Lang_Get('settings_profile_mail_change_from_notice')); + } else { + $this->Message_AddNotice($this->Lang_Get('settings_profile_mail_change_to_notice')); + } } } @@ -552,43 +556,43 @@ class ActionSettings extends Action { * Определяем гео-объект */ if (getRequest('geo_city')) { - $oGeoObject=$this->Geo_GetGeoObject('city',getRequest('geo_city')); + $oGeoObject=$this->Geo_GetGeoObject('city',getRequestStr('geo_city')); } elseif (getRequest('geo_region')) { - $oGeoObject=$this->Geo_GetGeoObject('region',getRequest('geo_region')); + $oGeoObject=$this->Geo_GetGeoObject('region',getRequestStr('geo_region')); } elseif (getRequest('geo_country')) { - $oGeoObject=$this->Geo_GetGeoObject('country',getRequest('geo_country')); + $oGeoObject=$this->Geo_GetGeoObject('country',getRequestStr('geo_country')); } else { $oGeoObject=null; } /** * Проверяем имя */ - if (func_check(getRequest('profile_name'),'text',2,Config::Get('module.user.name_max'))) { - $this->oUserCurrent->setProfileName(getRequest('profile_name')); + if (func_check(getRequestStr('profile_name'),'text',2,Config::Get('module.user.name_max'))) { + $this->oUserCurrent->setProfileName(getRequestStr('profile_name')); } else { $this->oUserCurrent->setProfileName(null); } /** * Проверяем пол */ - if (in_array(getRequest('profile_sex'),array('man','woman','other'))) { - $this->oUserCurrent->setProfileSex(getRequest('profile_sex')); + if (in_array(getRequestStr('profile_sex'),array('man','woman','other'))) { + $this->oUserCurrent->setProfileSex(getRequestStr('profile_sex')); } else { $this->oUserCurrent->setProfileSex('other'); } /** * Проверяем дату рождения */ - if (func_check(getRequest('profile_birthday_day'),'id',1,2) and func_check(getRequest('profile_birthday_month'),'id',1,2) and func_check(getRequest('profile_birthday_year'),'id',4,4)) { - $this->oUserCurrent->setProfileBirthday(date("Y-m-d H:i:s",mktime(0,0,0,getRequest('profile_birthday_month'),getRequest('profile_birthday_day'),getRequest('profile_birthday_year')))); + if (func_check(getRequestStr('profile_birthday_day'),'id',1,2) and func_check(getRequestStr('profile_birthday_month'),'id',1,2) and func_check(getRequestStr('profile_birthday_year'),'id',4,4)) { + $this->oUserCurrent->setProfileBirthday(date("Y-m-d H:i:s",mktime(0,0,0,getRequestStr('profile_birthday_month'),getRequestStr('profile_birthday_day'),getRequestStr('profile_birthday_year')))); } else { $this->oUserCurrent->setProfileBirthday(null); } /** * Проверяем информацию о себе */ - if (func_check(getRequest('profile_about'),'text',1,3000)) { - $this->oUserCurrent->setProfileAbout($this->Text_Parser(getRequest('profile_about'))); + if (func_check(getRequestStr('profile_about'),'text',1,3000)) { + $this->oUserCurrent->setProfileAbout($this->Text_Parser(getRequestStr('profile_about'))); } else { $this->oUserCurrent->setProfileAbout(null); } @@ -640,7 +644,7 @@ class ActionSettings extends Action { $aData = array(); foreach ($aFields as $iId => $aField) { if (isset($_REQUEST['profile_user_field_'.$iId])) { - $aData[$iId] = (string)getRequest('profile_user_field_'.$iId); + $aData[$iId] = getRequestStr('profile_user_field_'.$iId); } } $this->User_setUserFieldsValues($this->oUserCurrent->getId(), $aData); @@ -657,6 +661,7 @@ class ActionSettings extends Action { $aFieldsContactValue=getRequest('profile_user_field_value'); if (is_array($aFieldsContactType)) { foreach($aFieldsContactType as $k=>$v) { + $v=(string)$v; if (isset($aFields[$v]) and isset($aFieldsContactValue[$k]) and is_string($aFieldsContactValue[$k])) { $this->User_setUserFieldsValues($this->oUserCurrent->getId(), array($v=>$aFieldsContactValue[$k]), Config::Get('module.user.userfield_max_identical')); } diff --git a/classes/actions/ActionStream.class.php b/classes/actions/ActionStream.class.php index 8a64dded..8a66614e 100644 --- a/classes/actions/ActionStream.class.php +++ b/classes/actions/ActionStream.class.php @@ -136,7 +136,7 @@ class ActionStream extends Action { /** * Активируем/деактивируем тип */ - $this->Stream_switchUserEventType($this->oUserCurrent->getId(), getRequest('type')); + $this->Stream_switchUserEventType($this->oUserCurrent->getId(), getRequestStr('type')); $this->Message_AddNotice($this->Lang_Get('stream_subscribes_updated'), $this->Lang_Get('attention')); } /** @@ -157,7 +157,7 @@ class ActionStream extends Action { /** * Необходимо передать последний просмотренный ID событий */ - $iFromId = getRequest('last_id'); + $iFromId = getRequestStr('last_id'); if (!$iFromId) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; @@ -169,7 +169,7 @@ class ActionStream extends Action { $oViewer=$this->Viewer_GetLocalViewer(); $oViewer->Assign('aStreamEvents', $aEvents); - $oViewer->Assign('sDateLast', getRequest('date_last')); + $oViewer->Assign('sDateLast', getRequestStr('date_last')); if (count($aEvents)) { $oEvenLast=end($aEvents); $this->Viewer_AssignAjax('iStreamLastId', $oEvenLast->getId()); @@ -198,7 +198,7 @@ class ActionStream extends Action { /** * Необходимо передать последний просмотренный ID событий */ - $iFromId = getRequest('last_id'); + $iFromId = getRequestStr('last_id'); if (!$iFromId) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; @@ -210,7 +210,7 @@ class ActionStream extends Action { $oViewer=$this->Viewer_GetLocalViewer(); $oViewer->Assign('aStreamEvents', $aEvents); - $oViewer->Assign('sDateLast', getRequest('date_last')); + $oViewer->Assign('sDateLast', getRequestStr('date_last')); if (count($aEvents)) { $oEvenLast=end($aEvents); $this->Viewer_AssignAjax('iStreamLastId', $oEvenLast->getId()); @@ -239,12 +239,12 @@ class ActionStream extends Action { /** * Необходимо передать последний просмотренный ID событий */ - $iFromId = getRequest('last_id'); + $iFromId = getRequestStr('last_id'); if (!$iFromId) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } - if (!($oUser=$this->User_GetUserById(getRequest('user_id')))) { + if (!($oUser=$this->User_GetUserById(getRequestStr('user_id')))) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } @@ -255,7 +255,7 @@ class ActionStream extends Action { $oViewer=$this->Viewer_GetLocalViewer(); $oViewer->Assign('aStreamEvents', $aEvents); - $oViewer->Assign('sDateLast', getRequest('date_last')); + $oViewer->Assign('sDateLast', getRequestStr('date_last')); if (count($aEvents)) { $oEvenLast=end($aEvents); $this->Viewer_AssignAjax('iStreamLastId', $oEvenLast->getId()); @@ -284,17 +284,17 @@ class ActionStream extends Action { /** * Проверяем существование пользователя */ - if (!$this->User_getUserById(getRequest('id'))) { + if (!$this->User_getUserById(getRequestStr('id'))) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); } - if ($this->oUserCurrent->getId() == getRequest('id')) { + if ($this->oUserCurrent->getId() == getRequestStr('id')) { $this->Message_AddError($this->Lang_Get('stream_error_subscribe_to_yourself'),$this->Lang_Get('error')); return; } /** * Подписываем на пользователя */ - $this->Stream_subscribeUser($this->oUserCurrent->getId(), getRequest('id')); + $this->Stream_subscribeUser($this->oUserCurrent->getId(), getRequestStr('id')); $this->Message_AddNotice($this->Lang_Get('stream_subscribes_updated'), $this->Lang_Get('attention')); } /** @@ -319,9 +319,9 @@ class ActionStream extends Action { /** * Проверяем существование пользователя */ - $oUser = $this->User_getUserByLogin(getRequest('login')); + $oUser = $this->User_getUserByLogin(getRequestStr('login')); if (!$oUser) { - $this->Message_AddError($this->Lang_Get('user_not_found',array('login'=>htmlspecialchars(getRequest('login')))),$this->Lang_Get('error')); + $this->Message_AddError($this->Lang_Get('user_not_found',array('login'=>htmlspecialchars(getRequestStr('login')))),$this->Lang_Get('error')); return; } if ($this->oUserCurrent->getId() == $oUser->getId()) { @@ -356,13 +356,13 @@ class ActionStream extends Action { /** * Пользователь с таким ID существует? */ - if (!$this->User_getUserById(getRequest('id'))) { + if (!$this->User_getUserById(getRequestStr('id'))) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); } /** * Отписываем */ - $this->Stream_unsubscribeUser($this->oUserCurrent->getId(), getRequest('id')); + $this->Stream_unsubscribeUser($this->oUserCurrent->getId(), getRequestStr('id')); $this->Message_AddNotice($this->Lang_Get('stream_subscribes_updated'), $this->Lang_Get('attention')); } /** diff --git a/classes/actions/ActionSubscribe.class.php b/classes/actions/ActionSubscribe.class.php index 89e5dde2..b8f4f6ac 100644 --- a/classes/actions/ActionSubscribe.class.php +++ b/classes/actions/ActionSubscribe.class.php @@ -88,7 +88,7 @@ class ActionSubscribe extends Action { /** * Получаем емайл подписки и проверяем его на валидность */ - $sMail=getRequest('mail'); + $sMail=getRequestStr('mail'); if ($this->oUserCurrent) { $sMail=$this->oUserCurrent->getMail(); } @@ -99,12 +99,12 @@ class ActionSubscribe extends Action { /** * Получаем тип объекта подписки */ - $sTargetType=getRequest('target_type'); + $sTargetType=getRequestStr('target_type'); if (!$this->Subscribe_IsAllowTargetType($sTargetType)) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); return ; } - $sTargetId=getRequest('target_id') ? getRequest('target_id') : null; + $sTargetId=getRequestStr('target_id') ? getRequestStr('target_id') : null; $iValue=getRequest('value') ? 1 : 0; $oSubscribe=null; diff --git a/classes/actions/ActionTalk.class.php b/classes/actions/ActionTalk.class.php index 484f0040..9be88b29 100644 --- a/classes/actions/ActionTalk.class.php +++ b/classes/actions/ActionTalk.class.php @@ -216,7 +216,7 @@ class ActionTalk extends Action { /** * Дата старта поиска */ - if($start=getRequest('start')) { + if($start=getRequestStr('start')) { if(func_check($start,'text',6,10) && substr_count($start,'.')==2) { list($d,$m,$y)=explode('.',$start); if(@checkdate($m,$d,$y)) { @@ -239,7 +239,7 @@ class ActionTalk extends Action { /** * Дата окончания поиска */ - if($end=getRequest('end')) { + if($end=getRequestStr('end')) { if(func_check($end,'text',6,10) && substr_count($end,'.')==2) { list($d,$m,$y)=explode('.',$end); if(@checkdate($m,$d,$y)) { @@ -377,7 +377,7 @@ class ActionTalk extends Action { /** * Отправляем письмо */ - if ($oTalk=$this->Talk_SendTalk($this->Text_Parser(strip_tags(getRequest('talk_title'))),$this->Text_Parser(getRequest('talk_text')),$this->oUserCurrent,$this->aUsersId)) { + if ($oTalk=$this->Talk_SendTalk($this->Text_Parser(strip_tags(getRequestStr('talk_title'))),$this->Text_Parser(getRequestStr('talk_text')),$this->oUserCurrent,$this->aUsersId)) { Router::Location(Router::GetPath('talk').'read/'.$oTalk->getId().'/'); } else { $this->Message_AddErrorSingle($this->Lang_Get('system_error')); @@ -463,14 +463,14 @@ class ActionTalk extends Action { /** * Проверяем есть ли заголовок */ - if (!func_check(getRequest('talk_title'),'text',2,200)) { + if (!func_check(getRequestStr('talk_title'),'text',2,200)) { $this->Message_AddError($this->Lang_Get('talk_create_title_error'),$this->Lang_Get('error')); $bOk=false; } /** * Проверяем есть ли содержание топика */ - if (!func_check(getRequest('talk_text'),'text',2,3000)) { + if (!func_check(getRequestStr('talk_text'),'text',2,3000)) { $this->Message_AddError($this->Lang_Get('talk_create_text_error'),$this->Lang_Get('error')); $bOk=false; } @@ -537,7 +537,7 @@ class ActionTalk extends Action { * Устанавливаем формат Ajax ответа */ $this->Viewer_SetResponseAjax('json'); - $idCommentLast=getRequest('idCommentLast'); + $idCommentLast=getRequestStr('idCommentLast'); /** * Проверям авторизован ли пользователь */ @@ -548,7 +548,7 @@ class ActionTalk extends Action { /** * Проверяем разговор */ - if (!($oTalk=$this->Talk_GetTalkById(getRequest('idTarget')))) { + if (!($oTalk=$this->Talk_GetTalkById(getRequestStr('idTarget')))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } @@ -611,7 +611,7 @@ class ActionTalk extends Action { /** * Проверяем разговор */ - if (!($oTalk=$this->Talk_GetTalkById(getRequest('cmt_target_id')))) { + if (!($oTalk=$this->Talk_GetTalkById(getRequestStr('cmt_target_id')))) { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } @@ -629,7 +629,7 @@ class ActionTalk extends Action { /** * Проверяем текст комментария */ - $sText=$this->Text_Parser(getRequest('comment_text')); + $sText=$this->Text_Parser(getRequestStr('comment_text')); if (!func_check($sText,'text',2,3000)) { $this->Message_AddErrorSingle($this->Lang_Get('talk_comment_add_text_error'),$this->Lang_Get('error')); return; @@ -724,7 +724,7 @@ class ActionTalk extends Action { * Устанавливаем формат Ajax ответа */ $this->Viewer_SetResponseAjax('json'); - $sUsers=(string)getRequest('users',null,'post'); + $sUsers=getRequestStr('users',null,'post'); /** * Если пользователь не авторизирован, возвращаем ошибку */ @@ -817,7 +817,7 @@ class ActionTalk extends Action { * Устанавливаем формат Ajax ответа */ $this->Viewer_SetResponseAjax('json'); - $idTarget=(string)getRequest('idTarget',null,'post'); + $idTarget=getRequestStr('idTarget',null,'post'); /** * Если пользователь не авторизирован, возвращаем ошибку */ @@ -882,8 +882,8 @@ class ActionTalk extends Action { * Устанавливаем формат Ajax ответа */ $this->Viewer_SetResponseAjax('json'); - $idTarget=(string)getRequest('idTarget',null,'post'); - $idTalk=(string)getRequest('idTalk',null,'post'); + $idTarget=getRequestStr('idTarget',null,'post'); + $idTalk=getRequestStr('idTalk',null,'post'); /** * Если пользователь не авторизирован, возвращаем ошибку */ @@ -960,8 +960,8 @@ class ActionTalk extends Action { * Устанавливаем формат Ajax ответа */ $this->Viewer_SetResponseAjax('json'); - $sUsers=(string)getRequest('users',null,'post'); - $idTalk=(string)getRequest('idTalk',null,'post'); + $sUsers=getRequestStr('users',null,'post'); + $idTalk=getRequestStr('idTalk',null,'post'); /** * Если пользователь не авторизирован, возвращаем ошибку */ diff --git a/classes/actions/ActionTopic.class.php b/classes/actions/ActionTopic.class.php index 05998dff..cd881f8e 100644 --- a/classes/actions/ActionTopic.class.php +++ b/classes/actions/ActionTopic.class.php @@ -239,10 +239,10 @@ class ActionTopic extends Action { /** * Заполняем поля для валидации */ - $oTopic->setBlogId(getRequest('blog_id')); - $oTopic->setTitle(strip_tags(getRequest('topic_title'))); - $oTopic->setTextSource(getRequest('topic_text')); - $oTopic->setTags(getRequest('topic_tags')); + $oTopic->setBlogId(getRequestStr('blog_id')); + $oTopic->setTitle(strip_tags(getRequestStr('topic_title'))); + $oTopic->setTextSource(getRequestStr('topic_text')); + $oTopic->setTags(getRequestStr('topic_tags')); $oTopic->setUserId($this->oUserCurrent->getId()); $oTopic->setType('topic'); $oTopic->setDateAdd(date("Y-m-d H:i:s")); @@ -373,10 +373,10 @@ class ActionTopic extends Action { /** * Заполняем поля для валидации */ - $oTopic->setBlogId(getRequest('blog_id')); - $oTopic->setTitle(strip_tags(getRequest('topic_title'))); - $oTopic->setTextSource(getRequest('topic_text')); - $oTopic->setTags(getRequest('topic_tags')); + $oTopic->setBlogId(getRequestStr('blog_id')); + $oTopic->setTitle(strip_tags(getRequestStr('topic_title'))); + $oTopic->setTextSource(getRequestStr('topic_text')); + $oTopic->setTags(getRequestStr('topic_tags')); $oTopic->setUserIp(func_getIp()); /** * Проверка корректности полей формы diff --git a/classes/actions/ActionUserfeed.class.php b/classes/actions/ActionUserfeed.class.php index d036764f..a7608964 100644 --- a/classes/actions/ActionUserfeed.class.php +++ b/classes/actions/ActionUserfeed.class.php @@ -92,7 +92,7 @@ class ActionUserfeed extends Action { /** * Проверяем последний просмотренный ID топика */ - $iFromId = getRequest('last_id'); + $iFromId = getRequestStr('last_id'); if (!$iFromId) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; @@ -132,7 +132,7 @@ class ActionUserfeed extends Action { if (!getRequest('id')) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); } - $sType = (string)getRequest('type'); + $sType = getRequestStr('type'); $iType = null; /** * Определяем тип подписки @@ -143,7 +143,7 @@ class ActionUserfeed extends Action { /** * Проверяем существование блога */ - if (!$this->Blog_GetBlogById(getRequest('id'))) { + if (!$this->Blog_GetBlogById(getRequestStr('id'))) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } @@ -153,11 +153,11 @@ class ActionUserfeed extends Action { /** * Проверяем существование пользователя */ - if (!$this->User_GetUserById(getRequest('id'))) { + if (!$this->User_GetUserById(getRequestStr('id'))) { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } - if ($this->oUserCurrent->getId() == getRequest('id')) { + if ($this->oUserCurrent->getId() == getRequestStr('id')) { $this->Message_AddError($this->Lang_Get('userfeed_error_subscribe_to_yourself'),$this->Lang_Get('error')); return; } @@ -169,7 +169,7 @@ class ActionUserfeed extends Action { /** * Подписываем */ - $this->Userfeed_subscribeUser($this->oUserCurrent->getId(), $iType, getRequest('id')); + $this->Userfeed_subscribeUser($this->oUserCurrent->getId(), $iType, getRequestStr('id')); $this->Message_AddNotice($this->Lang_Get('userfeed_subscribes_updated'), $this->Lang_Get('attention')); } /** @@ -191,9 +191,9 @@ class ActionUserfeed extends Action { /** * Проверяем существование прользователя */ - $oUser = $this->User_getUserByLogin(getRequest('login')); + $oUser = $this->User_getUserByLogin(getRequestStr('login')); if (!$oUser) { - $this->Message_AddError($this->Lang_Get('user_not_found',array('login'=>htmlspecialchars(getRequest('login')))),$this->Lang_Get('error')); + $this->Message_AddError($this->Lang_Get('user_not_found',array('login'=>htmlspecialchars(getRequestStr('login')))),$this->Lang_Get('error')); return; } /** @@ -231,7 +231,7 @@ class ActionUserfeed extends Action { $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } - $sType = (string)getRequest('type'); + $sType = getRequestStr('type'); $iType = null; /** * Определяем от чего отписываемся @@ -250,7 +250,7 @@ class ActionUserfeed extends Action { /** * Отписываем пользователя */ - $this->Userfeed_unsubscribeUser($this->oUserCurrent->getId(), $iType, getRequest('id')); + $this->Userfeed_unsubscribeUser($this->oUserCurrent->getId(), $iType, getRequestStr('id')); $this->Message_AddNotice($this->Lang_Get('userfeed_subscribes_updated'), $this->Lang_Get('attention')); } /** diff --git a/classes/blocks/BlockUserfeedBlogs.class.php b/classes/blocks/BlockUserfeedBlogs.class.php index 378825eb..937f4d3d 100644 --- a/classes/blocks/BlockUserfeedBlogs.class.php +++ b/classes/blocks/BlockUserfeedBlogs.class.php @@ -34,7 +34,7 @@ class BlockUserfeedBlogs extends Block { /** * Получаем список ID блогов, в которых состоит пользователь */ - $aBlogsId = $this->Blog_getBlogUsersByUserId($oUserCurrent->getId(), array(ModuleBlog::BLOG_USER_ROLE_USER,ModuleBlog::BLOG_USER_ROLE_MODERATOR,ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR),true); + $aBlogsId = $this->Blog_GetBlogUsersByUserId($oUserCurrent->getId(), array(ModuleBlog::BLOG_USER_ROLE_USER,ModuleBlog::BLOG_USER_ROLE_MODERATOR,ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR),true); /** * Получаем список ID блогов, которые создал пользователь */ diff --git a/classes/modules/acl/ACL.class.php b/classes/modules/acl/ACL.class.php index f660e521..32f15e02 100644 --- a/classes/modules/acl/ACL.class.php +++ b/classes/modules/acl/ACL.class.php @@ -311,10 +311,20 @@ class ModuleACL extends Module { /** * Если модер или админ блога */ - $oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oTopic->getBlogId(),$oUser->getId()); - if ($oBlogUser and ($oBlogUser->getIsModerator() or $oBlogUser->getIsAdministrator())) { - return true; + if ($this->User_GetUserCurrent() and $this->User_GetUserCurrent()->getId()==$oUser->getId()) { + /** + * Для авторизованного пользователя данный код будет работать быстрее + */ + if ($oTopic->getBlog()->getUserIsAdministrator() or $oTopic->getBlog()->getUserIsModerator()) { + return true; + } + } else { + $oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oTopic->getBlogId(),$oUser->getId()); + if ($oBlogUser and ($oBlogUser->getIsModerator() or $oBlogUser->getIsAdministrator())) { + return true; + } } + return false; } /** @@ -340,9 +350,18 @@ class ModuleACL extends Module { /** * Если модер или админ блога */ - $oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oTopic->getBlogId(),$oUser->getId()); - if ($oBlogUser and ($oBlogUser->getIsModerator() or $oBlogUser->getIsAdministrator())) { - return true; + if ($this->User_GetUserCurrent() and $this->User_GetUserCurrent()->getId()==$oUser->getId()) { + /** + * Для авторизованного пользователя данный код будет работать быстрее + */ + if ($oTopic->getBlog()->getUserIsAdministrator() or $oTopic->getBlog()->getUserIsModerator()) { + return true; + } + } else { + $oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oTopic->getBlogId(),$oUser->getId()); + if ($oBlogUser and ($oBlogUser->getIsModerator() or $oBlogUser->getIsAdministrator())) { + return true; + } } return false; } diff --git a/classes/modules/comment/mapper/Comment.mapper.class.php b/classes/modules/comment/mapper/Comment.mapper.class.php index 6280632f..2dc43604 100644 --- a/classes/modules/comment/mapper/Comment.mapper.class.php +++ b/classes/modules/comment/mapper/Comment.mapper.class.php @@ -674,6 +674,7 @@ class ModuleComment_MapperComment extends Mapper { target_id IN (?a) AND target_type = ? + ORDER BY comment_id DESC "; if ($this->oDb->query($sql,$aTargetId,$sTargetType)) { return true; diff --git a/classes/modules/subscribe/Subscribe.class.php b/classes/modules/subscribe/Subscribe.class.php index 2035c109..a62a4519 100644 --- a/classes/modules/subscribe/Subscribe.class.php +++ b/classes/modules/subscribe/Subscribe.class.php @@ -254,11 +254,11 @@ class ModuleSubscribe extends Module { public function CheckTargetTopicNewComment($iTargetId,$iStatus) { if ($oTopic=$this->Topic_GetTopicById($iTargetId)) { /** - * Топик может быть в закрытом блоге, поэтому необходимо разрешить подписку только если пользователь в нем состоит + * Топик может быть в закрытом блоге, поэтому необходимо разрешить подписку только если пользователь в нем состоит, или является автором блога * Отписываться разрешаем с любого топика */ if ($iStatus==1 and $oTopic->getBlog()->getType()=='close') { - if (!$this->oUserCurrent or !$this->Blog_GetBlogUserByBlogIdAndUserId($oTopic->getBlogId(),$this->oUserCurrent->getId())) { + if (!$this->oUserCurrent or !($oTopic->getBlog()->getOwnerId()==$this->oUserCurrent->getId() or $this->Blog_GetBlogUserByBlogIdAndUserId($oTopic->getBlogId(),$this->oUserCurrent->getId()))) { return false; } } diff --git a/classes/modules/talk/Talk.class.php b/classes/modules/talk/Talk.class.php index 7a18a1dc..8d2c4331 100644 --- a/classes/modules/talk/Talk.class.php +++ b/classes/modules/talk/Talk.class.php @@ -418,7 +418,7 @@ class ModuleTalk extends Module { $aTalkId=array($aTalkId); } foreach ($aTalkId as $sTalkId) { - if ($oTalk=$this->Talk_GetTalkById($sTalkId)) { + if ($oTalk=$this->Talk_GetTalkById((string)$sTalkId)) { if ($oTalkUser=$this->Talk_GetTalkUser($oTalk->getId(),$iUserId)) { $oTalkUser->setDateLast(date("Y-m-d H:i:s")); if ($oTalk->getCommentIdLast()) { @@ -447,7 +447,7 @@ class ModuleTalk extends Module { $this->DeleteFavouriteTalk( Engine::GetEntity('Favourite', array( - 'target_id' => $sTalkId, + 'target_id' => (string)$sTalkId, 'target_type' => 'talk', 'user_id' => $sUserId ) @@ -456,6 +456,7 @@ class ModuleTalk extends Module { } // Нужно почистить зависимые кеши foreach ($aTalkId as $sTalkId) { + $sTalkId=(string)$sTalkId; $this->Cache_Clean( Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("update_talk_user_{$sTalkId}") @@ -466,6 +467,7 @@ class ModuleTalk extends Module { // Удаляем пустые беседы, если в них нет пользователей foreach ($aTalkId as $sTalkId) { + $sTalkId=(string)$sTalkId; if (!count($this->GetUsersTalk($sTalkId, array(self::TALK_USER_ACTIVE)))) { $this->DeleteTalk($sTalkId); } @@ -585,7 +587,10 @@ class ModuleTalk extends Module { * @param int $sTalkId ID разговора * @return array */ - public function GetTalkUsersByTalkId($sTalkId) { + public function GetTalkUsersByTalkId($sTalkId,$aAllowData=null) { + if (is_null($aAllowData)) { + $aAllowData=array('user'=>array()); + } if (false === ($aTalkUsers = $this->Cache_Get("talk_relation_user_by_talk_id_{$sTalkId}"))) { $aTalkUsers = $this->oMapper->GetTalkUsers($sTalkId); $this->Cache_Set($aTalkUsers, "talk_relation_user_by_talk_id_{$sTalkId}", array("update_talk_user_{$sTalkId}"), 60*60*24*1); @@ -596,7 +601,7 @@ class ModuleTalk extends Module { foreach ($aTalkUsers as $oTalkUser) { $aUserId[]=$oTalkUser->getUserId(); } - $aUsers = $this->User_GetUsersAdditionalData($aUserId); + $aUsers = $this->User_GetUsersAdditionalData($aUserId,isset($aAllowData['user']) && is_array($aAllowData['user']) ? $aAllowData['user'] : null); foreach ($aTalkUsers as $oTalkUser){ if(isset($aUsers[$oTalkUser->getUserId()])) { diff --git a/classes/modules/tools/Tools.class.php b/classes/modules/tools/Tools.class.php index b9e95f30..8f89235e 100644 --- a/classes/modules/tools/Tools.class.php +++ b/classes/modules/tools/Tools.class.php @@ -66,5 +66,18 @@ class ModuleTools extends Module { } return $aCollection; } + + /** + * Преобразует спец символы в html последовательнось, поведение аналогично htmlspecialchars, кроме преобразования амперсанта "&" + * + * @param string $sText + * + * @return string + */ + public function Urlspecialchars($sText) { + $aTable=get_html_translation_table(); + unset($aTable['&']); + return strtr($sText,$aTable); + } } ?> \ No newline at end of file diff --git a/classes/modules/topic/Topic.class.php b/classes/modules/topic/Topic.class.php index f7b4675c..dbee54dc 100644 --- a/classes/modules/topic/Topic.class.php +++ b/classes/modules/topic/Topic.class.php @@ -248,11 +248,15 @@ class ModuleTopic extends Module { */ $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('topic_update')); $this->Cache_Delete("topic_{$sTopicId}"); + /** + * Список изображений + */ + $aPhotos=$this->getPhotosByTopicId($sTopicId); /** * Если топик успешно удален, удаляем связанные данные */ if($bResult=$this->oMapperTopic->DeleteTopic($sTopicId)){ - return $this->DeleteTopicAdditionalData($sTopicId); + return $this->DeleteTopicAdditionalData($sTopicId,$aPhotos); } return false; @@ -263,7 +267,7 @@ class ModuleTopic extends Module { * @param int $iTopicId ID топика * @return bool */ - public function DeleteTopicAdditionalData($iTopicId) { + public function DeleteTopicAdditionalData($iTopicId,$aPhotos=array()) { /** * Чистим зависимые кеши */ @@ -297,7 +301,7 @@ class ModuleTopic extends Module { /** * Удаляем фото у топика фотосета */ - if ($aPhotos=$this->getPhotosByTopicId($iTopicId)) { + if (count($aPhotos)) { foreach ($aPhotos as $oPhoto) { $this->deleteTopicPhoto($oPhoto); } diff --git a/classes/modules/topic/entity/Topic.entity.class.php b/classes/modules/topic/entity/Topic.entity.class.php index d4e25f09..73f1eeec 100644 --- a/classes/modules/topic/entity/Topic.entity.class.php +++ b/classes/modules/topic/entity/Topic.entity.class.php @@ -37,8 +37,8 @@ class ModuleTopic_EntityTopic extends Entity { $this->aValidateRules[]=array('topic_title','string','max'=>200,'min'=>2,'allowEmpty'=>false,'label'=>$this->Lang_Get('topic_create_title'),'on'=>array('topic','link','photoset')); $this->aValidateRules[]=array('topic_title','string','max'=>200,'min'=>2,'allowEmpty'=>false,'label'=>$this->Lang_Get('topic_question_create_title'),'on'=>array('question')); $this->aValidateRules[]=array('topic_text_source','string','max'=>Config::Get('module.topic.max_length'),'min'=>2,'allowEmpty'=>false,'label'=>$this->Lang_Get('topic_create_text'),'on'=>array('topic','photoset')); - $this->aValidateRules[]=array('topic_text_source','string','max'=>500,'min'=>10,'allowEmpty'=>false,'label'=>$this->Lang_Get('topic_create_text'),'on'=>array('link')); - $this->aValidateRules[]=array('topic_text_source','string','max'=>500,'allowEmpty'=>true,'label'=>$this->Lang_Get('topic_create_text'),'on'=>array('question')); + $this->aValidateRules[]=array('topic_text_source','string','max'=>Config::Get('module.topic.link_max_length'),'min'=>10,'allowEmpty'=>false,'label'=>$this->Lang_Get('topic_create_text'),'on'=>array('link')); + $this->aValidateRules[]=array('topic_text_source','string','max'=>Config::Get('module.topic.question_max_length'),'allowEmpty'=>true,'label'=>$this->Lang_Get('topic_create_text'),'on'=>array('question')); $this->aValidateRules[]=array('topic_tags','tags','count'=>15,'label'=>$this->Lang_Get('topic_create_tags'),'allowEmpty'=>Config::Get('module.topic.allow_empty_tags'),'on'=>array('topic','link','question','photoset')); $this->aValidateRules[]=array('blog_id','blog_id','on'=>array('topic','link','question','photoset')); $this->aValidateRules[]=array('topic_text_source','topic_unique','on'=>array('topic','link','question','photoset')); @@ -359,6 +359,14 @@ class ModuleTopic_EntityTopic extends Entity { return Router::GetPath('blog').$this->getBlog()->getUrl().'/'.$this->getId().'.html'; } } + /** + * Возвращает полный URL до страницы редактировани топика + * + * @return string + */ + public function getUrlEdit() { + return Router::GetPath($this->getType()).'edit/'.$this->getId().'/'; + } /** * Возвращает объект голосования за топик текущим пользователем * @@ -386,6 +394,39 @@ class ModuleTopic_EntityTopic extends Entity { } return false; } + /** + * Проверяет разрешение на удаление топика у текущего пользователя + * + * @return bool + */ + public function getIsAllowDelete() { + if ($oUser=$this->User_GetUserCurrent()) { + return $this->ACL_IsAllowDeleteTopic($this,$oUser); + } + return false; + } + /** + * Проверяет разрешение на редактирование топика у текущего пользователя + * + * @return bool + */ + public function getIsAllowEdit() { + if ($oUser=$this->User_GetUserCurrent()) { + return $this->ACL_IsAllowEditTopic($this,$oUser); + } + return false; + } + /** + * Проверяет разрешение на какое-либо действие для топика у текущего пользователя + * + * @return bool + */ + public function getIsAllowAction() { + if ($this->User_GetUserCurrent()) { + return $this->getIsAllowEdit() || $this->getIsAllowDelete(); + } + return false; + } /** * Возвращает количество добавивших топик в избранное * diff --git a/classes/modules/user/User.class.php b/classes/modules/user/User.class.php index 3d60d41f..b871c894 100644 --- a/classes/modules/user/User.class.php +++ b/classes/modules/user/User.class.php @@ -522,7 +522,7 @@ class ModuleUser extends Module { * Ставим куку */ if ($bRemember) { - setcookie('key',$sKey,time()+Config::Get('sys.cookie.time'),Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host')); + setcookie('key',$sKey,time()+Config::Get('sys.cookie.time'),Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host'),false,true); } return true; } @@ -1245,7 +1245,10 @@ class ModuleUser extends Module { * @return bool */ public function CheckLogin($sLogin) { - if (preg_match("/^[\da-z\_\-]{".Config::Get('module.user.login.min_size').','.Config::Get('module.user.login.max_size')."}$/i",$sLogin)){ + $charset = Config::Get('module.user.login.charset'); + $min = Config::Get('module.user.login.min_size'); + $max = Config::Get('module.user.login.max_size'); + if (preg_match('/^[' . $charset . ']{' . $min . ',' . $max . '}$/i',$sLogin)){ return true; } return false; @@ -1520,6 +1523,8 @@ class ModuleUser extends Module { return $this->oMapper->GetUserChangemailByCodeTo($sCode); } /** + * Формирование процесса смены емайла в профиле пользователя + * * @param ModuleUser_EntityUser $oUser Объект пользователя * @param string $sMailNew Новый емайл * @return bool|ModuleUser_EntityChangemail @@ -1529,21 +1534,40 @@ class ModuleUser extends Module { $oChangemail->setUserId($oUser->getId()); $oChangemail->setDateAdd(date("Y-m-d H:i:s")); $oChangemail->setDateExpired(date("Y-m-d H:i:s",time()+3*24*60*60)); // 3 дня для смены емайла - $oChangemail->setMailFrom($oUser->getMail()); + $oChangemail->setMailFrom($oUser->getMail() ? $oUser->getMail() : ''); $oChangemail->setMailTo($sMailNew); $oChangemail->setCodeFrom(func_generator(32)); $oChangemail->setCodeTo(func_generator(32)); if ($this->AddUserChangemail($oChangemail)) { /** - * Отправляем уведомление + * Если у пользователя раньше не было емайла, то сразу шлем подтверждение на новый емайл */ - $this->Notify_Send($oUser, - 'notify.user_changemail_from.tpl', - $this->Lang_Get('notify_subject_user_changemail'), - array( - 'oUser' => $oUser, - 'oChangemail' => $oChangemail, - )); + if (!$oChangemail->getMailFrom()) { + $oChangemail->setConfirmFrom(1); + $this->User_UpdateUserChangemail($oChangemail); + /** + * Отправляем уведомление на новый емайл + */ + $this->Notify_Send($oChangemail->getMailTo(), + 'notify.user_changemail_to.tpl', + $this->Lang_Get('notify_subject_user_changemail'), + array( + 'oUser' => $oUser, + 'oChangemail' => $oChangemail, + )); + + } else { + /** + * Отправляем уведомление на старый емайл + */ + $this->Notify_Send($oUser, + 'notify.user_changemail_from.tpl', + $this->Lang_Get('notify_subject_user_changemail'), + array( + 'oUser' => $oUser, + 'oChangemail' => $oChangemail, + )); + } return $oChangemail; } return false; diff --git a/classes/modules/user/entity/User.entity.class.php b/classes/modules/user/entity/User.entity.class.php index 4d061df7..a1f0d356 100644 --- a/classes/modules/user/entity/User.entity.class.php +++ b/classes/modules/user/entity/User.entity.class.php @@ -22,6 +22,19 @@ * @since 1.0 */ class ModuleUser_EntityUser extends Entity { + /** + * Определяем дополнительные правила валидации + * + * @param array + */ + public function __construct($aParam = false) { + if (Config::Get('module.user.captcha_use_registration')) { + $this->aValidateRules[] = array('captcha', 'captcha', 'on' => array('registration')); + } + + parent::__construct($aParam); + } + /** * Определяем правила валидации * @@ -32,7 +45,6 @@ class ModuleUser_EntityUser extends Entity { array('login','login_exists','on'=>array('registration')), array('mail','email','allowEmpty'=>false,'on'=>array('registration','')), array('mail','mail_exists','on'=>array('registration')), - array('captcha','captcha','on'=>array('registration')), array('password','string','allowEmpty'=>false,'min'=>5,'on'=>array('registration')), array('password_confirm','compare','compareField'=>'password','on'=>array('registration')), ); diff --git a/config/config.php b/config/config.php index cca7c58a..a334f843 100644 --- a/config/config.php +++ b/config/config.php @@ -28,7 +28,6 @@ $config['view']['img_resize_width'] = 570; // до какого размер $config['view']['img_max_width'] = 5000; // максимальная ширина загружаемых изображений в пикселях $config['view']['img_max_height'] = 5000; // максимальная высота загружаемых изображений в пикселях $config['view']['img_max_size_url'] = 500; // максимальный размер картинки в kB для загрузки по URL -$config['view']['no_assign'] = array('db'); // список групп конфигурации, которые необходимо исключить из передачи во Viewer. Только для системного пользования. /** * Настройки СЕО для вывода топиков @@ -58,7 +57,12 @@ $config['pagination']['pages']['count'] = 4; // количес * и возможно придёться увеличить значение $config['path']['offset_request_url'] на число вложенных директорий, * например, для директории первой вложенности www.site.ru/livestreet/ поставить значение равное 1 */ -$config['path']['root']['web'] = 'http://'.$_SERVER['HTTP_HOST']; // полный WEB адрес сайта +if (isset($_SERVER['HTTP_HOST'])) { + $config['path']['root']['web'] = 'http://'.$_SERVER['HTTP_HOST']; // полный WEB адрес сайта +} else { + // for CLI scripts. or you can append "HTTP_HOST=http://yoursite.url" before script run command + $config['path']['root']['web'] = null; +} $config['path']['root']['server'] = dirname(dirname(__FILE__)); // полный путь до сайта в файловой системе /** * Для CLI режима использовать @@ -78,6 +82,7 @@ $config['path']['smarty']['template'] = '___path.root.server___/templates/skin/_ $config['path']['smarty']['compiled'] = '___path.root.server___/templates/compiled'; $config['path']['smarty']['cache'] = '___path.root.server___/templates/cache'; $config['path']['smarty']['plug'] = '___path.root.engine___/modules/viewer/plugs'; +$config['smarty']['compile_check'] = true; // Проверять или нет файлы шаблона на изменения перед компиляцией, false может значительно увеличить быстродействие, но потребует ручного удаления кеша при изменения шаблона /** * Настройки плагинов */ @@ -116,7 +121,7 @@ $config['sys']['mail']['include_talk'] = true; // Вклю */ // Устанавливаем настройки кеширования $config['sys']['cache']['use'] = true; // использовать кеширование или нет -$config['sys']['cache']['type'] = 'file'; // тип кеширования: file и memory. memory использует мемкеш +$config['sys']['cache']['type'] = 'file'; // тип кеширования: file, xcache и memory. memory использует мемкеш, xcache - использует XCache $config['sys']['cache']['dir'] = '___path.root.server___/tmp/'; // каталог для файлового кеша, также используется для временных картинок. По умолчанию подставляем каталог для хранения сессий $config['sys']['cache']['prefix'] = 'livestreet_cache'; // префикс кеширования, чтоб можно было на одной машине держать несколько сайтов с общим кешевым хранилищем $config['sys']['cache']['directory_level'] = 1; // уровень вложенности директорий файлового кеша @@ -186,6 +191,8 @@ $config['module']['blog']['avatar_size'] = array(100,64,48,24,0); // Списо $config['module']['topic']['new_time'] = 60*60*24*1; // Время в секундах в течении которого топик считается новым $config['module']['topic']['per_page'] = 10; // Число топиков на одну страницу $config['module']['topic']['max_length'] = 15000; // Максимальное количество символов в одном топике +$config['module']['topic']['link_max_length'] = 500; // Максимальное количество символов в одном топике-ссылке +$config['module']['topic']['question_max_length'] = 500;// Максимальное количество символов в одном топике-опросе $config['module']['topic']['allow_empty_tags'] = false; // Разрешать или нет не заполнять теги // Модуль User $config['module']['user']['per_page'] = 15; // Число юзеров на страницу на странице статистики и в профиле пользователя @@ -196,12 +203,15 @@ $config['module']['user']['friend_notice']['reject'] = false; // Отправи $config['module']['user']['avatar_size'] = array(100,64,48,24,0); // Список размеров аватаров у пользователя. 0 - исходный размер $config['module']['user']['login']['min_size'] = 3; // Минимальное количество символов в логине $config['module']['user']['login']['max_size'] = 30; // Максимальное количество символов в логине +$config['module']['user']['login']['charset'] = '0-9a-z_\-'; // Допустимые в имени пользователя символы $config['module']['user']['time_active'] = 60*60*24*7; // Число секунд с момента последнего посещения пользователем сайта, в течение которых он считается активным $config['module']['user']['usernote_text_max'] = 250; // Максимальный размер заметки о пользователе $config['module']['user']['usernote_per_page'] = 20; // Число заметок на одну страницу $config['module']['user']['userfield_max_identical'] = 2; // Максимальное число контактов одного типа $config['module']['user']['profile_photo_width'] = 250; // ширина квадрата фотографии в профиле, px $config['module']['user']['name_max'] = 30; // максимальная длинна имени в профиле пользователя +$config['module']['user']['captcha_use_registration'] = true; // проверять поле капчи при регистрации пользователя + // Модуль Comment $config['module']['comment']['per_page'] = 20; // Число комментариев на одну страницу(это касается только полного списка комментариев прямого эфира) $config['module']['comment']['bad'] = -5; // Рейтинг комментария, начиная с которого он будет скрыт @@ -212,10 +222,6 @@ $config['module']['comment']['nested_page_reverse'] = true; // Определя $config['module']['comment']['favourite_target_allow'] = array('topic'); // Список типов комментов, которые разрешено добавлять в избранное // Модуль Talk $config['module']['talk']['per_page'] = 30; // Число приватных сообщений на одну страницу -$config['module']['talk']['reload'] = false; -$config['module']['talk']['request'] = 60; -$config['module']['talk']['period'] = 20000; -$config['module']['talk']['max_errors'] = 4; $config['module']['talk']['encrypt'] = 'livestreet'; // Ключ XXTEA шифрования идентификаторов в ссылках $config['module']['talk']['max_users'] = 15; // Максимальное число адресатов в одном личном сообщении // Модуль Lang @@ -251,7 +257,6 @@ $config['module']['image']['foto']['round_corner'] = false; $config['module']['image']['topic']['watermark_use'] = false; $config['module']['image']['topic']['round_corner'] = false; // Модуль Security -$config['module']['security']['key'] = "livestreet_security_key"; // ключ сессии для хранения security-кода $config['module']['security']['hash'] = "livestreet_security_key"; // "примесь" к строке, хешируемой в качестве security-кода $config['module']['userfeed']['count_default'] = 10; // Число топиков в ленте по умолчанию @@ -521,7 +526,7 @@ $config['head']['default']['js'] = array( $config['head']['default']['css'] = array( "___path.static.skin___/css/reset.css", "___path.root.engine_lib___/external/jquery/markitup/skins/simple/style.css", - "___path.root.engine_lib___/external/jquery/markitup/sets/default/style.css", + "___path.root.engine_lib___/external/jquery/markitup/sets/default/style.css", "___path.root.engine_lib___/external/jquery/jcrop/jquery.Jcrop.css", "___path.root.engine_lib___/external/prettify/prettify.css", "___path.static.skin___/css/main.css", diff --git a/config/jevix.php b/config/jevix.php index 675de06a..ddc19dc3 100644 --- a/config/jevix.php +++ b/config/jevix.php @@ -161,6 +161,12 @@ return array( array('±', '©', '©', '®', '©', '©', '®') ) ), + // Список допустимых протоколов для ссылок + 'cfgSetLinkProtocolAllow' => array( + array( + array('http','https','ftp') + ) + ), 'cfgSetTagNoTypography' => array( array( array('code','video','object') @@ -169,7 +175,7 @@ return array( // Теги, после которых необходимо пропускать одну пробельную строку 'cfgSetTagBlockType' => array( array( - array('h4','h5','h6','ol','ul','blockquote','pre') + array('h4','h5','h6','ol','ul','blockquote','pre','table','iframe') ) ), 'cfgSetTagCallbackFull' => array( diff --git a/engine/classes/Action.class.php b/engine/classes/Action.class.php index a217a9fd..00ccfb8e 100644 --- a/engine/classes/Action.class.php +++ b/engine/classes/Action.class.php @@ -111,7 +111,7 @@ abstract class Action extends LsObject { } /** - * Добавляет евент в экшен, используя регулярное вырожение для евента и параметров + * Добавляет евент в экшен, используя регулярное выражение для евента и параметров * */ protected function AddEventPreg() { diff --git a/engine/classes/Engine.class.php b/engine/classes/Engine.class.php index 97b7e780..005441b2 100644 --- a/engine/classes/Engine.class.php +++ b/engine/classes/Engine.class.php @@ -363,11 +363,18 @@ class Engine extends LsObject { * * @param string $sModuleClass Класс модуля * @param bool $bInit Инициализировать модуль или нет + * + * @throws RuntimeException если класс $sModuleClass не существует + * * @return Module */ public function LoadModule($sModuleClass,$bInit=false) { $tm1=microtime(true); + if (!class_exists($sModuleClass)) + { + throw new RuntimeException(sprintf('Class "%s" not found!', $sModuleClass)); + } /** * Создаем объект модуля */ @@ -1149,7 +1156,7 @@ class LS extends LsObject { * * @return Engine */ - public function E() { + static public function E() { return Engine::GetInstance(); } /** @@ -1160,7 +1167,7 @@ class LS extends LsObject { * @param array $aParams Параметры для передачи в конструктор * @return Entity */ - public function Ent($sName,$aParams=array()) { + static public function Ent($sName,$aParams=array()) { return Engine::GetEntity($sName,$aParams); } /** @@ -1172,7 +1179,7 @@ class LS extends LsObject { * @param DbSimple_Mysql|null $oConnect Объект коннекта к БД * @return mixed */ - public function Mpr($sClassName,$sName=null,$oConnect=null) { + static public function Mpr($sClassName,$sName=null,$oConnect=null) { return Engine::GetMapper($sClassName,$sName,$oConnect); } /** @@ -1181,7 +1188,7 @@ class LS extends LsObject { * * @return ModuleUser_EntityUser */ - public function CurUsr() { + static public function CurUsr() { return self::E()->User_GetUserCurrent(); } /** @@ -1191,7 +1198,7 @@ class LS extends LsObject { * * @return bool */ - public function Adm() { + static public function Adm() { return self::CurUsr() && self::CurUsr()->isAdministrator(); } /** diff --git a/engine/classes/EntityORM.class.php b/engine/classes/EntityORM.class.php index a060b1b7..63a71050 100644 --- a/engine/classes/EntityORM.class.php +++ b/engine/classes/EntityORM.class.php @@ -530,8 +530,13 @@ abstract class EntityORM extends Entity { $mCmdArgs=$iPrimaryKeyValue; break; case self::RELATION_TYPE_HAS_MANY : + if (isset($this->aRelations[$sKey][3])) { + $aFilterAdd=$this->aRelations[$sKey][3]; + } else { + $aFilterAdd=array(); + } $sCmd="{$sRelPluginPrefix}{$sRelModuleName}_get{$sRelEntityName}ItemsByFilter"; - $mCmdArgs=array($sRelationKey => $iPrimaryKeyValue); + $mCmdArgs=array_merge(array($sRelationKey => $iPrimaryKeyValue),$aFilterAdd); break; case self::RELATION_TYPE_MANY_TO_MANY : $sCmd="{$sRelPluginPrefix}Module{$sRelModuleName}_get{$sRelEntityName}ItemsByJoinTable"; diff --git a/engine/classes/ManyToManyRelation.class.php b/engine/classes/ManyToManyRelation.class.php index f98ca249..f9274c64 100644 --- a/engine/classes/ManyToManyRelation.class.php +++ b/engine/classes/ManyToManyRelation.class.php @@ -77,6 +77,13 @@ class LS_ManyToManyRelation extends LsObject { unset($this->_aCollection[$iId]); } } + /** + * Удаляет все объекты + */ + public function clear() { + $this->bUpdated = true; + $this->_aCollection=array(); + } /** * Возвращает список объектов связи * diff --git a/engine/classes/MapperORM.class.php b/engine/classes/MapperORM.class.php index 3f6b2cb4..c3421a9d 100644 --- a/engine/classes/MapperORM.class.php +++ b/engine/classes/MapperORM.class.php @@ -129,9 +129,9 @@ class MapperORM extends Mapper { $sTableName = self::GetTableName($sEntityFull); list($aFilterFields,$sFilterFields)=$this->BuildFilter($aFilter,$oEntitySample); - list($sOrder,$sLimit)=$this->BuildFilterMore($aFilter,$oEntitySample); + list($sOrder,$sLimit,$sGroup)=$this->BuildFilterMore($aFilter,$oEntitySample); - $sql = "SELECT * FROM ".$sTableName." WHERE 1=1 {$sFilterFields} {$sOrder} {$sLimit} "; + $sql = "SELECT * FROM ".$sTableName." WHERE 1=1 {$sFilterFields} {$sGroup} {$sOrder} {$sLimit} "; $aQueryParams=array_merge(array($sql),array_values($aFilterFields)); $aItems=array(); if($aRows=call_user_func_array(array($this->oDb,'select'),$aQueryParams)) { @@ -231,7 +231,7 @@ class MapperORM extends Mapper { $sFilterFields=''; foreach ($aFilterFields as $k => $v) { $aK=explode(' ',trim($k)); - $sFieldCurrent=$aK[0]; + $sFieldCurrent=$this->oDb->escape($aK[0],true); $sConditionCurrent=' = '; if (count($aK)>1) { $sConditionCurrent=strtolower($aK[1]); @@ -273,7 +273,7 @@ class MapperORM extends Mapper { } elseif (!in_array($value,array('asc','desc'))) { $value='asc'; } - $key = $oEntitySample->_getField($key); + $key = $this->oDb->escape($oEntitySample->_getField($key),true); $sOrder.=" {$key} {$value},"; } $sOrder=trim($sOrder,','); @@ -305,7 +305,23 @@ class MapperORM extends Mapper { } $sLimit="LIMIT {$iBegin}, {$iEnd}"; } - return array($sOrder,$sLimit); + + // Группировка + $sGroup=''; + if (isset($aFilter['#group'])) { + if(!is_array($aFilter['#group'])) { + $aFilter['#group'] = array($aFilter['#group']); + } + foreach ($aFilter['#group'] as $sField) { + $sField = $this->oDb->escape($oEntitySample->_getField($sField),true); + $sGroup.=" {$sField},"; + } + $sGroup=trim($sGroup,','); + if ($sGroup!='') { + $sGroup="GROUP BY {$sGroup}"; + } + } + return array($sOrder,$sLimit,$sGroup); } /** * Список колонок/полей сущности @@ -381,8 +397,12 @@ class MapperORM extends Mapper { * Варианты таблиц: * prefix_user -> если модуль совпадает с сущностью * prefix_user_invite -> если модуль не сопадает с сущностью + * Если сущность плагина: + * prefix_pluginname_user + * prefix_pluginname_user_invite */ $sClass = Engine::getInstance()->Plugin_GetDelegater('entity', is_object($oEntity)?get_class($oEntity):$oEntity); + $sPluginName = func_underscore(Engine::GetPluginName($sClass)); $sModuleName = func_underscore(Engine::GetModuleName($sClass)); $sEntityName = func_underscore(Engine::GetEntityName($sClass)); if (strpos($sEntityName,$sModuleName)===0) { @@ -390,6 +410,16 @@ class MapperORM extends Mapper { } else { $sTable=func_underscore($sModuleName).'_'.func_underscore($sEntityName); } + if ($sPluginName) { + $sTablePlugin=$sPluginName.'_'.$sTable; + /** + * Для обратной совместимости с 1.0.1 + * Если такая таблица определена в конфиге, то ок, если нет, то используем старый вариант без имени плагина + */ + if (Config::Get('db.table.'.$sTablePlugin)) { + $sTable=$sTablePlugin; + } + } /** * Если название таблиц переопределено в конфиге, то возвращаем его */ diff --git a/engine/classes/ModuleORM.class.php b/engine/classes/ModuleORM.class.php index cf44e751..df30f996 100644 --- a/engine/classes/ModuleORM.class.php +++ b/engine/classes/ModuleORM.class.php @@ -611,51 +611,51 @@ abstract class ModuleORM extends Module { * @return mixed */ public function __call($sName,$aArgs) { - if (preg_match("@^add([\w]+)$@i",$sName,$aMatch)) { + if (preg_match("@^add([a-z]+)$@i",$sName,$aMatch)) { return $this->_AddEntity($aArgs[0]); } - if (preg_match("@^update([\w]+)$@i",$sName,$aMatch)) { + if (preg_match("@^update([a-z]+)$@i",$sName,$aMatch)) { return $this->_UpdateEntity($aArgs[0]); } - if (preg_match("@^save([\w]+)$@i",$sName,$aMatch)) { + if (preg_match("@^save([a-z]+)$@i",$sName,$aMatch)) { return $this->_SaveEntity($aArgs[0]); } - if (preg_match("@^delete([\w]+)$@i",$sName,$aMatch)) { + if (preg_match("@^delete([a-z]+)$@i",$sName,$aMatch)) { return $this->_DeleteEntity($aArgs[0]); } - if (preg_match("@^reload([\w]+)$@i",$sName,$aMatch)) { + if (preg_match("@^reload([a-z]+)$@i",$sName,$aMatch)) { return $this->_ReloadEntity($aArgs[0]); } - if (preg_match("@^showcolumnsfrom([\w]+)$@i",$sName,$aMatch)) { + if (preg_match("@^showcolumnsfrom([a-z]+)$@i",$sName,$aMatch)) { return $this->_ShowColumnsFrom($aArgs[0]); } - if (preg_match("@^showprimaryindexfrom([\w]+)$@i",$sName,$aMatch)) { + if (preg_match("@^showprimaryindexfrom([a-z]+)$@i",$sName,$aMatch)) { return $this->_ShowPrimaryIndexFrom($aArgs[0]); } - if (preg_match("@^getchildrenof([\w]+)$@i",$sName,$aMatch)) { + if (preg_match("@^getchildrenof([a-z]+)$@i",$sName,$aMatch)) { return $this->_GetChildrenOfEntity($aArgs[0]); } - if (preg_match("@^getparentof([\w]+)$@i",$sName,$aMatch)) { + if (preg_match("@^getparentof([a-z]+)$@i",$sName,$aMatch)) { return $this->_GetParentOfEntity($aArgs[0]); } - if (preg_match("@^getdescendantsof([\w]+)$@i",$sName,$aMatch)) { + if (preg_match("@^getdescendantsof([a-z]+)$@i",$sName,$aMatch)) { return $this->_GetDescendantsOfEntity($aArgs[0]); } - if (preg_match("@^getancestorsof([\w]+)$@i",$sName,$aMatch)) { + if (preg_match("@^getancestorsof([a-z]+)$@i",$sName,$aMatch)) { return $this->_GetAncestorsOfEntity($aArgs[0]); } - if (preg_match("@^loadtreeof([\w]+)$@i",$sName,$aMatch)) { + if (preg_match("@^loadtreeof([a-z]+)$@i",$sName,$aMatch)) { $sEntityFull = array_key_exists(1,$aMatch) ? $aMatch[1] : null; return $this->LoadTree($aArgs[0], $sEntityFull); } diff --git a/engine/console/.htaccess b/engine/console/.htaccess new file mode 100644 index 00000000..2859d7f4 --- /dev/null +++ b/engine/console/.htaccess @@ -0,0 +1,2 @@ +Order Deny,Allow +Deny from all \ No newline at end of file diff --git a/engine/console/protected/plugin/PluginExample.class.php b/engine/console/protected/plugin/PluginExample.class.php index 2c27ebc6..5ff5f15b 100644 --- a/engine/console/protected/plugin/PluginExample.class.php +++ b/engine/console/protected/plugin/PluginExample.class.php @@ -68,15 +68,16 @@ class PluginExample extends Plugin { /* $this->ExportSQL(dirname(__FILE__).'/deinstall.sql'); // Выполнить деактивационный sql, если надо. */ + return true; } // Инициализация плагина public function Init() { - $this->Viewer_AppendStyle(Plugin::GetTemplatePath(__CLASS__)."/css/style.css"); // Добавление своего CSS - $this->Viewer_AppendScript(Plugin::GetTemplatePath(__CLASS__)."/js/script.js"); // Добавление своего JS + $this->Viewer_AppendStyle(Plugin::GetTemplatePath(__CLASS__)."css/style.css"); // Добавление своего CSS + $this->Viewer_AppendScript(Plugin::GetTemplatePath(__CLASS__)."js/script.js"); // Добавление своего JS - //$this->Viewer_AddMenu('blog',Plugin::GetTemplatePath(__CLASS__).'/menu.blog.tpl'); // например, задаем свой вид меню + //$this->Viewer_AddMenu('blog',Plugin::GetTemplatePath(__CLASS__).'menu.blog.tpl'); // например, задаем свой вид меню } } ?> diff --git a/engine/include/.htaccess b/engine/include/.htaccess new file mode 100644 index 00000000..2859d7f4 --- /dev/null +++ b/engine/include/.htaccess @@ -0,0 +1,2 @@ +Order Deny,Allow +Deny from all \ No newline at end of file diff --git a/engine/include/function.php b/engine/include/function.php index fecdc1d7..c211661c 100644 --- a/engine/include/function.php +++ b/engine/include/function.php @@ -102,6 +102,19 @@ function getRequest($sName,$default=null,$sType=null) { return $default; } +/** + * функция доступа к GET POST параметрам, которая значение принудительно приводит к строке + * + * @param string $sName + * @param mixed $default + * @param string $sType + * + * @return string + */ +function getRequestStr($sName,$default=null,$sType=null) { + return (string)getRequest($sName,$default,$sType); +} + /** * Определяет был ли передан указанный параметр методом POST * @@ -206,7 +219,8 @@ function func_encrypt($sData) { * @return unknown */ function func_getIp() { - return $_SERVER['REMOTE_ADDR']; + // Если запускаем через консоль, то REMOTE_ADDR не определен + return isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1'; } diff --git a/engine/lib/external/Jevix/jevix.class.php b/engine/lib/external/Jevix/jevix.class.php index cc16725c..fe5f99d6 100644 --- a/engine/lib/external/Jevix/jevix.class.php +++ b/engine/lib/external/Jevix/jevix.class.php @@ -123,6 +123,8 @@ class Jevix{ protected $tagsStack; protected $openedTag; protected $autoReplace; // Автозамена + protected $linkProtocolAllow=array(); + protected $linkProtocolAllowDefault=array('http','https','ftp'); protected $isXHTMLMode = true; //
, protected $isAutoBrMode = true; // \n =
protected $isAutoLinkMode = true; @@ -371,6 +373,23 @@ class Jevix{ $this->autoReplace = array('from' => $from, 'to' => $to); } + /** + * Устанавливает список разрешенных протоколов для ссылок (http, ftp и т.п.) + * + * @param array $aProtocol Список протоколов + * @param bool $bClearDefault Удалить дефолтные протоколы? + */ + function cfgSetLinkProtocolAllow($aProtocol, $bClearDefault=false){ + if (!is_array($aProtocol)) { + $aProtocol=array($aProtocol); + } + if ($bClearDefault) { + $this->linkProtocolAllow=$aProtocol; + } else { + $this->linkProtocolAllow=array_merge($this->linkProtocolAllowDefault,$aProtocol); + } + } + /** * Включение или выключение режима XTML * @@ -984,7 +1003,8 @@ class Jevix{ continue(2); } // HTTP в начале если нет - if(!preg_match('/^(http|https|ftp):\/\//ui', $value) && !preg_match('/^(\/|\#)/ui', $value) && !preg_match('/^(mailto):/ui', $value) ) $value = 'http://'.$value; + $sProtocols=join('|',$this->linkProtocolAllow ? $this->linkProtocolAllow : $this->linkProtocolAllowDefault); + if(!preg_match('/^('.$sProtocols.'):\/\//ui', $value) && !preg_match('/^(\/|\#)/ui', $value) && !preg_match('/^(mailto):/ui', $value) ) $value = 'http://'.$value; break; case '#image': @@ -1033,7 +1053,7 @@ class Jevix{ // Если тег обрабатывает "полным" колбеком if (isset($tagRules[self::TR_TAG_CALLBACK_FULL])) { - $text = call_user_func($tagRules[self::TR_TAG_CALLBACK_FULL], $tag, $resParams); + $text = call_user_func($tagRules[self::TR_TAG_CALLBACK_FULL], $tag, $resParams, $content); } else { // Собираем тег $text='<'.$tag; diff --git a/engine/lib/external/jquery/jquery.file.js b/engine/lib/external/jquery/jquery.file.js index eaeec04b..394ed2f7 100644 --- a/engine/lib/external/jquery/jquery.file.js +++ b/engine/lib/external/jquery/jquery.file.js @@ -29,7 +29,7 @@ jQuery.fn.file = function(options) { 'display': 'none' }).appendTo('body'); - var file = $('
').appendTo('body').css({ + var file = $('
').appendTo('body').css({ 'position': 'absolute', 'overflow': 'hidden', '-moz-opacity': '0', diff --git a/engine/lib/external/kcaptcha/index.php b/engine/lib/external/kcaptcha/index.php index 0f22996f..c006bcd8 100644 --- a/engine/lib/external/kcaptcha/index.php +++ b/engine/lib/external/kcaptcha/index.php @@ -33,8 +33,8 @@ if(isset($_REQUEST[session_name()])){ } foreach ($_REQUEST as $key => $value) { - if (preg_match("/^[\w\d]{5,40}$/",(string)$value)) { - session_name($key); + if (preg_match("/^.{5,100}$/",(string)$value)) { + @session_name($key); session_start(); break; } diff --git a/engine/lib/internal/ConfigSimple/.htaccess b/engine/lib/internal/ConfigSimple/.htaccess new file mode 100644 index 00000000..2859d7f4 --- /dev/null +++ b/engine/lib/internal/ConfigSimple/.htaccess @@ -0,0 +1,2 @@ +Order Deny,Allow +Deny from all \ No newline at end of file diff --git a/engine/lib/internal/ConfigSimple/Config.class.php b/engine/lib/internal/ConfigSimple/Config.class.php index 3cdee704..fb043d56 100644 --- a/engine/lib/internal/ConfigSimple/Config.class.php +++ b/engine/lib/internal/ConfigSimple/Config.class.php @@ -191,12 +191,11 @@ class Config { } } } else { - if(preg_match('~___([\S|\.|]+)___~Ui',$cfg)) - $cfg = preg_replace_callback( - '~___([\S|\.]+)___~Ui', - create_function('$value','return Config::Get($value[1],"'.$sInstance.'");'), - $cfg - ); + if(preg_match_all('~___([\S|\.]+)___~Ui',$cfg,$aMatch,PREG_SET_ORDER)) { + foreach($aMatch as $aItem) { + $cfg=str_replace('___'.$aItem[1].'___',Config::Get($aItem[1],$sInstance),$cfg); + } + } } return $cfg; } diff --git a/engine/lib/internal/ProfilerSimple/.htaccess b/engine/lib/internal/ProfilerSimple/.htaccess new file mode 100644 index 00000000..2859d7f4 --- /dev/null +++ b/engine/lib/internal/ProfilerSimple/.htaccess @@ -0,0 +1,2 @@ +Order Deny,Allow +Deny from all \ No newline at end of file diff --git a/engine/modules/.htaccess b/engine/modules/.htaccess new file mode 100644 index 00000000..2859d7f4 --- /dev/null +++ b/engine/modules/.htaccess @@ -0,0 +1,2 @@ +Order Deny,Allow +Deny from all \ No newline at end of file diff --git a/engine/modules/message/Message.class.php b/engine/modules/message/Message.class.php index c5c79f65..51bc2acd 100644 --- a/engine/modules/message/Message.class.php +++ b/engine/modules/message/Message.class.php @@ -74,7 +74,7 @@ class ModuleMessage extends Module { */ public function Shutdown() { /** - * Добавляем в сессию те соощения, которые были отмечены для сессионого использования + * Добавляем в сессию те сообщения, которые были отмечены для сессионного использования */ $this->Session_Set('message_notice_session', $this->GetNoticeSession()); $this->Session_Set('message_error_session', $this->GetErrorSession()); @@ -87,7 +87,7 @@ class ModuleMessage extends Module { * * @param string $sMsg Сообщение * @param string $sTitle Заголовок - * @param bool $bUseSession Показать сообщение при следующем обращии пользователя к сайту + * @param bool $bUseSession Показать сообщение при следующем обращении пользователя к сайту */ public function AddError($sMsg,$sTitle=null,$bUseSession=false) { if(!$bUseSession) { @@ -97,11 +97,11 @@ class ModuleMessage extends Module { } } /** - * Создаёт идинственное сообщение об ошибке(т.е. очищает все предыдущие) + * Создаёт единственное сообщение об ошибке(т.е. очищает все предыдущие) * * @param string $sMsg Сообщение * @param string $sTitle Заголовок - * @param bool $bUseSession Показать сообщение при следующем обращии пользователя к сайту + * @param bool $bUseSession Показать сообщение при следующем обращении пользователя к сайту */ public function AddErrorSingle($sMsg,$sTitle=null,$bUseSession=false) { $this->ClearError(); @@ -112,7 +112,7 @@ class ModuleMessage extends Module { * * @param string $sMsg Сообщение * @param string $sTitle Заголовок - * @param bool $bUseSession Показать сообщение при следующем обращии пользователя к сайту + * @param bool $bUseSession Показать сообщение при следующем обращении пользователя к сайту */ public function AddNotice($sMsg,$sTitle=null,$bUseSession=false) { if(!$bUseSession) { @@ -122,11 +122,11 @@ class ModuleMessage extends Module { } } /** - * Создаёт идинственное сообщение, удаляя предыдущие + * Создаёт единственное сообщение, удаляя предыдущие * * @param string $sMsg Сообщение * @param string $sTitle Заголовок - * @param bool $bUseSession Показать сообщение при следующем обращии пользователя к сайту + * @param bool $bUseSession Показать сообщение при следующем обращении пользователя к сайту */ public function AddNoticeSingle($sMsg,$sTitle=null,$bUseSession=false) { $this->ClearNotice(); diff --git a/engine/modules/plugin/Plugin.class.php b/engine/modules/plugin/Plugin.class.php index ed5bb00c..85af61b3 100644 --- a/engine/modules/plugin/Plugin.class.php +++ b/engine/modules/plugin/Plugin.class.php @@ -96,7 +96,7 @@ class ModulePlugin extends Module { $this->Xlang($oXml,'name',$sLang); $this->Xlang($oXml,'author',$sLang); $this->Xlang($oXml,'description',$sLang); - $oXml->homepage=$this->Text_Parser($oXml->homepage); + $oXml->homepage=$this->Text_Parser((string)$oXml->homepage); $oXml->settings=preg_replace('/{([^}]+)}/',Router::GetPath('$1'),$oXml->settings); $this->aPluginsList[$sPlugin]['property']=$oXml; @@ -354,6 +354,7 @@ class ModulePlugin extends Module { $aActivePlugins=$this->GetActivePlugins(); foreach ($aPlugins as $sPluginCode) { + if (!is_string($sPluginCode)) continue; /** * Если плагин активен, деактивируем его */ diff --git a/engine/modules/validate/entity/ValidatorEmail.entity.class.php b/engine/modules/validate/entity/ValidatorEmail.entity.class.php index 42526644..316094c5 100644 --- a/engine/modules/validate/entity/ValidatorEmail.entity.class.php +++ b/engine/modules/validate/entity/ValidatorEmail.entity.class.php @@ -31,14 +31,14 @@ */ class ModuleValidate_EntityValidatorEmail extends ModuleValidate_EntityValidator { /** - * Регулярное вырожение для проверки емайла + * Регулярное выражение для проверки емайла * * @var string * @see http://www.regular-expressions.info/email.html */ public $pattern='/^[a-zA-Z0-9!#$%&\'*+\\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&\'*+\\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/'; /** - * Регулярное вырожение для проверки емайла с именем отправителя. + * Регулярное выражение для проверки емайла с именем отправителя. * Используется только при allowName = true * * @var string diff --git a/engine/modules/validate/entity/ValidatorNumber.entity.class.php b/engine/modules/validate/entity/ValidatorNumber.entity.class.php index b5935059..1b1e2cb4 100644 --- a/engine/modules/validate/entity/ValidatorNumber.entity.class.php +++ b/engine/modules/validate/entity/ValidatorNumber.entity.class.php @@ -67,13 +67,13 @@ class ModuleValidate_EntityValidatorNumber extends ModuleValidate_EntityValidato */ public $msgTooSmall; /** - * Регулярное вырожение для целого числа + * Регулярное выражение для целого числа * * @var string */ public $integerPattern='/^\s*[+-]?\d+\s*$/'; /** - * Регулярное вырожение для числа, допускается дробное + * Регулярное выражение для числа, допускается дробное * * @var string */ diff --git a/engine/modules/viewer/Viewer.class.php b/engine/modules/viewer/Viewer.class.php index 13c96d01..cbe59543 100644 --- a/engine/modules/viewer/Viewer.class.php +++ b/engine/modules/viewer/Viewer.class.php @@ -202,11 +202,12 @@ class ModuleViewer extends Module { $this->sHtmlDescription=Config::Get('view.description'); /** - * Создаём объект Smarty и устанавливаем необходиму параметры + * Создаём объект Smarty и устанавливаем необходимые параметры */ $this->oSmarty = $this->CreateSmartyObject(); - $this->oSmarty->error_reporting=error_reporting()^E_NOTICE; // подавляем NOTICE ошибки - в этом вся прелесть смарти ) + $this->oSmarty->error_reporting=error_reporting() & ~E_NOTICE; // подавляем NOTICE ошибки - в этом вся прелесть смарти ) $this->oSmarty->setTemplateDir(array_merge((array)Config::Get('path.smarty.template'),array(Config::Get('path.root.server').'/plugins/'))); + $this->oSmarty->compile_check=Config::Get('smarty.compile_check'); /** * Для каждого скина устанавливаем свою директорию компиляции шаблонов */ @@ -214,7 +215,8 @@ class ModuleViewer extends Module { if(!is_dir($sCompilePath)) @mkdir($sCompilePath); $this->oSmarty->setCompileDir($sCompilePath); $this->oSmarty->setCacheDir(Config::Get('path.smarty.cache')); - $this->oSmarty->setPluginsDir(array_merge(array(Config::Get('path.smarty.plug'),'plugins'),$this->oSmarty->getPluginsDir())); + $this->oSmarty->addPluginsDir(array(Config::Get('path.smarty.plug'),'plugins')); + $this->oSmarty->default_template_handler_func=array($this,'SmartyDefaultTemplateHandler'); /** * Получаем настройки JS, CSS файлов */ @@ -282,7 +284,7 @@ class ModuleViewer extends Module { $this->Assign("sHtmlDescription",htmlspecialchars($this->sHtmlDescription)); $this->Assign("aHtmlHeadFiles",$this->aHtmlHeadFiles); $this->Assign("aHtmlRssAlternate",$this->aHtmlRssAlternate); - $this->Assign("sHtmlCanonical",$this->sHtmlCanonical); + $this->Assign("sHtmlCanonical",$this->Tools_Urlspecialchars($this->sHtmlCanonical)); /** * Загружаем список активных плагинов */ @@ -1029,13 +1031,12 @@ class ModuleViewer extends Module { * использует файловое кеширование * * @param array $aFiles Список файлов - * @param string $sType Тип файло - js, css + * @param string $sType Тип файла - js, css * @return array */ protected function Compress($aFiles,$sType) { $sCacheDir = $this->sCacheDir."/".Config::Get('view.skin'); $sCacheName = $sCacheDir."/".md5(serialize($aFiles).'_head').".{$sType}"; - $sPathServer = Config::Get('path.root.server'); $sPathWeb = Config::Get('path.root.web'); /** * Если кеш существует, то берем из кеша @@ -1054,7 +1055,7 @@ class ModuleViewer extends Module { ob_start(); foreach ($aFiles as $sFile) { // если файл локальный - if (strpos($sFile,Config::Get('path.root.web'))!==false) { + if (strpos($sFile, $sPathWeb)!==false) { $sFile=$this->GetServerPath($sFile); } list($sFile,)=explode('?',$sFile,2); @@ -1364,7 +1365,7 @@ class ModuleViewer extends Module { 'iCurrentPage' => $iCurrentPage, 'iNextPage' => $iNextPage, 'iPrevPage' => $iPrevPage, - 'sBaseUrl' => rtrim($sBaseUrl,'/'), + 'sBaseUrl' => rtrim($this->Tools_Urlspecialchars($sBaseUrl),'/'), 'sGetParams' => $sGetParams, ); /** @@ -1393,6 +1394,42 @@ class ModuleViewer extends Module { $this->aMenuFetch[$sContainer]=$this->Fetch($sTemplate); } } + /** + * Обработка поиска файла шаблона, если его не смог найти шаблонизатор Smarty + * + * @param string $sType Тип шаблона/ресурса + * @param string $sName Имя шаблона - имя файла + * @param string $sContent Возврат содержания шаблона при return true; + * @param int $iTimestamp Возврат даты модификации шаблона при return true; + * @param Smarty $oSmarty Объект Smarty + * @return string|bool + */ + public function SmartyDefaultTemplateHandler($sType,$sName,&$sContent,&$iTimestamp,$oSmarty) { + /** + * Название шаблона может содержать, как полный путь до файла шаблона, так и относительный любого из каталога в $oSmarty->getTemplateDir() + * По дефолту каталоги такие: /templates/skin/[name]/ и /plugins/ + */ + /** + * Задача: если это файл плагина для текущего шаблона, то смотрим этот же файл шаблона плагина в /default/ + */ + if (Config::Get('view.skin')!='default') { + // /root/plugins/[plugin name]/templates/skin/[skin name]/dir/test.tpl + if (preg_match('@^'.preg_quote(Config::Get('path.root.server')).'/plugins/([\w\-_]+)/templates/skin/'.preg_quote(Config::Get('view.skin')).'/@i',$sName,$aMatch)) { + $sFile=str_replace($aMatch[0],Config::Get('path.root.server').'/plugins/'.$aMatch[1].'/templates/skin/default/',$sName); + if ($this->TemplateExists($sFile)) { + return $sFile; + } + } + // [plugin name]/templates/skin/[skin name]/dir/test.tpl + if (preg_match('@^([\w\-_]+)/templates/skin/'.preg_quote(Config::Get('view.skin')).'/@i',$sName,$aMatch)) { + $sFile=Config::Get('path.root.server').'/plugins/'.str_replace($aMatch[0],$aMatch[1].'/templates/skin/default/',$sName); + if ($this->TemplateExists($sFile)) { + return $sFile; + } + } + } + return false; + } /** * Загружаем переменные в шаблон при завершении модуля * diff --git a/install/language/english.php b/install/language/english.php index f0ee28d4..6eb19b29 100644 --- a/install/language/english.php +++ b/install/language/english.php @@ -28,7 +28,7 @@ return array( 'error_db_saved'=>'Unable to save data into the DB.', 'error_db_no_data'=>"Unable to get data from the DB.", - 'error_local_config_invalid'=>"Can't find local configuration file - config.local.php.", + 'error_local_config_invalid'=>"Can't find local configuration file - /config/config.local.php.", 'site_name_invalid'=>'Chosen site name is not allowed.', 'site_description_invalid'=>'Chosen site description is not allowed.', @@ -55,7 +55,7 @@ return array( 'install_title'=>'LiveStreet Installation', 'step'=>'Step', - 'start_paragraph'=>'

Welcome to LiveStreet © 1.0.1 installation.

Notice: You have to rename file - /config/config.local.php.dist to config.local.php and apply read-write (rw) permision to it.

Notice: Make sure that the following directories have rw permissions: /tmp, /logs, /uploads, /templates/compiled, /templates/cache

', + 'start_paragraph'=>'

Welcome to LiveStreet © 1.0.1 installation.

Notice: You have to rename file - /config/config.local.php.dist to /config/config.local.php and apply read-write (rw) permision to it.

Notice: Make sure that the following directories have rw permissions: /tmp, /logs, /uploads, /templates/compiled, /templates/cache

', 'php_params'=>'General PHP Configuration', 'php_params_version'=>'PHP ver. 5.2.0 or higher', @@ -65,7 +65,7 @@ return array( 'php_params_simplexml'=>'SimpleXML support', 'local_config'=>'Local Configuration', - 'local_config_file'=>'File config.local.php exists and writable', + 'local_config_file'=>'File /config/config.local.php exists and writable', 'local_temp_dir'=>'Directory /tmp exists and writable', 'local_logs_dir'=>'Directory /logs exists and writable', 'local_uploads_dir'=>'Directory /uploads exists and writable', diff --git a/install/language/russian.php b/install/language/russian.php index b72609dc..42a6ec3d 100644 --- a/install/language/russian.php +++ b/install/language/russian.php @@ -28,7 +28,7 @@ return array( 'error_db_saved'=>'Не удалось сохранить данные в базе.', 'error_db_no_data'=>"Не удалось получить данные из базы.", - 'error_local_config_invalid'=>'Файл локальной конфигурации config.local.php не найден.', + 'error_local_config_invalid'=>'Файл локальной конфигурации /config/config.local.php не найден.', 'site_name_invalid'=>'Указано недопустимое название сайта.', 'site_description_invalid'=>'Указано недопустимое описание сайта.', @@ -55,7 +55,7 @@ return array( 'install_title'=>'Установка LiveStreet', 'step'=>'Шаг', - 'start_paragraph'=>'

Добро пожаловать в инсталлятор LiveStreet © 1.0.1. Ознакомьтесь с результатами и следуйте подсказкам.

Внимание. Для успешной иснталяции вы должны переименовать файл /config/config.local.php.dist на config.local.php и дать этому файлу права на запись.

Внимание. Директории /tmp, /logs, /uploads, /templates/compiled, /templates/cache должны иметь права на запись.

', + 'start_paragraph'=>'

Добро пожаловать в инсталлятор LiveStreet © 1.0.1. Ознакомьтесь с результатами и следуйте подсказкам.

Внимание. Для успешной иснталяции вы должны переименовать файл /config/config.local.php.dist на /config/config.local.php и дать этому файлу права на запись.

Внимание. Директории /tmp, /logs, /uploads, /templates/compiled, /templates/cache должны иметь права на запись.

', 'php_params'=>'Основные настройки PHP', 'php_params_version'=>'PHP версии не ниже 5.2.0', @@ -65,7 +65,7 @@ return array( 'php_params_simplexml'=>'Поддержка SimpleXML', 'local_config'=>'Локальная конфигурация', - 'local_config_file'=>'Файл config.local.php существует и доступен для записи', + 'local_config_file'=>'Файл /config/config.local.php существует и доступен для записи', 'local_temp_dir'=>'Директория /tmp существует и доступна для записи', 'local_logs_dir'=>'Директория /logs существует и доступна для записи', 'local_uploads_dir'=>'Директория /uploads существует и доступна для записи', diff --git a/templates/.htaccess b/templates/.htaccess index 3d30e94c..db38c5f5 100644 --- a/templates/.htaccess +++ b/templates/.htaccess @@ -1,5 +1,5 @@ Options -Indexes - + Order allow,deny Deny from all \ No newline at end of file diff --git a/templates/language/english.php b/templates/language/english.php index 903025d0..b60a2526 100644 --- a/templates/language/english.php +++ b/templates/language/english.php @@ -1184,27 +1184,27 @@ return array( '0' => '[UTC] Western European Time, Greenwich Mean Time', '1' => '[UTC + 1] Central European Time, West African Time', '2' => '[UTC + 2] Eastern European Time, Central African Time', - '3' => '[UTC + 3] Moscow Standard Time, Eastern African Time', + '3' => '[UTC + 3] Eastern African Time', '3.5' => '[UTC + 3:30] Iran Standard Time', - '4' => '[UTC + 4] Gulf Standard Time, Samara Standard Time', + '4' => '[UTC + 4] Moscow Time, Gulf Standard Time', '4.5' => '[UTC + 4:30] Afghanistan Time', - '5' => '[UTC + 5] Pakistan Standard Time, Yekaterinburg Standard Time', + '5' => '[UTC + 5] Pakistan Standard Time, Samara Standard Time', '5.5' => '[UTC + 5:30] Indian Standard Time, Sri Lanka Time', '5.75' => '[UTC + 5:45] Nepal Time', - '6' => '[UTC + 6] Bangladesh Time, Bhutan Time, Novosibirsk Standard Time', + '6' => '[UTC + 6] Bangladesh Time, Bhutan Time, Yekaterinburg Standard Time', '6.5' => '[UTC + 6:30] Cocos Islands Time, Myanmar Time', - '7' => '[UTC + 7] Indochina Time, Krasnoyarsk Standard Time', - '8' => '[UTC + 8] Chinese Standard Time, Australian Western Standard Time, Irkutsk Standard Time', + '7' => '[UTC + 7] Indochina Time, Novosibirsk Time', + '8' => '[UTC + 8] Chinese Standard Time, Australian Western Standard Time, Krasnoyarsk Time', '8.75' => '[UTC + 8:45] Southeastern Western Australia Standard Time', - '9' => '[UTC + 9] Japan Standard Time, Korea Standard Time, Chita Standard Time', + '9' => '[UTC + 9] Japan Standard Time, Korea Standard Time, Irkutsk Time', '9.5' => '[UTC + 9:30] Australian Central Standard Time', - '10' => '[UTC + 10] Australian Eastern Standard Time, Vladivostok Standard Time', + '10' => '[UTC + 10] Australian Eastern Standard Time, Chita Time', '10.5' => '[UTC + 10:30] Lord Howe Standard Time', - '11' => '[UTC + 11] Solomon Island Time, Magadan Standard Time', + '11' => '[UTC + 11] Solomon Island Time, Vladivostok Time', '11.5' => '[UTC + 11:30] Norfolk Island Time', - '12' => '[UTC + 12] New Zealand Time, Fiji Time, Kamchatka Standard Time', + '12' => '[UTC + 12] New Zealand Time, Fiji Time, Magadan Time', '12.75' => '[UTC + 12:45] Chatham Islands Time', - '13' => '[UTC + 13] Tonga Time, Phoenix Islands Time', + '13' => '[UTC + 13] Tonga Time, Phoenix Islands Time, Kamchatka Time', '14' => '[UTC + 14] Line Island Time' ) ); diff --git a/templates/language/russian.php b/templates/language/russian.php index 4a38a541..d031edd1 100644 --- a/templates/language/russian.php +++ b/templates/language/russian.php @@ -628,7 +628,7 @@ return array( 'settings_profile_mail_error_used' => 'Этот емайл уже занят', 'settings_profile_mail_notice' => 'Ваш реальный почтовый адрес, на него будут приходить уведомления', 'settings_profile_mail_change_from_notice' => 'На вашу старую почту отправлено подтверждение для смены емайла', - 'settings_profile_mail_change_to_notice' => 'Спасибо!
На ваш новый емайл адрес отправлено еще одно подтверждение.', + 'settings_profile_mail_change_to_notice' => 'Спасибо!
На ваш новый емайл адрес отправлено подтверждение для смены старого емайла.', 'settings_profile_mail_change_ok' => 'Ваш емайл изменен на %%mail%%', 'settings_profile_sex' => 'Пол', 'settings_profile_sex_man' => 'мужской', @@ -1185,26 +1185,26 @@ return array( '-1' => '[UTC − 1] Азорские острова, острова Зелёного мыса', '0' => '[UTC] Время по Гринвичу: Дублин, Лондон, Лиссабон, Эдинбург', '1' => '[UTC + 1] Берлин, Мадрид, Париж, Рим, Западная Центральная Африка', - '2' => '[UTC + 2] Афины, Вильнюс, Киев, Минск, Рига, Таллин, Центральная Африка', - '3' => '[UTC + 3] Волгоград, Москва, Самара, Санкт-Петербург', + '2' => '[UTC + 2] Афины, Вильнюс, Киев, Рига, Таллин, Центральная Африка', + '3' => '[UTC + 3] Калининград, Минск', '3.5' => '[UTC + 3:30] Тегеран', - '4' => '[UTC + 4] Баку, Ереван, Тбилиси', + '4' => '[UTC + 4] Волгоград, Москва, Самара, Санкт-Петербург, Баку, Ереван, Тбилиси', '4.5' => '[UTC + 4:30] Кабул', - '5' => '[UTC + 5] Екатеринбург, Исламабад, Карачи, Оренбург, Ташкент', + '5' => '[UTC + 5] Исламабад, Карачи, Оренбург, Ташкент', '5.5' => '[UTC + 5:30] Бомбей, Калькутта, Мадрас, Нью-Дели', '5.75' => '[UTC + 5:45] Катманду', - '6' => '[UTC + 6] Алматы, Астана, Новосибирск, Омск', + '6' => '[UTC + 6] Екатеринбург, Алматы, Астана', '6.5' => '[UTC + 6:30] Рангун', - '7' => '[UTC + 7] Бангкок, Красноярск', - '8' => '[UTC + 8] Гонконг, Иркутск, Пекин, Сингапур', + '7' => '[UTC + 7] Бангкок, Новосибирск, Омск', + '8' => '[UTC + 8] Гонконг, Красноярск, Пекин, Сингапур', '8.75' => '[UTC + 8:45] Юго-восточная Западная Австралия', - '9' => '[UTC + 9] Токио, Сеул, Чита, Якутск', + '9' => '[UTC + 9] Токио, Сеул, Иркутск', '9.5' => '[UTC + 9:30] Дарвин', - '10' => '[UTC + 10] Владивосток, Канберра, Мельбурн, Сидней', + '10' => '[UTC + 10] Чита, Якутск, Канберра, Мельбурн, Сидней', '10.5' => '[UTC + 10:30] Лорд-Хау', - '11' => '[UTC + 11] Камчатка, Магадан, Сахалин, Соломоновы о-ва', + '11' => '[UTC + 11] Владивосток, Соломоновы о-ва', '11.5' => '[UTC + 11:30] Остров Норфолк', - '12' => '[UTC + 12] Новая Зеландия, Фиджи', + '12' => '[UTC + 12] Камчатка, Магадан, Сахалин, Новая Зеландия, Фиджи', '12.75' => '[UTC + 12:45] Острова Чатем', '13' => '[UTC + 13] Острова Феникс, Тонга', '14' => '[UTC + 14] Остров Лайн' diff --git a/templates/skin/synio/settings/language/english.php b/templates/skin/synio/settings/language/english.php index b68041cc..72c15ce0 100644 --- a/templates/skin/synio/settings/language/english.php +++ b/templates/skin/synio/settings/language/english.php @@ -1,9 +1,8 @@ 'My profile', 'footer_menu_user_quest_title' => 'You do', diff --git a/templates/skin/synio/settings/language/russian.php b/templates/skin/synio/settings/language/russian.php index 87477e33..1cbdc2e5 100644 --- a/templates/skin/synio/settings/language/russian.php +++ b/templates/skin/synio/settings/language/russian.php @@ -1,8 +1,9 @@ 'Мой профиль', 'footer_menu_user_quest_title' => 'Вы можете',