Плагин "Случайный аватар" v. 1.0.0

+61
2.54K
Посвящается сыну, которому завтра исполнится 3 годика.

Доброго времени суток, уважаемое сообщество!
Всех поздравляю с наступающим праздником! И по традиции новая разработка для ИнстантКМС 1.9. в качестве подарка.
Подобная разработка уже была в виде хака от DagStudent-а. Многие, наверно, установили и пользуются. Моё решение для тех, кто не любит хаки. Установили плагин, и не нужно вносить никаких изменений в файлы.
Для начала небольшое отступление. Для меня был не очень то приятный период в жизни, ну и в том, что связано с Инстантом. Как обычно и бывает у тех, кто пишет в общий доступ, в какой-то момент потерял мотивацию. Для чего это мне нужно? Сложности в реале, плюс творческий упадок сделали своё дело. Пробовал искать материальную мотивацию, были попытки взяться за платные заказы, разрабатывал планы сделать что-то платное. Тут ещё приболел приличненько, отлежался недельку, отдохнул, и в один прекрасный день проснулся с любовью к миру ). И понял, что не нужно перемешивать мух с котлетами. Работа, деньги — в реале, Инстант,php — хобби, значит только в удовольствие и в отдых. И никак по другому ). Иначе это будет не в удоволсьтвие. Слава богу, дохода в реале хватает, поэтому буду писать безвозмездно. Для чего? С детства запомнились стихи Михаила Исаковского "Вишня". Может быть, по советски наивные, но от этого не теряют своего значения. Пусть будет так!

Итак, ближе к делу. Немного о плагине.

Описание:

Плагин устанавливает случайный аватар из своей библиотеки для пользователей, которые
не установили его. Отлавливается событие 'USER_LOGOUT', соответственно установка аватара происходит
при разлогинивании пользователя. Логика такова, пользователь зарегистрировался, осмотрелся, если вдруг
не загрузил аватар, при разлогинивании происходит автоматическая установка аватара для него. При этом учиты-
вается пол пользователя (если указан). В архиве содержится небольшое количество аватарок (/images/users/avatars/rand_avatars_lib).
В данной папке найдете 3 папки: 'male'-аватары для мужчин,'female'- для женщин',unisex'- для тех, кто не указал пол. Свои аватары можете загрузить в эти папки(jpg, jpeg, gif, bmp, png).
После установки аватара пользователю отправляется уведомление личным сообщением и если подписан, то и на e-mail. В админке можно отключить уведомления плагина.

Установка плагина:

--архив закачиваем в корень сайта;
--в админке "Дополнения"-> "Установить плагины" и устанавливаем плагин "Случайный аватар";
--включаем плагин;
--если нужно, в настройках плагина отключаем отправку уведомлений(по умолчанию включено).

Ну и собственно, скачать архив.

Приятного пользования! И с наступающим праздником!
+6
Марат Марат 11 лет назад #
Ах, да! Забыл написать, тестировалось на локалхосте. Прошу протестить на unix-площадках и отписаться )
0
Patriot Patriot 11 лет назад #
Марат, спасибо за плагин! На 1.9 работает отлично!
+1
prosis prosis 11 лет назад #
Марат, мира, спокойствия и счастья твоей семье! Все будет хорошо у хороших людей! Спасибо.
0
letsgo letsgo 11 лет назад #
Спасибо Марат. Здоровья и сына с днюхой!
0
Ne OS Ne OS 11 лет назад #
СПАСИБО! Нужная весчь а то порядком надоедают одни и те же "NO AVATAR"
0
st.Puh st.Puh 11 лет назад #
Спасибо огромное,работает отлично 1.9
0
Джехутимери Джехутимери 11 лет назад #
Спасибо!
С Днем рождения сына!
+3
Soul Soul 11 лет назад #
Инстант,php - хобби, значит только в удовольствие и в отдых. И никак по другому ). Иначе это будет не в удоволсьтвие.
Согласен целиком и полностью! Деньги можно заработать и другими способами.., да и все не заработаешь :(
я сам здесь - просто чтобы "мозг не застоялся" в рутине "зарабатывания денег и решении насущных задач и проблем"...
хотя материальный стимул, тоже немаловажен - он хоть и не значителен по сравнению с потраченным временем и силами, но все-же порой, как знак - "продолжай, людям нужно то, что ты делаешь!..."
P.S. Присоединяюсь к поздравлениям! Дети - наша самая главная ценность в этой жизни! (у самого "хулиган" сынуля и "лапочка" дочка:)!!!)
0
iLoveNY iLoveNY 11 лет назад #
Спасибо! Отличный и очень нужный плагин! И сынка с днюхой smile
0
Димитриус Димитриус 11 лет назад #
Моё решение для тех, кто не любит хаки. Установили плагин, и не нужно вносить никаких изменений в файлы.

