W

web4ik

+29
Репутация
2
Рейтинг
#1 Награда за определенное кол-во друзей i1.10.4 12 мая 2015 в 11:52

Дружище web4ik, зачем вы добавляете дополнительное поле в таблицу cms_user_autoawards, если в таблице cms_user_friends уже лежит вся инфа по друзьям?

Странник
День добрый, в таблицу добавляется дополнительное поле для настройки компонента, добавляется данное поле для того чтобы выставлять кол-во друзей по достижению которого выдавалась бы награда.
#2 Скрыть весь контент сайта от гостей 12 мая 2015 в 08:49
Отписал в л.с.
#3 Модуль приглашений 12 мая 2015 в 04:11
Подскажите пожалуйста, где я совершил ошибку, при запросе отправка после того как нажал пригласить появляется белый экран, вот код:
  1. <?php
  2. /******************************************************************************/
  3. // //
  4. // InstantCMS v1.10.3 //
  5. // http://instantcms.ru/ //
  6. // //
  7. // written by InstantCMS Team, 2007-2013 //
  8. // produced by InstantSoft, (www.instantsoft.ru) //
  9. // //
  10. // LICENSED BY GNU/GPL v2 //
  11. // //
  12. /******************************************************************************/
  13.  
  14. function mod_invite($module_id, $cfg){
  15.  
  16. $inUser = cmsUser::getInstance();
  17.  
  18. global $_LANG;
  19.  
  20. $errors = false;
  21. $is_redirect = false; // в модуле нельзя использовать cmsCore::redirectBack(), используем костыли ;)
  22.  
  23. if (!$inUser->id){
  24. return false;
  25. }
  26.  
  27.  
  28. if (cmsCore::inRequest('send_invite_email')){
  29.  
  30. $is_redirect = true;
  31. $user = $inUser->id;
  32. $username = cmsCore::request('username', 'str', '');
  33. $email = cmsCore::request('friend_email', 'email', '');
  34. $code = $inDB->get_field('rb_user_invites', "`is_used` = '0' and `is_sended` = '0' and `owner_id`='$user'", 'code');
  35.  
  36. if (!$username && !$inUser->id){
  37. cmsCore::addSessionMessage($_LANG['ERR_NEED_NAME'], 'error'); $errors = true;
  38. }
  39. if ($inUser->id) { $username = $inUser->nickname; }
  40.  
  41. if (!$email){
  42. cmsCore::addSessionMessage($_LANG['ERR_NEED_MAIL'], 'error'); $errors = true;
  43. }
  44. if (!$code){
  45. $errors .= $_LANG['ERR_NO_IVITE'].'<br/>';
  46. }
  47.  
  48. if(!$errors){
  49.  
  50. if(!cmsUser::checkCsrfToken()){
  51. cmsCore::error404();
  52. }
  53.  
  54. $letter = cmsCore::getLanguageTextFile('mail_invite');
  55. $inDB->query("UPDATE `cms_user_invites` SET `is_sended` = '1' WHERE `code` = '$code';");
  56. $letter = str_replace('{sitename}', cmsConfig::getConfig('sitename'), $letter);
  57. $letter = str_replace('{site_url}', HOST, $letter);
  58. $letter = str_replace('{username}', $username, $letter);
  59. $letter = str_replace('{code}', $code, $letter);
  60. cmsCore::mailText($email, sprintf($_LANG['INVITE_SUBJECT'], $username), $letter);
  61.  
  62. cmsCore::addSessionMessage($_LANG['INVITE_SENDED'], 'success');
  63.  
  64. }
  65.  
  66. }
  67.  
  68. cmsPage::initTemplate('modules', 'mod_invite')->
  69. assign('user_id', $inUser->id)->
  70. assign('is_redirect', $is_redirect)->
  71. display('mod_invite.tpl');
  72.  
  73. return true;
  74.  
  75. }
  76.  
  77. ?>
