Редактирование аватаров пользователей Администратором

2707
После установки Instant CMS начал знакомство с функционалом системы. Был приятно удивлен тем, что админ не может изменять аватар пользователя. А вдруг кто то загрузит себе красивую похабную картинку с порно звездой? И че делать, лезть в базу что бы сменить ее на котенка?

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

Итак, в users/frontend.php в условии if ($do=='avatar')

находим

Код PHP:
if (!$inUser->id || ($inUser->id && $inUser->id != $id)){ cmsCore::error404(); }
заменяем на

Код PHP:
if (!$inUser->id || ($inUser->id && $inUser->id != $id  && !$inUser->is_admin)){ cmsCore::error404(); }
Добавление && !$inUser->is_admin к параметрам условия if исключает админа из числа пользователей для которых выдается страница 404 ошибки в случае если предпринимается попытка отредактировать чужой аватар и разрешает дальнейшее выполнение скрипта.

в ваша тема оформления/components/com_user_profile.tpl

находим

Код PHP:
 
                            {if $is_admin && !$myprofile}
                            <tr>
                                <td><img src="/templates/_default_/images/icons/profile/edit.png" /></td>
                                <td><a href="/users/{$usr.id}/editprofile.html" title="{$LANG.CONFIG_PROFILE}">{$LANG.CONFIG_PROFILE}</a></td>
                            </tr>
                            {/if}


заменяем на

Код PHP:
                            {if $is_admin && !$myprofile}
                            <tr>
                                <td><img src="/templates/_default_/images/icons/profile/edit.png" /></td>
                                <td><a href="/users/{$usr.id}/editprofile.html" title="{$LANG.CONFIG_PROFILE}">{$LANG.CONFIG_PROFILE}</a></td>
                            </tr>
                            <tr>
                                <td><img src="/templates/_default_/images/icons/profile/avatar.png" /></td>
                                <td><a href="/users/{$usr.id}/avatar.html" title="{$LANG.SET_AVATAR}">{$LANG.SET_AVATAR}</a></td>
                            </tr>
                            {/if}

Данное изменение в шаблоне формирует, для админа, в профиле пользователя ссылку на изменение аватара пользователя.


редактируем Таблицу cms_actions базы данных.

В поле message изменяем данные изменяет аватар на изменяет аватар %s|
или выполняем sql запрос к таблице UPDATE `имя вашей БД`.`cms_actions` SET `message` = 'изменяет аватар %s|' WHERE `cms_actions`.`id` =19 LIMIT 1 ;

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

в файле users/frontend.php

заменить

Код PHP:
			cmsActions::log('add_avatar', array(
				  'object' => '',
				  'object_url' => '',
				  'object_id' => $id,
				  'target' => '',
				  'target_url' => '',
				  'description' => '<a href="'.cmsUser::getProfileURL($usr['login']).'" class="act_usr_ava">
									   <img border="0" src="/images/users/avatars/small/'.$filename.'">
									</a>'
			));


на


Код PHP:
								if ($id != $inUser->id && $inUser->is_admin){
									//регистрируем событие
									cmsActions::log('add_avatar', array(
											'object' => $usr['nickname'],
											'object_url' => cmsUser::getProfileURL($usr['login']),
											'object_id' => $id,
											'target' => '',
											'target_url' => '',
											'description' => '<a href="'.cmsUser::getProfileURL($usr['login']).'" class="act_usr_ava">
															   <img border="0" src="/images/users/avatars/small/'.$filename.'">
															</a>'
									));
								} else {
									cmsActions::log('add_avatar', array(
											'object' => '',
											'object_url' => '',
											'object_id' => $id,
											'target' => '',
											'target_url' => '',
											'description' => '<a href="'.cmsUser::getProfileURL($usr['login']).'" class="act_usr_ava">
															   <img border="0" src="/images/users/avatars/small/'.$filename.'">
															</a>'
									));
								}


Как справедливо заметили

xxuuu:

Админ мужчина и все его знают glasses
Попробовал у юзера сменить - в ленте вывело что я (админ) изменил аватар)
Админ мужчина и все его знают в ленте выводится надпись Админ изменил аватар и женская фотка crazy
в теме Админ не может изменять аватар пользователя

Последнее изменение контроллера как раз исправляет данный недостаток. Сделано по принципу вывода сообщений в ленте о добавлении записей на стену пользователей. Сообщения об изменении аватара пользователями остаются неизменными, а при редактировании аватара пользователя админом, к сообщению добавляется ссылка на профиль того пользователя чей аватар был изменен.




