День добрый, в таблицу добавляется дополнительное поле для настройки компонента, добавляется данное поле для того чтобы выставлять кол-во друзей по достижению которого выдавалась бы награда.Дружище web4ik, зачем вы добавляете дополнительное поле в таблицу cms_user_autoawards, если в таблице cms_user_friends уже лежит вся инфа по друзьям?
web4ik
<?php /******************************************************************************/ // // // InstantCMS v1.10.3 // // http://instantcms.ru/ // // // // written by InstantCMS Team, 2007-2013 // // produced by InstantSoft, (www.instantsoft.ru) // // // // LICENSED BY GNU/GPL v2 // // // /******************************************************************************/ function mod_invite($module_id, $cfg){ $inUser = cmsUser::getInstance(); global $_LANG; $errors = false; $is_redirect = false; // в модуле нельзя использовать cmsCore::redirectBack(), используем костыли ;) if (!$inUser->id){ return false; } if (cmsCore::inRequest('send_invite_email')){ $is_redirect = true; $user = $inUser->id; $username = cmsCore::request('username', 'str', ''); $email = cmsCore::request('friend_email', 'email', ''); $code = $inDB->get_field('rb_user_invites', "`is_used` = '0' and `is_sended` = '0' and `owner_id`='$user'", 'code'); if (!$username && !$inUser->id){ cmsCore::addSessionMessage($_LANG['ERR_NEED_NAME'], 'error'); $errors = true; } if ($inUser->id) { $username = $inUser->nickname; } if (!$email){ cmsCore::addSessionMessage($_LANG['ERR_NEED_MAIL'], 'error'); $errors = true; } if (!$code){ $errors .= $_LANG['ERR_NO_IVITE'].'<br/>'; } if(!$errors){ if(!cmsUser::checkCsrfToken()){ cmsCore::error404(); } $letter = cmsCore::getLanguageTextFile('mail_invite'); $inDB->query("UPDATE `cms_user_invites` SET `is_sended` = '1' WHERE `code` = '$code';"); cmsCore::addSessionMessage($_LANG['INVITE_SENDED'], 'success'); } } cmsPage::initTemplate('modules', 'mod_invite')-> assign('user_id', $inUser->id)-> assign('is_redirect', $is_redirect)-> display('mod_invite.tpl'); return true; } ?>
Версия Instantcms 1.10.4
определенное количество друзей.
За основу взял инструкцию instantcms.ru/forum/thread4625.html
Но для Instantcms 1.10.4 она определенно немного устарела.
Начнем:
1) Делаем запрос в базу(добавляем поле друзей).
ALTER TABLE cms_user_autoawards ADD p_friends int(11) AFTER p_karma
admin\components\autoawards\backend.php
Находим код:
if ($opt == 'submit' || $opt == 'update'){ if (!cmsCore::validateForm()) { cmsCore::error404(); } $title = cmsCore::request('title', 'str', $_LANG['AD_AWARD']); $description = cmsCore::request('description', 'str', ''); $published = cmsCore::request('published', 'int', 0); $p_comment = cmsCore::request('p_comment', 'int', 0); $p_forum = cmsCore::request('p_forum', 'int', 0); $p_content = cmsCore::request('p_content', 'int', 0); $p_blog = cmsCore::request('p_blog', 'int', 0); $p_karma = cmsCore::request('p_karma', 'int', 0); $p_photo = cmsCore::request('p_photo', 'int', 0); $p_privphoto = cmsCore::request('p_privphoto', 'int', 0);
$p_privphoto = cmsCore::request('p_privphoto', 'int', 0);
$p_friends = cmsCore::request('p_friends', 'int', 0);
$sql = "INSERT INTO cms_user_autoawards (title, description, imageurl, p_comment, p_blog, p_forum, p_photo, p_privphoto, p_content, p_karma, published) VALUES ('$title', '$description', '$imageurl', $p_comment, $p_blog, $p_forum, $p_photo, $p_privphoto, $p_content, $p_karma, $published)"; $inDB->query($sql);
$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) VALUES ('$title', '$description', '$imageurl', $p_comment, $p_blog, $p_forum, $p_photo, $p_privphoto, $p_content, $p_karma, $p_friends, $published)"; $inDB->query($sql);
$sql = "UPDATE cms_user_autoawards SET title='$title', description='$description', imageurl='$imageurl', p_comment=$p_comment, p_blog=$p_blog, p_forum=$p_forum, p_photo=$p_photo, p_privphoto=$p_privphoto, p_content=$p_content, p_karma=$p_karma, published=$published WHERE id = '$item_id'";
$sql = "UPDATE cms_user_autoawards SET title='$title', description='$description', imageurl='$imageurl', p_comment=$p_comment, p_blog=$p_blog, p_forum=$p_forum, p_photo=$p_photo, p_privphoto=$p_privphoto, p_content=$p_content, p_karma=$p_karma, p_friends=$p_friends, published=$published WHERE id = '$item_id'";
if ($opt=='add'){ cpAddPathway($_LANG['AD_NEW_AWARD']); echo '<h3>'.$_LANG['AD_NEW_AWARD'].'</h3>'; $mod['p_comment'] = 0; $mod['p_content'] = 0; $mod['p_blog'] = 0; $mod['p_karma'] = 0; $mod['p_forum'] = 0; $mod['p_photo'] = 0; $mod['p_privphoto'] = 0;
$mod['p_privphoto'] = 0;
$mod['p_friends'] = 0;
<tr> <td><img src="/admin/components/autoawards/images/p_privphoto.gif" width="16" height="16" /></td> <td><input name="p_privphoto" type="text" id="p_input" size="5" value="<?php echo @$mod['p_privphoto'];?>" /></td> <td><?php echo $_LANG['AD_PRIVATE_PHOTOS']; ?></td> </tr>
<tr> <td><img src="/admin/components/autoawards/images/p_friends.gif" width="16" height="16" /></td> <td><input name="p_friends" type="text" id="p_input" size="5" value="<?php echo @$mod['p_friends'];?>" /></td> <td><?php echo $_LANG['AD_FRIENDS_AUTOAW']; ?></td> </tr>
/admin/components/autoawards/images/
закидываем картинку с названием p_friends.gif(иконка друзья 16*16 изображение человечка
4) В файлике по адресу
/languages/ru/admin/components/autoawards.php
добавляем код:
$_LANG['AD_FRIENDS_AUTOAW'] ='друзей на сайте';
core\classes\user.class.php
Ищем код:
if (!$awards){ return false; } $p_content = $inDB->rows_count('cms_content', "user_id='$user_id' AND published = 1"); $p_comment = $inDB->rows_count('cms_comments', "user_id='$user_id' AND published = 1"); $p_blog = $inDB->rows_count('cms_blog_posts', "user_id='$user_id' AND published = 1"); $p_forum = $inDB->rows_count('cms_forum_posts', "user_id='$user_id'"); $p_photo = $inDB->rows_count('cms_photo_files', "user_id='$user_id' AND published = 1"); $p_privphoto = $inDB->rows_count('cms_user_photos', "user_id='$user_id'"); $p_karma = $inDB->get_field('cms_user_profiles', "user_id='$user_id'", 'karma');
$p_friends = $inDB->rows_count('cms_user_friends', "(from_id = '$user_id' OR to_id = '$user_id') AND is_accepted =1");
$granted = ($award['p_content'] <= $p_content) && ($award['p_comment'] <= $p_comment) && ($award['p_blog'] <= $p_blog) && ($award['p_forum'] <= $p_forum) && ($award['p_photo'] <= $p_photo) && ($award['p_privphoto'] <= $p_privphoto) && ($award['p_karma'] <= $p_karma);
$granted = ($award['p_content'] <= $p_content) && ($award['p_comment'] <= $p_comment) && ($award['p_blog'] <= $p_blog) && ($award['p_forum'] <= $p_forum) && ($award['p_photo'] <= $p_photo) && ($award['p_privphoto'] <= $p_privphoto) && ($award['p_karma'] <= $p_karma) && ($award['p_friends'] <= $p_friends);
5) Открываем следующий файл по адресу
\components\users\frontend.php
Ищем код:
$inDB->query("UPDATE cms_user_friends SET is_accepted = 1 WHERE id = '{$is_need_accept_id}'"); //регистрируем событие 'object' => $inUser->nickname, 'user_id' => $usr['id'], 'object_url' => cmsUser::getProfileURL($inUser->login), 'object_id' => $is_need_accept_id, 'target' => '', 'target_url' => '', 'target_id' => 0, 'description' => '' ));
//проверяем и выдаем награду если нужно cmsUser::checkAwards($inUser->id); cmsUser::checkAwards($id);
/templates/_default_/components/com_users_awards_site.tpl
Находим код:
{if $aw.p_privphoto} <tr> <td><img src="/images/autoawards/p_privphoto.gif" width="16" height="16" /></td> <td> {$aw.p_privphoto} {$LANG.PHOTOS_IN_PRIVATE_ALBUM}</td> </tr> {/if}
{if $aw.p_friends} <tr>
Если Вам необходимо запретить просмотор картиночек на стороннем ресурсе, то можно прописать в .htaccess следующий код:
RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule .*\.(jpe?g|gif|png)$ http://mysite.com/images/nullimage.gif [L]
Если необходимо чтобы выдавал не заглушку а ошибку, то такой код:
RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule .*\.(jpe?g|gif|png)$ - [F]
RewriteEngine On RewriteCond %{HTTP_REFERER} ^http://(.+\.)?vk\.com/ [NC,OR] RewriteCond %{HTTP_REFERER} ^http://(.+\.)?odnoklassniki\.ru/ [NC,OR] RewriteCond %{HTTP_REFERER} ^http://(.+\.)?facebook\.com/ [NC] RewriteRule .*\.(jpe?g|gif|png)$ http://mysite.com/images/nullimage.gif [L]
(У меня не было цели запретить картинки по прямой ссылке, моя цель была скрыть весь контент сайта от гостей.
Для версии 1.10.4 правим файл index.php(находится в корне сайта)
Ищем код:
//Если сайт выключен и пользователь не администратор, //то показываем шаблон сообщения о том что сайт отключен if ($inConf->siteoff && !$inUser->is_admin && $_SERVER['REQUEST_URI']!='/login' && $_SERVER['REQUEST_URI']!='/logout' ){ cmsPage::includeTemplateFile('special/siteoff.php'); cmsCore::halt(); }
Этот хак закрывает сайт от ботов и гостей полностью, перекидывая на страницу логина
найдите файл template.php вашего шаблона и в начале файла, прямо перед строчками
вставьте следующее
Только Платон вас не поймет, думаю. Ну, если у вас посетителей и так навалом и без Яши, смело делайте ))
Подскажите пожалуйста, Как сделать так чтобы с любой страницы незарегистрированного пользователя перенаправляло на регистрацию, в том числе и с главной, чтобы не мог посмотреть контент страницы.
Заранее Вам спасибо.
Заранее буду благодарен за любую помощь.
Версия instantcms 1.10.4
Спасибо.
Собственно дать хочу возможность модераторам добавлять народ в бан-лист, но при этом чтобы им не давать никакх админских прав.
Вопрос уже по этому поводу поднимался но так и не был дальше решен:
instantcms.ru/forum/thread17118.html
4. Если при добавлении статьи пользователь (через меню пользователя) ошибается разделом, то при редактировании статьи раздел поменять на правильный нет возможности. Логично и удобно, чтобы тот кто создал статью, сам мог и изменить раздел (без участия админа).
Итак реализовал и данный пункт:
Пришлось править пару файлов в инстанте 1.10.4:
1.Правим файл:/domen/components/content/frontend.php
Ищем 339 строку, там будет код такой:
// Если редактируем статью if ($do=='editarticle'){ $pagetitle = $_LANG['EDIT_ARTICLE']; $inPage->setTitle($pagetitle); if($item['user_id'] != $inUser->id){ $user = $inDB->get_fields('cms_users', "id='{$item['user_id']}'", 'login, nickname'); $inPage->addPathway($user['nickname'], cmsUser::getProfileURL($user['login'])); } else { $inPage->addPathway($inUser->nickname, cmsUser::getProfileURL($inUser->login)); } $inPage->addPathway($_LANG['MY_ARTICLES'], '/content/my.html'); $inPage->addPathway($pagetitle);
$pubcats = $model->getPublicCats();
Ищем 26 строку, там будет такой вот код:
{if $do=='addarticle'} <tr> <td valign="top"> <strong>{$LANG.CAT}:</strong><br /> <div><span class="hinttext">{$LANG.WHERE_LOCATE_ARTICLE}</span></div> {if $is_admin} <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> {/if} </td> <td valign="top"> <select name="category_id" id="category_id" style="width:357px"> <option value="">{$LANG.SELECT_CAT}</option> <option value="{$pubcat.id}" {if $mod.category_id==$pubcat.id}selected="selected"{/if}> {if $is_billing && $pubcat.cost && $dynamic_cost} ({$LANG.BILLING_COST}: {$pubcat.cost|spellcount:$LANG.BILLING_POINT1:$LANG.BILLING_POINT2:$LANG.BILLING_POINT10}) {/if} </option> {/foreach} </select> </td> </tr> {/if}
После в этом же файле правим код далее ищем 111 строку, там будет такой вот код:
{if $do=='editarticle'} <input type="hidden" name="category_id" value="{$mod.category_id}" /> {/if}
Все должно работать.
Нюансы по теме: если будет установлен биллинг, и на каждый раздел разные ценники на добавление статей, то есть шанс, что будут публиковать сперва в дешевом разделе, а потом переносить в дорогой. Предмодерация частично решает данный вопрос. Но в целом у кого нет платного размещения статей, то этот хак вполне подойдет.
Кому лень что-то править, вот уже готовый хак для версии instant 1.10.4:
Редактируемые разделы в статьях instantcms 1.10.4
Ищем строку:3. Если пользователь добавил статью, то сообщение на модерацию получает администратор. Как сделать, что бы сообщения получал также редактор или модератор (а не только администратор) и могли опубликовать её.
cmsUser::sendMessageToGroup(USER_UPDATER, cmsUser::getAdminGroups(), $message);
cmsUser::sendMessageToGroup(USER_UPDATER, 'ID', $message);
Если групп нужно больше, которым бы приходило уведомление, то просто добавляйте еще одну строку такую же, только меняйте на актуальный ID группы.
Можно так же сделать, чтобы сообщение "Необходима модерация." отсылалось определенному пользователю:
Ищем строку:
cmsUser::sendMessageToGroup(USER_UPDATER, cmsUser::getAdminGroups(), $message);
cmsUser::sendMessage(USER_UPDATER, 'ID', $messag);
Если нужно несколько пользователей находящихся в разных группах, то просто копируйте последнюю строчку еще раз и заменяйте ID на следующего пользователя.
ID группы пользователей можно посмотреть в разделе админка->пользователи->группы пользователей(вторая колонка)
ID пользователя можно посмотреть в разделе админка->пользователи->пользователи(вторая колонка)
Сразу скажу некоторый недочет данного варианта:
Если у Вас назначены разные модераторы на разные разделы, то приходить уведомление о модерации будет всем независимо от модерируемого ими раздела.
Но меня этот вариант на момент написания вполне устроил.
4. Если при добавлении статьи пользователь (через меню пользователя) ошибается разделом, то при редактировании статьи раздел поменять на правильный нет возможности. Логично и удобно, чтобы тот кто создал статью, сам мог и изменить раздел (без участия админа).
Тут даже добавлю, что неудобство заключается и в модерации, материалы можно перекидывать из рубрики в рубрику только через админку, а через фэйс сайта вообще не реализовано, чтобы кто-то перекидывать из рубрики в рубрику мог, будь то пользователь-автор статьи, модератор или даже сам администратор.
Если найду решение обязательно отпишу, но пока что безуспешно.
Все вышеизлеженное тестировалось на версиях 1.10.3 и 1.10.4
- Предыдущая
- 1
- 2
- 3
- Показаны 31-41 из 41