Спасибо за помощь.
#1 [ЕСТЬ РЕШЕНИЕ] Проблема картинки прикрепляемой к статьям instant 1.10.4 11 мая 2015 в 23:57
Подскажите пожалуйста как сделать картинку которая крепится в статью некликабельной вообще(сейчас при клике на картинку она открывается в всплывающем окне как фотографии), интересует как для самой статьи, когда ее читаешь, так и в каталоге статей.
Версия Instantcms 1.10.4
#1 Награда за определенное кол-во друзей i1.10.4 11 мая 2015 в 23:44
Всем здравствуйте. Возможно кому-то пригодится инструкция по добавлению в компонент награды функции выдачи награды за
определенное количество друзей.
За основу взял инструкцию instantcms.ru/forum/thread4625.html
Но для Instantcms 1.10.4 она определенно немного устарела.
Начнем:
1) Делаем запрос в базу(добавляем поле друзей).
  1. ALTER TABLE cms_user_autoawards ADD p_friends int(11) AFTER p_karma
2) Открываем файл

admin\components\autoawards\backend.php

Находим код:
  1. if ($opt == 'submit' || $opt == 'update'){
  2.  
  3. if (!cmsCore::validateForm()) { cmsCore::error404(); }
  4.  
  5. $title = cmsCore::request('title', 'str', $_LANG['AD_AWARD']);
  6. $description = cmsCore::request('description', 'str', '');
  7. $published = cmsCore::request('published', 'int', 0);
  8. $imageurl = preg_replace('/[^a-zA-Z0-9_\.\-]/iu', '', cmsCore::request('imageurl', 'str', ''));
  9. $p_comment = cmsCore::request('p_comment', 'int', 0);
  10. $p_forum = cmsCore::request('p_forum', 'int', 0);
  11. $p_content = cmsCore::request('p_content', 'int', 0);
  12. $p_blog = cmsCore::request('p_blog', 'int', 0);
  13. $p_karma = cmsCore::request('p_karma', 'int', 0);
  14. $p_photo = cmsCore::request('p_photo', 'int', 0);
  15. $p_privphoto = cmsCore::request('p_privphoto', 'int', 0);
Сразу после строки
  1. $p_privphoto = cmsCore::request('p_privphoto', 'int', 0);
вставляем следующий код:
  1. $p_friends = cmsCore::request('p_friends', 'int', 0);
Ищем далее такой вот код:
  1. $sql = "INSERT INTO cms_user_autoawards (title, description, imageurl, p_comment, p_blog, p_forum, p_photo, p_privphoto, p_content, p_karma, published)
  2. VALUES ('$title', '$description', '$imageurl', $p_comment, $p_blog, $p_forum, $p_photo, $p_privphoto, $p_content, $p_karma, $published)";
  3. $inDB->query($sql);
Заменяем его на следующий:
  1. $sql = "INSERT INTO cms_user_autoawards (title, description, imageurl, p_comment, p_blog, p_forum, p_photo, p_privphoto, p_content, p_karma, p_friends, published)
  2. VALUES ('$title', '$description', '$imageurl', $p_comment, $p_blog, $p_forum, $p_photo, $p_privphoto, $p_content, $p_karma, $p_friends, $published)";
  3. $inDB->query($sql);
Далее ищем код:
  1. $sql = "UPDATE cms_user_autoawards
  2. SET title='$title',
  3. description='$description',
  4. imageurl='$imageurl',
  5. p_comment=$p_comment,
  6. p_blog=$p_blog,
  7. p_forum=$p_forum,
  8. p_photo=$p_photo,
  9. p_privphoto=$p_privphoto,
  10. p_content=$p_content,
  11. p_karma=$p_karma,
  12. published=$published
  13. WHERE id = '$item_id'";
Заменяем на код:
  1. $sql = "UPDATE cms_user_autoawards
  2. SET title='$title',
  3. description='$description',
  4. imageurl='$imageurl',
  5. p_comment=$p_comment,
  6. p_blog=$p_blog,
  7. p_forum=$p_forum,
  8. p_photo=$p_photo,
  9. p_privphoto=$p_privphoto,
  10. p_content=$p_content,
  11. p_karma=$p_karma,
  12. p_friends=$p_friends,
  13. published=$published
  14. WHERE id = '$item_id'";
Далее ищем:
  1. if ($opt=='add'){
  2. cpAddPathway($_LANG['AD_NEW_AWARD']);
  3. echo '<h3>'.$_LANG['AD_NEW_AWARD'].'</h3>';
  4. $mod['p_comment'] = 0;
  5. $mod['p_content'] = 0;
  6. $mod['p_blog'] = 0;
  7. $mod['p_karma'] = 0;
  8. $mod['p_forum'] = 0;
  9. $mod['p_photo'] = 0;
  10. $mod['p_privphoto'] = 0;
Добавляем после строки:
  1. $mod['p_privphoto'] = 0;
строку:
  1. $mod['p_friends'] = 0;
Дальше ищем код:
  1. <tr>
  2. <td><img src="/admin/components/autoawards/images/p_privphoto.gif" width="16" height="16" /></td>
  3. <td><input name="p_privphoto" type="text" id="p_input" size="5" value="<?php echo @$mod['p_privphoto'];?>" /></td>
  4. <td><?php echo $_LANG['AD_PRIVATE_PHOTOS']; ?></td>
  5. </tr>
После него добавляем:
  1. <tr>
  2. <td><img src="/admin/components/autoawards/images/p_friends.gif" width="16" height="16" /></td>
  3. <td><input name="p_friends" type="text" id="p_input" size="5" value="<?php echo @$mod['p_friends'];?>" /></td>
  4. <td><?php echo $_LANG['AD_FRIENDS_AUTOAW']; ?></td>
  5. </tr>
3) В папку находящуюся по адресу

/admin/components/autoawards/images/

закидываем картинку с названием p_friends.gif(иконка друзья 16*16 изображение человечка Иллюстрация😂)

4) В файлике по адресу

