Вы не зашли.
Пропала у меня форма ввода, из дополнительного осталось только "Установить другое время?". Плагин tags включён, а теги теперь вводить некуда.:(
Всегда прописывал теги для перелинковки посредством плагина similar (при публикации: "Дополнительно" - Список тегов: указывается через запятую), после обновления до последних ночных куда прописывать теперь?
Плагин очень нужный, но... Отработал несколько дней и появилось это: "Плагин antispam запретил добавление комментария по причине: Akismet key is invalid! " По новой заказывал API-ключ на старые данные, пришел тот же. Устанавливал ключ с плагином на несколько сайтов, может причина в этом. Что делать?
http://twitter.com/share?text=%title%+/+%content%&url=%link%
"|" нужно заменить на слэш "/"
Так работает, может кому пригодится.
Ребята, не работает ссылка на Твиттер в плагине social. Вид ссылки: http://twitter.com/share?text=%title%+|+%content%&url=%link% Раньше работала, как правильно сейчас прописать?
Тоже выход, благодарю
Ребята, помогите кто-нибудь.
Как сделать, чтобы тег [hide][/hide] на автомате вставлялся на все загруженные файлы.
Здесь видимо:
function userblocks($content){
global $config, $lang, $userROW;
if (!$config['blocks_for_reg']) return $content;
return preg_replace("#\[hide\]\s*(.*?)\s*\[/hide\]#is", is_array($userROW)?"$1":str_replace("{text}", $lang['not_logged'], $lang['not_logged_html']), $content);
}
ROZARD, жаль. Хороший плагин, все работает, кроме этой функции (версия 0.9.3 - Fix01)
Не работает переключение "Морда" - "Везде", нужно только на морде, показывает везде.
Ребята, а как с безопасностью в версии 0.9.2? Вот, 0.9.3 - Fix01 обновил, но несколько сайтов работают на 9.2. Код местами изменен, боюсь больших проблем при обновлении, да и не помню уже всех изменений. Пользователям на тех сайтах разрешено только комментирование и регистрация.
Проблему решил перезалив папку engine с релиза 0.9.3 - Fix01, заменил все файлы, кроме измененных (прикручена капча и тина), все заработало. Видимо что-то начудил при работе с SVN.
Виталий, я несколько раз проверил. Заменяю news.php на старый - работает, новый - не работает. Скачал даже по новой, мало ли что. Прикручен редактор Тина, может в этом дело. Я не программист, опасно оставлять старую версию файла?
Ладно, поставлю вопрос иначе:
Что именно было изменено в файле news.php, самое главное, насколько эти изменения важны в плане безопасности? Редактировать новости нужно, но и дырявым движок оставлять тоже не вариант. При замене news.php из патча на старый все работает.
Версия SVN880, после заливки файлов Fix01, пропал раздел админки "Редактировать". Ссылка такого вида /engine/admin.php?mod=news, редактирование не открывается, просто пусто. До обновления все работало отлично.
Благодарю, кто откликнулся. Дело было в файле .htaccess шаблона, сразу просто не сообразил на него взглянуть.
Не в картинках дело, css просто не подключается. Ведь все верно прописано, при переносе обратно в папку работает. Забил бы на это, но интересно просто, в чем загвозка может быть.
Пару часов ломаю голову, не могу понять в чем дело.
Вынес таблицу стилей из каталога в корень шаблона.
Пути:
Был .../templates/foto/style/styles.css, подключение <link href="{tpl_url}/style/styles.css" rel="stylesheet" type="text/css" media="screen" /> - все работает
Сейчас /templates/foto/styles.css, подключение <link href="{tpl_url}/styles.css" rel="stylesheet" type="text/css" media="screen" /> -нихрена не работает
Ребята, подскажите в чем может быть дело?
Появилась необходимость на один из сайтов добавить несколько сотен инструкций. Для этого решил использовать функцию "Приложенные файла" и загружать мануалы на сервер в rar архивах. К одной статье будет прикрепляться 50-60 файлов для скачивания. Ссылки на скачивания будут заключены в теги [hide][/hide], что в какой-то мере должно избавить от беспорядочного скачивания файлов. Беспокоит нагрузка на сервер, с этим и сейчас напряг, не вызовет ли подобная схема значительное увеличение нагрузки, насколько значительным это увеличение может быть.
Отлично, сразу всё заработало!
ROZARD, при включении плагина пропадает твой хак против спама, при выключении появляется снова. Можно их подружить как-нибудь?
Ага, плагин у меня не тот был, видимо в этом дело. Подскажите кто-нибудь, как лучше базу форума ставить. Всё в общую под префиксом или внешней, насколько понимаю форум работает под utf-8, не будет багов с NG, если одной поставить?
Пробовал с auth_punbb под PunBB 1.4 (0.9.3) ошибка: http://ngcms.ru/forum/viewtopic.php?pid=25254#p25254, поставил fluxbb-1.4.7 (сборка от Visman) с плагином auth_fluxbb из первого поста. Всё работает на отлично, но... не пускает на сайт под логином админа, на форуме всё норм. При регистрации новых пользователей всё путём, как и описано - двухсторонняя интеграция. Может кто подскажет в чём может быть дело, как-то не удобно постоянно лезть в конфиг, чтоб зайти на свой сайт))
Оох, классно, приятно удивлен.. Надо было новую версию NG CMS прикрутить к PunBB 1.4 (плагин в теме для 1.3), был уверен, что не заработает, но решил таки попробывать, и не зря - с новыми версиями все работает!
Счастливчик) У меня при включении в настройках авторизации phpbb выскакивает /home/virtwww/w_***ru_8b63f0c2/http/engine/plugins/auth_phpbb/auth_phpbb.php on line 54, на сайт зашёл только после смены настроек конфига.
Отбой) Дело было не в бобине)) У хостера неполадки с почтовым сервером, вопрос решили, письма стали доходить. Отрубили сервер после установки хака, зараза) столько времени потерял и вам голову заморочил, пойду убьюсь о стену и хостера за одно))) Спасибо!
Как нет?
array_push($params, array('name' => 'who_bot', title => 'Если не бот сними галочку:', 'descr' => '','type' => 'checkbox'));
и
if(isset($values['who_bot']) && !empty($values['who_bot']))
{
// Дополнительная защита от ботов
$msg = 'Ботам регистрация запрещена';
return 0;
}
Всё на местах, этот вариант сейчас на сайте (родная почта прописана вместо звёздочек)
ROZARD, прикреплённый auth_basic.php (личка) хорошо работает без хака, с хаком пепец. Плагин взял со старого сайта (0.9.2), изменения в нём сделаны по советам из соседней ветки. Поэтому и подумал, что в 0.9.3 что-то поменяли. Понимаю, что у других работает, не все же сидят на 1 gb.
<?php
// Protect against hack attempts
if (!defined('NGCMS')) die ('HAL');
//
// Прописываем свой модуль
//
global $AUTH_METHOD;
global $AUTH_CAPABILITIES;
global $config;
class auth_basic {
// Осуществить вход
// $username = логин
// $password = пароль
// $auto_scan = если 1, то функция сама должна найти нужные параметры среди POST'ов
function login($auto_scan = 1, $username = '', $password = '') {
global $mysql;
if ($auto_scan) {
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
}
$password = EncodePassword($password);
$sql = "select * from ".uprefix."_users where name = ".db_squote($username)." and pass=".db_squote($password);
$row = $mysql->record($sql);
// Проверяем нужна ли активация
if ($row['activation']) {
return 'ERR:NEED.ACTIVATE';
}
if ($row) { return $row; }
return '';
}
//
// Сохранить в БД информацию о том, что пользователь авторизовался
// $dbrow = строка из нашей таблицы пользователей
function save_auth($dbrow) {
global $config, $mysql, $ip;
// создаём random cookie
$auth_cookie = md5((isset($config['crypto_salt'])?$config['crypto_salt']:'').uniqid(rand(),1));
$query = "update ".uprefix."_users set last = ".db_squote(time()).", ip=".db_squote($ip).", authcookie = ".db_squote($auth_cookie)." where id=".db_squote($dbrow['id']);
$mysql->query($query);
// Вставить юзеру куку
@setcookie('zz_auth', $auth_cookie, ($config['remember']?(time() + 3600 * 24 * 365):0), '/');
return 1;
}
//
// Проверить авторизацию пользователя
function check_auth() {
global $config, $mysql, $ip;
$auth_cookie = isset($_COOKIE['zz_auth'])?$_COOKIE['zz_auth']:'';
if (!$auth_cookie) { return ''; }
$query = "select * from ".uprefix."_users where authcookie = ".db_squote($auth_cookie)." limit 1";
$row = $mysql->record($query);
// Check for "IPLOCK" protection
if (pluginGetVariable('auth_basic', 'iplock') && ($ip != $row['ip'])) {
return '';
}
// Auth done
if ($row['name']) {
// Check if we need to update last visit field
if ((pluginGetVariable('auth_basic', 'lastupdate') > 0) && ((time() - $row['last']) > pluginGetVariable('auth_basic', 'lastupdate'))) {
$query = "update ".uprefix."_users set last = ".db_squote(time()).", ip=".db_squote($ip)." where id=".db_squote($row['id']);
$mysql->query($query);
}
return $row;
}
return '';
}
//
// Отменить авторизацию
function drop_auth() {
global $config, $mysql, $userROW;
$auth_cookie = $_COOKIE['zz_auth'];
if (!$auth_cookie) { return; }
$mysql->query("update ".uprefix."_users set authcookie = '' where id=".db_squote($userROW['id']));
@setcookie('zz_auth', '', time() - 3600 * 24 * 365, '/');
return;
}
//
// Вернуть массив параметров, необходимых при регистрации
function get_reg_params() {
global $config, $lang;
$params = array();
LoadPluginLang('auth_basic', 'auth','','auth');
array_push($params, array('name' => 'login', title => $lang['auth_login'], 'descr' => $lang['auth_login_descr'],'type' => 'input'));
if ($config['register_type'] >= 3) {
array_push($params, array('name' => 'password', title => $lang['auth_pass'], 'descr' => $lang['auth_pass_descr'], 'type' => 'password'));
array_push($params, array('name' => 'password2', title => $lang['auth_pass2'], 'descr' => $lang['auth_pass2_descr'],'type' => 'password'));
}
array_push($params, array('name' => 'email', title => $lang['auth_email'], 'descr' => $lang['auth_email_descr'],'type' => 'input'));
array_push($params, array('name' => 'who_bot', title => 'Если не бот сними галочку:', 'descr' => '','type' => 'checkbox'));
return $params;
}
//
// Провести регистрацию
// params = параметры полученные из get_reg_params()
// values = значения для вышеуказанных параметрах
// msg = сообщение об ошибке
// Возвращаемые значения:
// 0 - ошибка
// 1 - всё ok
function register(&$params, $values, &$msg) {
global $config, $mysql, $lang, $tpl;
LoadPluginLang('auth_basic', 'auth','','auth');
$error = 0;
$values['login'] = trim($values['login']);
// Preprocess login
if (strlen($values['login'])<3) {
// Слишком короткий логин
$msg = $lang['auth_login_short'];
return 0;
}
if(isset($values['who_bot']) && !empty($values['who_bot']))
{
// Дополнительная защита от ботов
$msg = 'Ботам регистрация запрещена';
return 0;
}
// Проверяем логин на запрещенные символы
$csError = false;
switch (pluginGetVariable('auth_basic', 'regcharset')) {
case 0:
if (!preg_match('#^[A-Za-z0-9\.\_\-]+$#s', $values['login'])) {
$csError = true;
}
break;
case 1:
if (!preg_match('#^[А-Яа-яёЁ0-9\.\_\-]+$#s', $values['login'])) {
$csError = true;
}
break;
case 2:
if (!preg_match('#^[А-Яа-яёЁA-Za-z0-9\.\_\-]+$#s', $values['login'])) {
print "CASE2-err [".$values['login']."]";
$csError = true;
}
break;
case 3:
if (!preg_match('#^[\x21-\x7e\xc0-\xffёЁ]+$#s', $values['login'])) {
$csError = true;
}
break;
case 4:
break;
}
if (preg_match('/[&<>\\"'."'".']/', $values['login']) || $csError) {
// Запрещенные HTML символы
$msg = $lang['auth_login_html'];
return 0;
}
if ($config['register_type'] >= 3) {
if (strlen($values['password']) < 3) {
// Слишком короткий пароль
$msg = $lang['auth_pass_short'];
return 0;
} else if ($values['password'] != $values['password2']) {
// Несовпадение паролей
$msg = $lang['auth_pass_diff'];
return 0;
}
}
if ((strlen($values['email']) > 70) || (!preg_match("/^[\.A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $values['email']))) {
// Неверный email
$msg = $lang['auth_email_wrong'];
return 0;
}
$row = $mysql->record("select * from ".uprefix."_users where lower(name)=".db_squote(strtolower($values['login']))." or mail=".db_squote($values['email']));
if (is_array($row)) {
// Дублирование логина/email'а
if (strtolower($row['mail']) == strtolower($values['email'])) {
// email dup
$msg = $lang['auth_email_dup'];
return 0;
}
// Если не мыло, то логин
$msg = $lang['auth_login_dup'];
return 0;
}
// Всё в порядке, регим
$add_time = time() + ($config['date_adjust'] * 60);
// Статус пользователя по умолчанию
$regstatus = intval(pluginGetVariable('auth_basic','regstatus'));
if (($regstatus < 1)||($regstatus > 4))
$regstatus = 4;
// Определяем действия в зависимости от типа регистрации
switch ($config['register_type']) {
// 0 - Мгновенная [автогенерация пароля, без email нотификации]
case 0:
$newpassword = MakeRandomPassword();
$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($newpassword)).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");
msg(array(
"text" => $lang['msgo_registered'],
"info" => str_replace(array('{login}', '{password}'), array($values['login'], $newpassword), $lang['auth_reg.success0'])
));
break;
// 1 - Простая [автогенерация пароля, с email нотификацией]
case 1:
$newpassword = MakeRandomPassword();
$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($newpassword)).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");
$tvars['vars'] = array( 'login' => $values['login'],
'home' => home,
'password' => $newpassword);
$tvars['regx'] = array(
'#\[activation\].+?\[\/activation]#is' => '',
);
$tpl -> template('register', GetPluginLangDir('auth_basic'));
$tpl -> vars('register', $tvars);
$msg = $tpl->show('register');
sendEmailMessage(
$values['email'],
$lang['letter_title'],
$msg,
'html',
'***@***'
);
msg(array(
"text" => $lang['msgo_registered'],
"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $newpassword, $values['email']), $lang['auth_reg.success1'])
));
break;
// 2 - С подтверждением [автогенерация пароля, пароль отправляется на email адрес и не показывается в админке]
case 2:
$newpassword = MakeRandomPassword();
$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($newpassword)).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");
$userid = $mysql->record('select LAST_INSERT_ID() as id');
$link = generatePluginLink('core', 'activation', array('userid' => $userid['id'], 'code' => $actcode), array(), false, true);
$actlink = '<a href="'.$link.'">'.$link.'</a>';
$tvars['vars'] = array( 'login' => $values['login'],
'home' => home,
'password' => $newpassword);
$tvars['regx'] = array(
'#\[activation\].+?\[\/activation]#is' => '',
);
$tpl -> template('register', GetPluginLangDir('auth_basic'));
$tpl -> vars('register', $tvars);
$msg = $tpl->show('register');
sendEmailMessage(
$values['email'],
$lang['letter_title'],
$msg,
'html',
'***@***'
);
msg(array(
"text" => $lang['msgo_registered'],
"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $newpassword, $values['email']), $lang['auth_reg.success2'])
));
break;
// 3 - Ручная с нотификацией [ручная генерация пароля, email нотификация]
case 3:
$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($values['password'])).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");
$tvars['vars'] = array( 'login' => $values['login'],
'home' => home,
'password' => $values['password']);
$tvars['regx'] = array(
'#\[activation\].+?\[\/activation]#is' => '',
);
$tpl -> template('register', GetPluginLangDir('auth_basic'));
$tpl -> vars('register', $tvars);
$msg = $tpl->show('register');
sendEmailMessage(
$values['email'],
$lang['letter_title'],
$msg,
'html',
'***@***'
);
msg(array(
"text" => $lang['msgo_registered'],
"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $values['password'], $values['email']), $lang['auth_reg.success3'])
));
break;
// 4 - Ручная с подтверждением [ручная генерация пароля, подтверждение email адреса]
case 4:
$actcode = MakeRandomPassword();
$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last, activation) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($values['password'])).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '', ".db_squote($actcode).")");
$userid = $mysql->record('select LAST_INSERT_ID() as id');
$link = generatePluginLink('core', 'activation', array('userid' => $userid['id'], 'code' => $actcode), array(), false, true);
$actlink = '<a href="'.$link.'">'.$link.'</a>';
$tvars['vars'] = array( 'login' => $values['login'],
'home' => home,
'password' => $values['password'],
'activate_url' => $actlink);
$tvars['regx'] = array(
'#\[activation\](.+?)\[\/activation]#is' => '$1',
);
$tpl -> template('register', GetPluginLangDir('auth_basic'));
$tpl -> vars('register', $tvars);
$msg = $tpl->show('register');
sendEmailMessage(
$values['email'],
$lang['letter_title'],
$msg,
'html',
'***@***'
);
msg(array(
"text" => $lang['msgo_registered'],
"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $values['password'], $values['email']), $lang['auth_reg.success4'])
));
//print "<pre>".var_export($lang, true)."</pre>";
}
return 1;
}
//
// Вернуть массив параметров, необходимых для восстановления пароля
function get_restorepw_params() {
global $config, $lang;
$params = array();
LoadPluginLang('auth_basic', 'auth','','auth');
$mode = pluginGetVariable('auth_basic','restorepw');
if (!$mode) {
return false;
//array_push($params, array('text' => $lang['auth_norestore']));
//return $params;
}
array_push($params, array('text' => $lang['auth_restore_'.$mode]));
if ($mode != 'email') {
array_push($params, array('name' => 'login', title => $lang['auth_login'],'type' => 'input'));
}
if ($mode != 'login') {
array_push($params, array('name' => 'email', title => $lang['auth_email'],'type' => 'input'));
}
return $params;
}
//
// Восстановить пароль
function restorepw(&$params, $values, &$msg) {
global $config, $mysql, $lang, $tpl;
$error = 0;
$values['login'] = trim($values['login']);
$values['email'] = trim($values['email']);
LoadPluginLang('auth_basic', 'auth','','auth');
$mode = pluginGetVariable('auth_basic','restorepw');
if (!$mode) {
$msg = $lang['auth_norestore'];
return 0;
}
$px = array();
if ($mode != 'email') {
if (!$values['login']) {
$msg = $lang['auth_login_require'];
return 0;
}
array_push($px, "name = ".db_squote($values['login']));
}
if ($mode != 'login') {
if (!$values['email']) {
$msg = $lang['auth_email_require'];
return 0;
}
array_push($px, "mail = ".db_squote($values['email']));
}
$query = "select * from ".uprefix."_users where ".implode(' and ',$px);
$row = $mysql->record($query);
if (is_array($row)) {
// Нашли юзера
$newpassword = MakeRandomPassword();
$mysql->query("UPDATE ".uprefix."_users SET newpw=".db_squote(EncodePassword($newpassword))." WHERE id=".$row['id']);
$tvars['vars'] = array( 'login' => $row['name'],
'home' => home,
'newpw' => $newpassword);
$tvars['vars']['pwurl'] = generatePluginLink('core', 'lostpassword', array('userid' => $row['id'], 'code' => EncodePassword($newpassword)), array(), false, true);
$tpl -> template('restorepw', GetPluginLangDir('auth_basic'));
$tpl -> vars('restorepw', $tvars);
sendEmailMessage($row['mail'],$lang['auth_mail_subj'],$tpl->show('restorepw'), false, '***@***');
msg(array("text" => $lang['msgo_sent']));
return 1;
} else {
$msg = $lang['auth_nouser'];
return 0;
}
}
//
// Подтверждение восстановления пароля
//
function confirm_restorepw(&$msg, $reqid = NULL, $reqsecret = NULL) {
global $config, $mysql, $lang, $tpl;
LoadPluginLang('auth_basic', 'auth','','auth');
$row = $mysql->record("select * from ".uprefix."_users where id = ".db_squote($reqid));
if (is_array($row)) {
if ($reqsecret == $row['newpw']) {
// OK !!!
$msg = $lang['auth_newpw_ok'];
$mysql->query('update '.uprefix.'_users set pass=newpw where id = '.db_squote($reqid));
return 1;
}
}
$msg = $lang['auth_newpw_fail'];
return 0;
}
}
$AUTH_METHOD['basic'] = new auth_basic;
$AUTH_CAPABILITIES['basic'] = array('login' => '1', 'db' => '1');
if (pluginGetVariable('auth_basic','en_dbprefix')) {
$config['uprefix'] = pluginGetVariable('auth_basic','dbprefix');
}