mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-05-17 00:08:17 +03:00
дополнительно к топику-вопрос
This commit is contained in:
parent
04214078f6
commit
5ff2f135a7
481
classes/actions/ActionQuestion.class.php
Normal file
481
classes/actions/ActionQuestion.class.php
Normal file
|
@ -0,0 +1,481 @@
|
|||
<?
|
||||
/*-------------------------------------------------------
|
||||
*
|
||||
* LiveStreet Engine Social Networking
|
||||
* Copyright © 2008 Mzhelskiy Maxim
|
||||
*
|
||||
*--------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreet.ru
|
||||
* Contact e-mail: rus.engine@gmail.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Обработка УРЛа вида /question/ - управление своими топиками(тип: вопрос)
|
||||
*
|
||||
*/
|
||||
class ActionQuestion extends Action {
|
||||
/**
|
||||
* Меню
|
||||
*
|
||||
* @var unknown_type
|
||||
*/
|
||||
protected $sMenuItemSelect='question';
|
||||
/**
|
||||
* СубМеню
|
||||
*
|
||||
* @var unknown_type
|
||||
*/
|
||||
protected $sMenuSubItemSelect='add';
|
||||
/**
|
||||
* Текущий юзер
|
||||
*
|
||||
* @var unknown_type
|
||||
*/
|
||||
protected $oUserCurrent=null;
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
public function Init() {
|
||||
/**
|
||||
* Проверяем авторизован ли юзер
|
||||
*/
|
||||
if (!$this->User_IsAuthorization()) {
|
||||
$this->Message_AddErrorSingle('Для того чтобы что то написать, сначало нужно войти под своим аккаунтом.','Нет доступа');
|
||||
return Router::Action('error');
|
||||
}
|
||||
$this->oUserCurrent=$this->User_GetUserCurrent();
|
||||
$this->SetDefaultEvent('add');
|
||||
$this->Viewer_AddHtmlTitle('Вопросы');
|
||||
}
|
||||
/**
|
||||
* Регистрируем евенты
|
||||
*
|
||||
*/
|
||||
protected function RegisterEvent() {
|
||||
$this->AddEvent('add','EventAdd');
|
||||
$this->AddEvent('edit','EventEdit');
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************************
|
||||
************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
|
||||
**********************************************************************************
|
||||
*/
|
||||
|
||||
/**
|
||||
* Редактирование ссылки
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
protected function EventEdit() {
|
||||
/**
|
||||
* Меню
|
||||
*/
|
||||
$this->sMenuSubItemSelect='';
|
||||
$this->sMenuItemSelect='question';
|
||||
/**
|
||||
* Получаем номер топика из УРЛ и проверяем существует ли он
|
||||
*/
|
||||
$sTopicId=$this->GetParam(0);
|
||||
if (!$oTopic=$this->Topic_GetTopicById($sTopicId,$this->oUserCurrent)) {
|
||||
return parent::EventNotFound();
|
||||
}
|
||||
/**
|
||||
* проверяем кто владелец топика
|
||||
*/
|
||||
if ($oTopic->getUserId()!=$this->oUserCurrent->getId()) {
|
||||
return parent::EventNotFound();
|
||||
}
|
||||
/**
|
||||
* Добавляем блок вывода информации о блоге
|
||||
*/
|
||||
$this->Viewer_AddBlocksRight(array('block.blogInfo.tpl'));
|
||||
/**
|
||||
* Получаем данные для отображения формы
|
||||
*/
|
||||
$aBlogsOwner=$this->Blog_GetBlogsByOwnerId($this->oUserCurrent->getId());
|
||||
$aBlogsUser=$this->Blog_GetRelationBlogUsersByUserId($this->oUserCurrent->getId());
|
||||
$aAllowBlogsUser=array();
|
||||
foreach ($aBlogsUser as $oBlogUser) {
|
||||
$oBlog=$this->Blog_GetBlogById($oBlogUser->getBlogId());
|
||||
// делаем через "or" чтоб дать возможность юзеру отредактировать свой топик в блоге в котором он уже не может постить, т.е. для тех топиков что были запощены раньше и был доступ в блог
|
||||
if ($this->ACL_CanAddTopic($this->oUserCurrent,$oBlog) or $oTopic->getBlogId()==$oBlog->getId()) {
|
||||
$aAllowBlogsUser[]=$oBlogUser;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Загружаем переменные в шаблон
|
||||
*/
|
||||
$this->Viewer_Assign('aBlogsUser',$aAllowBlogsUser);
|
||||
$this->Viewer_Assign('aBlogsOwner',$aBlogsOwner);
|
||||
$this->Viewer_Assign('bEditDisabled',$oTopic->getQuestionCountVote()==0 ? false : true);
|
||||
$this->Viewer_AddHtmlTitle('Редактирование вопроса');
|
||||
/**
|
||||
* Устанавливаем шаблон вывода
|
||||
*/
|
||||
$this->SetTemplateAction('add');
|
||||
/**
|
||||
* Проверяем отправлена ли форма с данными(хотяб одна кнопка)
|
||||
*/
|
||||
if (isset($_REQUEST['submit_topic_publish']) or isset($_REQUEST['submit_topic_save'])) {
|
||||
/**
|
||||
* Обрабатываем отправку формы
|
||||
*/
|
||||
return $this->SubmitEdit($oTopic);
|
||||
} else {
|
||||
/**
|
||||
* Заполняем поля формы для редактирования
|
||||
* Только перед отправкой формы!
|
||||
*/
|
||||
$_REQUEST['topic_title']=$oTopic->getTitle();
|
||||
$_REQUEST['topic_text']=$oTopic->getTextSource();
|
||||
$_REQUEST['topic_tags']=$oTopic->getTags();
|
||||
$_REQUEST['blog_id']=$oTopic->getBlogId();
|
||||
$_REQUEST['topic_id']=$oTopic->getId();
|
||||
|
||||
$_REQUEST['answer']=array();
|
||||
$aAnswers=$oTopic->getQuestionAnswers();
|
||||
foreach ($aAnswers as $aAnswer) {
|
||||
$_REQUEST['answer'][]=$aAnswer['text'];
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Добавление ссылки
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
protected function EventAdd() {
|
||||
/**
|
||||
* Меню
|
||||
*/
|
||||
$this->sMenuSubItemSelect='add';
|
||||
/**
|
||||
* Добавляем блок вывода информации о блоге
|
||||
*/
|
||||
$this->Viewer_AddBlocksRight(array('block.blogInfo.tpl'));
|
||||
/**
|
||||
* Получаем данные для отображения формы
|
||||
*/
|
||||
$aBlogsOwner=$this->Blog_GetBlogsByOwnerId($this->oUserCurrent->getId());
|
||||
$aBlogsUser=$this->Blog_GetRelationBlogUsersByUserId($this->oUserCurrent->getId());
|
||||
$aAllowBlogsUser=array();
|
||||
foreach ($aBlogsUser as $oBlogUser) {
|
||||
$oBlog=$this->Blog_GetBlogById($oBlogUser->getBlogId());
|
||||
if ($this->ACL_CanAddTopic($this->oUserCurrent,$oBlog)) {
|
||||
$aAllowBlogsUser[]=$oBlogUser;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Загружаем переменные в шаблон
|
||||
*/
|
||||
$this->Viewer_Assign('aBlogsUser',$aAllowBlogsUser);
|
||||
$this->Viewer_Assign('aBlogsOwner',$aBlogsOwner);
|
||||
$this->Viewer_Assign('bEditDisabled',false);
|
||||
$this->Viewer_AddHtmlTitle('Добавление вопроса');
|
||||
/**
|
||||
* Обрабатываем отправку формы
|
||||
*/
|
||||
return $this->SubmitAdd();
|
||||
}
|
||||
|
||||
/**
|
||||
* Обработка добавлени топика
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
protected function SubmitAdd() {
|
||||
/**
|
||||
* Проверяем отправлена ли форма с данными(хотяб одна кнопка)
|
||||
*/
|
||||
if (!isset($_REQUEST['submit_topic_publish']) and !isset($_REQUEST['submit_topic_save'])) {
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Проверка корректности полей формы
|
||||
*/
|
||||
if (!$this->checkTopicFields()) {
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Определяем в какой блог делаем запись
|
||||
*/
|
||||
$iBlogId=getRequest('blog_id');
|
||||
if ($iBlogId==0) {
|
||||
$oBlog=$this->Blog_GetPersonalBlogByUser($this->oUserCurrent);
|
||||
} else {
|
||||
$oBlog=$this->Blog_GetBlogById($iBlogId);
|
||||
}
|
||||
/**
|
||||
* Если блог не определен выдаем предупреждение
|
||||
*/
|
||||
if (!$oBlog) {
|
||||
$this->Message_AddErrorSingle('Пытаетесь запостить топик в неизвестный блог?','Ошибка');
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Проверка состоит ли юзер в блоге в который постит
|
||||
*/
|
||||
if (!$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
|
||||
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId()) {
|
||||
$this->Message_AddErrorSingle('Вы не состоите в этом блоге!','Ошибка');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Проверяем есть ли права на постинг топика в этот блог
|
||||
*/
|
||||
if (!$this->ACL_CanAddTopic($this->User_GetUserCurrent(),$oBlog)) {
|
||||
$this->Message_AddErrorSingle('Вы еще не достаточно окрепли чтобы постить в этот блог','Ошибка');
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Теперь можно смело добавлять топик к блогу
|
||||
*/
|
||||
$oTopic=new TopicEntity_Topic();
|
||||
$oTopic->setBlogId($oBlog->getId());
|
||||
$oTopic->setUserId($this->oUserCurrent->getId());
|
||||
$oTopic->setType('question');
|
||||
$oTopic->setTitle(getRequest('topic_title'));
|
||||
$oTopic->setText(htmlspecialchars(getRequest('topic_text')));
|
||||
$oTopic->setTextShort(htmlspecialchars(getRequest('topic_text')));
|
||||
$oTopic->setTextSource(getRequest('topic_text'));
|
||||
$oTopic->setTags(getRequest('topic_tags'));
|
||||
$oTopic->setDateAdd(date("Y-m-d H:i:s"));
|
||||
$oTopic->setUserIp(func_getIp());
|
||||
/**
|
||||
* Варианты ответов
|
||||
*/
|
||||
$oTopic->clearQuestionAnswer();
|
||||
foreach (getRequest('answer',array()) as $sAnswer) {
|
||||
$oTopic->addQuestionAnswer($sAnswer);
|
||||
}
|
||||
/**
|
||||
* Публикуем или сохраняем
|
||||
*/
|
||||
if (isset($_REQUEST['submit_topic_publish'])) {
|
||||
$oTopic->setPublish(1);
|
||||
} else {
|
||||
$oTopic->setPublish(0);
|
||||
}
|
||||
/**
|
||||
* Добавляем топик
|
||||
*/
|
||||
if ($this->Topic_AddTopic($oTopic)) {
|
||||
//Делаем рассылку спама всем, кто состоит в этом блоге
|
||||
if ($oTopic->getPublish()==1 and $oBlog->getType()!='personal') {
|
||||
$aBlogUsers=$this->Blog_GetRelationBlogUsersByBlogId($oBlog->getId());
|
||||
foreach ($aBlogUsers as $oBlogUser) {
|
||||
if ($oBlogUser->getUserId()==$this->oUserCurrent->getId()) {
|
||||
continue;
|
||||
}
|
||||
$this->Mail_SetAdress($oBlogUser->getUserMail(),$oBlogUser->getUserLogin());
|
||||
$this->Mail_SetSubject('Новый топик в блоге «'.htmlspecialchars($oBlog->getTitle()).'»');
|
||||
$this->Mail_SetBody('
|
||||
В блоге <b>«'.htmlspecialchars($oBlog->getTitle()).'»</b> опубликован топик - <a href="'.DIR_WEB_ROOT.'/blog/'.$oTopic->getId().'.html">'.htmlspecialchars($oTopic->getTitle()).'</a><br>
|
||||
|
||||
<br>
|
||||
С уважением, администрация сайта <a href="'.DIR_WEB_ROOT.'">'.SITE_NAME.'</a>
|
||||
');
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
}
|
||||
}
|
||||
|
||||
func_header_location(DIR_WEB_ROOT.'/blog/'.$oTopic->getId().'.html');
|
||||
} else {
|
||||
$this->Message_AddErrorSingle('Возникли технические неполадки при добавлении топика, пожалуйста повторите позже.','Внутреняя ошибка');
|
||||
return Router::Action('error');
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Обработка редактирования топика
|
||||
*
|
||||
* @param unknown_type $oTopic
|
||||
* @return unknown
|
||||
*/
|
||||
protected function SubmitEdit($oTopic) {
|
||||
/**
|
||||
* Проверка корректности полей формы
|
||||
*/
|
||||
if (!$this->checkTopicFields($oTopic)) {
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Определяем в какой блог делаем запись
|
||||
*/
|
||||
$iBlogId=getRequest('blog_id');
|
||||
if ($iBlogId==0) {
|
||||
$oBlog=$this->Blog_GetPersonalBlogByUser($this->oUserCurrent);
|
||||
} else {
|
||||
$oBlog=$this->Blog_GetBlogById($iBlogId);
|
||||
}
|
||||
/**
|
||||
* Если блог не определен выдаем предупреждение
|
||||
*/
|
||||
if (!$oBlog) {
|
||||
$this->Message_AddErrorSingle('Пытаетесь запостить топик в неизвестный блог?','Ошибка');
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Проверка состоит ли юзер в блоге в который постит
|
||||
* Если нужно разрешить редактировать топик в блоге в котором юзер уже не стоит
|
||||
*/
|
||||
if (!$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
|
||||
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId()) {
|
||||
$this->Message_AddErrorSingle('Вы не сотоите в этом блоге!','Ошибка');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Проверяем есть ли права на постинг топика в этот блог
|
||||
* Условие $oBlog->getId()!=$oTopic->getBlogId() для того чтоб разрешить отредактировать топик в блоге в который сейчас юзер не имеет права на постинг, но раньше успел в него запостить этот топик
|
||||
*/
|
||||
if (!$this->ACL_CanAddTopic($this->User_GetUserCurrent(),$oBlog) and $oBlog->getId()!=$oTopic->getBlogId()) {
|
||||
$this->Message_AddErrorSingle('Вы еще не достаточно окрепли чтобы постить в этот блог','Ошибка');
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Теперь можно смело редактировать топик
|
||||
*/
|
||||
$oTopic->setBlogId($oBlog->getId());
|
||||
$oTopic->setText(htmlspecialchars(getRequest('topic_text')));
|
||||
$oTopic->setTextShort(htmlspecialchars(getRequest('topic_text')));
|
||||
$oTopic->setTextSource(getRequest('topic_text'));
|
||||
$oTopic->setTags(getRequest('topic_tags'));
|
||||
$oTopic->setUserIp(func_getIp());
|
||||
|
||||
/**
|
||||
* изменяем вопрос/ответы только если еще никто не голосовал
|
||||
*/
|
||||
if ($oTopic->getQuestionCountVote()==0) {
|
||||
$oTopic->setTitle(getRequest('topic_title'));
|
||||
$oTopic->clearQuestionAnswer();
|
||||
foreach (getRequest('answer',array()) as $sAnswer) {
|
||||
$oTopic->addQuestionAnswer($sAnswer);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Публикуем или сохраняем в черновиках
|
||||
*/
|
||||
if (isset($_REQUEST['submit_topic_publish'])) {
|
||||
$oTopic->setPublish(1);
|
||||
} else {
|
||||
$oTopic->setPublish(0);
|
||||
}
|
||||
/**
|
||||
* Сохраняем топик
|
||||
*/
|
||||
if ($this->Topic_UpdateTopic($oTopic)) {
|
||||
func_header_location(DIR_WEB_ROOT.'/blog/'.$oTopic->getId().'.html');
|
||||
} else {
|
||||
$this->Message_AddErrorSingle('Возникли технические неполадки при изменении топика, пожалуйста повторите позже.','Внутреняя ошибка');
|
||||
return Router::Action('error');
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Проверка полей формы
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
protected function checkTopicFields($oTopic=null) {
|
||||
$bOk=true;
|
||||
/**
|
||||
* Проверяем есть ли блог в кторый постим
|
||||
*/
|
||||
if (!func_check(getRequest('blog_id'),'id')) {
|
||||
$this->Message_AddError('Что то не то с блогом..','Ошибка');
|
||||
$bOk=false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяем есть ли описание вопроса
|
||||
*/
|
||||
if (!func_check(getRequest('topic_text'),'text',0,500)) {
|
||||
$this->Message_AddError('Описание вопроса должно быть не более 500 символов','Ошибка');
|
||||
$bOk=false;
|
||||
}
|
||||
|
||||
/**
|
||||
* проверяем заполнение вопроса/ответов только если еще никто не голосовал
|
||||
*/
|
||||
if (is_null($oTopic) or $oTopic->getQuestionCountVote()==0) {
|
||||
/**
|
||||
* Проверяем есть ли заголовок топика(вопрос)
|
||||
*/
|
||||
if (!func_check(getRequest('topic_title'),'text',2,200)) {
|
||||
$this->Message_AddError('Вопрос должен быть от 3 до 200 символов','Ошибка');
|
||||
$bOk=false;
|
||||
}
|
||||
/**
|
||||
* Проверяем варианты ответов
|
||||
*/
|
||||
$aAnswers=getRequest('answer',array());
|
||||
foreach ($aAnswers as $key => $sAnswer) {
|
||||
if (trim($sAnswer)=='') {
|
||||
unset($aAnswers[$key]);
|
||||
continue;
|
||||
}
|
||||
if (!func_check($sAnswer,'text',1,100)) {
|
||||
$this->Message_AddError('Ответ должен быть от 1 до 100 символов','Ошибка');
|
||||
$bOk=false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$_REQUEST['answer']=$aAnswers;
|
||||
if (count($aAnswers)<2) {
|
||||
$this->Message_AddError('Вариантов ответа должно быть как минимум два','Ошибка');
|
||||
$bOk=false;
|
||||
}
|
||||
if (count($aAnswers)>20) {
|
||||
$this->Message_AddError('Максимально возможное число вариантов ответа 20','Ошибка');
|
||||
$bOk=false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяем есть ли теги(метки)
|
||||
*/
|
||||
if (!func_check(getRequest('topic_tags'),'text',2,500)) {
|
||||
$this->Message_AddError('Метки топика должны быть от 2 до 50 символов с общей диной не более 500 символов','Ошибка');
|
||||
$bOk=false;
|
||||
}
|
||||
/**
|
||||
* проверяем ввод тегов
|
||||
*/
|
||||
$sTags=getRequest('topic_tags');
|
||||
$aTags=explode(',',$sTags);
|
||||
$aTagsNew=array();
|
||||
foreach ($aTags as $sTag) {
|
||||
$sTag=trim($sTag);
|
||||
if (func_check($sTag,'text',2,50)) {
|
||||
$aTagsNew[]=$sTag;
|
||||
}
|
||||
}
|
||||
if (!count($aTagsNew)) {
|
||||
$this->Message_AddError('Проверьте правильность меток','Ошибка');
|
||||
$bOk=false;
|
||||
} else {
|
||||
$_REQUEST['topic_tags']=join(',',$aTagsNew);
|
||||
}
|
||||
return $bOk;
|
||||
}
|
||||
/**
|
||||
* При завершении экшена загружаем необходимые переменные
|
||||
*
|
||||
*/
|
||||
public function EventShutdown() {
|
||||
$this->Viewer_Assign('sMenuItemSelect',$this->sMenuItemSelect);
|
||||
$this->Viewer_Assign('sMenuSubItemSelect',$this->sMenuSubItemSelect);
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -0,0 +1,41 @@
|
|||
<?
|
||||
/*-------------------------------------------------------
|
||||
*
|
||||
* LiveStreet Engine Social Networking
|
||||
* Copyright © 2008 Mzhelskiy Maxim
|
||||
*
|
||||
*--------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreet.ru
|
||||
* Contact e-mail: rus.engine@gmail.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class TopicEntity_TopicQuestionVote extends Entity
|
||||
{
|
||||
public function getTopicId() {
|
||||
return $this->_aData['topic_id'];
|
||||
}
|
||||
public function getVoterId() {
|
||||
return $this->_aData['user_voter_id'];
|
||||
}
|
||||
public function getAnswer() {
|
||||
return $this->_aData['answer'];
|
||||
}
|
||||
|
||||
|
||||
public function setTopicId($data) {
|
||||
$this->_aData['topic_id']=$data;
|
||||
}
|
||||
public function setVoterId($data) {
|
||||
$this->_aData['user_voter_id']=$data;
|
||||
}
|
||||
public function setAnswer($data) {
|
||||
$this->_aData['answer']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
102
include/ajax/questionVote.php
Normal file
102
include/ajax/questionVote.php
Normal file
|
@ -0,0 +1,102 @@
|
|||
<?php
|
||||
/*-------------------------------------------------------
|
||||
*
|
||||
* LiveStreet Engine Social Networking
|
||||
* Copyright © 2008 Mzhelskiy Maxim
|
||||
*
|
||||
*--------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreet.ru
|
||||
* Contact e-mail: rus.engine@gmail.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Обрабатывает голосование за топик-вопрос
|
||||
*/
|
||||
|
||||
set_include_path(get_include_path().PATH_SEPARATOR.dirname(dirname(dirname(__FILE__))));
|
||||
chdir(dirname(dirname(dirname(__FILE__))));
|
||||
require_once("./config/config.ajax.php");
|
||||
|
||||
$idAnswer=@$_REQUEST['idAnswer'];
|
||||
$idTopic=@$_REQUEST['idTopic'];
|
||||
$bStateError=true;
|
||||
$sTextResult='';
|
||||
$sMsgTitle='';
|
||||
$sMsg='';
|
||||
if ($oEngine->User_IsAuthorization()) {
|
||||
if ($oTopic=$oEngine->Topic_GetTopicById($idTopic)) {
|
||||
if ($oTopic->getType()=='question') {
|
||||
//голосовал уже или нет
|
||||
$oUserCurrent=$oEngine->User_GetUserCurrent();
|
||||
if (!($oTopicQuestionVote=$oEngine->Topic_GetTopicQuestionVote($oTopic->getId(),$oUserCurrent->getId()))) {
|
||||
$aAnswer=$oTopic->getQuestionAnswers();
|
||||
if (isset($aAnswer[$idAnswer]) or $idAnswer==-1) {
|
||||
if ($idAnswer==-1) {
|
||||
$oTopic->setQuestionCountVoteAbstain($oTopic->getQuestionCountVoteAbstain()+1);
|
||||
} else {
|
||||
$oTopic->increaseQuestionAnswerVote($idAnswer);
|
||||
}
|
||||
$oTopic->setQuestionCountVote($oTopic->getQuestionCountVote()+1);
|
||||
|
||||
$oTopicQuestionVote=new TopicEntity_TopicQuestionVote();
|
||||
$oTopicQuestionVote->setTopicId($oTopic->getId());
|
||||
$oTopicQuestionVote->setVoterId($oUserCurrent->getId());
|
||||
$oTopicQuestionVote->setAnswer($idAnswer);
|
||||
|
||||
if ($oEngine->Topic_AddTopicQuestionVote($oTopicQuestionVote) and $oEngine->Topic_updateTopic($oTopic)) {
|
||||
$bStateError=false;
|
||||
$sMsgTitle='Поздравляем!';
|
||||
$sMsg='Ваш голос учтен.';
|
||||
|
||||
foreach ($oTopic->getQuestionAnswers() as $key => $aAnswer) {
|
||||
$sTextResult.='<dl><dt><strong>'.$oTopic->getQuestionAnswerPercent($key).'%</strong><br/>('.$aAnswer['count'].')</dt>';
|
||||
$sTextResult.='<dd>'.$aAnswer['text'].'<br/><img width="'.$oTopic->getQuestionAnswerPercent($key).'%" height="5" alt="" src="'.DIR_STATIC_SKIN.'/img/vote_space.gif"/></dd></dl>';
|
||||
}
|
||||
$sTextResult.='<span class="total">Проголосовало: '.$oTopic->getQuestionCountVote().'. Воздержалось: '.$oTopic->getQuestionCountVoteAbstain().'</span>';
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
$sMsgTitle='Ошибка!';
|
||||
$sMsg='Возникли проблемы, повторите позже.';
|
||||
}
|
||||
} else {
|
||||
$sMsgTitle='Ошибка!';
|
||||
$sMsg='За что вы голосуете?!';
|
||||
}
|
||||
} else {
|
||||
$sMsgTitle='Ошибка!';
|
||||
$sMsg='Ваш голос уже учтен!';
|
||||
}
|
||||
} else {
|
||||
$sMsgTitle='Ошибка!';
|
||||
$sMsg='В этом топике нельзя голосовать!';
|
||||
}
|
||||
} else {
|
||||
$sMsgTitle='Ошибка!';
|
||||
$sMsg='Как можно голосовать на несуществующий опрос?';
|
||||
}
|
||||
} else {
|
||||
$sMsgTitle='Ошибка!';
|
||||
$sMsg='Для голосоввания необходимо авторизоваться!';
|
||||
}
|
||||
|
||||
$GLOBALS['_RESULT'] = array(
|
||||
"bStateError" => $bStateError,
|
||||
"sText" => $sTextResult,
|
||||
"sMsgTitle" => $sMsgTitle,
|
||||
"sMsg" => $sMsg,
|
||||
);
|
||||
|
||||
?>
|
||||
<pre>
|
||||
<b>Request method:</b> <?=$_SERVER['REQUEST_METHOD'] . "\n"?>
|
||||
<b>Loader used:</b> <?=$JsHttpRequest->LOADER . "\n"?>
|
||||
<b>_REQUEST:</b> <?=print_r($_REQUEST, 1)?>
|
||||
</pre>
|
141
templates/skin/habra/actions/ActionQuestion/add.tpl
Normal file
141
templates/skin/habra/actions/ActionQuestion/add.tpl
Normal file
|
@ -0,0 +1,141 @@
|
|||
{include file='header.tpl'}
|
||||
|
||||
{include file='menu.action.tpl'}
|
||||
|
||||
{include file='system_message.tpl'}
|
||||
|
||||
|
||||
{literal}
|
||||
<script>
|
||||
document.addEvent('domready', function() {
|
||||
var inputTags = $('topic_tags');
|
||||
|
||||
new Autocompleter.Request.HTML(inputTags, DIR_WEB_ROOT+'/include/ajax/tagAutocompleter.php', {
|
||||
'indicatorClass': 'autocompleter-loading', // class added to the input during request
|
||||
'minLength': 2, // We need at least 1 character
|
||||
'selectMode': 'type-ahead', // Instant completion
|
||||
'multiple': true // Tag support, by default comma separated
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/literal}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="backoffice">
|
||||
|
||||
|
||||
<div class="groups_topic_text" id="text_preview"></div>
|
||||
<div style="clear: both;"></div>
|
||||
<form action="" method="POST" id="thisform" enctype="multipart/form-data">
|
||||
|
||||
<label for="blog_id">В какой блог публикуем?</label>
|
||||
<select name="blog_id" id="blog_id" style="width: 100%;" onChange="ajaxBlogInfo(this.value);">
|
||||
<option value="0">мой персональный блог</option>
|
||||
{foreach from=$aBlogsOwner item=oBlog}
|
||||
<option value="{$oBlog->getId()}" {if $_aRequest.blog_id==$oBlog->getId()}selected{/if}>{$oBlog->getTitle()}</option>
|
||||
{/foreach}
|
||||
{foreach from=$aBlogsUser item=oBlogUser}
|
||||
<option value="{$oBlogUser->getBlogId()}" {if $_aRequest.blog_id==$oBlogUser->getBlogId()}selected{/if}>{$oBlogUser->getBlogTitle()}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
<script>
|
||||
ajaxBlogInfo(document.getElementById('blog_id').value);
|
||||
</script>
|
||||
<br /><span class="form_note_red"></span></p>
|
||||
|
||||
<p>
|
||||
<label for="topic_title">Вопрос:</label>
|
||||
<input type="text" id="topic_title" name="topic_title" value="{$_aRequest.topic_title}" style="width: 100%;" {if $bEditDisabled}disabled{/if} /><br />
|
||||
|
||||
<span class="form_note">Заголовок должен быть наполнен смыслом, чтобы можно было понять, о чем будет топик.</span><br />
|
||||
<span class="form_note_red"></span>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Варианты ответов:
|
||||
<table>
|
||||
{if count($_aRequest.answer)>=2}
|
||||
{foreach from=$_aRequest.answer item=sAnswer}
|
||||
<tr valign=top>
|
||||
<td>
|
||||
<nobr> <input type="radio" disabled></nobr>
|
||||
</td>
|
||||
<td width="100%">
|
||||
<input type="text" value="{$sAnswer}" name="answer[]" class="imputtext" style="width: 100%;" {if $bEditDisabled}disabled{/if}>
|
||||
</td>
|
||||
<td nowrap align="center">
|
||||
<input type="button" name="drop_answer" value=" - " onClick="dropField(this);" {if $bEditDisabled}disabled{/if}>
|
||||
<input type="button" value=" + " onClick="addField(this);" {if $bEditDisabled}disabled{/if}>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
{else}
|
||||
<tr valign=top>
|
||||
<td>
|
||||
<nobr> <input type="radio" disabled></nobr>
|
||||
</td>
|
||||
<td width="100%">
|
||||
<input type="text" value="" name="answer[]" class="imputtext" style="width: 100%;" >
|
||||
</td>
|
||||
<td nowrap align="center">
|
||||
<input type="button" name="drop_answer" value=" - " onClick="dropField(this);">
|
||||
<input type="button" value=" + " onClick="addField(this);">
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign=top>
|
||||
<td>
|
||||
<nobr> <input type="radio" disabled></nobr>
|
||||
</td>
|
||||
<td width="100%">
|
||||
<input type="text" value="" name="answer[]" class="imputtext" style="width: 100%;" >
|
||||
</td>
|
||||
<td nowrap align="center">
|
||||
<input type="button" name="drop_answer" value=" - " onClick="dropField(this);">
|
||||
<input type="button" value=" + " onClick="addField(this);">
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
</table>
|
||||
{if !$bEditDisabled}
|
||||
{literal}<script>checkFieldForLast();</script>{/literal}
|
||||
{/if}
|
||||
|
||||
</p>
|
||||
|
||||
<label for="topic_text">Краткое описание (максимум 500 символов, HTML-теги запрещены):</label>
|
||||
|
||||
<textarea style="width: 100%;" name="topic_text" id="topic_text" rows="6">{$_aRequest.topic_text}</textarea><br>
|
||||
|
||||
|
||||
<p>
|
||||
<label for="topic_tags">Метки:</label>
|
||||
<input type="text" id="topic_tags" name="topic_tags" value="{$_aRequest.topic_tags}" style="width: 100%;" /><br />
|
||||
<span class="form_note">Метки нужно разделять запятой. Например: <i>клон хабры</i>, <i>блоги</i>, <i>рейтинг</i>, <i>google</i>, <i>сиськи</i>, <i>кирпич</i>.</span>
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
<p class="l-bot">
|
||||
<input type="submit" name="submit_topic_publish" value="опубликовать">
|
||||
<input type="submit" name="submit_topic_save" value="сохранить в черновиках">
|
||||
<input type="submit" name="submit_preview" value="предпросмотр" onclick="ajaxTextPreview(document.getElementById('topic_text').value,true); return false;">
|
||||
</p>
|
||||
|
||||
<div class="form_note">Если нажать кнопку «Сохранить в черновиках», топик
|
||||
будет виден только Вам, а рядом с его заголовком будет отображаться замочек.
|
||||
Чтобы топик был виден всем, нажмите «Опубликовать».</div>
|
||||
|
||||
<p>Может быть, перейти на <a href="{$DIR_WEB_ROOT}/blog/">заглавную страницу блогов</a>?</p>
|
||||
<input type="hidden" name="topic_id" value="{$_aRequest.topic_id}">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{include file='footer.tpl'}
|
||||
|
BIN
templates/skin/habra/img/vote_space.gif
Normal file
BIN
templates/skin/habra/img/vote_space.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 43 B |
Loading…
Reference in a new issue