/languages/ru/admin/components/autoawards.php

добавляем код:
  1. $_LANG['AD_FRIENDS_AUTOAW'] ='друзей на сайте';
Теперь правим файл

core\classes\user.class.php

Ищем код:
  1. if (!$awards){ return false; }
  2.  
  3. $p_content = $inDB->rows_count('cms_content', "user_id='$user_id' AND published = 1");
  4. $p_comment = $inDB->rows_count('cms_comments', "user_id='$user_id' AND published = 1");
  5. $p_blog = $inDB->rows_count('cms_blog_posts', "user_id='$user_id' AND published = 1");
  6. $p_forum = $inDB->rows_count('cms_forum_posts', "user_id='$user_id'");
  7. $p_photo = $inDB->rows_count('cms_photo_files', "user_id='$user_id' AND published = 1");
  8. $p_privphoto = $inDB->rows_count('cms_user_photos', "user_id='$user_id'");
  9. $p_karma = $inDB->get_field('cms_user_profiles', "user_id='$user_id'", 'karma');
  10.  
Дописываем строку:
  1. $p_friends = $inDB->rows_count('cms_user_friends', "(from_id = '$user_id' OR to_id = '$user_id') AND is_accepted =1");
Далее ищем код:
  1. $granted = ($award['p_content'] <= $p_content) &&
  2. ($award['p_comment'] <= $p_comment) &&
  3. ($award['p_blog'] <= $p_blog) &&
  4. ($award['p_forum'] <= $p_forum) &&
  5. ($award['p_photo'] <= $p_photo) &&
  6. ($award['p_privphoto'] <= $p_privphoto) &&
  7. ($award['p_karma'] <= $p_karma);