Я сам не люблю хаки... я за плагины, модули и т.д.))) но иногда всё таки приходится и хаками)
0
lezginka.ru lezginka.ru 11 лет назад #
Может быть, по советски наивные, но от этого не теряют своего значения.
одобряю!
но счет для добровольных пожертвований лучше ставить :)
0
aha aha 11 лет назад #
Спасибо.. отлично работает
0
lezginka.ru lezginka.ru 11 лет назад #
установил. кеш почистил. а автары старые остались.
что-то упустил ?
+2
Марат Марат 11 лет назад #
Плагин действует только если пользователь вошел и вышел. А у пользователей, которые не появляются на сайте, аватар меняться не будет. Подождите немного, придут новые пользователи, не захотят ставить аватар, у них загрузится.
+1
lezginka.ru lezginka.ru 11 лет назад #
Отлавливается событие 'USER_LOGOUT', соответственно установка аватара происходит при разлогинивании пользователя. Логика такова, пользователь зарегистрировался, осмотрелся, если вдруг не загрузил аватар, при разлогинивании происходит автоматическая установка аватара для него.

а можно принудительно через админку(там где не установлено) ?
так как "установка при разлогинивании" не устраивает.
+1
Димитриус Димитриус 11 лет назад #
Ты можешь сам поставить событие. Напиши когда именно надо, что бы менялся аватар. Я скажу что написать надо.
+1
reload reload 11 лет назад #
lezginka.ru:
а можно принудительно через админку(там где не установлено) ?
Dimitrius:
Ты можешь сам поставить событие. Напиши когда именно надо, что бы менялся аватар. Я скажу что написать надо.
Принудительно через админку - это наверное имелось ввиду наличие кнопочки в админке:
установить аватыры всем безликим)
+1
lezginka.ru lezginka.ru 11 лет назад #
pivua) правильно меня понял. видать знает все диалекты кавказа :))
0
Sergey Platonov Sergey Platonov 11 лет назад #
а если пользователь не нажал на кнопку выход а просто закрыл сайт, окончание сессии онлайн является логоутом или нет ?
0
SJen SJen 11 лет назад #
Sergey platonov:
окончание сессии онлайн является логоутом или нет ?
конечно, нет. Событие возникает при активном участии пользователя => клике на "Выход".
0
Sergey Platonov Sergey Platonov 11 лет назад #
ну я так и думал
а что то типо session_off нету (вместо USER_LOGOUT)? то есть у меня зарегился пользователь, профиль не заполнил, закрыл страничку браузера, соответственно станет офлайн, ему раз и аватар поставился и оповестили об этом
0
SJen SJen 11 лет назад #
я бы не стал извращаться с сессиями, а ставил аватар при втором заходе этого юзера на сайт.
а что то типо session_off нету
есть cron - разве что в кроне обрабатывать юзеров без аватара и ставить им случайный
0
Sergey Platonov Sergey Platonov 11 лет назад #
такс - а вот это уже поинтереснее - что за этот параметр отвечает не подскажите ?
0
Sergey Platonov Sergey Platonov 11 лет назад #
я имею ввиду второй заход на сайт. с кроном то я знаю что и как
0
SJen SJen 11 лет назад #
нет такого параметра, тут уже надо думать как реализовать. При USER_LOGOUT все-равно не очень красиво получается.. я сам очень редко (почти никогда) не выхожу с сайта - зачем это делать? - если только на мега серьезных сайтах, если не хочу чтобы дети случайно с моего компа туда не попали и куда-нить не кликнули.
+1
Марат Марат 11 лет назад #
Всем спасибо за поздраввления! ) На самом деле, сын - это непоседливое чудо, который был бы счастлив играть с папой 24 часа в сутки. Но, ввиду вечной занятости папы, не получает должного внимания )))
lezginka.ru:
а можно принудительно через админку(там где не установлено) ? так как "установка при разлогинивании" не устраивает
В рамках плагина не получится, у плагинов админка очень скудная. Если только делать отдельным скриптом и подключать, например, через cron.
SJen:
а ставил аватар при втором заходе этого юзера на сайт
Долго думал, куда привязать плагин. Тоже думал при входе, но всё же будет оптимальнее при выходе, ибо второй раз пользователь может и не появиться. Если при регистрации, то неизвестен пол. А при выходе есть вероятность, что пользователь укажет пол. Вероятность того, что пользователь не нажмет кнопку выход, конечно же есть. Но для этих целей, есть заглушка "nopic.jpg". Ну, хоть кто-то всё равно нажмет "выход", например я(всегда разлогиниваюсь), и попадет на крючок.
Если кому нужно, можно привязать к другим событиям. Отпишитесь куда нужно. Дам инструкцию, что нужно сделать. Или Dimitrius подскажет )
+1
Man Man 11 лет назад #
Самый оптимальный вариант - это событие, когда человек только зарегился и ушел с сайта. Вот тогда-то и нужно поставить автоматом аватар и выслать ему на почту оповещение. Здесь есть еще гарантия того, что он еще вернется на сайт, т.к. на почту ему вышлется упоминание.
Я лично когда ухожу с сайтов, то никогда не жму кнопку «выйти», тоже самое и другие юзеры. Поэтому после установки плагина, ситуация с nopic не изменилась вообще. Как были «собачки», так и остались.
0
Sergey Platonov Sergey Platonov 11 лет назад #
во во - но такого события нет в системе - если только хак делать (то есть лезть в ядро движка)
0
SJen SJen 11 лет назад #
да причем тут ядро?))
события возникают при выполнении какого-то php кода - когда юзер что-то открыл, куда-то кликнул. Загрузил что-то на сайт или запостил статью и тд. А если он просто закрыл браузер и пошел спать - какие тут могут быть события? - на такие случаи решением может быть только крон, либо проверка аватара при заходе юзера на сайт.

