vsemkrot,
А если зарегистрировать нового юзера, назначить его админом прямо через phpmyadmin (поставить ему 1 в колонке is_admin) и войти под ним в админку? Тоже белое поле?
Ris
+657
Репутация
3771
Рейтинг
Raiden,
Туда, с кем совпадет пароль. Уже проверил.
Собственно, сама неуникальность ников — не очень правильное явление. На нашем сайте наш разработчик запретил этот волюнтаризьм.
Туда, с кем совпадет пароль. Уже проверил.

Собственно, сама неуникальность ников — не очень правильное явление. На нашем сайте наш разработчик запретил этот волюнтаризьм.
PIN,
Регистрация с существующим ником возможна изначально. И я тут совершенно не при чем.
По поводу двойной авторизации не понял. Задайте вопрос более развернуто.
Регистрация с существующим ником возможна изначально. И я тут совершенно не при чем.

По поводу двойной авторизации не понял. Задайте вопрос более развернуто.
PIN,
Если не проходит авторизация по нику — if(!$user) — предпринимается попытка авторизации по мылу.
Я проверял на чистом, свежеустановленном сайте. Все работает. Авторизует как по нику, так и по мылу.
Если не проходит авторизация по нику — if(!$user) — предпринимается попытка авторизации по мылу.
Я проверял на чистом, свежеустановленном сайте. Все работает. Авторизует как по нику, так и по мылу.
Возможно, некоторым пользователям не очень удобно авторизовываться по имейл/пароль. На нашем сайте некоторые юзеры вообще не помнят, с какого мыла они регистрировались и спрашивают об этом у администратора сайта. 
Поэтому сделал небольшой хак, добавляющий возможность авторизации по нику.
Делать особо ничего не надо, просто изменить public static function login в файле \system\core\user.php
Убираем проверку мыла на мыльность и меняем местами слово email на nickname:
При неудаче авторизации по нику, функция предпринимает попытку авторизации по мылу. Поэтому авторизация по email тоже остается возможной.
Если это как-то нарушает безопасность или еще что — знатокам просьба сообщить.