Заменяем его на:
  1. $granted = ($award['p_content'] <= $p_content) &&
  2. ($award['p_comment'] <= $p_comment) &&
  3. ($award['p_blog'] <= $p_blog) &&
  4. ($award['p_forum'] <= $p_forum) &&
  5. ($award['p_photo'] <= $p_photo) &&
  6. ($award['p_privphoto'] <= $p_privphoto) &&
  7. ($award['p_karma'] <= $p_karma) &&
  8. ($award['p_friends'] <= $p_friends);
С этим файлом закончили.

5) Открываем следующий файл по адресу

\components\users\frontend.php

Ищем код:
  1. $inDB->query("UPDATE cms_user_friends SET is_accepted = 1 WHERE id = '{$is_need_accept_id}'");
  2. //регистрируем событие
  3. cmsActions::log('add_friend', array(
  4. 'object' => $inUser->nickname,
  5. 'user_id' => $usr['id'],
  6. 'object_url' => cmsUser::getProfileURL($inUser->login),
  7. 'object_id' => $is_need_accept_id,
  8. 'target' => '',
  9. 'target_url' => '',
  10. 'target_id' => 0,
  11. 'description' => ''
  12. ));
Сразу после него добавляем:
  1. //проверяем и выдаем награду если нужно
  2. cmsUser::checkAwards($inUser->id);
  3. cmsUser::checkAwards($id);
6) Далее открываем файл по адресу

/templates/_default_/components/com_users_awards_site.tpl

Находим код:
  1. {if $aw.p_privphoto}
  2. <tr>
  3. <td><img src="/images/autoawards/p_privphoto.gif" width="16" height="16" /></td>
  4. <td>
  5. {$aw.p_privphoto}
  6. {$LANG.PHOTOS_IN_PRIVATE_ALBUM}</td>
  7. </tr>
  8. {/if}
После добавляем код:
  1. {if $aw.p_friends}
  2. <tr>
#4 Скрыть весь контент сайта от гостей 11 мая 2015 в 23:01
Да просматриваются.
Если Вам необходимо запретить просмотор картиночек на стороннем ресурсе, то можно прописать в .htaccess следующий код:
  1. RewriteEngine On
  2. RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
  3. RewriteCond %{HTTP_REFERER} !^$
  4. RewriteRule .*\.(jpe?g|gif|png)$ http://mysite.com/images/nullimage.gif [L]
Этот метод не только запрещает прямые ссылки на изображения, но и привинчивает заглушку, которая будет отображаться на сторонних ресурсах вместо оригинальных изображений с вашего ресурса.
Если необходимо чтобы выдавал не заглушку а ошибку, то такой код:
  1. RewriteEngine On
  2. RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
  3. RewriteCond %{HTTP_REFERER} !^$
  4. RewriteRule .*\.(jpe?g|gif|png)$ - [F]
Можно так же запретить ссылки для конкретных доменов, чтобы был запрет только для определенных ресурсов:
  1. RewriteEngine On
  2. RewriteCond %{HTTP_REFERER} ^http://(.+\.)?vk\.com/ [NC,OR]
  3. RewriteCond %{HTTP_REFERER} ^http://(.+\.)?odnoklassniki\.ru/ [NC,OR]
  4. RewriteCond %{HTTP_REFERER} ^http://(.+\.)?facebook\.com/ [NC]
  5. RewriteRule .*\.(jpe?g|gif|png)$ http://mysite.com/images/nullimage.gif [L]
