1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-05-17 00:08:17 +03:00

дополнительно к топику-вопрос

This commit is contained in:
Mzhelskiy Maxim 2008-10-01 19:02:11 +00:00
parent 04214078f6
commit 5ff2f135a7
5 changed files with 765 additions and 0 deletions

View 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);
}
}
?>

View file

@ -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;
}
}
?>

View 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>

View 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="опубликовать">&nbsp;
<input type="submit" name="submit_topic_save" value="сохранить в черновиках">&nbsp;
<input type="submit" name="submit_preview" value="предпросмотр" onclick="ajaxTextPreview(document.getElementById('topic_text').value,true); return false;">&nbsp;
</p>
<div class="form_note">Если нажать кнопку &laquo;Сохранить в черновиках&raquo;, топик
будет виден только Вам, а рядом с его заголовком будет отображаться замочек.
Чтобы топик был виден всем, нажмите &laquo;Опубликовать&raquo;.</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'}

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B