Поэтому сделал небольшой хак, добавляющий возможность авторизации по нику.
Делать особо ничего не надо, просто изменить public static function login в файле \system\core\user.php
Убираем проверку мыла на мыльность и меняем местами слово email на nickname:
public static function login($nickname, $password, $remember=false) { $model = cmsCore::getModel('users'); $model->filterEqual('nickname', $nickname); $model->filterFunc('password', "MD5(CONCAT(MD5('{$password}'), i.password_salt))"); $user = $model->getUser(); if(!$user) { $model->filterEqual(('email'), $nickname); $model->filterFunc('password', "MD5(CONCAT(MD5('{$password}'), i.password_salt))"); $user = $model->getUser(); } if(!$user) { } $user = cmsEventsManager::hook('user_login', $user); 'id' => $user['id'], 'groups' => $user['groups'], 'time_zone' => $user['time_zone'], 'perms' => self::getPermissions($user['groups'], $user['id']), 'is_admin' => $user['is_admin'], )); if ($remember){ $auth_token = string_random(32, $email); } 'ip' => self::getIp() )); return $user['id']; }
Если это как-то нарушает безопасность или еще что — знатокам просьба сообщить.
PIN,
Если честно, я тоже не люблю различных доработок кода не от создателя CMS. При любом обновлении именно в месте хака, как правило, возникают проблемы. Но уведомления на сайте — вещь нужная.
Матроскин интересовался по этому поводу — ему никто ничего не ответил.
Если разработчики озаботятся этим вопросом — огромный им респект!
Если честно, я тоже не люблю различных доработок кода не от создателя CMS. При любом обновлении именно в месте хака, как правило, возникают проблемы. Но уведомления на сайте — вещь нужная.
Матроскин интересовался по этому поводу — ему никто ничего не ответил.
Если разработчики озаботятся этим вопросом — огромный им респект!
Сколько тут люди не просили сделать уведомления об ответе в PM — решения так и не нашел. Поэтому пришлось допилить самому.
Итак, нам потребуется доработать всего три файла:
\system\controllers\comments\hooks\user_notify_types.php
\system\controllers\comments\frontend.php
\system\languages\ru\controllers\comments\comments.php
В файле \system\controllers\comments\hooks\user_notify_types.php просто стираем строку 'options'. Получается так:
В файле \system\languages\ru\controllers\comments\comments.php добавляем строку
Потом идем в настройки профиля на сайте и выставляем получение уведомлений об ответак на комментарии "на сайте", вот так:
Если кому-нибудь в окне уведомления недостаточно маленького крестика в углу, а нужна глобальная кнопка "Закрыть" — в файл \system\languages\ru\controllers\comments\comments.php добавляем строку:
а функцию notifyParent дополняем так:
В результате получается такое уведомление:
В пыхе не понимаю совершенно ничего, поэтому функция получилась примитивной, не содержит никакой информации и просто отправляет на ответ.
Если кто сможет добавить в окно уведомления ник ответившего и информацию на какой странице (заголовок страницы) — буду очень признателен.
Итак, нам потребуется доработать всего три файла:
\system\controllers\comments\hooks\user_notify_types.php
\system\controllers\comments\frontend.php
\system\languages\ru\controllers\comments\comments.php
В файле \system\controllers\comments\hooks\user_notify_types.php просто стираем строку 'options'. Получается так:
В файле \system\controllers\comments\frontend.php изменяем функцию notifyParent.
public function notifyParent($comment, $parent_comment){ if ($comment['user_id'] && ($comment['user_id'] == $parent_comment['user_id'])) { return; } $messenger = cmsCore::getController('messages'); $page_url = href_to($comment['target_url']) . "#comment_{$comment['id']}"; 'title' => LANG_SHOW, 'href' => href_to( $page_url ) ),)); if (!$is_guest_parent){ $messenger->addRecipient($parent_comment['user_id']); $messenger->sendNoticePM($notice,'comments_reply'); } if ($is_guest_parent){ $letter_data['nickname'] = $parent_comment['author_name']; $messenger->sendEmail($to, $letter, $notice); } }
В результате приходят вот такие уведомления:
__________________________________
Если кому-нибудь в окне уведомления недостаточно маленького крестика в углу, а нужна глобальная кнопка "Закрыть" — в файл \system\languages\ru\controllers\comments\comments.php добавляем строку:
public function notifyParent($comment, $parent_comment){ if ($comment['user_id'] && ($comment['user_id'] == $parent_comment['user_id'])) { return; } $messenger = cmsCore::getController('messages'); $page_url = href_to($comment['target_url']) . "#comment_{$comment['id']}"; 'title' => LANG_SHOW, 'href' => href_to( $page_url ) ), 'title' => LANG_TRACK_STOP, 'controller' => $this->name, 'action' => 'track_stop', )); if (!$is_guest_parent){ $messenger->addRecipient($parent_comment['user_id']); $messenger->sendNoticePM($notice,'comments_reply'); } if ($is_guest_parent){ $letter_data['nickname'] = $parent_comment['author_name']; $messenger->sendEmail($to, $letter, $notice); } }
В пыхе не понимаю совершенно ничего, поэтому функция получилась примитивной, не содержит никакой информации и просто отправляет на ответ.
Если кто сможет добавить в окно уведомления ник ответившего и информацию на какой странице (заголовок страницы) — буду очень признателен.
Такое чуйство, что надо в админке включить дебаг (даже на продакшене) и хотя бы час помониторить что оно там пишет.
Результаты сохранить и проанализировать.
Результаты сохранить и проанализировать.
Rossoman,
Спасибо за совет, но боюсь при моем знании пехапе я пока не готов к реализации данного метода.
Пока попробую изучить, что написали умные люди в файле components/comments/model.php
Попробую сделать по аналогии.
По крайней мере в таблице cms_comments в столбце "рейтинг" ничего через запятую нет, А однажды оценивший комментарий пользователь повторно голосовалки не видит.
Спасибо за совет, но боюсь при моем знании пехапе я пока не готов к реализации данного метода.
Пока попробую изучить, что написали умные люди в файле components/comments/model.php
public function getComments($only_published=true, $is_tree=false, $from_module = false) { $inUser = cmsUser::getInstance(); global $_LANG; $published = $only_published ? 'c.published = 1' : '1=1'; $sql = "SELECT c.*, IFNULL(u.nickname, 0) as nickname, IFNULL(u.login, 0) as login, IFNULL(u.is_deleted, 0) as is_deleted, IFNULL(p.imageurl, 0) as imageurl, IFNULL(p.gender, 0) as gender FROM cms_comments c LEFT JOIN cms_users u ON u.id = c.user_id LEFT JOIN cms_user_profiles p ON p.user_id = u.id WHERE {$published} {$this->inDB->where} {$this->inDB->group_by} {$this->inDB->order_by}\n"; if ($this->inDB->limit){ $sql .= "LIMIT {$this->inDB->limit}"; } $result = $this->inDB->query($sql); $this->inDB->resetConditions(); while($comment = $this->inDB->fetch_assoc($result)){ $comment['level'] = 0; $comment['is_editable'] = $this->isEditable($comment['pubdate']); $comment['fpubdate'] = cmsCore::dateFormat($comment['pubdate'], true, true); if ($comment['guestname']){ $comment['author'] = $comment['guestname']; $comment['is_profile'] = false; } else { $comment['author']['nickname'] = $comment['nickname']; $comment['author']['login'] = $comment['login']; $comment['is_profile'] = true; $comment['user_image'] = cmsUser::getUserAvatarUrl($comment['user_id'], 'small', $comment['imageurl'], $comment['is_deleted']); $comment['ip'] = ($this->config['cmm_ip'] == 2 && $comment['ip']) ? $comment['ip'] : ''; } switch ($comment['gender']){ case 'm': $comment['gender'] = $_LANG['COMMENTS_MALE']; break; case 'f': $comment['gender'] = $_LANG['COMMENTS_FEMALE']; break; default: $comment['gender'] = $_LANG['COMMENTS_GENDER']; } $comment['show'] = (!$this->config['min_karma'] || $comment['rating'] >= $this->config['min_karma_show']) || cmsUser::userIsAdmin($comment['user_id']); $comment['is_my'] = ($inUser->id == $comment['user_id']); if ($inUser->id){ $comment['is_voted'] = $comment['is_my'] ? true : cmsUser::isRateUser('comment', $inUser->id, $comment['id']); } else { $comment['is_voted'] = true; } $comments[] = $comment; } if($is_tree){ $comments = $this->buildTree(0, 0, $comments); } return $from_module ? cmsCore::callEvent('GET_COMMENTS_MODULE', $comments) : cmsCore::callEvent('GET_COMMENTS', $comments); }
По крайней мере в таблице cms_comments в столбце "рейтинг" ничего через запятую нет, А однажды оценивший комментарий пользователь повторно голосовалки не видит.
Rossoman,
Сделать еще одно поле в таблице cms_faq_quests?
Но за каждый вопрос голосуют десятки юзеров. И их через запятую в одно поле?
Голосование за комментарии в точности такое же. Как там различаются проголосовавшие юзеры? В таблице cms_comments никакого дополнительного поля нет.
Сделать еще одно поле в таблице cms_faq_quests?
Но за каждый вопрос голосуют десятки юзеров. И их через запятую в одно поле?
Голосование за комментарии в точности такое же. Как там различаются проголосовавшие юзеры? В таблице cms_comments никакого дополнительного поля нет.
Также, как и юзеры проголосовавшие за комментарии.Скажите, каким образом у Вас запоминаются в базе юзеры которые проголосовали? Как называется столбец с проголосовавшими юзерами?
В Таблице cms_faq_quests добавлен столбец rating. В этом столбце указывается рейтинг вопроса в соотношении к id вопроса. user_id там не учитывается никак.
Но, в таблице cms_ratings голоса учитываются.
Нужно просто изъять соответствие item_id и user_id из таблицы cms_ratings и в случае совпадения не показывать юзеру голосовалку.
В комментариях это как-то же работает.
Причем видно в каких файлах производится выборка из cms_ratings
И, что интересно в форумах нигде выборка из cms_ratings не используется, хотя там тоже есть голосование за посты!
Следовательно, различение голосовавших от неголосовавших происходит где-то в файле \core\lib_karma.php
Вопрос, как эти данные оттуда выцарапать?
Я не написал компонент, а создал новый компонент из компонента faq. Тупо переименовал все переменные из faq в anec. И это всё работает, как ни странно. То есть вместо вопросов теперь можно размещать шутки\анекдоты\афоризмы\истории и голосовать за это по десятибалльной (да хоть сколькоугоднобалльной) шкале. Голосовалка тупо взята из comments и дополнена. Единственно, что не работает — различение голосовавших юзеров от неголосовавших.И как вы вообще написали компонент, если не можете вытащить значение из базы?
В таблицу cms_faq_quests был тупо добавлен столбец rating. А в таблицу cms_rating_targets тупо добавлен столбец quests.Не зная структуры базы, никто вам не поможет.
Еще раз переосмыслил всё сказанное.У вас проблема заключается в написании кода? Вам нужно предоставить готовое решение, то есть написать код?
На самом деле, мне нужно просто разъяснить, как различаются проголосовавшие и неголосовавшие юзеры в компонентах comments и forum.