Но в любом случае картинки будут просматриваться гостями если они введут в браузере url по типу mysite.com/images/picture.jpg
(У меня не было цели запретить картинки по прямой ссылке, моя цель была скрыть весь контент сайта от гостей.
#5 Скрыть весь контент сайта от гостей 10 мая 2015 в 03:29
Сам спросил, сам ответил, нашел решение.
Для версии 1.10.4 правим файл index.php(находится в корне сайта)
Ищем код:
  1. //Если сайт выключен и пользователь не администратор,
  2. //то показываем шаблон сообщения о том что сайт отключен
  3. if ($inConf->siteoff &&
  4. !$inUser->is_admin &&
  5. $_SERVER['REQUEST_URI']!='/login' &&
  6. $_SERVER['REQUEST_URI']!='/logout'
  7. ){
  8. cmsPage::includeTemplateFile('special/siteoff.php');
  9. cmsCore::halt();
  10. }
После этого кода вставляем этот код:
  1. if (
  2. !$inUser->id &&
  3. substr($_SERVER['REQUEST_URI'],0,13) !=='/registration' &&
  4. $_SERVER['REQUEST_URI']!=='/login' &&
  5. $_SERVER['REQUEST_URI']!=='/passremind.html'){
  6. header('Location:/login');
  7. }
Этот хак закрывает сайт от ботов и гостей полностью, перекидывая на страницу логина
#6 Скрыть весь контент сайта от гостей 10 мая 2015 в 03:10


найдите файл template.php вашего шаблона и в начале файла, прямо перед строчками

  1.  
  2.  
  3.  
вставьте следующее
Только Платон вас не поймет, думаю. Ну, если у вас посетителей и так навалом и без Яши, смело делайте ))

Марат

Подскажите пожалуйста, Как сделать так чтобы с любой страницы незарегистрированного пользователя перенаправляло на регистрацию, в том числе и с главной, чтобы не мог посмотреть контент страницы.
Заранее Вам спасибо.
#7 Забанить 1 мая 2015 в 17:22
Подскажите пожалуйста, как можно показывать кнопку забанить пользователя(как это показано администратору) модераторам(те определенной группе пользователей, но при этом не давать им администраторские права, как реализовано это сейчас), с проверкой на администратора и отклонением добавления его в бан лист.
Заранее буду благодарен за любую помощь.
Версия instantcms 1.10.4
Спасибо.
Собственно дать хочу возможность модераторам добавлять народ в бан-лист, но при этом чтобы им не давать никакх админских прав.
Вопрос уже по этому поводу поднимался но так и не был дальше решен:
instantcms.ru/forum/thread17118.html
#8 1 мая 2015 в 16:08

4. Если при добавлении статьи пользователь (через меню пользователя) ошибается разделом, то при редактировании статьи раздел поменять на правильный нет возможности. Логично и удобно, чтобы тот кто создал статью, сам мог и изменить раздел (без участия админа).


