Плагин "Мнения" - расширенный функционал голосования


Плагин выполняет две задачи: отображает в профиле пользователя его текущее место в общем рейтинге пользователей и реализует отправку и отображение анонимных сообщений при голосовании.


1. Отображение места пользователя в общем рейтинге.

Так выглядит дополнительный индикатор в профиле пользователя


Если с момента последнего посещения профиля пользователем произошли какие-то изменения, то они отображаются так:


Или так:


2. Отправка и отображение анонимных сообщений при голосовании
При голосовании за Пользователя (Топик, Блог, Сообщение) открывается окно с предложением отправки анонимного сообщения:


В профиле пользователя появился элемент меню для доступа к списку отправленных сообщений:


Настройки
В настройках есть возможность выбирать режимы работы: только учет мета пользователя в общем рейтинге, только систему отправки и отображения анонимных сообщений и оба режима сразу.

Функционал простой, но как дополнительное средство активизации пользователя, думаю, нужный.

ЗЫ:
Плагин находиться на модерации.
Плагин будет распространяться по свободной лицензии.


upd
1. Демо можно попробовать на gihub (спасибо aex за напоминание). Только не забываем, что это dev-версия с соответствующими следствиями. Если есть желание, присоединяйтесь к разработке. Папка плагина, куда распаковываются файлы c гитхаба должна назваться «opinion»

2. Реализованы настройки, позволяющие отключать варианты мнений так, как предложил acobat в этом комментарии

78 комментариев

avatar
Полезный наверно, плагин. А что себе на сайт демку не выложил?
  • aex
  • +1
avatar
Действительно, чего это я. Скоро выложу.
avatar
Из описания не очень понял, Анонимный пользователь, это что значит? Просто не выводится его имя, или может и незарегистрированный гость писать?
avatar
Да, и еще вопрос. Я так понял, там голосовалка задействовала. Совместим ли этот плагин с плагином admvote, который у многих стоит и заменяет стандартный экшен Ajax.
  • aex
  • 0
avatar
Сделал апдейт статьи, там ссылка на github. Насчет анонимности сообщения: сообщение отправляется только при голосовании (зарегистрированным пользователем), но отправляются без указания авторства.
Совместимость с admvote, сейчас тестируется.
avatar
С плагином admvote совместим полностью.
avatar
Да, я посмотрел, здесь экшен Ajax не задействован, так, что конфликтов нет.
avatar
до модерации мож выложите куда то раз бесплатная лицензия?
avatar
Уже. смотрите апдейт статьи.
avatar
сделайте что можно было слать анонимное сообщение только например при голосовании за профиль.
а то каждый раз при голосовании за комент или топик людей будет напрягать вводить что то — но на ряду с те м полезная штука. в профиле особенно учитывая что за профиль можно 1 раз голосовать. или за блог.
но за каждый топик и комент имхо перебор :)
avatar
настройки будут расширены — однозначно.
avatar
Ну так это же наверно не обязательно, что-то писать. Хочешь — пишешь, не хочешь — не пишешь.
avatar
Да, окно можно просто закрыть)
avatar
да но оно вылазит там где не хотелось бы =)
avatar
По Вашему предложению реализованы настройки, позволяющие отключать варианты мнений, версия в репозитарии githubа обновлена.
avatar
Тестирую плагин. Вы молодцы, что выложили его в паблик. Вообще здорово когда знания или информацию, другие какие-то славные вещи делают общедоступными и свободными.

Я думаю интересно многим была бы опция закрытия профиля, даже от зарегистрированных пользователей. Знаю что подобный плагин есть, но всё же :P
avatar
Асеадминка ругается:
Fatal error: Call to undefined method PluginAceadminpanel_ModuleUser_MapperUser::GetCurrentRating()
  • aex
  • 0
avatar
Какая у Вас версия LS? Плагин для версии 1.0.1, aceAdminPanel для этой версии нет, или я об этом незнаю.
avatar
Да есть уже, гитхабовский. Наверно, у всех стоит. Ну, Ася — известная капризная девушка :) А так вроде больше багов не нашел. Полезный плагин.
avatar
А вообще, хорошая работа. Надеюсь, порадуете нас и другими своими плагинами.
avatar
Спасибо
avatar
нужно админку грызть :(
avatar
Андрей очень хороший и полезный пользователь тут. Помог мне ни один раз.

Спасибо за плагин, отослал 2$ на пиво.
avatar
Спасибо
avatar
андрей можно ли как то адаптировать по сошл скин? и как то ввести ксс — чтоб можно было блок «место» в профиле передвинуть на другую сторону? у нас проект спецефический там все на dir=rtl поэтому у нас это место под аватарку залезло мелкую а надо чтоб было в определенном. можно как то помочь с этим? мыло мое у вас есть
avatar
оу, css нашли, просто привык он в скине лежит :)
avatar
пришлось с сошела вырезать мелкий аватар в профиле а то места нету… а мы сделал как раз красиво чтоб все про рейтинг было в уголке
avatar
Супер плагин! Интересно можно будет реализовать чтоб по желанию отображалось кто проголосовал и с каким знаком + или — ?
avatar
+ или — уже отображается (на последнем рисунке одна строка выделена красным в ней минус, в остальных зеленый плюс), сведения о проголосовавшем в таблице БД, которую создает плагин уже хранятся, остается только вывести.
avatar
Классно. Все реально!
avatar
Да, и в sql.sql сделай CREATE TABLE IF NOT EXISTS `prefix_opinion_rating`, а то, когда выключаешь-включаешь плагин ругается, ведь таблица уже создана.
  • aex
  • 0