Вот и все. Админ теперь может менять аватары других юзверей пользователей. Проверено на Василии и Федоре.

p.s. как насобираю кармы продублирую в блоге.

p.p.s. Спасибо ВСЕМ пользователям сообщества Instant CMS принявшим участие в обсуждении, тестировании и критике данного хака в теме на форуме, и своими голосами поддержавшими размещение данного хака в блоге.
Автоматическая подстройка высоты поля ввода для формы быстрого ответа в форуме.
Комментарии (41)
SJen 11 июня 2012 в 16:44 +5
А вдруг кто то загрузит себе красивую похабную картинку с порно звездой? И че делать, лезть в базу что бы сменить ее на котенка?

тут бы еще нужен механизм (кому же еще писать про "механизм" как ни механику) штрафов что-ли - то есть сменить аву на котенка и запретить юзеру менять ее, скажем, в течение недели. Чтоб не баловался больше с порно "звездами". А иначе никто ведь не запретит пользователю поменять опять на что угодно (если, конечно, у админа нет желания его заблокировать)
Sergey Platonov 11 июня 2012 в 16:52 0
Я бы сделал так, прикрутил бы смену аватара к карме. именно смену - загрузить первый аватар можно - точнее нужно любому, а сменить либо за карму, либо если наберёт определённую
Mr.Andreius 11 июня 2012 в 18:23 +1
даи билинг прикрутить несложно
вот только знакомство с инстантом я веду на 1.9.1 utf8 под php 5.3 а как известно премиум компоненты еще не поддерживают ни того ни другого. Да и не покупал я еще билинг для себя. Ттак что с билингом вопрос отложен до лучших времен. А с кармой, с кармой можно подумать... (я еще не добрался до изучения механизма ее работы)
Mr.Andreius 11 июня 2012 в 16:52 +1
SJen, справедливое замечание. Вот только с модерированием у инстанта беда. То что реализовано сейчас - подходит под модель модерации "дикий запад", т.е. система кнута и пряника отсутствует напрочь. Вписать условия непосредственно в контроллер users запрещающие редактирование аватары отличное предложение.

// TODO добавить ограничение пользователю после смены его аватары админом
st.Puh 11 июня 2012 в 17:57 +1
Работает супер, нужная вещь, спасибо.
Soul 11 июня 2012 в 18:07 +2
p.s. как насобираю кармы продублирую в блоге.
Мир не без добрых людей :)

Хак полезный, плюсую и здесь!
Mr.Andreius 11 июня 2012 в 18:24 +1
st.Puh:
Мир не без добрых людей :)
спасибо.
yrenzii 11 июня 2012 в 21:16 +1
Общение в интернете тем и привлекает людей, что можно высказаться инкогнито, поставить себе любую аватарку, Вы же себе Бина повесили, а может то-же кому-то не нравится, если допустим админу не нравится Ваш аватар, или аватар противоречит правилам сайта - присылайте предупреждение, смени мол, иначе бан или удаление, а так, допустим, без моего ведома сменили аватар, редактировали мой профиль, да я на этот сайт больше не приду, хоть и говорят, типа админ, он как хирург, ему все можно, но как есть крылатое выражение: А судьи кто???
SJen 11 июня 2012 в 21:40 0
вы путаете свободу слова и нормы приличия. Конечно, каждый в интернете волен писать что угодно и ставить аватарки какие нравится - но в то же время каждый должен соблюдать определенные правила - нормы приличия. Смена аватара админом - это крайняя мера, в том случае если кто-то вдруг забудет, что он не один будет ее видеть. Это мера для защиты других посетителей.

Но соглашусь, если админ будет активно вмешиваться в жизнь посетителей (редактируя профили), то это вызовет негатив, надо знать меру.
Mr.Andreius 11 июня 2012 в 22:16 -1
Уважаемый, а где, в каком сообщении я призываю к смене аватара без ведома или предупредительного сообщения беседы с пользователем? Я лишь даю админу удобный инструмент управления аватарами. А как им воспользоваться... Тут уж тараканы в голове у каждого своего цвета траву курят.

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

Аватара. Аватара - этот тот кусочек изображения, который отражает вашу сущность, настроение и д.р.Ограничена размером 100*100 пикс. Уважайте читателей форума - не выкладывайте изображения откровенно похабного содержания, которые могут оскорбить кого-либо.