Марат:
Тоже думал при входе, но всё же будет оптимальнее при выходе
конечно, логичней, при выходе - но выход то мы никак не сможем отловить. Так что или крон или авторизация юзера.. я пока третьего варианта не могу придумать
0
Sergey Platonov Sergey Platonov 11 лет назад #
как вы смели заметить - события при каком то действии пользователя. если он просто закрыл браузер - пользователем ничего происходит, но есть такая штука принцип которой мне до самого конца не ясен, но он таков, когда пользователь заходит на сайт, происходит запись в таблицу он-лайн пользователей. и после того, как пользователь или закрыл браузер, либо просто не переходит по страницам, либо сделал выход, сессия его закрывается и удалятся с базы онлайн юзеров. так вот если как то отлавливать событие удаления сессии с базы онлайн пользователей - вот он выход. но такого в событиях не предусмотрено. не нашёл я в коде такого
0
Алексей Гаврилов Алексей Гаврилов 11 лет назад #
Ммм сейчас попробуем=)))
0
NastiK NastiK 11 лет назад #
Хепи берсдей ту сынишка))) Пусть все его и твои мечты сбываются)))



А ещё спасибо за плагин в следующем проекте обязательно использую)))
0
Данила Данила 11 лет назад #
На 1.8 вроде всё работает, спасибо )))
Поздравляю сына и родителей!
0
Александр Александр 11 лет назад #
Сыну желаю всего самого лучшего))) спасибо за афишу еще раз, а так думаю с плагином проблем не будет(выше пост 1.8, у меня тоже пока еще 1.8) заранее спасибо))))) еще раз всёго самого лучше))))
+1
Марат Марат 11 лет назад #
Не думал, что многие не нажимают кнопку "выход" ))) Кто ставил, понаблюдайте у себя. Меняется ли ава у новых пользователей. Если нет (не разлогиниваются), то сделаю второй вариант плагина, привязанный ко входу. Это несложно. Или кому нужно отпишитесь. Будет время, переделаю. Этот вариант останется как есть. Имеет право на существование. Пусть не у всех меняется, но вероятность есть.
Проблема в том, что если сделать при входе, то теряется весь смысл половых аватаров. Ава будет устанавливаться при первом заходе, когда пол ещё точно не указан. И будут браться только унисексовые. Можно сделать конечно, менять только через сколько то дней после регистрации(дата регистрации у нас есть). Но тоже нет вероятности, что юзер вернется.
Поэтому лучше сделать по cron, наверно. Скриптик или добавить метод в модель компонента юзер(лучше). Тут проблема, скрипт может отваливаться по таймауту. Если у всех сразу менять, то GD точно отправит в аут. Но можно по 3 штуки например менять за раз. В общем, не проблема. Лучше сделать так, имхо. К тому же есть механическая(ручная) смена аватара от Механика ))) Лучше всё же автоматом, по cron. Механическая тоже нужна, мало ли какую порнофотку там закачают )))
+1
Sergey Platonov Sergey Platonov 11 лет назад #
как вариант по крону проверять если через сутки после регистрации не сменит, то меняем пользователю аву, и уведомляем ему на почту, что "вы спустя сутки после регистрации не загрузили аватар, и мы сделали это за вас, если он вам не нравится, то можете поменять его, пройдя о ссылке..." ну и так далее
0
Славик Славик 11 лет назад #
Не знаю как у Вас, у меня получились проблемы:

