Разработка системы управления содержимым
Листинг класса для работы с регулярными выражениями. Особенности классов для проверки данных при регистрации и отправки сообщений. Отправка ссылки для активации на почту пользователя, описание основных классов, анализ их назначения и листинг функций.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.09.2013 |
Размер файла | 1,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ВВЕДЕНИЕ
Процесс разработки сайта является очень сложным и делом, который требует больше времени и внимания. Сайт должен быт простым, красивым и понятным. Данный продукт является системой, который можно создать простые блоги, сайты визитки или сайт новостей. Он создан в принципе MVC системы. Данный принцип является очень популярным и простым при разработке подобных систем.
В этом документе приведены все классы основные классы системы и функции с описанием. Он состоит из четырех разделов.
На первом разделе названием Регулярные выражении приведено описание функций, которые работает с регулярными выражениями.
Раздел Отправка писем содержит описание классов и функций который работает с отправкой электронных писем в системе.
Описание функций раздел который является самым большим и имеющий содержание о всех функциях классах и модулях системы.
1. РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ
Ранее для поиска в строке подстроки использовались строковые функции, ограничиваясь при этом случаями точного соответствия строк и подстрок. Для работы со строками можно использовать также регулярные выражения, представляющие собой, по сути, мини-язык описаний для поиска в строках информации по заданному шаблону. С помощью регулярных выражений можно найти в строке подстроку, удовлетворяющую заданному шаблону и извлечь ее, проверить существует ли заданная строка и т.д.
1.1 Класс для работы с регулярными выражениями
Ниже приведено листинг класса для работы с регулярными выражениями. Название класса regular имеющий функции Activate, getResult, checkRegular.
Данная функция позволяет автоматически загрузить список всех регулярных выражений который используется в системе.
Листинг 1.1. Функция Activate
public static function Activate()
{
include DIR_MODULES."regulars/regulars.php";
if(isset($regs))
{self::$regulars = new params($regs);}
else
{ self::$regulars = new params();}
}
Функция chekRegular проверят на существования регулярного выражения в системе.
Листинг 1.2. Функция checkRegular
public static function checkRegular($name)
{
return self::$regulars->is_isset($name);
}
Функция выполняет проверку заданных данных с используя регулярных выражений и возвращает результат. Данная функция имеет два параметра первый object это значение который надо проверит и второй это filter_type который указывает тип фильтра.
Листинг 1.3. Функция getResult
public static function getResult($object,$type,$filter_type="preg_match")
{ if(isset($object) and $filter_type=="preg_match")
{ if(!self::$regulars->is_isset($type))
{return false;}
else
{return preg_match(self::$regulars->getValue($type),$object);}
}
elseif($filter_type=="preg_match_all")
{if(!self::$regulars->is_isset($type))
{return false;}
else
{$l = preg_match_all(self::$regulars->getValue($type),$object,$mass);
return $mass;
}
}
}
1.2 Класс для проверки данных при регистрации
Данный класс позволяющий выполнить проверку данных пользователя. В классе создано функции login ,password, mail, dateage.
Данная функция позволяет сделать проверку логина на существования и корректность с использованием регулярного выражения.
Листинг 1.4. Функция login
public static function login($l)
{
if(!isset($l))
{
self::$log['login'] = XATO_LOGIN_YOQ;
return false;
}
elseif(strlen($l)<6 and strlen($l)>12)
{
self::$l['login'] = XATO_LOGIN_KK;
return false;
}
elseif(!regular::getResult($l,'login'))
{
self::$log['login'] = XATO_LOGIN_NOTOGRI;
return false;
}
elseif(data::$user->getValue("login","user_login='$l'"))
{
self::$log['login'] = XATO_LOGIN_MAVJUD;
}
else
{
return true;
}
}
Password - функция который проверятся с использованием регулярных выражений, сравнивает две пароли на правильность и возвращает данные шифрованный методом md5.
Листинг 1.5. Функция password
public static function password($p1,$p2)
{
if(!isset($p1) or !isset($p2))
{
self::$log['password'] = XATO_PAROL_YOQ;
}
elseif(strlen($p1)<6 and strlen($p2)>12)
{
self::$log['password'] = XATO_PAROL_KK;
return false;
}
elseif($p1==$p2)
{
self::$log['password'] = XATO_PAROL_OXSHASHMAS;
return false;
}
elseif(!regular::getResult($p1,'password'))
{
self::$log['password'] = XATO_PAROL_NOTOGRI;
return false;
}
else
{
return true;
}
}
Функция mail проверят на корректность заданного электронного адреса.
Листинг 1.6. Функция mail
public static function mail($m)
{
if(!isset($m))
{
self::$log['mail'] = XATO_EMAIL_YOQ;
return false;
}
elseif(!regular::getResult($m,'email'))
{
self::$log['mail'] = XATO_EMAIL_NOTOGRI;
return false;
}
elseif(strlen($m)<6 and strlen($m)>255)
{
self::$log['mail'] = XATO_EMAIL_KK;
return false;
}
else
{
return true;
}
}
2. ОТПРАВКА ПИСЕМ
Самый простой способ отправить письмо при помощи PHP - воспользоваться стандартной функцией mail. Она имеет следующий синтаксис:
bool mail (string to, string subject, string message [, string additional_headers [, string additional_parameters]])
2.1 Класс для отправки сообщений
Данный класс позволяет отправлять электронные письма в PHP и имеет опции задержки писем. В классе Mail имеется следующие функции Send, Delay, Abort, Complete.
С помощью функции Send задается данные отправляемого письма и он имеет следующие параметры:
· $to - электронная почта получателя
· $subject - тема отправляемого письма
· $message - текст отправляемого письма
· $from - адрес электронной почты отправителя
· $reply - адрес электронной почты который должен отправляется ответ.
Листинг 2.1. Функция Send
static function Send($to, $subject, $message, $from, $reply = null){
if (empty($reply)){
$reply = $from;
}
$reply = "Reply-To: $reply\r\n";
$headers = "MIME-Version: 1.0\r\n".
"Content-Type: text/html; charset=UTF-8\r\n".
"From: $from\r\n".
$reply.
"X-Mailer: PHP/".phpversion();
$subject = mb_encode_mimeheader($subject, 'UTF-8', 'B', "\r\n", 9);
if (self::$delay){
self::$mail[] = array($to, $subject, $message, $headers);
}else{
try{
mail($to, $subject, $message, $headers);
}catch (Exception $e){
}
}
}
Функция Delay - включает задержку отправки писем.
Листинг 2.2. Функция Delay
static function Delay(){
self::$delay = true;
}
Функция Abort - отключает задержку отправки писем и очищает очередь писем.
Листинг 2.2. Функция Delay
static function Abort(){
self::$delay = false;
self::$mail = array();
}
Complete - данная функция отправляет все письма из очереди и очищает очередь писем в конце отключая задержку писем.
Листинг 2.21. Функция Complete
static function Complete(){
try{
foreach(self::$mail as $m){
mail($m[0], $m[1], $m[2], $m[3]);
}
}catch (Exception $e){}
Очищаем состояние задержки
self::Abort();
}
2.2 Отправка ссылки для активации на почту пользователя
Данная функция отправляет письмо на почту нового пользователя с ссылкой активации его профиля.
Листинг 2.2. Функция Complete
public static function SendActivate($mail,$login,$activation)
{
$subject = "Добро пожвловать в ".settings::getValue("site_name");
$message = "Здраствуйте $login Для активации нажмите
<a href='http://".SITE_DOMAIN."'>Активация</a></br>
Вам пришло этот сообщение потому что вы регистрировались в нашем сайте. Если это не вы тогда просто удалите данное сообщение;
$reply = settings::getValue("reply_email");
Mail::Send($mail,$subject,$message,$from,$reply);
Mail::Complete(); }
3. ОПИСАНИЕ КЛАССОВ
Данный сайт создан в принципе MVC и все его классы разделяются на три вида:
· Модель - классы, которые обеспечивает ввод и вывод данных
· Контроль - классы, которые обеспечивает за управлением, проверкой данных
· Просмотр - классы которые обеспечивает за отображением данных после обработки.
3.1 Классы типа модель
Классы данного типа являются data, db, getData.
· data - Данный класс позволяет обеспечить наследование класса getData.
· db - Это единственный класс который напрямую работает с БД. Он позволяет выполнить соединение , отключение, генерирования запросов и их выполнения.
· getData - данный класс является абстрактным. Он обеспечивает ввод и вывод данных.
3.2 Класс DB
Данный класс является единственным классом, который напрямую работает с БД. Созданы функции, которые обеспечивает соединение, отключение, генерирование и выполнение запросов.
Данная функция позволяет вводить настройки подключения к БД Он используется функцией connect для подключения.
Листинг 3.1. Функция db_conf
static function db_conf($host,$dbase,$uid, $pwd, $connection_charset)
{
self::$config['host'] = $host;
self::$config['dbase'] = $dbase;
self::$config['pass'] = $pwd;
self::$config['user'] = $uid;
self::$config['charset'] = $connection_charset;
}
Функция который выполняет подключение к БД.
Листинг 3.2. Функция connect
public static function connect ()
{
self::$conn['con_desc']=mysql_connect(self::$config['host'],self::$config['user'],self::$config['pass']);
if (!self::$conn['con_desc'])
{
return false;
}
else
{
self::$conn['select_db']=mysql_select_db(self::$config['dbase'],self::$conn['con_desc']);
self::$conn['character']=mysql_query("SET NAMES ".self::$config['charset'],self::$conn['con_desc']);
}
return true;
}
Данная функция выполняется при загрузки класса и обеспечивает автоматическое подключение к БД.
Листинг 3.3. Функция Activate
public static function Activate()
{
include DIR_CONFIG."data.config.php";
self::db_conf(DB_HOST,DB_BASE,DB_USER,DB_PASSWORD,DB_CHARSET);
}
Функция который выполняет отключение от БД.
Листинг 3.4. Функция disconnect
static function disconnect()
{
mysql_close(self::$conn['con_desc']);
return true;
}
Функция который обеспечивает выполнение генерированных запросов.
Листинг 3.5. Функция query
static function query ($sql)
{
if(empty (self::$conn['con_desc']))
{
self::connect();
}
if (!$result = mysql_query($sql,self::$conn['con_desc']))
{
return false;
}
else
{
return $result;
}
}
Функция который на основе полученных данных генерирует запрос SQL для удаления.
Листинг 3.6. Функция delete
static function delete ($from,$where='', $field='')
{
if(!$from)
return false;
else
{
$table = $from;
$where = ($where !='') ? "WHERE $where" : "";
return self::query("DELETE FROM $table $where");
}
}
Функция для генерирования запроса SQL для вывода данных. После генерирования, используя, функцию query выполняет запрос и возвращает результат.
Листинг 3.7. Функция select
static function select ($from,$fields ='*', $where='',$orderby='',$limit='')
{
if (!$from)
return false;
else
{
$table = $from;
$where = ($where !="") ? "WHERE $where" : "";
$orderby = ($orderby !="") ? "ORDER BY $orderby " : "";
$limit = ($limit !="") ? "LIMIT $limit" : "";
return self::query("SELECT $fields FROM $table $where $orderby $limit");
}
}
Функция для генерирования SQL запроса обновления на основе полученных данных. Возвращает результат работы генерированного запроса.
Листинг 3.8. Функция select
static function update($fields, $table, $where = "") {
if (!$table)
return false;
else {
if (!is_array($fields))
$flds = $fields;
else {
$flds = '';
foreach ($fields as $key => $value) {
if (!empty ($flds))
$flds .= ",";
$flds .= $key . "=";
$flds .= "'" . $value . "'";
}
}
$where = ($where != "") ? "WHERE $where" : "";
return self::query("UPDATE $table SET $flds $where");
} }
Функция для генерирования SQL запроса который выполняет ввод данных. После генерирования используя функцию query выполняет генерированный запрос и возвращает номер добавленной строки.
Листинг 3.9. Функция insert
static function insert($table,$params)
{
if(!isset($table))
{
return false;
}
else
{
if(!is_array($params))
{
$sql = "INSERT INTO $table $params";
}
else
{
$keys = array_keys($params);
$vals = array_values($params);
$fields = "(".implode(",",$keys).")";
$values = "('".implode("','",$vals)."')";
$sql = "INSERT INTO $table $fields VALUES $values";
}
}
$r = self::query($sql);
return self::getInsertId();
}
3.3 Функции класса getData
Данный класс является абстрактным. В нем имеется функции для ввода и вывода данных. Отличие от класса DB в том что при наследовании нужно указать таблицу который он должен работать.
Функция __construct автоматически работает при загрузки или наследовании класса. При наследовании нужно указать имя таблицы.
Листинг 3.10. Функция construct
public function __construct($table_name)
{
if(isset($table_name))
{
$this->table = $table_name;
}
else
{
return "EXIST_PARAMETERS";
}
}
Ниже приведенная функция позволяет выводить данные из таблицы. Имеется 4 параметра:
· $field - данном параметре можно указать поля таблицы
· $where - данный параметр позволяет выводить данные по условию
· $order_by - можно указать поля для сортировки и тип сортировки
· $limit - количество выводимых данных
Листинг 3.11. Функция getValue
public function getValue($field,$where="",$order_by="",$limit="")
{
if(isset($field))
{
if(isset($this->table))
{
$result = db::select($this->table,$field,$where,$order_by,$limit);
if(!$result)
{
return array();
}
elseif(mysql_num_rows($result)==1)
{
return mysql_fetch_assoc($result);
}
else
{
$res = array();
while($e = mysql_fetch_assoc($result))
{
$res[] = $e;
}
return $res;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
Функция для ввода данных. Имеет один параметр который принимает тип массив.
Листинг 3.12. Функция addValue
public function addValue($params)
{
if(is_array($params))
{
return db::insert($this->table,$params);
}
else
{
return false;
}
}
Функция setValue выполняет обновление данных таблицы. Здесь нужно указать имя поля таблицы и условие обновления.
Листинг 3.13. Функция addValue
public function setValue($params,$where)
{
if(is_array($params))
{
if(isset($where))
{
return db::update($params,$this->table,$where);
}
else
{
return "EXIST_PARAM_WHERE";
}
}
else
{
return "NOT_IS_ARRAY";
}
}
Функция delValue который имеет параметр $where позволяющий удалить данные. Для удаления надо указать имя значения. Функция принимает параметр where и тут можно указать имя значения и после значения удаляется.
Листинг 3.11. Функция addValue
public function delValue($where)
{
if(isset($where))
{
return db::delete($this->table,$where,$field);
}
else
{
return "EXIST_PARAMS";
}
}
3.4 Функции класса data
Данный класс имеет одну функцию Activate который при загрузки выполняет наследование класса getData.
Листинг 3.12. Функция addValue
public static function Activate()
{self::$user = new getData("user");
self::$user_info = new getData("user_info");
self::$rights = new getData("rights");
self::$comments = new getData("comments");
self::$pages = new getData("pages");
self::$file = new getData("files");
self::$type = new getData("types");
self::$settings = new getData("settings");
self::$online = new getData("online");
self::$poseshenie = new getData("poseshenie");
self::$templates = new getData("templates"); }
3.5 Классы типа контроллер
Данная система создано полностью строится из классов. Это позволяет обеспечить гибкость системы. Любое время можно изменять классы или, добавлять классы, расширяя возможности системы. С целью достижения гибкости системы и простоты взаимодействия классов необходимо было достичь минимальных действий для использования классов любым компонентом системы без необходимости создания жестких связей, а также сделать возможность легкого расширения действий классов с помощью других классов.
3.6 Класс Eagle
Eagle - системный класс который включается в index.php. выполняет автоматическую загрузку классов системы. Классе созданы следующие функции
Start - функция который запускает все необходимые модули системы и проверяет установлена ли система. Если система не установлено то он запускает установку системы.
Листинг 3.13. Функция start
public static function Start()
{
проверка на установки системы
self::$is_install = is_file(DIR_CONFIG."data.config.php");
настройка PHP
ini_set('magic_quotes_gpc', 0);
ini_set('magic_quotes_runtime', 0);
ini_set('magic_quotes_sybase', 0);
ini_set('url_rewriter.tags', '');
ini_set('register_globals', 0);
регистрация метода обработчика завершения системы
register_shutdown_function(array("eagle","Stop"));
загрузка модуля управления модулями
include_once(DIR_CORE."system/module.php");
Актиация модулья
module::Activate("module");
if(self::$is_install)
{
module::Activate("errors");
module::Activate("events");
module::Activate("params");
module::Activate("db");
module::Activate("session");
module::Activate("dbget");
events::Execute("START");
}
else
{
Начало установки системы
}
}
3.7 Класс Events
Events - класс который предоставляет возможность классам системы генерировать события. В данном классе реализованы следующие функции
Activate - функция для активации модуля. Он автоматически запускается модулем Module.
Листинг 3.13. Функция start
public static function Activate()
{
self::LoadHandlers(DIR_CONFIG.self::FILE_HANDLERS);
self::LoadHandlers(DIR_CONFIG.self::FILE_HANDLERS_MODULE);
}
LoadHandlers - функция который загружает реестр событий из конфигурационного файла.
Листинг 3.14. Функция LoadHandlers
public static function LoadHandlers($config_file)
{
if(is_file($config_file))
{
include $config_file;
}
else
{
exit("<center><h1>Критическая ошибка не найден компонент $config_file</h1></center>");
}
if(isset($events))
{
self::$handlers = array_merge(self::$handlers, $events);
$ev_name = array_keys($events);
foreach($ev_name as $key=>$name)
{
$cnt = sizeof($events);
for($i=$cnt;$i<$cnt;$i++)
{
$tmp1 = $events[$name][$i];
$class_name = $tmp1[0];
self::actClass($class_name);
}
}
}
}
addHandler - служить для создания события который любому модулю системы генерировать события.
Листинг 3.15. Функция LoadHandlers
public static function addHandler ($event_name, $handler_module, $handler_method)
{
self::$handlers[$event_name][] = array($handler_module,$handler_method);
}
Execute - функция который обработает события. Все событии сохраняется в реестре событий.
Листинг 3.16. Функция Execute
public static function Execute($event_name,$params=array())
{
$r = new result();
if(isset(self::$handlers[$event_name]))
{
$cnt = sizeof(self::$handlers[$event_name]);
for($i=0;$i<$cnt;$i++)
{
if(!is_array($params))
{
$params = array($params);
}
$tmp1 = self::$handlers[$event_name][$i];
$tmp2 = $tmp1[0];
self::actClass($tmp2);
$r->value = call_user_func_array(self::$handlers[$event_name][$i],$params);} }
return $r;
}
Remove - функция который удаляет указанного события. Для этого нужно указать лишь имя события и он удаляется из системы.
Листинг 3.17. Функция Remove
public static function remove($name)
{ unset(self::$handlers[$name]);}
actClass - проверка на добавляемого класса. Если класс обрабатывающий данного события не активирован то активирует его.
Листинг 3.18. Функция actClass
public static function actClass($class_name)
{
if(!module::is_activated($class_name))
{
module::Activate($class_name);
}
}
3.8 Класс Session
Session - у данного класса нет ничего особого, он загружается при инициализации класса Eagle, определяет идентификатор сессии пользователя. У класса существует следующие функции:
Activate - этот функция выполняет активацию данного класса т.е. создает условие для работы его функций.
Листинг 3.19. Функция Activate
public static function Activate()
{
if(empty($_SESSION["session"]))
{
$_SESSION["session"] = new params();}}
getValue - функция который возвращает элемент сессии.
Листинг 3.20. Функция getValue
static function getValue($name)
{
return $_SESSION["session"]->getValue($name);
}
setValue - функция для добавления элемента к сессии
Листинг 3.21. Функция setValue
static function setValue($name,$value)
{
return $_SESSION["session"]->setValue($name,new params($value));
}
delValue - функция для удаления элемента сессии
Листинг 3.22. Функция delValue
static function delValue($name)
{
return $_SESSION["session"]->delValue($name);
}
endSession - данная функция завершает работу сессии
Листинг 3.23. Функция endSession
static function endSession()
{
session_destroy();
}
getHash - функция для получения идентификатора сессии
Листинг 3.23. Функция endSession
static function getHash()
{
return session_id();}
3.9 Класс Request
Request - класс запросов, собирает все поступившие данные от пользователя в «контейнер», из которого они будут доступны любому классу системы. У данного класса имеется следующие функции:
Process - функция который собирает все полученные данные от пользователя.
Листинг 3.24. Функция Process
static public function Process()
{
if(strlen($_GET["q"])<>0)
{
self::$q = explode("=",$_GET["q"]);
if(isset($_POST))
{
self::$post = new params($_POST);
}
self::$result = Execute::Process(self::$q);
}
else
{
self::$result=new result(Page::GetPages("page_title='".settings::getValue("default_page")."'"));}
events::Execute("VIEW");}
3.10 Класс Settings
Settings - класс настроек системы, позволяет определять, установить и изменить настройки системы.
Activate - активация класса, функция создает условии для работы остальных функций данного класса
Листинг 3.25. Функция Activate
public static function Activate()
{
self::GetSettings();
}
getValue - данная функция позволяет получить настройки системы. Чтобы получить настройку нужно указать имя настройки.
Листинг 3.26. Функция getValue
public static function getValue($name)
{
return self::$setting->getValue($name);
}
setValue - функция который изменяет настройку системы
Листинг 3.27. Функция setValue
public static function setValue($name,$value)
{
$arr["key"] = $name;
$arr['value'] = $value;
data::$settings->setValue($arr,"key='$name' and value='$value'");
self::GetSettings();
}
addValue - функция для добавления новых настроек системы
Листинг 3.28. Функция addValue
public static function addValue($name,$value)
{
$arr["key"] = $name;
$arr['value'] = $value;
return data::$settings->addValue($arr);
self::GetSettings(); }
GetSettings - функция который получает настройки системы при загрузке класса
Листинг 3.29. Функция GetSettings
private static function GetSettings()
{self::$setting = new params;
$k = data::$settings->getValue("*");
foreach ($k as $key=>$value)
self::$setting->setValue($value["key"],$value['value']);}
3.11 Класс Execute
Execute - один из системных классов который определят тип полученных запросов и запускает модули обрабатывающий данный запрос.
Activate - функция который создает условие для работы функций класса.
Листинг 3.30. Функция Activate
public static function Activate()
{
self::$types = new getData("module_types");
}
Process - функция который определяет обработчик запроса который получено от пользователя и генерирует нужную событию. После чего выполняет и возвращает.
Листинг 3.31. Функция Process
public static function Process($value)
{
if(isset($value))
{
$m = $value[0];
self::$type= new params(self::$types->getValue("*","type='".$value[0]."'"));
if(!self::$type)
{
request::$q = array("page");
self::$type = new params(self::$types->getValue("*","type='page'"));
}
if(module::is_install(self::$type->getValue("module_name")))
{
module::Activate(self::$type->getValue("module_name"));
}
else
{
if(file_exists(DIR_MODULES.self::$type->getValue("file")))
{
module::addModule(self::$type->getValue("name"),DIR_MODULES.self::$type->getValue('file'));
module::Activate(self::$type->getValue("name"));
}
}
unset($value[0]);
events::addHandler("EXECUTE",self::$type->getValue("module_name"),self::$type->getValue('function_name'));
$result = events::Execute("EXECUTE",$value);
return $result;
}
}
}
3.12 Класс Params
Params - класс используется как «контейнер» для хранения данных и для передачи внутри системы. Все функции реализованные в классе является статическими Класс имеет следующие функции:
__construct - функция который запускается при загрузки и наследовании. Он позволяет вводит данные при загрузке и наследовании.
Листинг 3.32. Функция __construct
function __construct($value=array())
{
$this->list = $value;
}
setValue - функция который добавляет данные. Для добавления нужно указать два параметра первый указывает имя входящих данных, второй значение.
Листинг 3.33. Функция setValue
public function setValue($name,$value)
{
if(isset($name) and isset($value))
{
$this->list[$name] = $value;
}
else
{
return "EXIST_PARAMS"; } }
getValue - функция который возвращает данные. Указывается имя возвращаемого значения. Функция проверяет если значение является массивом то его преобразует в класс Params , если скалярное значение то возвращает его.
Листинг 3.34. Функция getValue
public function getValue($name)
{
if(isset($name))
{
if(is_array($this->list[$name]))
{
$this->list[$name] = new params($this->list[$name]);
}
if($this->list[$name] instanceof params)
{
return $this->list[$name];
}
if(is_scalar($this->list[$name]))
{
return $this->list[$name];
}
}
}
delValue - функция удаляет указанное значение
Листинг 3.35. Функция getValue
public function delValue($name)
{
unset($this->list[$name]); }
getArray - преобразует все данные в ассоциативный массив
Листинг 3.36. Функция getArray
public function getArray()
{return $this->list;
}
3.13 Класс Module
Module - модуль для управления модулями системы. Выполняет автоматически запуск функций Activate который имеют все модули.
Activate - данная функция позволяет автоматическую загрузки модулей (классов) системы.
Листинг 3.37. Функция Activate
static function Activate($class_name)
{
if($class_name=="module")
{
// активация самого модулья
self::$activated = array();
self::$classes = array();
self::LoadConfig(DIR_CONFIG."config.core.php",DIR_CORE);
self::LoadConfig(DIR_CONFIG."config.modules.php",DIR_MODULES);
// регистрация метода обработчика автозагрузки модулей
spl_autoload_register(array("module",'Activate'));
}
else
{
if(!isset(self::$classes[$class_name]))
{
обработчик ошибок
}
else
{
include_once(self::$classes[$class_name]);
self::$activated[$class_name][] = $class_name;
if(eagle::$is_install && method_exists($class_name,"Activate"))
{
call_user_func(array($class_name,'Activate'));
}
}
}
}
LoadConfig - функция загружает конфигурационные файлы, который содержит данные о модулях и классах системы.
Листинг 3.38. Функция LoadConfig
public static function LoadConfig($config_file, $base_dir){
if(is_file($config_file))
{
include $config_file;
}
else
{
exit ("<center><h1>Критическая ошибка. Дальнейшая работы системы невозможна. Не найдены $config_file. </h1></center>");
}
if (isset($modules)){
foreach ($modules as $name => $path)
{
self::$classes[$name] = $base_dir.$path;
}
}
}
листинг данные сообщение почта
3.14 Классы типа просмотр
Классы данного типа отвечают за внешний вид и выводом обработанных данных. Все классы приведенные наверху являются системными, они обеспечивают работоспособность других классов. Кроме этих классов имеется классы который называется модулями. Модуль в терминах данной системы - это статический класс, имя которого определяется именем модуля. Все функции классов является статическими и использование статических функция позволяет их использовать во всех местах системы т.е. классах.
3.15 Класс Templates
Templates - модуль для работы с шаблонами, обеспечивает ввод и вывод данных шаблонов системы. Классе имеется следующие функции.
LoadTemplateList - функция загружает список всех шаблонов системы.
Листинг 3.39. Функция LoadTemplatesList
private static function LoadTemplateList()
{
if($result=data::$templates->getValue("*"))
{
self::$tpls = new params();
foreach($result as $key=>$vaue)
{
self::$tpls->setValue($value("template_name",$value));
}
}
else
{
return false;
}
}
GetTemplatePath - функция который позволяет получить шаблог который установлен по умолчанию.
Листинг 3.40. Функция GetTemplatePath
public static function GetTemplatePath()
{
return DIR_TEMPLATES.settings::getValue("default_template");
}
addTemplate - функция для добавления шаблона в систему.
Листинг 3.41. Функция addTemplate
public static function addTemplate()
{
$templates = request::$post;
if(isset($templates))
{
$k['template_name'] = $templates->getValue("name");
$k["template_path"] = $templates->getValue("path");
$k["template_author"] = $templates->getValue("author");
data::$templates->addValue($k);
}
else
{
return false;
}
}
setDefaultTemplate - данная функция позволяет установит выбранный шаблон для системы.
Листинг 3.42. Функция setDefaultTemplate
public static function setDefaultTemplate($name)
{
self::LoadTemplateList();
$t = self::$tpls->getValue($name);
settings::setValue("template_name",$t->getValue("template_path"));
}
LoadTemplate - функция загружает шаблон который установлен по умолчанию.
Листинг 3.43. Функция LoadTemplate
public static function LoadTemplate()
{includeDIR_TEMPLATES.settings::getValue("default_template")."index.php";
}
Ниже показано пример работы класса template. Данный класс включает шаблон системы который установлен. Если шаблон не существует то включается шаблон который системе имеется по умолчанию. В этом случи показано шаблон который установлен по умолчанию.
Рис. 3.1 Главная страница
3.16 Класс Render
Render - модуль который генерирует html страницу на основе шаблонов и заданных данных.
HTML - функция генерирует html страницу методом подстановки используя регулярных выражений.
Листинг 3.44. Функция HTML
public static function HTML($arrays,$tpl)
{
$html = "";
if(file_exists($tpl))
{
$handler = fopen($tpl,"r");
$text = fread($handler,filesize($tpl));
fclose($handler);
if(is_array($arrays))
{
if(isset($arrays[0]))
{
foreach($arrays as $key=>$value)
{
$html.=self::replace($value,$text);
}
}
else
{
$html = self::replace($arrays,$text);
}
return $html;
}
else
{
return false;
}
}
else
{
return false;
}
}
Replace - функция который заменяет все ключевые слова заданный в шаблоне на обработанные данные.
Листинг 3.45. Функция replace
public static function replace($array,$text)
{
$rtext="";$stext="";
foreach($array as $key=>$value)
{
$text = preg_replace("/{".$key."}/",$value,$text);
}
return $text; }
Ниже показано пример шаблона, который используется в системе. Шаблон сохраняется в формате *.tpl. Чтобы вывести нужную информацию надо написать поля таблицы из БД в фигурных скобках
Листинг 3.46. Шаблон для вывода страниц
<div class='form' align='left'>
<h3>{page_title}</h3>
<h4>
{page_content}
</h4>
<h5>Дата добавления: <a href='#'>{page_created_time}</a></h5>
</div>
Данном изображении показано результат работы функции Render и шаблона content.tpl
Рис. 3.2. Пример работы функции Render и шаблона content.tpl
3.17 Класс Magazine
Magazine - модуль магазина для данной системы. Позволят ввод и вывод данных, покупку , позволяет управлять корзиной пользователя.
Activate - функция который выполняет наследование класса getData для переменных.
Листинг 3.47. Функция Activate
public static function Activate ()
{
self::install();
self::$tovari = new getData("eagle_tovar");
self::$manufacturer = new getData("eagle_manufacturers");
self::$basket = new getData("eagle_basket");
self::$catalog = new getData("catalog");
}
LoadLastNews - функция который загружает все товары который добавлен последними.
Листинг 3.48. Функция LoadLastNews
public static function LoadLastNews()
{
self::$LastNewsList=self::$tovari->getValue("*","publication_date='".date("Y-m-d H:m:s")."' and status ='1'","addition_date desc","10");
return self::$LastNews;
}
LoadListTovar - данная функция позволяет загрузить список товаров из определенной категории.
Листинг 3.49. Функция LoadListTovar
public static function LoadListTovar($id_catalog)
{
$k = self::$tovari->getValue("*","id_type=$id_catalog");
return $k;
}
LoadTovar - функция позволяет загрузит данные определенного товара.
Листинг 3.50. Функция LoadTovar
public static function LoadTovar($id_tovar)
{
$id_tovar = ($id_tovar !="") ? $id_tovar = "AND eagle_tovar.id_tovar=$id_tovar":"";
$sort = "ORDER BY name ASC";
$count = "LIMIT 10";
/*self::$ListKatalog=self:: $catalog->getValue ("*",$id_catalog, $sort,$count);*/
$sql = "SELECT
eagle_tovar.id_tovar
catalog.name
, eagle_tovar.price
, eagle_tovar.count
, eagle_manufacturers.name
, eagle_tovar.addition_date
, eagle_tovar.publication_date
, eagle_tovar.status
, eagle_tovar.quantity_of_sales
, eagle_tovar.quantity_of_views
, eagle_tovar.image
FROM
eagle.eagle_tovar
, eagle.eagle_manufacturers
, eagle.eagle_basket
, eagle.catalog
WHERE (eagle_tovar.id_type=catalog.id_catalog
AND eagle_tovar.id_manufacturer=eagle_manufacturers.id_manufacture $id_tovar) $sort $count;";
$results = mysql_query($sql);
if(!$results)
{
return false;
}
else
{
while($res = mysql_fetch_assoc($result))
{
self::$ListTovar[] = $res;
}
}
}
LoadCatalog - загрузка списка каталога.
Листинг 3.51. Функция LoadCatalog
public static function LoadCatalog()
{
self::$ListKatalog = self::$catalog->getValue("*");
return self::$ListKatalog;
}
LoadBasketUser - функция который выполняет загрузку списка производителей.
Листинг 3.52. Функция LoadListmanufacturers
public static function LoadListManufacturer()
{
self::$ListManufaturer = self::$manufacturer->getValue("*");
return self::$ListManufaturer;
}
LoadBasketUser - функция который, позволяет загрузить данные корзины указанного пользователя.
Листинг 3.53. Функция LoadBasketUser
public static function LoadBasketUser($user_id)
{
self::$ListBasket=self::$basket->getValue("*","user_id=$user_id","purchasing date DESC");
}
DeleteBasket - функция для удаления данных из корзины. При использовании данной функции данные удаляется из корзины текущего пользователя.
Листинг 3.54. Функция DeleteBasket
public static function DeleteBasket()
{
if(user::rights()<>0)
{
if(isset(request::$post))
{
if(request::$post->is_isset("delete_basket"))
{
return self::$basket->delValue("id_basket='".request::$post->getValue("delete_basket")."'");
}
}
}
}
Addbasket - данная функция добавляет данные в корзину текущего пользователя.
Листинг 3.55. Функция AddBasket
public static function AddBasket()
{
if(user::rights()<>0)
{
if(isset(request::$post))
{ $post = request::$post;
if($post->is_isset("submit"))
{
$post->delValue("submit");
$post->setValue("user_id",user::id();)
return self::$basket->addValue($post->getArray());
}
}
}
}
3.18 Класс Page
Page - Данный модуль позволяет вывести страницы и выполнять поиск страниц.
GetPages - Функция для вывода страниц. Этот функция имеет 3 параметра и с помощью этих можно определят количество, порядок и страницу.
Листинг 3.56. Функция GetPages
public static function GetPages($where,$orderby="",$limit="")
{
if(!$result = data::$pages->getValue("*",$where,$orderby,$limit))
{
return $result[0] = data::$pages->getValue("*","page_id='".settings::getValue("default_page")."'");
}
else
{
return $result;
}
}
Load - функция который загружает страницу по названию
Листинг 3.57. Функция Load
public static function Load($title)
{
$result = data::$pages->getValue("*","page_title='$title'");
if(!$result)
{
echo mysql_error();
return data::$pages->getValue("*","page_id='".settings::getValue("default_page")."'");
}
else
{
return $result;
}
}
GetArrayPages - функция тоже аналогично к функцию GetPages. Отличие в том у него есть еще один параметр, который позволяет выполнить поиск по сайту.
Листинг 3.58. Функция GetArrayPages
public static function GetArrayPages($text,$orderby="",$limit="",$groupby="")
{
self::$p = new params();
self::$a = new params();
$where = ($where !="") ? "WHERE page_title LIKE '*$text*' OR page_subtitle LIKE '*$text*'
OR page_keywords LIKE '*$text*' OR page_content='*$text*' AND page_status='public'":"";
$groupby = ($groupby !="") ? "GROUP BY $groupby":"";
$sql = "SELECT * FROM pages $where $orderby $limit $groupby";
$res = db::query($sql);
if(!$res)
{
while($result = mysql_fetch_assoc($res))
{
$r[] = $result;
}
}
return $r;
}
3.19 Класс Auth
Auth - модуль который, обеспечивает авторизацию и выход пользователя из системы.
Authenticate - функция для авторизации пользователя.
Листинг 3.59. Функция Authenticate
public static function Authenticate()
{
if(!isset(request::$post))
{
return false;
}
else
{
$login = request::$post->getValue("login");
$password = request::$post->getValue("password");
if(!isset($login) or !isset($password))
{
return false;
}
else
{
$result = data::$user->getValue("*","user_login='$login' and user_password='$password'");
if(!$result)
{
session::setValue("user",$result);
}
}
}
}
ExitUser - функция осуществляет выход из системы. Он заверщает сессию текущего пользователя.
Листинг 3.60. Функция ExitUser
public static function ExitUser()
{
session::endSession();
}
3.20 Класс User
User - модуль который позволяет выводит данные текущего пользователя.
Activate - функция который автоматически запускается при загрузке класса и вызывает функцию GetDefaultUser
Листинг 3.61. Функция Activate
public static function Activate()
{
self::GetDefaultUser();
}
GetDefaultUser - функция который загружает данные пользователя установленный по умолчанию.
Листинг 3.62. Функция GetDefaultUser
private static function GetDefaultUser()
{
if(!session::is_isset("user"))
{
session::setValue("user",data::$user->getValue("*","user_login='guest'"));
self::$u = session::getValue("user");
$uid = self::$u->getValue("user_id");
session::setValue("user_info",data::$user->getValue("*","user_id='$uid'"));
self::$ui= session::getValue("user_info");
}
}
Login - функция который возвращает логин текущего пользователя.
Листинг 3.63. Функция Login
public static function login()
{
self::GetDefaultUser();
return self::$u->getValue("user_login");
}
Password - функция который возвращает пароль текущего пользователя.
Листинг 3.64. Функция Password
public static function password()
{
self::GetDefaultUser();
return self::$u->getValue("user_password");
}
Hash - функция который возвращает хеш-код текущего пользователя.
Листинг 3.65. Функция hash
public static function hash()
{self::GetDefaultUser();
return self::$u->getValue("user_hash"); }
Auth_time - функция который возвращает дата и время который пользователь вошел в систему.
Листинг 3.66. Функция auth_time
public static function auth_time()
{
self::GetDefaultUser();
return self::$u->getValue("user_auth_time");
}
Status - возвращает значение 0 или 1. 0 означает что текущий пользователь не активирован, 1 означает что текущий пользователь активирован.
Листинг 3.67. Функция status
public static function status()
{
self::GetDefaultUser();
return self::$u->getValue("user_status");
}
Rights - функция который можно определить права доступа текущего пользователя.
Листинг 3.68. Функция rights
public static function rights()
{
self::GetDefaultUser();
return self::$u->getValue("user_rights");
}
Email - функция который возвращает адрес электронной почты текущего пользователя.
Листинг 3.69. Функция ip
public static function email()
{
self::GetDefaultUser();
return self::$u->getValue("user_mail");
}
RegistratedDate - данная функция возвращает дату регистрации текущего пользователя.
Листинг 3.70. Функция RegistratedDate
public static function RegistratedDate()
{
self::GetDefaultUser();
return self::$u->getValue("user_reg_date");
}
Img - функция который возвращает путь к картинке пользователя.
Листинг 3.71. Функция img
public static function img()
{
self::GetDefaultUser();
if(!self::$ui->is_isset("user_img"))
{
return settings::getValue("user_img");
}
else
{ return self::$ui->getValue("user_img"); } }
3.21 Класс Registration
Registration - модуль для регистрации нового пользователя. Данный модуль обработается событием register при регистрации нового пользователя.
Process - функция который выполняет проверку данных полученные от пользователя и если все данные правильны то сохраняет в БД.
Листинг 3.72. Функция Process
public static function Process()
{
self::$newuser["user_login"]= check::login(self::$post->getValue("login"));
self::$newuser["user_password"] = check::password(
self::$post->getValue("password1"),
self::$post->getValue("password2")
);
self::$newuser["user_hash"] = session::getHash();
self::$newuser["user_auth_time"] = date("Y-m-d H:m:s");
self::$newuser["user_pol"] = self::$post->getValue("pol");
self::$newuser["user_rights"] = "1";
self::$newuser["user_status"] = "0";
self::$newuser["user_mail"] = check::mail(self::$post->getValue("mail"));
self::$newuser["user_ip"] = $_SERVER["REMOTE_ADDR"];
self::$newuser["user_reg_date"] = date("Y-m-d H:m:s");
foreach(self::$newuser as $key=>$value)
{
if($value==false)
{
return implode(",\r\n",check::$log);
exit;
}
}
data::$user->addValue(self::$newuser); self::SendActivate($newuser["user_mail"],$newuser["user_login"],session::getHash());
}
SendActivate - функция, который отправляет ссылку активации на почту нового регистрированного пользователя.
Листинг 3.73. Функция Process
public static function SendActivate($mail,$login,$activation)
{
$subject = "Добро пожвловать в ".settings::getValue("site_name");
$message = "Здраствуйте $login Для активации нажмите
<a href='http://".SITE_DOMAIN."'>Активация</a></br>
Вам пришло этот сообщение потому что вы регистрировались в нашем сайте. Если это не вы тогда просто удалите данное сообщение
$reply = settings::getValue("reply_email");
Mail::Send($mail,$subject,$message,$from,$reply);
Mail::Complete();
}
3.23 Класс Search
Search - класс позволяет осуществит поиск по страницам сайта. Он выполняет поиск по названию, ключевым словам и содержимым. Классе созданы две функции:
Activate - создает необходимые условия для выполнения функции run
Листинг 3.74. Функция Activate
public static function Activate()
{
if(isset(request::$post))
{
self::$post = request::$post;
}
else
{
self::$post = false;
}
}
Run - функция который выполняет поиск по страницам сайта.
Листинг 3.75. Функция Run
public static function run()
{
if(self::$post)
{
request::$q[0] = "page";
self::$search_result = Page::GetArrayPages(self::$post->getValue("search_text"),"page_created_date DESC","10");
if(!is_array(self::$search_result[0]))
{
self::$search_result = data::$pages->getValue("*","page_id='".settings::getValue("default_page")."'");
}
return self::$search_result;
}
else
{
return false;
}
}
Ниже приведено результат работы класса Search
Рис. 3.3 Результат работы поиска
ЗАКЛЮЧЕНИЕ
В процессе разработки данной системы я изучил, как работать с классами и как правильно организовать взаимодействие классов. Я научился как создать проект системы с использованием UML , так как для того чтобы начать разработку данной системы мне пришлось создать его проект. Больше узнал о возможностях PHP, которые еще не изучил. Разработке программного продукта дает возможность от написания кода несколько раз и сэкономит время.
Поэтому я создал данную систему на уровне ООП, и я больше узнал о возможностях использования классов для создания программных продуктов. Научился как работать с статическими функциями и возможности их использования. Кроме этих во время разработки я использовал веб - сервер Apache и СУБД MySQL. После этого я научился как пользоваться веб - сервером Apache, как настраивать и как работают файлы .htaccess.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Г. Кен, М. Гильберт «Программирование на Visual Basic и VBA», Киев, 2000 г. - 410 стр.
2. Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. Базы данных: Учебник для высших учебных заведений /Под ред. Проф.А. Д Хоменко. СПб.: КОРОНА, 2000г.- 416 стр
3. Е. Петрусос «Visual Basic 6.0». СПб. 2000 г. - 250 стр.
4. С.В. Глушаков, А.С. Сурядный «Программирование на VB6» СПб. 2002 г - 497 стр.
5. Т.С. Карпова, «Базы данных: модели, разработка, реализации», СПб. 2002 г. - 304 стр.
Размещено на Allbest.ru
Подобные документы
Разработка класса "Калькулятор" выполняющего ввод данных, проверку правильности введенных данных, выдачу соответствующих сообщений в случае возникновения ошибок. Листинг и скриншоты выполнения программы, порядок ее запуска. Руководство пользователя.
курсовая работа [394,2 K], добавлен 18.05.2013Особенности представления алгебраических операций над регулярными языками. Операторы, основные принципы работы с регулярными выражениями, способы их построения. Разработка программ для поиска в тексте необходимой информации, их тестирование и отладка.
контрольная работа [197,9 K], добавлен 07.08.2013Разработка набора взаимосвязанных классов для реализации Hash-поиска как специализированного контейнера. Поиск с использованием Хэш-функций. Объектная технология. Описание пользовательского интерфейса. Листинг и описание всех классов библиотеки на DP.
курсовая работа [231,2 K], добавлен 15.10.2008Построение абстрактной модели. Структура базового класса System_Term: формальное описание класса, структура данных и функций, инструкция программиста и пользователя. Структура базовых классов mobile, Home, TV, Internet, их составные части и функционал.
курсовая работа [1,2 M], добавлен 20.06.2014Обзор возможностей, базовых классов и элементов управления Microsoft Visual Foxpro, описание функций и возможностей языка SQL. Постановка задачи, руководство пользователя и листинг программы. Компоненты информационной системы, основные функции СУБД.
курсовая работа [360,1 K], добавлен 12.06.2010Форма "Form1", "Form2", "Form3" (2D) и "Form3" (3D), диаграмма классов. Тестирование, его протокол, руководство пользователя. Просмотр общих и подробных сведений статистики, графического представления в 2D и 3D, выход из приложения, листинг программы.
курсовая работа [1,4 M], добавлен 26.08.2012Основы программирования на 32-битном Ассемблере, разработка с его помощью программы, демонстрирующей работу одного из разделов ОС Windоws. Описание используемых АРI-функций как интерфейса программирования приложений. Листинг программы, результаты работы.
курсовая работа [164,5 K], добавлен 18.05.2014Создание базы данных и СУБД. Структура простейшей базы данных. Особенности языка программирования Турбо Паскаль. Описание типов, констант, переменных, процедур и функций. Описание алгоритма базы данных (для сотрудников ГИБДД), листинг программы.
курсовая работа [26,3 K], добавлен 26.01.2012Структурная схема получения гороскопа по дате рождения. Листинг исходных кодов программы и руководство пользователя. Ввод данных с помощью объекта класса QDateEdit. Разработка пользовательского интерфейса. Выбор стратегии тестирования и отладка программы.
курсовая работа [1,0 M], добавлен 31.05.2015Описание основных функциональных блоков системы и выбор элементной базы. Схема электрическая принципиальная. Описание программы, алгоритм функционирования. Проверка работоспособности, листинг, моделирование. Функции работы с индикатором. Опрос клавиатуры.
курсовая работа [2,4 M], добавлен 21.03.2016