6. Ограничения по использованию аватар.
6.1 Запрещается использовать фотографии реальных личностей форума для аватары без их согласия.
6.2 Запрещается использовать фотографии либо изображения известных личностей или политиков.
6.3 Запрещается использовать на аватаре рекламные ссылки и скрытую рекламу.
6.4 Запрещается использовать на аватаре порнографию, интимные части тела, сексуальные извращения.
6.5 Запрещается использовать на аватаре изображение наркотических средств, призывы к насилию, нарушению законодательства в любых проявлениях.
6.6 Запрещается использовать аватары размером более 50 кБ

незнание правил не освобождает от ответственности

yrenzii:
Вы же себе Бина повесили, а может то-же кому-то не нравится, если допустим админу не нравится Ваш аватар, или аватар противоречит правилам сайта

Мой аватар отображает мой внутренний мир, царящий во мне в данный момент. В данный момент он не нарушает правил данного сайта. На мой аватар не поступали жалобы администрации от других пользователей о том, что он их оскорбляет (!!??!!). Так же и администрация не обращалась ко мне с требованием смены аватара. Знает ли Мистер Бин что я использую одну из его гримасс ? Не знаю. Что он скажет по этому поводу, если узнает ? а х.з. ....
letsgo 12 июня 2012 в 02:28 -3
Зачем в ленте активности то писать сообщение о том, что админ сменил Васе аватар, вот это нелогично. Остальное все требует сказать спасибо!
Mr.Andreius 12 июня 2012 в 13:11 0
letsgo, да как то писало же что пользователь меняет аватар, а когда админ менял аватар кому то другому, тоже писало, вот и был сделан удобочитаемый вывод надписи.
letsgo 12 июня 2012 в 13:30 -3
Логика сообщать всем, что админ сменил Васе аватар - какая? В целом конечно главное это возможность менять. Выводить об этом на весь сайт сообщение лишнее.
Mr.Andreius 12 июня 2012 в 14:05 -1
как костыль ------- т.е. в живую не протестировано!!!

что бы не выводилось

Код PHP:




if ($id != $inUser->id && $inUser->is_admin){
} else {
	cmsActions::log('add_avatar', array(
			'object' => '',
			'object_url' => '',
			'object_id' => $id,
			'target' => '',
			'target_url' => '',
			'description' => '<a href="'.cmsUser::getProfileURL($usr['login']).'" class="act_usr_ava">
							   <img border="0" src="/images/users/avatars/small/'.$filename.'">
							</a>'
	));
}



первый блок условия оставить пустым, тогда если админ в лог ничего писаться не будет а если пользователь пойдет регистрация события. 

[b]По хорошему этот кусок надо переписать[/b], но как указал выше - это быстрый костыль, для тех кому не нужен вывод записи о смене аватара админом пользователю. 






Модератор Реальности 5 сентября 2013 в 02:53 0

Это сбивает настройки выходит ошибка фатальная

st.Puh 12 июня 2012 в 09:14 +2
В таком случии давайте ещо засудим и Плагин "Случайный аватар" v. 1.0.0, ведь и тут мы вторгаемса, может чел захотел быть без авки а мы ему ее впихнули, тоже и куча плогинов с напоминаниям о сайте,ещо почему после реги на сайте уже стоит подписка на личные сообщения на е-меил если пользователь не давал такого согласия,и ещо много чего.Так пол функционала движка надо будет выкинуть если судить по вашему.
WALTERZ 12 июня 2012 в 09:50 0
Что за глупости пошли в бой? Моя душа отражает войну и насилие в городе над детьми и женщинами...пойду всех убивать и пытать.

Если человек деградант и поставил на аватар пользователя голых проституток на всеобщее обозрение (в том числе и детям) или изображения пропагандирующие нацистскую идеологию...да и вообще, что угодно. То что тогда? Администратор сайта позволит заражать идиотизмом всех остальных?
Это очень глупо. Естественно "человек-свобода" -это хорошо, но порой это не человек вовсе.
yrenzii 12 июня 2012 в 21:18 -1
Нормальный чел себе чичолину не повесит, а если какое чудо появилось - удалить, и всех делов, а сопли ему вытирать, аватарку менять и т.д - типа делов меньше нету...
Андрей 13 июля 2012 в 09:47 -1
абсолютно нормальный модуль, уменьшающий головную боль админу.
изменение авы подразумевает и ее удаление, а тут предоставлен мезанизм с минимальными движуниями для этих целей.

