Вы находитесь на главной странице AskName.Ru! Приятного чтения!

Проверка регистрационных данных

Воскресенье, 6 декабря 2009 г.
Рубрика: Сайтостроительство
Метки: | |

Часть функций, их основа честно откуда-то спёрта. Мне не удалось разыскать источник поэтому выложу в открытый доступ. Функции для проверки регистрационных данных комъюзеров.

Функция проверки на существование мыла в таблице пользователей.

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())
{
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 и пароль'). '
';
} // обновление формы
}
Изменений минимум, но они касаются именно проверок. При обновлении Максом данной функции следует вносить изменения и в эту. На данный момент она предназначена для версии 0.34. Хотя не думаю, что будут изменения в будущем.

МаксМногосайт v. 0.2

Четверг, 19 ноября 2009 г.
Рубрика: Сайтостроительство
Метки: | |

Приветствую! Много времени прошло с публикации первой части многосайтового расширения для 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. Такие косяки, позволяют добиться однозначного соответствия. У людей были проблемы, когда просто удалялись точки и тире из домена.
В общем планирую заняться плотнее. Так редко выходят обновления, ибо до выхода версии 0.35 меня устраивала старая сборка. Теперь она не работает. А эта вроде бы работает только с 0.35...

Прямая ссылка на скачивание multi_maxsite_0_2.zip 43

Закладочник на Jquery для MaxSite CMS

Понедельник, 17 августа 2009 г.
Рубрика: Сайтостроительство
Метки: | |

Приветствую! Создал свой первый плагин для MaxSite CMS. Он генерирует список ссылок для добавления страницы в социальные сервисы, закладки. К слову для MaxSite уже создано два подобных плагина. Это стандартный addzakl и недавно представленный плагин от Алексея (http://driverlab.ru). Собственно очень даже неплохие и даже отличные простые решения. Чем они меня не устраивают? Да ничем. Но есть красивое решение для создания таких кнопок от dimox'a (http://dimox.name). Дмитрий использует библиотеку Jquery. Я взял за основу данный скрипт, адаптировал его к MaxSite и добавил администраторские возможности из скрипта Алексея. То что получилось можно взять по нижеследующей ссылке, а также оценить в работе на этом сайте.

bookmarks_jquery.zip 12

Сегодня, 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'ов, без них ошибок не наблюдается.

В любом случае разбираться самостоятельно не буду... Толку не будет. Даже не могу понять где искать ошибки. Однако если добрые люди подскажут, что нужно сделать и переделать, чтобы ошибки не возникали - всегда готов.

Поиск

Статистика

Rambler's Top100