Проверка регистрационных данных
Часть функций, их основа честно откуда-то спёрта. Мне не удалось разыскать источник поэтому выложу в открытый доступ. Функции для проверки регистрационных данных комъюзеров.
Функция проверки на существование мыла в таблице пользователей.
function is_email_exists($email)
{
$ret = false;
$CI = &get_instance();
$CI->db->from('users');
$CI->db->select('users_email');
$CI->db->limit(1);
$CI->db->where( array('users_email' => $email));
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
if( $row->users_email == $email ) $ret = true;
}
return $ret;
}
Получение ИДа пользователя по его нику.
function get_id_by_nik($name)Проверка на существование логина юзера
{
$ret = true;
$id = 0;
$CI = &get_instance();
$CI->db->from('comusers');
$CI->db->select('comusers_id');
$CI->db->limit(1);
$CI->db->where( array('comusers_nik' => $name));
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
$id = $row->comusers_id;
}
return (int) $id;
}
function is_users_login($login)Проверка на существование ника пользователя
{
$ret = true;
$CI = &get_instance();
$CI->db->from('users');
$CI->db->select('users_login');
$CI->db->limit(1);
$CI->db->where( array('users_login' => $login));
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
if( $row->users_login == $login )
{
$ret = false;
}
else
{
$ret = true;
}
}
return $ret;
}
function is_users_nik($login)Проверка на существование ника комъюзера
{
$ret = true;
$CI = &get_instance();
$CI->db->from('users');
$CI->db->select('users_nik');
$CI->db->limit(1);
$CI->db->where( array('users_nik' => $login) );
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
if( $row->users_nik == $login )
{
$ret = false;
}
else
{
$ret = true;
}
}
return $ret;
}
function is_comusers_nik($login, $userid)
{
$ret = true;
$CI = &get_instance();
$CI->db->from('comusers');
$CI->db->select('comusers_nik');
$CI->db->limit(1);
$CI->db->where( array('comusers_nik' => $login) );
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
if ( ( $row->comusers_nik == $login ) and
( get_id_by_nik($row->comusers_nik) != $userid ) and ( $row->comusers_nik!='' ) )
{
$ret = false;
}
else
{
$ret = true;
}
}
return $ret;
}
Функция, которую нужно вызывать в файле your-template/type/users-form.php вместо стандартной $res_post=mso_comuser_edit(); нужно выполнить присваивание $res_post=russ_mso_comuser_edit();
function russ_mso_comuser_edit($args = array())Изменений минимум, но они касаются именно проверок. При обновлении Максом данной функции следует вносить изменения и в эту. На данный момент она предназначена для версии 0.34. Хотя не думаю, что будут изменения в будущем.
{
global $MSO;
if ( !isset($args['css_ok']) ) $args['css_ok'] = 'comment-ok';
if ( !isset($args['css_error']) ) $args['css_error'] = 'comment-error';
# id комюзера, который в сессии
if ( isset($MSO->data['session']['comuser']) and $MSO->data['session']['comuser'] )
$id_session = $MSO->data['session']['comuser']['comusers_id'];
else $id_session = false;
if ( $post = mso_check_post(array('f_session_id', 'f_submit', 'f_comusers_activate_key')) ) // это активация
{
# защита рефера
mso_checkreferer();
# защита сессии - если не нужно закомментировать строчку!
if ($MSO->data['session']['session_id'] != $post['f_session_id']) mso_redirect();
// получаем номер юзера id из f_submit[]
$id = (int) mso_array_get_key($post['f_submit']);
if (!$id) return ''. t('Ошибочный номер пользователя'). '';
# проверяем id в сессии с сабмитом
if ($id != $id_session)
return ''. t('Ошибочный номер пользователя'). '';
$f_comusers_activate_key = trim($post['f_comusers_activate_key']);
if (!$f_comusers_activate_key) return ''. t('Неверный (пустой) ключ'). '';
// нужно проверить если у указанного комюзера не равные ключи
// если они равны, то ничего не делаем
$CI = & get_instance();
$CI->db->select('comusers_activate_string, comusers_activate_key');
$CI->db->from('comusers');
$CI->db->where('comusers_id', $id);
$CI->db->limit(1);
$query = $CI->db->get();
if ($query->num_rows() > 0)
{
$comuser = $query->result_array(); // данные комюзера
if ($comuser[0]['comusers_activate_string'] == $comuser[0]['comusers_activate_key'])
{
// уже равны, активация не требуется
return ''. t('Активация уже выполнена'). '';
}
else
{
// ключи в базе не равны
// сверяем с переданным ключом из формы
if ($f_comusers_activate_key == $comuser[0]['comusers_activate_key'])
{
// верный ключ - обновляем в базе
$CI->db->where('comusers_id', $id);
$res = ($CI->db->update('comusers',
array ('comusers_activate_string' => $f_comusers_activate_key ) )) ? '1' : '0';
$CI->db->cache_delete_all();
if ($res)
return ''. t('Активация выполнена!'). '';
else
return ''. t('Ошибка БД при добавления ключа активации'). '';
}
else
{
return ''. t('Ошибочный ключ активации'). '';
}
}
}
else // вообще нет такого комюзера
return ''. t('Ошибочный номер пользователя'). '';
}
elseif ( $post = mso_check_post(array('flogin_session_id', 'flogin_submit', 'flogin_user', 'flogin_password',
'flogin_redirect')) )
{
// логинимся через стандартную _mso_login()
_mso_login();
return;
}
// это форма?
elseif ( $post = mso_check_post(array('f_session_id', 'f_submit', 'f_comusers_email', 'f_comusers_password',
'f_comusers_nik', 'f_comusers_url', 'f_comusers_icq', 'f_comusers_msn', 'f_comusers_jaber',
'f_comusers_date_birth', 'f_comusers_description', 'f_comusers_avatar_url')) ) // это обновление формы
{
if (!is_login_comuser())
return ''. t('Ошибочные данные пользователя'). '';
# защита рефера
mso_checkreferer();
# защита сессии - если не нужно закомментировать строчку!
if ($MSO->data['session']['session_id'] != $post['f_session_id']) mso_redirect();
// получаем номер юзера id из f_submit[]
$id = (int) mso_array_get_key($post['f_submit']);
if (!$id) return ''. t('Ошибочный номер пользователя'). '';
# проверяем id в сессии с сабмитом
if ($id != $id_session)
return ''. t('Ошибочный номер пользователя'). '';
$f_comusers_email = trim($post['f_comusers_email']);
$f_comusers_password = trim($post['f_comusers_password']);
if (!$f_comusers_email or !$f_comusers_password)
return ''. t('Необходимо указать email и пароль'). '';
// проверим есть ли такой комюзер
$CI = & get_instance();
$CI->db->select('*');
$CI->db->from('comusers');
# CodeIgniter экранирует where, даже когда только условия в полях
$CI->db->where('comusers_activate_string=comusers_activate_key', '', false); // активация должна уже быть
$CI->db->where(array('comusers_id'=>$id,
'comusers_email'=>$f_comusers_email,
'comusers_password'=>$f_comusers_password
));
$CI->db->limit(1);
$query = $CI->db->get();
if ($query->num_rows() > 0)
{
// все ок - логин пароль верные
$comuser = $query->result_array(); // данные комюзера
$f_comusers_avatar_url = mso_strip($post['f_comusers_avatar_url'], false,
array('\\', '|', '?', '%', '*', '`'));
$allowed_ext = array('gif', 'jpg', 'jpeg', 'png'); // разрешенные типы
$ext = strtolower(str_replace('.', '', strrchr($f_comusers_avatar_url, '.'))); // расширение файла
if ( !in_array($ext, $allowed_ext) ) $f_comusers_avatar_url = ''; // запрещенный тип файла
if (!isset($post['f_comusers_notify'])) $post['f_comusers_notify'] = 0;
if ( !( is_users_login($post['f_comusers_nik']) and is_comusers_nik($post['f_comusers_nik'], $id) and is_users_nik($post['f_comusers_nik']) ) )
return ''. t('Необходимо указать правильный ник'). '';
$upd_date = array (
'comusers_nik' => strip_tags($post['f_comusers_nik']),
'comusers_url' => strip_tags($post['f_comusers_url']),
'comusers_icq' => strip_tags($post['f_comusers_icq']),
'comusers_msn' => strip_tags($post['f_comusers_msn']),
'comusers_jaber' => strip_tags($post['f_comusers_jaber']),
'comusers_date_birth' => strip_tags($post['f_comusers_date_birth']),
'comusers_description' => strip_tags($post['f_comusers_description']),
'comusers_avatar_url' => $f_comusers_avatar_url,
'comusers_notify' => $post['f_comusers_notify'],
);
# pr($upd_date );
$CI->db->where('comusers_id', $id);
$res = ($CI->db->update('comusers', $upd_date )) ? '1' : '0';
$CI->db->cache_delete_all();
// mso_flush_cache(); // сбросим кэш
if ($res)
return ''. t('Обновление выполнено!'). '';
else
return ''. t('Ошибка БД при обновлении'). '';
}
else return ''. t('Ошибочный email и пароль'). '';
} // обновление формы
}
МаксМногосайт v. 0.2
Приветствую! Много времени прошло с публикации первой части многосайтового расширения для MaxSite CMS. Думаю интересно оно осталось только мне, что в принципе неудивительно. В любом случае решил выложить следующую версию. Основные изменения связаны с изменениями самой MaxSite. Кроме того, перенёс папки с сайтами (шаблонами) в отдельную директорию в корне.
Для установки:
- Изменить настройки в /application/config/database.php - настройки базы данных.
- Изменить настройки в /application/maxsite/mso-config.php - секретная фраза.
- В папке (папках) вида /site/domain_ru/ поставить разрешения на запись в каталогах uploads, cache и файле sitemap.xml
- По необходимости добавить из последней сборки шаблон default.
- Устанавливать всегда поверх сборки. Перезаписывается плагин xml_sitemap (что плохо, не спорю)
- Совсем забыл! Хотя из исходников всё очевидно, но всё же. Структура базы данных - используются префиксы вида railway$club_org_ru, если ваш домен это railway-club.org.ru. Такие косяки, позволяют добиться однозначного соответствия. У людей были проблемы, когда просто удалялись точки и тире из домена.
Прямая ссылка на скачивание multi_maxsite_0_2.zip 43
Закладочник на Jquery для MaxSite CMS
Приветствую! Создал свой первый плагин для MaxSite CMS. Он генерирует список ссылок для добавления страницы в социальные сервисы, закладки. К слову для MaxSite уже создано два подобных плагина. Это стандартный addzakl и недавно представленный плагин от Алексея (http://driverlab.ru). Собственно очень даже неплохие и даже отличные простые решения. Чем они меня не устраивают? Да ничем. Но есть красивое решение для создания таких кнопок от dimox'a (http://dimox.name). Дмитрий использует библиотеку Jquery. Я взял за основу данный скрипт, адаптировал его к MaxSite и добавил администраторские возможности из скрипта Алексея. То что получилось можно взять по нижеследующей ссылке, а также оценить в работе на этом сайте.
Сегодня, 22 августа случайно обнаружил несовместимость данного плагина с lightbox'ом и colorbox'ом. Выглядит таким образом: меню плагина не раскрывается, галерея не выводит окна с картинкой. В общем если поставить разом - убивают друг друга.:) Решил найти проблему. Отключал по очереди вызовы некоторых процедур в этом плагине. Помогает только полное удаление файла jqsocial.js. Ошибка нашлась неожиданно и совершенно случайно. Файрбаг зафиксировал такое вот дело:
При включённом lightbox'e: $ is not a function $('div.gallery a').lightBox({
При включённом colorbox'e: $ is not a function $(".gallery,.slideshow").find("a[href$='.jpg'],a[href$='.jpeg'],a[href$='.png']...
Что с этим счастьем делать не знаю, по идее ошибка у разработчиков lightbox'ов, без них ошибок не наблюдается.
В любом случае разбираться самостоятельно не буду... Толку не будет. Даже не могу понять где искать ошибки. Однако если добрые люди подскажут, что нужно сделать и переделать, чтобы ошибки не возникали - всегда готов.