Хак - Флеш эффекты на аватарке

2016
""
Недавно пользователь с ником Evanescence попросил переделать плагин "Флеш эффекты на Аватаре" для движка Social Enigne под Instant CMS, что соответственно и было сделано, ниже прилагаю скриншоты и описание того как устанавливать к сожалению другого способа кроме как хака не нашлось.
Функционал:
Установка флеш эффекта на аватар;
Ограничение по карме для установки эффекта;
Взимание оплаты в рейтингах за установку эффекта;
Удаление эффекта со своего аватара;
Скриншот_1
Скриншот_2
Скриншот_3
Инструкция по установке:
1. Выполнить запрос из файла install.sql в БД исправив предварительно префикс cms на тот который у вас;
2. Залить содержимое папки /components/users/effects/ из архива в аналогичную папку на сервере;
3. В файле /components/users/frontend.php после строчек:
Код PHP:
  1. $plugins = $model->getPluginsOutput($usr);
вставьте строчку:
Код PHP:
  1. $effs = $model->getEffects();
чуть ниже после строчек:
Код PHP:
  1. $smarty->assign('plugins', $plugins);
вставьте строчку:
Код PHP:
  1. $smarty->assign('effs', $effs);
4. В файле /components/users/model.php в самом низу (перед }) добавить функцию:
Код PHP:
  1. public function getEffects(){
  2. $result = $this->inDB->query("SELECT * FROM cms_effects");
  3. $items = array();
  4. while ($item = $this->inDB->fetch_assoc($result)){
  5. $items[] = $item;
  6. }
  7. return $items;
  8. }