Итак реализовал и данный пункт:
Пришлось править пару файлов в инстанте 1.10.4:
1.Правим файл:/domen/components/content/frontend.php
Ищем 339 строку, там будет код такой:
  1. // Если редактируем статью
  2. if ($do=='editarticle'){
  3.  
  4. $pagetitle = $_LANG['EDIT_ARTICLE'];
  5.  
  6. $inPage->setTitle($pagetitle);
  7. $inPage->addPathway($_LANG['USERS'], '/'.str_replace('/', '', cmsUser::PROFILE_LINK_PREFIX));
  8. if($item['user_id'] != $inUser->id){
  9. $user = $inDB->get_fields('cms_users', "id='{$item['user_id']}'", 'login, nickname');
  10. $inPage->addPathway($user['nickname'], cmsUser::getProfileURL($user['login']));
  11. } else {
  12. $inPage->addPathway($inUser->nickname, cmsUser::getProfileURL($inUser->login));
  13. }
  14. $inPage->addPathway($_LANG['MY_ARTICLES'], '/content/my.html');
  15. $inPage->addPathway($pagetitle);
  16.  
После него вставляем:
  1. $pubcats = $model->getPublicCats();
2.Правим файл /domen/templates/_default_/components
Ищем 26 строку, там будет такой вот код:
  1.  
  2. {if $do=='addarticle'}
  3. <tr>
  4. <td valign="top">
  5. <strong>{$LANG.CAT}:</strong><br />
  6. <div><span class="hinttext">{$LANG.WHERE_LOCATE_ARTICLE}</span></div>
  7. {if $is_admin}
  8. <div style="margin-top:10px"><span class="hinttext">{$LANG.FOR_ADD_ARTICLE_ON} <a href="/admin/index.php?view=tree">{$LANG.IN_CONFIG}</a> {$LANG.FOR_ADD_ARTICLE_ON_TEXT}</span></div>
  9. {/if}
  10. </td>
  11. <td valign="top">
  12. <select name="category_id" id="category_id" style="width:357px">
  13. <option value="">{$LANG.SELECT_CAT}</option>
  14. {foreach key=p item=pubcat from=$pubcats}
  15. <option value="{$pubcat.id}" {if $mod.category_id==$pubcat.id}selected="selected"{/if}>
  16. {'--'|str_repeat:$pubcat.NSLevel} {$pubcat.title}
  17. {if $is_billing && $pubcat.cost && $dynamic_cost}
  18. ({$LANG.BILLING_COST}: {$pubcat.cost|spellcount:$LANG.BILLING_POINT1:$LANG.BILLING_POINT2:$LANG.BILLING_POINT10})
  19. {/if}
  20. </option>
  21. {/foreach}
  22. </select>
  23. </td>
  24. </tr>
  25. {/if}
  26.  
Надо удалить {if $do=='addarticle'} на 26 строке и последний {/if} тоже надо удалить, он на 49 строке

После в этом же файле правим код далее ищем 111 строку, там будет такой вот код:
  1.  
  2. {if $do=='editarticle'}
  3. <input type="hidden" name="category_id" value="{$mod.category_id}" />
  4. {/if}
  5.  
Удаляем данный код.
Все должно работать.

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

Кому лень что-то править, вот уже готовый хак для версии instant 1.10.4:
Редактируемые разделы в статьях instantcms 1.10.4
#9 1 мая 2015 в 08:43

3. Если пользователь добавил статью, то сообщение на модерацию получает администратор. Как сделать, что бы сообщения получал также редактор или модератор (а не только администратор) и могли опубликовать её.

Ищем строку:
  1. cmsUser::sendMessageToGroup(USER_UPDATER, cmsUser::getAdminGroups(), $message);
И после неё вставляем:
  1. cmsUser::sendMessageToGroup(USER_UPDATER, 'ID', $message);
Где ID это номер группы пользователей, которым Вы хотите, чтобы приходило уведомление. Данный вариант подходит для тех, кто желает чтобы сообщение "Необходима модерация." приходило не только админу, но и определенной группе пользователей.
Если групп нужно больше, которым бы приходило уведомление, то просто добавляйте еще одну строку такую же, только меняйте на актуальный ID группы.

Можно так же сделать, чтобы сообщение "Необходима модерация." отсылалось определенному пользователю:
Ищем строку:
  1. cmsUser::sendMessageToGroup(USER_UPDATER, cmsUser::getAdminGroups(), $message);
И после неё вставляем:
  1. cmsUser::sendMessage(USER_UPDATER, 'ID', $messag);
Где ID это номер пользователя, которому Вы хотите, чтобы приходило уведомление.
Если нужно несколько пользователей находящихся в разных группах, то просто копируйте последнюю строчку еще раз и заменяйте ID на следующего пользователя.
ID группы пользователей можно посмотреть в разделе админка->пользователи->группы пользователей(вторая колонка)
ID пользователя можно посмотреть в разделе админка->пользователи->пользователи(вторая колонка)

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

4. Если при добавлении статьи пользователь (через меню пользователя) ошибается разделом, то при редактировании статьи раздел поменять на правильный нет возможности. Логично и удобно, чтобы тот кто создал статью, сам мог и изменить раздел (без участия админа).


Тут даже добавлю, что неудобство заключается и в модерации, материалы можно перекидывать из рубрики в рубрику только через админку, а через фэйс сайта вообще не реализовано, чтобы кто-то перекидывать из рубрики в рубрику мог, будь то пользователь-автор статьи, модератор или даже сам администратор.
Если найду решение обязательно отпишу, но пока что безуспешно.

Все вышеизлеженное тестировалось на версиях 1.10.3 и 1.10.4
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.