во-первых - не работает модуль кто онлайн, (непоказывает кто сейчас находиться на сайте);
во-вторых - не находит страничку любого пользователя, когда заходишь к кому то, ну и к админу http://мой-сайт/users/admin так же.

Не подскажете в чём проблема, из-за этого плагина, или в чём то другом?
0
Марат Марат 11 лет назад #
Подробнее. Точно уверены, что из-за плагина? Что ещё делали перед этим? Что устанавливали?
Когда появились ошибки? Когда только установили плагин, или когда сработало событие(кто-то зашел, вышел). Ничего не ясно.
0
Славик Славик 11 лет назад #
Скорее всего не сразу, просто я установил, ну изменений я не увидел, непом меня небыло на сайте 1 день, после этого захожу - сразу заметил что некоректно работает модуль "кто онлайн" потом зашёл к пользователю в профиль, показывает ненайдена страничка, адресс странички нормальный, так же незаходит к любому пользователю и админу.
0
Славик Славик 11 лет назад #
да вот ещё, пробую зарегистрироваться пишу любой логин, а мне в ответ:

Логин "admin" уже занят!
0
Славик Славик 11 лет назад #
проблема была скорее всего не из за этого плагина, в чём проблема была смотрите на форуме
0
IRATE IRATE 11 лет назад #
1.9 - работает отлично. Огромное спасибо.
0
Alex Alex 11 лет назад #
Интересная штука. Можно попробовать привязать к дате регистрации юзера, скажем если юзер зашел по прошествии 48 часов, то дарим аватар.
0
Марат Марат 11 лет назад #
Да. Я тут подумал, лучше делать по CRON всё же... Пусть будет через 48 часов после регистрации, но нужно чтобы запускалось по крону. Если привязывать ко входу, пользователь может вообще не появиться. Поэтому самое оптимальное будет так. Создать метод в компоненте users и запускать по крону. Опять же хак получается, но можно записать в конце файла модели, добавить комментарий и не будет проблем при обновлении.
Как доберусь, сделаю. Несложно, недолго, просто совсем нет времени пока. Лето всё же )
0
Sergey Platonov Sergey Platonov 11 лет назад #
кто нить может написать как прикрутить этот плагин к входу пользователя на сайт, а не разлогиванию. изменяю USER_LOGOUT на USER_LOGIN и эффекта нет. плагин не срабатывает на вход пользователя. ps - плагин посде смены events удалял и заново устанавливал, чтоб в базе прописался другой events
0
Sergey Platonov Sergey Platonov 11 лет назад #
ах да, ещё вот что - дело скорей всего вот в этом, хотя не факт.
Код PHP:
cmsCore::callEvent('USER_LOGIN', $_SESSION['user']);
а нам надо получить id пользователя.
0
Марат Марат 11 лет назад #
Да дело в этом и есть. Для разных евентов передаются разные данные. Для логоута в плагин передается id пользователя, для логина массив. Перепишите, подставляя с массива id юзера и будет работать. Вы же разбираетесь, сами сможете сделать. Дело на 5 минут, но пока совершенно нет времени ).
0
Sergey Platonov Sergey Platonov 11 лет назад #
да вот что то туплю, не могу сообразить как выдернуть id из этого массива, если он там есть вообще. плюс у самого времени нет ничерта сидеть и разбираться - в перекурах между вопросами чем нить да займусь, не тем, чем надо )))
на логин две строки есть - и в сессию передаются