5. В файле /components/users/includes/usercore.php в функции usrImageNOdb после строчек:
Код PHP:
  1. if ($usr_imageurl && @file_exists(PATH.'/images/users/avatars/'.$usr_imageurl)){
вставьте строчку:
Код PHP:
  1. if ($eff_ava = getUserEffect($user_id, $usr_imageurl, $small)){
  2. return $eff_ava;
  3. }
тут же ниже после закрытия функции usrImageNOdb добавить функцию:
Код PHP:
  1. function getUserEffect($user_id, $usr_imageurl, $small){
  2. $inDB = cmsDatabase::getInstance();
  3. $inCore = cmsCore::getInstance();
  4. $cfg = $inCore->loadComponentConfig('users');
  5. if ($small=='small'){
  6. $usr_imageurl = '/images/users/avatars/small/'.$usr_imageurl;
  7. $w = $h = $cfg['smallw'].'px';
  8. }else{
  9. $usr_imageurl = '/images/users/avatars/'.$usr_imageurl;
  10. $w = $cfg['medw'].'px';
  11. $h = "100%";
  12. }
  13. if ($eff_arr = $inDB->get_fields("cms_effects_chels", "to_user='{$user_id}'", "*")){
  14. return '<div id=\'ava\' style=\'background: url('.$usr_imageurl.') no-repeat center center;\' align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://pdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="lecteur" width="'.$w.'" height="'.$h.'"><param name="wmode" value="transparent"><param name="movie" value="/components/users/effects/'.$eff_arr['url'].'"><param name="allowScriptAccess" value="never"><embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/'.$eff_arr['url'].'" wmode="transparent" width="'.$w.'" height="'.$h.'"></object></div>';
  15. }
  16. }
{Не обязательно} 5.1 Кому нужно чтобы и при вызове функции usrImage выдавался аватар с флешанимацией в файле /components/users/includes/usercore.php
после строчки:
Код PHP:
  1. if ($usr['imageurl'] && @file_exists(PATH.'/images/users/avatars/'.$usr['imageurl'])){
вставить строчку:
Код PHP:
  1. if ($eff_ava = getUserEffect($user_id, $usr['imageurl'], $small)){
  2. return $eff_ava;
  3. }
6. Закинуть в папку /components/users/includes/ из аналогичного расположения в архиве файл addusreffects.php
7. В файле /templates/ВАШ_ШАБЛОН/components/com_users_profile.tpl после строчек:
Код PHP:
  1. <div class="usr_avatar">
  2. {$usr.avatar}
  3. </div>
вставьте строчки:
Код PHP:
  1. {if !$myprofile}
  2. {literal}
  3. <script>
  4. function show_eff_form(){
  5. document.getElementById('effects').style.display = document.getElementById('effects').style.display == "block" ? "none" : "block";
  6. }
  7. function establish_effect(effect_id){
  8. $.ajax({
  9. type: "POST",
  10. url: "/components/users/includes/addusreffects.php",
  11. data: "from_user={/literal}{$is_auth}{literal}&to_user={/literal}{$usr.id}{literal}&effect_id="+effect_id,
  12. success: function(msg){
  13. if (msg == 'OK'){
  14. location.reload();
  15. }else{
  16. alert(msg);
  17. }
  18. }
  19. });
  20. }
  21. </script>
  22. {/literal}
  23. <div class='func'>
  24. <a href="javascript:void(0)" onclick="show_eff_form();" >Установить/изменить эффект</a>
  25. </div>
  26. <div name="effects" id="effects" style="display: none; background-color:#cccccc;">
  27.  
  28.  
  29. {foreach item=eff from=$effs}
  30. <b>{$eff.title}</b>
  31.  
  32. <div class="avatar">
  33. <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://pdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="lecteur" width="100px" height="100px">
  34. <param name="wmode" value="transparent">
  35. <param name="movie" value="/components/users/effects/{$eff.url}">
  36. <param name="allowScriptAccess" value="never">
  37. <embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/{$eff.url}" wmode="transparent" width="100px" height="100px">
  38. </object>
  39. </div>
  40. <a href="javascript:void(0)" onclick="establish_effect({$eff.id});">Выбрать Эффект</a>
  41.  
  42.  
  43. {/foreach}
  44.  
  45.  
  46. </div>
  47. {else}
  48. {literal}
  49. <script>
  50. function delete_effect(){
  51. $.ajax({
  52. type: "POST",
  53. url: "/components/users/includes/addusreffects.php",
  54. data: "action=del_effect&user_id={/literal}{$usr.id}{literal}",
  55. success: function(msg){
  56. if (msg == 'OK'){
  57. location.reload();
  58. }else{
  59. alert(msg);
  60. }
  61. }
  62. });
  63. }
  64. </script>
  65. {/literal}
  66. <a href="javascript:void(0)" onclick="delete_effect();">Удалить эффект</a>
  67. {/if}
Кто не менял системные файлы из папки users , могут просто залить папку components в корень сайта и выполнить 1 и 7 пункт из инструкции.

Размер минимальной кармы и количество снимаемого рейтинга выставляются в файле /components/users/includes/addusreffects.php
Код PHP:
  1. $min_karma = 0; //Здесь укажите минимальное значение кармы для возможности ставить эффекты на аватары
  2. $rate_value = 0; //Здесь укажите стоимость установки эффекта в рейтингах
А вот и сам архив с хаком: Скачать
Загрузка Аватара при Регистрации (Случайный Аватар) ХАК (Бесплатно) | VideoSearch + Проверка доступности видео
Комментарии (34)
Максим Шорин 30 июля 2012 в 11:09 +3
У максисофта есть такой хак в продаже..
Максим Шорин 30 июля 2012 в 11:19 +1
И еще, не в обиду, а ради здоровой критики - нельзя сделать плагином ?
DS Soft 30 июля 2012 в 14:01 0
Ну если вы знаете событие которое привязано к запросу аватара скажите я вроде искал и не нашел, но насколько я в данный момент знаю (может когда поковыряюсь еще что мое мнение изменится) чисто плагином сделать не получиться без правки системных файлов, хотя бы для того чтобы выставить новое событие получение аватарки.
DS Soft 30 июля 2012 в 13:59 0
Дайте ссылку на его работу может кто то решит купить я лично не видел его.
Evanescence 30 июля 2012 в 11:15 0
Молодец, спасибо, долго ломал голову как сделать это для Инстант, но никак не получалась)
Дмитрий 30 июля 2012 в 11:50 0
Спасибо!
Evanescence 30 июля 2012 в 12:10 0
Незнаю почему но у меня сразу после установки показывает Удалить эффект, хотя я еще не установил, при нажатии нечего не происходить, кто нибудь установил?
vitalson9 30 июля 2012 в 12:21 0
тоже самое но это у меня в мазиле а в хроме вообще караул рамка вокруг авы стала в высоту примерно 800px а ава не изменилась. А надпись удалить эфект вообще не появляется только установить
vitalson9 30 июля 2012 в 12:22 0
да и по поводу рейтинга у меня 30 рейта ставлю 5 за ефект пишит не достаточно рейта
DS Soft 30 июля 2012 в 14:14 +1
Опечатка была в файле /components/users/includes/addusreffects.php было так:
Код PHP:
  1. $rate_count = $inDB->get_field("cms_user", "rating='{$inUser->id}'", "rating");
а нужно было так:
Код PHP:
  1. $rate_count = $inDB->get_field("cms_user", "id='{$inUser->id}'", "rating");
исправляем вручную или же качаем по новой архив перезалил.
DS Soft 30 июля 2012 в 14:03 0
ну я то вообще предполагал что эффекты пользователи будут дарить друг другу но не ставить сами себе, а проверку на то ставили эффект или нет не выставил чтобы и так не перегружать запросами в БД.
Evanescence 30 июля 2012 в 12:42 0
Нашел причину:
7. В файле /templates/ВАШ_ШАБЛОН/components/com_users_profile.tpl после строчек:
Код PHP:
  1.  
  2. <div class="usr_avatar">
  3.  
  4. {$usr.avatar}
  5.  
  6. </div>
  7.  
вставьте строчки:
Вставить код который написал DagStudent но в первом строке убрать ! будет {if $myprofile}
Evanescence 30 июля 2012 в 12:48 0
Помогите с кодом:
в файле /components/users/includes/usercore.php как сделать так чтоб код определил высоту и ширину аватара а потом передал его в com_users_profile.tpl в переменной {$width} и {$height}
если сделать так
Код PHP:
  1. <embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/{$eff.url}" wmode="transparent" width="{$width}" height="{$height} ">
эффект будет красиво смотриться
Evanescence 30 июля 2012 в 12:49 0
<embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/{$eff.url}" wmode="transparent" width="{$width}" height="{$height} ">
DS Soft 30 июля 2012 в 13:57 0
вот же в файле /components/users/includes/usercore.php получет высоту и ширину просто на моем сайте не красиво смотрелась с высотой поэтому выставил высоту 100% а ширина подгружается как в настройках, для маленькой копии ставиться и ширина и высота в этом коде:
Код PHP:
  1. function getUserEffect($user_id, $usr_imageurl, $small){
  2. $inDB = cmsDatabase::getInstance();
  3. $inCore = cmsCore::getInstance();
  4. $cfg = $inCore->loadComponentConfig('users');
  5. if ($small=='small'){
  6. $usr_imageurl = '/images/users/avatars/small/'.$usr_imageurl;
  7. $w = $h = $cfg['smallw'].'px';
  8. }else{
  9. $usr_imageurl = '/images/users/avatars/'.$usr_imageurl;
  10. $w = $cfg['medw'].'px';
  11. $h = "100%";
  12. }
  13. if ($eff_arr = $inDB->get_fields("cms_effects_chels", "to_user='{$user_id}'", "*")){
  14. return '<div id=\'ava\' style=\'background: url('.$usr_imageurl.') no-repeat center center;\' align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://pdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="lecteur" width="'.$w.'" height="'.$h.'"><param name="wmode" value="transparent"><param name="movie" value="/components/users/effects/'.$eff_arr['url'].'"><param name="allowScriptAccess" value="never"><embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/'.$eff_arr['url'].'" wmode="transparent" width="'.$w.'" height="'.$h.'"></object></div>';
  15. }
  16. }
Evanescence 30 июля 2012 в 14:17 0
Ааа всё спс я думал вывод эффекта на tpl
а как сделать так чтоб кроме аватара на странице профила, больше нигде не показал эффект а то на комментариях, на записах в стене показывает эффект
DS Soft 30 июля 2012 в 14:34 0
в файле /components/users/includes/usercore.php вместо кода:
Код PHP:
  1. function getUserEffect($user_id, $usr_imageurl, $small){
  2. $inDB = cmsDatabase::getInstance();
  3. $inCore = cmsCore::getInstance();
  4.  
  5. $cfg = $inCore->loadComponentConfig('users');
  6. if ($small=='small'){
  7.  
  8. $usr_imageurl = '/images/users/avatars/small/'.$usr_imageurl;
  9.  
  10. $w = $h = $cfg['smallw'].'px';
  11.  
  12. }else{
  13.  
  14. $usr_imageurl = '/images/users/avatars/'.$usr_imageurl;
  15.  
  16. $w = $cfg['medw'].'px';
  17.  
  18. $h = "100%";
  19.  
  20. }
  21.  
  22. if ($eff_arr = $inDB->get_fields("cms_effects_chels", "to_user='{$user_id}'", "*")){
  23. return '<div id=\'ava\' style=\'background: url('.$usr_imageurl.') no-repeat center center;\' align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://pdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="lecteur" width="'.$w.'" height="'.$h.'"><param name="wmode" value="transparent"><param name="movie" value="/components/users/effects/'.$eff_arr['url'].'"><param name="allowScriptAccess" value="never"><embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/'.$eff_arr['url'].'" wmode="transparent" width="'.$w.'" height="'.$h.'"></object></div>';
  24.  
  25. }
  26. }
вот этот:
Код PHP:
  1. function getUserEffect($user_id, $usr_imageurl, $small){
  2. if ($small != 'small'){
  3. $inDB = cmsDatabase::getInstance();
  4. $inCore = cmsCore::getInstance();
  5.  
  6. $cfg = $inCore->loadComponentConfig('users');
  7. $usr_imageurl = '/images/users/avatars/'.$usr_imageurl;
  8. $w = $cfg['medw'].'px';
  9. $h = "100%";
  10.  
  11. if ($eff_arr = $inDB->get_fields("cms_effects_chels", "to_user='{$user_id}'", "*")){
  12. return '<div id=\'ava\' style=\'background: url('.$usr_imageurl.') no-repeat center center;\' align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://pdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="lecteur" width="'.$w.'" height="'.$h.'"><param name="wmode" value="transparent"><param name="movie" value="/components/users/effects/'.$eff_arr['url'].'"><param name="allowScriptAccess" value="never"><embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/'.$eff_arr['url'].'" wmode="transparent" width="'.$w.'" height="'.$h.'"></object></div>';
  13. }
  14. }
  15. }
Camfrog 30 июля 2012 в 21:38 0
Молодец! 5+
Camfrog 30 июля 2012 в 22:35 0
""

Browser Name: Chrome Проблемы шаблоны
и тоже опера
Camfrog 30 июля 2012 в 22:37 0
Camfrog 30 июля 2012 в 22:39 0
Как исправиться Chrome и Opera?
DS Soft 31 июля 2012 в 05:50 0
Там у каждого все зависит от стилей на сайте вот я поставил к себе на сайт и нормально и в опере и в мозиле и в хроме: http://dagstudent.ru/users/dagstudentka
Evanescence 31 июля 2012 в 07:24 0
У меня тоже нормально показывает, проверил на хром мозилла и опера проблем нет
reload 31 июля 2012 в 18:20 0
У тебя на сайте по ссылке в последнем хроме аватар съехал к уровню текста "Стена пользователя"
и блок "Ссылка на эту страницу:" с тектовой ссылкой "установить эффект" ниже аватара на сантимов 10!
reload 31 июля 2012 в 18:24 0
Керя 2 августа 2012 в 08:15 0
У меня у других пользователей стоит только удалить эффект но им ничего не устанавливалось при нажатии ничего не происходит а уменя стоит установить удалить но тоже ничего не происходит как исправить
Керя 2 августа 2012 в 08:50 0
Теперь эфекты добавляются но пропал аватар т.е. фото аватара в профиле нет пустая рамка
Soul 2 августа 2012 в 16:06 0
проблемки с хаком есть. Но "лиха беда-начало"! Начало положено, а как отладить - придумаем все вместе (надеюсь...)!
Керя 3 августа 2012 в 18:52 0
В хроме только нет авы в мозиле и в осле все есть
DS Soft 4 августа 2012 в 07:44 0
Попробуйте в пункте 5 в функции:
function getUserEffect($user_id, $usr_imageurl, $small){
$inDB = cmsDatabase::getInstance();
$inCore = cmsCore::getInstance();
$cfg = $inCore->loadComponentConfig('users');
if ($small=='small'){
$usr_imageurl = '/images/users/avatars/small/'.$usr_imageurl;
$w = $h = $cfg['smallw'].'px';
}else{
$usr_imageurl = '/images/users/avatars/'.$usr_imageurl;
$w = $cfg['medw'].'px';
$h = "100%";
}
if ($eff_arr = $inDB->get_fields("cms_effects_chels", "to_user='{$user_id}'", "*")){
return '<div id="ava" style="background: url('.$usr_imageurl.') no-repeat center center;" align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://pdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="lecteur" width="'.$w.'" height="'.$h.'"><param name="wmode" value="transparent"><param name="movie" value="/components/users/effects/'.$eff_arr['url'].'"><param name="allowScriptAccess" value="never"><embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/'.$eff_arr['url'].'" wmode="transparent" width="'.$w.'" height="'.$h.'"></object></div>';
}
}
вместо $h = "100%"; прописать $h = $cfg['medh'].'px';
В некоторых случаях помогала, постараюсь в ближайщее время обновить хак, и сделать его как можно меньше хаком чтобы легче было обновляться на новые версии Instant CMS, и постараюсь также приделать вместе с флеш эффектами ставить анимации или просто картинки как в одноклассниках. Если кто знает как исправить неправильное отображение в хроме отписываемся я в css не особо силен не знаю сколько на это времени у меня уйдет.
pravednik 4 августа 2012 в 22:14 0
ерунда какаято, захожу как гость то вижу кнопку изменить или добавить эффект только не добавляет пишет что короче нужно войти в систему, а когда вхожу то только удалить эффект ссылка, жму ее и нифига sad во всех браузерах попробовал, система чистая 1.9
DS Soft 7 августа 2012 в 11:20 0
захожу как гость то вижу кнопку изменить или добавить эффект только не добавляет
сегодня завтра обновлю архив, проверку на гостя походу не выставил;
а когда вхожу то только удалить эффект ссылка, жму ее и нифига
я не предполагал уставноку эффекта самому себе а для других в профиле у них будет установить эффект, как раз отпишу оба варианта чтобы ставили для себя и ставили для других.
Роман Волков 31 июля 2013 в 21:54 0
А есть адаптация по 1.10 ?
А. МИхаилович ГОлубь 14 апреля 2014 в 18:03 +1
под 1.10.3 будет?