а уж резать скальпелем или вытирать сопли, пусть каждый админ для себя сам решает!
vitalson9 21 июля 2012 в 12:09 -1
Попытке изменить аву пользователю пишит
<<Доступ запрещен
Необходима авторизация в качестве владельца страницы.>>
Mr.Andreius 21 июля 2012 в 16:08 -1
какая версия instanta ?
все ли изменения внесены?
vitalson9 21 июля 2012 в 18:29 -1
версия 1.9 всё ввел как тут указано
Mr.Andreius 21 июля 2012 в 20:22 -1
хм...

надо подумать ....
Danechka 2 августа 2012 в 16:45 -1
День добрый, подскажите в чем может быть проблема? Делал все как и инструкции написано, но строчки различаются, я по не знанию пытался сделать по аналогии так и так и всяко, но доступ закрыт "необходима авторизация в качестве владельца страницы"

запоролся в самом начале получается, там строка
Код PHP:

if (!$inUser->id || ($inUser->id && $inUser->id != $id)){ cmsCore::error404(); }

у меня
Код PHP:

if (usrCheckAuth() && $inUser->id == $id){

$usr = $model->getUserShort($id);
if (!$usr) { cmsCore::error404(); }
Patriot 5 октября 2012 в 13:56 +1
Спасибо mexanik!
iron_cam 27 октября 2012 в 03:55 0
У меня версия 1.8. Была такая же проблема как и у Дашечки.
Строчка из первого изменения, должна выглядеть так:
Код PHP:
  1. if (usrCheckAuth() && $inUser->id==$id || $inUser->id==1 )
  2. {$usr = $model->getUserShort($id);
  3. if (!$usr) { cmsCore::error404(); }
И всё отлично.
iron_cam 27 октября 2012 в 03:56 -1
Это если у админа id 1.
Если админов несколько, то добавляем соответственно в первую строчку, до закрытой скобки:
Код PHP:
  1. || $inUser->id==xxx
где xxx - id админа(ов).
Mr.Andreius 27 октября 2012 в 09:52 -1
полезное замечание
Patriot 18 января 2013 в 23:35 -1
Прикрутить к 1.10.1 возможно?
Mr.Andreius 19 января 2013 в 10:20 -1
из за lack of free time пока не смотрел что да как будет с/в 1.10.1
Митяй 2 апреля 2013 в 17:04 -1
1/10/1 Смена авы у пользователя работает, но при этом ава админа слетает. В чем проблема?
Константин Г. 5 апреля 2013 в 23:03 -4
У меня тоже слетает. Как раз щас менял и слетает своя...
Константин Г. 26 мая 2013 в 14:19 -5
Автор проекта,почему в версии 1.10.1 слетает аватарка админа который меняет пользователю?
Скела 5 июля 2013 в 02:54 -1
аналогично - аватар админа улетает
Константин Г. 5 июля 2013 в 19:20 -6
Автор забил.
Модератор Реальности 28 августа 2013 в 16:16 0

Автор или кто то занимался этим еще ответ можно узнать?

Pasha 28 августа 2013 в 17:23 0

Да

Константин Г. 3 сентября 2013 в 20:17 -5
Автор пришли смайлик
Модератор Реальности 5 сентября 2013 в 02:50 +2

Не пойму неужели трудно ответить

Модератор Реальности 24 апреля 2014 в 02:14 +2
Автор проекта,почему в версии 1.10.1 и на 1.10.3 слетает аватарка админа который меняет пользователю?
kssemenov 2 апреля 2017 в 11:05 0
Для версии один 1.10.7 не корректно отражались пункты Настройка профиля и Изменить аватар в профиле. Поэтом вместо того что написано в шапке на шаге 2 делаем:

в ваша тема оформления/components/com_user_profile.tpl

находим

Код PHP:
  1. {if $is_admin && !$myprofile}
  2. <tr>
  3. <td><img src="/templates/_default_/images/icons/profile/edit.png" /></td>
  4. <td><a href="/users/{$usr.id}/editprofile.html" title="{$LANG.CONFIG_PROFILE}">{$LANG.CONFIG_PROFILE}</a></td>
  5. </tr>
  6. {/if}
  7.  
заменяем на
Код PHP:
  1. {if $is_admin && !$myprofile}
  2. <a class="list-group-item" href="/users/{$usr.id}/editprofile.html" title="{$LANG.CONFIG_PROFILE}">{$LANG.CONFIG_PROFILE}</a>
  3. <a class="list-group-item" href="/users/{$usr.id}/avatar.html" title="{$LANG.SET_AVATAR}">{$LANG.SET_AVATAR}</a>
  4. {/if}