avatar
Сделано, спасибо.
avatar
А если сделаешь еще обход авторизации, чтобы и гости могли голосовать, то я думаю, этот плагин будет очень многим полезен.
  • aex
  • 0
avatar
Обойти авторизацию не сложно. Сложно сделать так, что бы анонимное голосование, в дальнейшем, не использовалось нерадивыми пользователями для накрутки рейтинга, что может привести к распаду сообщества. Если делать так, что голоса от анонимных пользователей не влияют на рейтинг, а оставить лишь их мнение, тоже если четно, не очень правильно — если человеку есть что сказать, он и зарегистрирутся, а для остальных есть кнопки +1 от гугла, сообщения от вконтакта и др. социалок. Помоему, анонимное голосование, не нужно вообще, и я его делать не буду.
avatar
На одном из проектов, заказчик слезно умолял сделать это и для гостей, не хотели регаться и все тут. Сделал ему через сессии. Накруток особо не было, да и что там накручивать, топики? А гостям удобно отзывы оставлять. Заказчик благодарил и кланялся и еще и премию дал :)
avatar
Готов профинансировать анонимное голосование.
avatar
Как войти в админку livestreet? версия 1.0.1
avatar
sitename.ru/admin/
avatar
Скачал с гитхаба, хочу активировать — пишет: Ошибка: Файл плагина не найден

