Комментирование стен 1.10

1. Файл /components/comments/frontend.php

После:
Код PHP:
  1. 105 if (!in_array($do, array('add', 'edit', 'delete')) && $target && $target_id){
Вставить:
Код PHP:
  1. if($target=='clubwall' || $target=='userwall'){
  2.  
  3. $model->whereTargetIs($target, $target_id);
  4.  
  5. $inDB->orderBy('c.pubdate', 'ASC');
  6.  
  7. $comments = $model->getComments(!($inUser->is_admin || $model->is_can_moderate));
  8.  
  9. $total = count($comments);
  10.  
  11.  
  12. $smarty = $inCore->initSmarty('components', 'com_comments_list_wall.tpl');
  13. $smarty->assign('comments_count', $total);
  14. $smarty->assign('comments', $comments);
  15. $smarty->assign('user_can_moderate', $model->is_can_moderate);
  16. $smarty->assign('user_can_delete', $model->is_can_delete);
  17. $smarty->assign('user_can_add', $model->is_can_add);
  18. $smarty->assign('is_admin', $inUser->is_admin);
  19. $smarty->assign('is_user', $inUser->id);
  20. $smarty->assign('cfg', $model->config);
  21. $smarty->assign('labels', $model->labels);
  22. $smarty->assign('target', $target);
  23. $smarty->assign('target_id', $target_id);
  24. $smarty->display('com_comments_list_wall.tpl');
  25.  
  26. return ob_get_clean();
  27.  
  28. }
2. Файл /core/classes/user.class.php

После:
Код PHP:
  1. 778 public static function getUserWall($target_id, $component='users', $my_profile=0, $is_admin=0){
  2.  
  3. $inDB = cmsDatabase::getInstance();
  4. $inCore = cmsCore::getInstance();
  5. $inUser = self::getInstance();
Вставить:
Код PHP:
  1. cmsCore::includeComments();
После:
Код PHP:
  1. 811 $record['fpubdate'] = $record['is_today'] ? cmsCore::dateDiffNow($record['pubdate']) : cmsCore::dateFormat($record['pubdate']);
  2. $record['avatar'] = cmsUser::getUserAvatarUrl($record['author_id'], 'small', $record['imageurl'], $record['is_deleted']);
Вставить:
Код PHP:
  1. $record['com_html'] = comments(($component=='users' ? 'userwall' : 'clubwall'), $record['id']);
3. Файл com_users_wall.tpl вашего шаблона

После:
Код PHP:
  1. 20 <td width="" valign="top" class="usr_wall_text">{$record.content}</td>
  2. </tr>
Вставить:
Код PHP:
  1. <tr><td>&nbsp;</td><td><div id="com_{if $component=='users'}userwall{else}clubwall{/if}_{$record.id}">{$record.com_html}</div></td></tr>
Ура! Комментарии просматриваются, удаляются и даже редактируются, но это только начало ваших мучений =D

4. Выполним запросы к БД:
Код SQL:
  1. DELETE FROM cms_comment_targets WHERE target = 'clubwall';
  2. DELETE FROM cms_comment_targets WHERE target = 'userwall';
  3. INSERT INTO cms_comment_targets (`id`, `target`, `component`, `title`, `target_table`, `subj`) VALUES (NULL, 'clubwall', 'clubs', 'Пост на стене клуба', 'cms_clubs', 'вашего поста на стене клуба'), (NULL, 'userwall', 'users', 'Пост на стене пользователя', 'cms_users', 'вашего поста на стене пользователя');
5. Файл /components/users/model.php

После:
Код PHP:
  1. 76 $result['link'] = '/users/'.$photo['user_id'].'/photo'.$target_id.'.html';
  2. $result['title'] = $photo['title'];
  3. break;
Вставить:
Код PHP:
  1. case 'userwall' : $post = $this->inDB->get_fields('cms_user_wall', "id='{$target_id}'", 'user_id, author_id');
  2. if (!$post) { return false; }
  3. $user = cmsUser::getShortUserData($post['user_id']);
  4. $result['link'] = cmsUser::getProfileURL($user['login']);
  5. $result['title'] = $user['nickname'];
  6. break;
После:
Код PHP:
  1. 106 $album = $this->getPhotoAlbum('private', $photo['album_id']);
  2. if($album['allow_who'] != 'all') { $is_hidden = 1; }
  3. break;
Вставить:
Код PHP:
  1. case 'userwall' : $user = $this->inDB->get_fields('cms_user_wall', "id='{$target_id}'", 'user_id');
  2. $profile = $this->inDB->get_fields('cms_user_profiles', "user_id='{$user['user_id']}'", 'allow_who');
  3. if($profile['allow_who'] != 'all') { $is_hidden = 1; }
  4. break;
После:
Код PHP:
  1. 194 $this->inDB->delete('cms_user_wall', "id = '$record_id'", 1);
  2. cmsCore::deleteUploadImages($record_id, 'wall');
  3. cmsActions::removeObjectLog('add_wall_my', $record_id);
  4. cmsActions::removeObjectLog('add_wall', $record_id);
Вставить:
Код PHP:
  1. $comments = $this->inDB->query("SELECT id FROM cms_comments WHERE target_id = '$record_id' AND target = 'userwall'");
  2. if ($this->inDB->num_rows($comments)) {
  3. cmsCore::loadModel('comments');
  4. $com_model = new cms_model_comments();
  5. while ($comment = $this->inDB->fetch_assoc($comments)){
  6. $com_model->deleteComment($comment['id']);
  7. }
  8. }
6. Файл /components/clubs/model.php

После:
Код PHP:
  1. 111 $result['link'] = $this->getPostURL($post['bloglink'], $post['seolink']);
  2. $result['title'] = $post['title'];
  3. break;
Вставить:
Код PHP:
  1. case 'clubwall' : $post = $this->inDB->get_fields('cms_user_wall w, cms_clubs c', "w.id='{$target_id}' AND c.id=w.user_id", 'c.id, c.title');
  2. if (!$post) { return false; }
  3. $result['link'] = '/clubs/'.$post['id'];
  4. $result['title'] = $post['title'];
  5. break;
После:
Код PHP:
  1. 142 $clubtype = $this->inDB->get_field('cms_clubs', "id='{$club_id}'", 'clubtype');
  2. if($clubtype == 'private') { $is_hidden = 1; }
  3. break;
Вставить:
Код PHP:
  1. case 'clubwall' : $club = $this->inDB->get_fields('cms_user_wall w, cms_clubs c', "w.id='{$target_id}' AND c.id=w.user_id", 'c.id, c.clubtype');
  2. if($club['clubtype'] == 'private') { $is_hidden = $club['clubtype']; }
  3. break;
После:
Код PHP:
  1. 243 $this->inDB->delete('cms_user_wall', "id = '$record_id'", 1);
  2. cmsCore::deleteUploadImages($record_id, 'wall');
  3. cmsActions::removeObjectLog('add_wall_club', $record_id);
Вставить:
Код PHP:
  1. $comments = $this->inDB->query("SELECT id FROM cms_comments WHERE target_id = '$record_id' AND target = 'clubwall'");
  2. if ($this->inDB->num_rows($comments)) {
  3. cmsCore::loadModel('comments');
  4. $com_model = new cms_model_comments();
  5. while ($comment = $this->inDB->fetch_assoc($comments)){
  6. $com_model->deleteComment($comment['id']);
  7. }
  8. }
7. Файл /components/comments/frontend.php

Найти:
Код PHP:
  1. 314 $model->getTargetAuthor($target['target_table'], $comment['target_id'])
Заменить:
Код PHP:
  1. $model->getTargetAuthor($target['target_table'], $comment['target_id'], ($comment['target']=='userwall' || $comment['target']=='clubwall' ? $comment['target'] : false))
8. Файл /components/comments/model.php

Найти:
Код PHP:
  1. 111 public function getTargetAuthor($table, $target_id) {
  2.  
  3. $sql = "SELECT u.id id, u.email email, p.title title
  4. FROM cms_users u, {$table} p
  5. WHERE p.user_id = u.id AND p.id = '{$target_id}' AND u.is_locked = 0 AND u.is_deleted = 0
  6. LIMIT 1";
Заменить:
Код PHP:
  1. public function getTargetAuthor($table, $target_id, $it_wall = false) {
  2.  
  3. if(!$it_wall)$sql = "SELECT u.id id, u.email email, p.title title
  4. FROM cms_users u, {$table} p
  5. WHERE p.user_id = u.id AND p.id = '{$target_id}' AND u.is_locked = 0 AND u.is_deleted = 0
  6. LIMIT 1";
  7. elseif($it_wall=='userwall')$sql = "SELECT u.id id, u.email email, t.nickname title
  8. FROM cms_users u, cms_user_wall w, {$table} t
  9. WHERE w.author_id = u.id AND t.id = w.user_id AND w.id = '{$target_id}' AND u.is_locked = 0 AND u.is_deleted = 0
  10. LIMIT 1";
  11. else $sql = "SELECT u.id id, u.email email, t.title title
  12. FROM cms_users u, cms_user_wall w, {$table} t
  13. WHERE w.author_id = u.id AND t.id = w.user_id AND w.id = '{$target_id}' AND u.is_locked = 0 AND u.is_deleted = 0
  14. LIMIT 1";
9. Файл /components/comments/js/comments.js

Найти:
Код JAVASCRIPT:
  1. 123 $('div.cm_ajax_list').html(data);
Заменить:
Код JAVASCRIPT:
  1. if(target=='userwall' || target=='clubwall')$('#com_'+target+'_'+target_id).html(data);
  2. else $('div.cm_ajax_list').html(data);
10. Файл /components/comments/comments.php

После:
Код PHP:
  1. 33 $inDB->orderBy('c.pubdate', 'ASC');
Вставить:
Код PHP:
  1. if($target=='clubwall' || $target=='userwall'){
  2.  
  3. $comments = $model->getComments(!($inUser->is_admin || $model->is_can_moderate));
  4.  
  5. $total = count($comments);
  6.  
  7.  
  8. $smarty = $inCore->initSmarty('components', 'com_comments_list_wall.tpl');
  9. $smarty->assign('comments_count', $total);
  10. $smarty->assign('comments', $comments);
  11. $smarty->assign('user_can_moderate', $model->is_can_moderate);
  12. $smarty->assign('user_can_delete', $model->is_can_delete);
  13. $smarty->assign('user_can_add', $model->is_can_add);
  14. $smarty->assign('is_admin', $inUser->is_admin);
  15. $smarty->assign('is_user', $inUser->id);
  16. $smarty->assign('cfg', $model->config);
  17. $smarty->assign('labels', $model->labels);
  18. $smarty->assign('target', $target);
  19. $smarty->assign('target_id', $target_id);
  20. $smarty->display('com_comments_list_wall.tpl');
  21.  
  22. echo ob_get_clean();
  23. }