Разработка системы управления содержимым

Листинг класса для работы с регулярными выражениями. Особенности классов для проверки данных при регистрации и отправки сообщений. Отправка ссылки для активации на почту пользователя, описание основных классов, анализ их назначения и листинг функций.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.