Как мне его включить?
avatar
Права доступа к файлам не выставлены как надо.
avatar
выставил, на plugins.dat 777, все равно так же…
Залез сам вписал andrey-v-livestreet_plugin_opinion-d804e57
Вылезла ошибка:
Fatal error: Class 'PluginAndrey-v-livestreetPluginOpinion-d804e57' not found in /.../engine/classes/Engine.class.php on line 465
Может нужно задать другое имя плагина?
avatar
желательно дать ему имя покороче… например opinion -> если активация не работает через админку пропишите в плагинс.дат слово опинион и файл свеклы портируйте руками в базу
avatar
Переименовал в opinion, все заработало, спасибо!
avatar
Отредактировал статью, там действительно явно не было указано наименование папки для плагина.
avatar
Нигде ничего изменять не нужно. Попробуйте переустановить плагин: деактивируйте его, удалите файлы плагина, загрузите файлы плагина на сервер снова, установите права доступа к файлам плагина, активируйте плагин. Все должно работать. только что повторил эту операцию у себя
avatar
Пробовал его качать снова, не знаю может руки кривые( Так он даже не активировывался… Переименовал папку плагина в opinion, все заработало, спасибо вам за быструю помощь
avatar
Тестил целый день, выявил несколько «прыщей»:

1 — Не удаляются «Мнения» в рубрике «Мнения сообщества обо мне»
2 — Когда кликаешь ссылку оставленного Мнения, открывается страница «Ошибка, такой страницы не существует...»
3 — Не приходят уведомления ни на почту, ни в ЛС о том, что кто то проголосовал или оставил мнение… Незнаю, должны ли они быть вообще, просто по логике вещей, хотя бы для мнений (счетчиков также не обнаружил)…

Пока все, а так плагин Бомба просто, автору Респект!
Надеюсь он будет дорабатываться
avatar
2 — посмотри гипер ссылку он делает ссылку вида www.site.ru/www.site.ru
avatar
верно… а как это исправить?
avatar
Спасибо за замечания. Скоро будут исправления.
avatar
с плагином от вадима — админка — не пашет. в профиле матерится. вечермо кину что пишет
avatar
Что она говорит, мы и так знаем. Админка не каталожная, гитхабовская, как и Мнения. Так, что пусть себе ругаются друг-на друга :)
avatar
1 — Исправлено
2 — Исправлено
3 — Отправка сообщений не предусмотрена
Депозитарий на гитхабе обновлен. Обновленная версия отправлена на модерацию. Еще раз спасибо за замечания.
avatar
у всех кстати работает и минус в «мнениях»? а то я плюснул бота и минуснул… и два плюса показует
avatar
отбой плюсанул два раза через хак на админку без ограничений голосовать)
avatar
Плагин активируется, но при заходе в профиль:
* @copyrights Copyright © 2012, Андрей Г. Воронов
* Является частью плагина Opinion
* @version 1.0 от 12.10.12 14:31 - Создание файла экшена.
* * @package plugins/opinion */ class PluginOpinion_ActionProfile extends PluginOpinion_Inherit_ActionProfile { protected function RegisterEvent() { parent::RegisterEvent(); if (Config::Get('plugin.opinion.mode') == 'full' || Config::Get('plugin.opinion.mode') == 'vote-control') { $this->AddEventPreg('/^.+$/i', '/^votinginfo$/i', '/^$/i', 'EventVotingInfo'); $this->AddEventPreg('/^.+$/i', '/^votinginfo$/i', '/^(page([1-9]\d{0,5}))?$/i', 'EventVotingInfo'); } } public function EventVotingInfo() { if (!$this->CheckUserProfile()) { return parent::EventNotFound(); } $bDelete = getRequest('form_votes_list_submit_del'); if ($bDelete) { $aVoteIds = getRequest('vote_select'); $this->User_DeleteVotesByIds($this->oUserProfile->getId(), $aVoteIds); } /** Передан ли номер страницы */ $iPage = $this->GetParamEventMatch(1, 2) ? $this->GetParamEventMatch(1, 2) : 1; /** Получаем список голосований */ $aResult = $this->User_GetVotesByUserId($this->oUserProfile->getId(), $iPage, Config::Get('plugin.opinion.votes_per_page')); if (!empty($aResult)) { /** @var $aVotes Массив голосований */ $aVotes = $aResult['aVotes']; foreach ($aVotes as $key => $aVote) { switch ($aVote['target_type']) { case 'comment': $aVotes[$key]['url'] = '/comments/' . $aVote['target_id']; break; case 'topic': $oTopic = $this->Topic_GetTopicById($aVote['target_id']); $aVotes[$key]['url'] = $oTopic->getUrl(); break; case 'blog': $oBlog = $this->Blog_GetBlogById($aVote['target_id']); $aVotes[$key]['url'] = '/blog/' . $oBlog->getUrl(); break; case 'user': $aVotes[$key]['url'] = $this->oUserProfile->getUserWebPath(); break; } } /** Формируем постраничность */ $aPaging = $this->Viewer_MakePaging($aResult['iCount'], $iPage, Config::Get('plugin.opinion.votes_per_page'), Config::Get('pagination.pages.count'), $this->oUserProfile->getUserWebPath() . 'votinginfo'); } else { $aVotes = $aPaging = array(); } /** Загружаем переменные в шаблон */ $this->Viewer_Assign('aPaging', $aPaging); $this->Viewer_Assign('aVotes', $aVotes); $this->Viewer_AddHtmlTitle($this->Lang_Get('plugin.opinion.about_user') . ' ' . $this->oUserProfile->getLogin()); /** Устанавливаем шаблон вывода */ $this->SetTemplateAction('voting_info'); } } Fatal error: Class 'PluginOpinion_ActionProfile' not found in /var/www/theirk.ru/engine/classes/Router.class.php on line 261
avatar
Посмотрите права доступа на файлы расширения
avatar
С правами все нормально, стоит social. Не знаю в чем еще может быть проблема.
avatar
Кто нибудь решил эту проблему с ошибкой сопоставления классов или нет?! У меня такая же всплывает :(
avatar
Мелочь конечно, но все же предлагаю подправить перевод. При просмотре мнений о себе как-то не корректно пишет, что такой страницы нет.

Этой страницы не существует! -> О Вас еще не сформировалось мнение у пользователей!
avatar
Исправлено и обновлено на github
avatar
Вот спасибо. поставил ты вам плюсик, но пока у самого репа мала.
avatar
При нажатии на любой ник на сайте выбивает вот такую ошибку



В чем может быть проблема? Если права ставить то где… и если нужно лить базу то в какую именно таблицу
avatar
* @copyrights Copyright © 2012, Андрей Г. Воронов
* Является частью плагина Opinion
* @version 1.0 от 12.10.12 14:31 — Создание файла экшена.
* * @package plugins/opinion */ class PluginOpinion_ActionProfile extends PluginOpinion_Inherit_ActionProfile { protected function RegisterEvent() { parent::RegisterEvent(); if (Config::Get('plugin.opinion.mode') == 'full' || Config::Get('plugin.opinion.mode') == 'vote-control') { $this->AddEventPreg('/^.+$/i', '/^votinginfo$/i', '/^$/i', 'EventVotingInfo'); $this->AddEventPreg('/^.+$/i', '/^votinginfo$/i', '/^(page([1-9]\d{0,5}))?$/i', 'EventVotingInfo'); } } public function EventVotingInfo() { if (!$this->CheckUserProfile()) { return parent::EventNotFound(); } $bDelete = getRequest('form_votes_list_submit_del'); if ($bDelete) { $aVoteIds = getRequest('vote_select'); $this->User_DeleteVotesByIds($this->oUserProfile->getId(), $aVoteIds); } /** Передан ли номер страницы */ $iPage = $this->GetParamEventMatch(1, 2)? $this->GetParamEventMatch(1, 2): 1; /** Получаем список голосований */ $aResult = $this->User_GetVotesByUserId($this->oUserProfile->getId(), $iPage, Config::Get('plugin.opinion.votes_per_page')); if (!empty($aResult)) { /** @var $aVotes Массив голосований */ $aVotes = $aResult['aVotes']; foreach ($aVotes as $key => $aVote) { switch ($aVote['target_type']) { case 'comment': $aVotes[$key]['url'] = '/comments/'. $aVote['target_id']; break; case 'topic': $oTopic = $this->Topic_GetTopicById($aVote['target_id']); $aVotes[$key]['url'] = $oTopic->getUrl(); break; case 'blog': $oBlog = $this->Blog_GetBlogById($aVote['target_id']); $aVotes[$key]['url'] = '/blog/'. $oBlog->getUrl(); break; case 'user': $aVotes[$key]['url'] = $this->oUserProfile->getUserWebPath(); break; } } /** Формируем постраничность */ $aPaging = $this->Viewer_MakePaging($aResult['iCount'], $iPage, Config::Get('plugin.opinion.votes_per_page'), Config::Get('pagination.pages.count'), $this->oUserProfile->getUserWebPath(). 'votinginfo'); } else { $aVotes = $aPaging = array(); } /** Загружаем переменные в шаблон */ $this->Viewer_Assign('aPaging', $aPaging); $this->Viewer_Assign('aVotes', $aVotes); $this->Viewer_AddHtmlTitle($this->Lang_Get('plugin.opinion.about_user'). ' '. $this->oUserProfile->getLogin()); /** Устанавливаем шаблон вывода */ $this->SetTemplateAction('voting_info'); } }
avatar
Попробуй заменить в самом начале файла <? на <?php. Может поможет.
avatar
в каком файле?
avatar
В том файле, который у тебя не срабатывает — ActionProfile.class.php. В самом верху файла стоит тег <?. На некоторых хостингах, где отключена поддержка коротких тегов, он может не срабатывать. Поэтому, попробуй заменить его на полный тег <?php
avatar
Сделал… вышла ошибка

Fatal error: Call to undefined method PluginAceadminpanel_ModuleUser_MapperUser::GetCurrentRating() in C:\Program Files\VertrigoServ\www\plugins\opinion\classes\modules\user\User.class.php on line 61

/** Запишем в БД данные о голосовании */
— 61 строка
avatar
Прошу прощения… в фале вот эта строка на #61

$currentRating = $this->oMapper->GetCurrentRating($user_id);
avatar
Установил на чистый LS Все работает :((( В чем может быть проблема?
avatar
В общем так…

Работает без ошибок, если отключить
(aceAdminPanel
Расширенная панель администратора для LiveStreet/ACE 2.0.325-dev )

При этом должен быть активирован synio шаблон!

По другому выдает разные ошибки. Не знаю что делать. До этого со всеми плагинами проблем небыло.
avatar
сошл на 1.0.1 с кучей плагов работает хорошо
avatar
Жаль что под 1.0.1 :( У меня дизайн под 1.0 он не подходит к последней ветке. Да и все остальное уже стоит и настроено. Доработка под 1.0 и админ панель, в дальнейшем возможна?
avatar
Интересно мнение пользователей любого живого проекта, насколько им нравится такая функция. Есть у кого-то информация?
avatar
Моим юзерам нравится. Правда, я немного настроил под себя — выводится ник юзера с фоткой, убрал места, это их раздражало, ну и так, по-мелочи доделал. Теперь они это используют и для быстрого обмена сообщениями. Поставил плюсик и пишет, типа, Пошли в кино :)
avatar
Плагин стал совместим с aceAdminPanel, спасибо участию.
avatar
… спасибо участию avadim . Свежая версия на github. Да, и aceAdminPanel также обновился.
avatar
Какой переменной можно вывести циферку места пользователя?
Например рейтинг я вывожу {$oUserCurrent->getRating()}

Как место вывести? Заранее спасибо.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.