Код PHP:
            $sql = "SELECT * FROM cms_users WHERE md5(CONCAT(id, password)) = '$cookie_code' AND is_deleted=0 AND is_locked=0";
            $res = $inDB->query($sql);

            if($inDB->num_rows($res)==1){
                $userrow = $inDB->fetch_assoc($res);
                $_SESSION['user'] = self::createUser($userrow);
                cmsCore::callEvent('USER_LOGIN', $_SESSION['user']);
или
Код PHP:
		$sql    = "SELECT * 
				   FROM cms_users
				   WHERE $where_login AND $where_pass AND is_deleted = 0 AND is_locked = 0 LIMIT 1";
		$result = $inDB->query($sql);
		if($inDB->num_rows($result) != 1) { return $default_back_url; }

		$user = $inDB->fetch_assoc($result);
		$_SESSION['user'] = self::createUser($user);

		cmsCore::callEvent('USER_LOGIN', $_SESSION['user']);

0
Марат Марат 11 лет назад #
да вот что то туплю, не могу сообразить как выдернуть id из этого массива
print_r() всегда поможет узнать что да как в переменных )
А в плагине нужно заменить $item на $item['id']. Везде, кроме строки возврата return $item; . Не помню, есть ли эта строка в плагине. Для 'USER_LOGIN' её можно просто удалить, если есть.
0
Sergey Platonov Sergey Platonov 11 лет назад #
всё получилось, только надо сменить было в одном месте
точнее в двух местах поменять евент, в одном указать $item['id'], ну и я ещё условие прописал, чтоб через сутки после регистрации если пользователь залогинется - получит аватар, но спустя сутки

меняем первый евент
Код PHP:
        $this->events[]                 = 'USER_LOGIN';
второй эвент и сразу код с id
Код PHP:
    public function execute($event, $item){

        parent::execute();
        switch ($event){

            case 'USER_LOGIN': $this->addAvatar($item['id']); break;

        }

    }
а вот собственно проверка регистрации больше суток
Код PHP:
	//проверяем чтоб пользователь был зареган больше суток назад 
	$users = array();
	$users = $inDB->get_fields('cms_users', "(`id` = '{$item}') and (DATEDIFF(NOW(), regdate) > 1)", 'id');
	if (!$users['id']){ return; }
0
Олег с клещами Олег с клещами 10 лет назад #
А есть обновление для 1.10.2? Надо бы, вещь полезная.

Еще от автора

Фильтр "Вставка модуля" v 1.0.0
Приветик! Давненько что-то я ничего не писал ) Не знаю было это или не было, вчера увидел темку, решил сделать немного по-другому. Вещь то нужная.
PHP классы для работы с VK API и с API Яндекс Метрики
Доброго времени суток, коллеги! Выкладываю два класса: -для работы с API Вконтакте; -для работы с API Яндекс Метрики.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.