Спасибо за ответ, хочется уже доработать свой инструмент, тем более много чего сделано, включая список вопросов во вкладке на странице пользователя. Поэтому будем дорабатывать:)Есть опенсорс скрипт www.question2answer.org/, есть АПИ для интеграции, возможно будет проще интегрировать его, чем перепиливать встроенный.
В базе в user_id заносится id пользователя, который создал этот вопрос. В данный момент на кнопку удалить стоит следующее условие:d0th, В бд вноситься кто создал? Ставили условие на идентичность ID создавшего и ID авторизованного пользователя?.. В любом случае нужно код смотреть.
{if $is_admin}<a href="/happy/delquest{$quest.id}.html"> [удалить]</a>{/if}
И еще наверное нужно добавить условие в функции удаления, та которая во frontend.php? У меня она сейчас выглядит так:
///////////////////////////////////// DELETE QUEST //////////////////////////////////////////////////////////////////////////////// if ($do=='delquest'){ $quest_id = $inCore->request('quest_id', 'int', 0); $user_id = $inUser->id; $sql = "SELECT con.id, con.quest, con.category_id FROM cms_happy_quests con WHERE con.id = '$quest_id' LIMIT 1"; $result = $inDB->query($sql); $quest = $inDB->fetch_assoc($result); if (!$user_id || !$quest_id || !$quest) { $inCore->redirectBack(); } if ( !$inCore->inRequest('confirm') ) { if ($inCore->$user_id){ $inPage->setTitle($_LANG['DEL_QUES']); $inPage->addPathway($_LANG['DEL_QUES']); $inPage->backButton(false); $confirm['title'] = $_LANG['DELETE_QUES']; $confirm['text'] = $_LANG['YOU_REALY_DELETE_QUES'].':<br> "<a href="/happy/quest'.$quest['id'].'.html">'.$quest['quest'].'</a>"<br><br>'; $confirm['action'] = $_SERVER['REQUEST_URI']; $confirm['yes_button']['type'] = 'submit'; $confirm['yes_button']['name'] = 'confirm'; $smarty = $inCore->initSmarty('components', 'action_confirm.tpl'); $smarty->assign('confirm', $confirm); $smarty->display('action_confirm.tpl'); } else { $inCore->redirectBack(); } } if ( $inCore->inRequest('confirm') ){ if ($inCore->$user_id){ $model->deleteQuest($quest_id); } $inCore->redirect('/happy'); } }
public function isUserBlogAuthor($blog_id, $post_id, $blog_user_id){ $inUser = cmsUser::getInstance(); $blog_id_sql = $this->inDB->get_field('cms_blog_posts', "id='$post_id'", 'blog_id'); $this_blog_post = ($blog_id_sql == $blog_id) ? true : false; $is_my_blog = ($blog_user_id == $inUser->id) ? true : false; return ($this_blog_post && $is_my_blog) ? true : false; }
if ($owner=='user'){ $myblog = $model->isUserBlogAuthor($blog['id'], $post_id, $blog['user_id']); $is_author = (((!$myblog) && $inDB->get_field('cms_blog_authors', 'blog_id='.$id.' AND user_id='.$user_id, 'id')) || ($blog['forall'] && $post['user_id'] == $user_id)); $is_admin = $inUser->is_admin;
RooKee, Я так понял, что автор темы взял за основу компонент FAQ и пишет свой.
Вы правы. Итак, что я сделал.
в файле model.php добавил:
public function isUserHappyAuthor($happy_id, $happy_user_id){ $inUser = cmsUser::getInstance(); $is_my_happy = ($happy_user_id == $inUser->id) ? true : false; return ($is_my_happy) ? true : false; }
if ($owner=='user'){ $myhappy = $model->isUserHappyAuthor($quest['id'], $quest['user_id']); $is_admin = $inUser->is_admin; }
в файле com_happy_red.tpl поставил условие на отображение кнопки удалить:
{if $myhappy || $is_admin}<a href="/happy/delquest{$quest.id}.html"> [удалить]</a>{/if}
RooKee, Я так понял, что автор темы взял за основу компонент FAQ и пишет свой.
Кажется до меня дошло. Проконтролируйте меня пожалуйста.
1. В файле model.php добавляю в конец:
public function isUserHappyAuthor($happy_id, $happy_user_id){ $inUser = cmsUser::getInstance(); $is_my_happy = ($happy_user_id == $inUser->id) ? true : false; return ($is_my_happy) ? true : false; }
в участке кода
///////////////////////////////////// READ QUESTION //////////////////////////////////////////////////////////////////////////////// if ($do=='read'){
$smarty->assign('is_user', $inUser->id); $smarty->assign('myhappy', $model->isUserHappyAuthor($quest['id'], $quest['user_id']));
///////////////////////////////////// DELETE QUEST //////////////////////////////////////////////////////////////////////////////// if ($do=='delquest'){
$sql = "SELECT con.id, con.user_id, con.quest, con.category_id
FROM cms_happy_quests con
WHERE con.id = '$quest_id' LIMIT 1";
и далее изменяю условия при удалении
if ($inCore->$user_id || $myhappy){
if ($inCore->$user_id || $myhappy){ $inPage->setTitle($_LANG['DEL_QUES']); $inPage->addPathway($_LANG['DEL_QUES']); $inPage->backButton(false); $confirm['title'] = $_LANG['DELETE_QUES']; $confirm['text'] = $_LANG['YOU_REALY_DELETE_QUES'].':<br> "<a href="/happy/quest'.$quest['id'].'.html">'.$quest['quest'].'</a>"<br><br>'; $confirm['action'] = $_SERVER['REQUEST_URI']; $confirm['yes_button']['type'] = 'submit'; $confirm['yes_button']['name'] = 'confirm'; $smarty = $inCore->initSmarty('components', 'action_confirm.tpl'); $smarty->assign('confirm', $confirm); $smarty->display('action_confirm.tpl'); } else { $inCore->redirectBack(); } } if ( $inCore->inRequest('confirm') ){ if ($inCore->$user_id || $myhappy){ $model->deleteQuest($quest_id); } $inCore->redirect('/happy'); } }
3. В tpl файле условие
{if ($myhappy && $is_user) || $is_admin}<a href="/happy/delquest{$quest.id}.html"> [удалить]</a>{/if}