';$params = array ('full'=>$full, 'edit'=>site_url.'facults/edit', 'del'=>site_url.'facults/del',
'table'=>$table, 'fields'=>$fields, 'widths'=>$widths, 'add'=>site_url.'facults/add', 'add_form'=>$add_form);
$registry['title'] = 'Список факультетов';
$registry['tpl_params'] = $params;
$registry['help'] = 'Здесь представлен список факультетов ВУЗа.
Администратор может добавлять, удалять и редактировать названия факультетов';
}
function del ()
{
$registry = $this→registry;
if (!$registry['access']→get_privilege ('edit_facults_priv')) $registry['access']→restrict ();
$id = (int)$this→args[0];
if ($id≤0) return;
if (!lib:is_childless ('facults', $id)) {$registry['message'] = 'Невозможно удалить. Сначала удалите
дочерние элементы. Назад'; return;}
if (!isset ($this→args[0])) return;
$DB = $registry['DB'];
$DB→query ('DELETE FROM `facults` WHERE id=? LIMIT 1', $id);
lib:redirect (site_url.'facults');
}
function edit ()
{
$registry = $this→registry;
if (!$registry['access']→get_privilege ('edit_facults_priv')) $registry['access']→restrict ();
if (!isset ($this→args[0])) return;
$DB = $registry['DB'];
$id = (int)$this→args[0];
if ($id≤0) return;
$table = $DB→select ('SELECT * FROM facults WHERE id=? LIMIT 1', $id);
$name = $table[0]['name'];
if (empty ($_POST['name']))
{
$smarty = $registry['smarty'];
//$smarty→assign ('name', $name);
$edit_form = 'Название:
';
//$smarty→assign ('fields', array ('Название'=>'name'));
//$smarty→assign ('values', array ('name'=>$name));
$smarty→assign ('edit_form', $edit_form);
$smarty→display ('popup_edit.tpl');
exit ();
}
else
{
$name = $_POST['name'];
$DB→query ('UPDATE `facults` SET name=? WHERE id=? AND NOT name=?',$name, $id, $name);
echo lib: reload_caller_js ();
exit ();
}
//$registry['message'] = 'Редактируем '.$id;
}
function add ()
{
if (!isset ($_POST['name'])) return;
$name = $_POST['name'];
$registry = $this→registry;
if (!$registry['access']→get_privilege ('edit_facults_priv')) $registry['access']→restrict ();
$DB = $registry['DB'];
$res = $DB→query ('INSERT INTO `facults` (name) VALUES (?)', $name);
if (!$res)
{
$registry['message'] = 'Ошибка добавления';
return;
}
lib:redirect (site_url.'facults');
}
}
?>
Class Router {
private $registry;
private $path;
private $args = array ();
function __construct () {
$this→registry = Registry: getInstance ();
}
function setPath ($path) {
$path = trim ($path, '/\');
$path .= DIRSEP;
if (is_dir ($path) == false) {
throw new Exception ('Invalid controller path: `'. $path. '`');
}
$this→path = $path;
}
/**
* Получает данные о контроллере
*
* @param string $file Имя файла контроллера
* @param string $controller Имя контроллера, по умолчанию 'index'
* @param string $action Имя действия, по умолчанию 'index'
* @param array $args Массив аргументов, переданных через URL
* @return void
*/
private function getController (&$file, &$controller, &$action, &$args) {
$route = (empty ($_GET['route']))? '': $_GET['route'];
if (empty ($route)) { $route = 'index'; }
// Хак! Если пользователь не вошел кидаем на вход
if (!@$_SESSION['auth']) $route = 'user/login';
// Получаем раздельные части
$route = trim ($route, '/\');
$parts = explode ('/', $route);
// Находим правильный контроллер
$cmd_path = $this→path;
foreach ($parts as $part) {
$fullpath = $cmd_path. $part;
// Есть ли папка с таким путём?
if (is_dir ($fullpath)) {
$cmd_path .= $part. DIRSEP;
array_shift ($parts);
continue;
}
// Находим файл
if (is_file ($fullpath. '.php')) {
$controller = $part;
array_shift ($parts);
break;
}
}
if (empty ($controller)) { $controller = 'index'; };
// Получаем действие
$action = array_shift ($parts);
if (empty ($action)) { $action = 'index'; }
$file = $cmd_path. $controller. '.php';
$args = $parts;
}
function delegate () {
// Анализируем путь
/**
* @var string $file
*/
$file = $controller = $action = $args = '';
$this→getController ($file, $controller, $action, $args);
// Файл доступен?
if (is_readable ($file) == false) {
die ('404 Not Found');
}
// Подключаем файл
include ($file);
// Создаём экземпляр контроллера
$class = 'Controller_'. $controller;
$controller = new $class ($this→registry);
// Действие доступно?
if (is_callable (array ($controller, $action)) == false) {
die ('404 Not Found');
}
// Выполняем действие
$controller→args = $args;
$controller→$action ();
}
}
?>
class Registry implements ArrayAccess, Iterator
{
private $vars = array ();
/**
* @var Registry
*/
public static $_instance;
private function __construct (){
}
/**
* Возвращает экземпляр класса
*
* @return Registry
*/
public static function getInstance ()
{
if (!self:$_instance) {
self:$_instance = new self;
}
return self:$_instance;
}
function set ($key, $var) {
/*if (isset ($this→vars[$key]) == true) {
throw new Exception ('Unable to set var `'. $key. '`. Already set.');
}*/
$this→vars[$key] = $var;
return true;
}
function get ($key) {
if (isset ($this→vars[$key]) == false) {
return null;
}
return $this→vars[$key];
}
function remove ($key) {
unset ($this→vars[$key]);
}
function offsetExists ($offset) {
return isset ($this→vars[$offset]);
}
function offsetGet ($offset) {
return $this→get ($offset);
}
function offsetSet ($offset, $value) {
$this→set ($offset, $value);
}
function offsetUnset ($offset) {
unset ($this→vars[$offset]);
}
public function rewind () {
reset ($this→vars);
}
public function current () {
$var = current ($this→vars);
return $var;
}
public function key () {
$var = key ($this→vars);
return $var;
}
public function next () {
$var = next ($this→vars);
return $var;
}
public function valid () {
$var = $this→current () ≠= false;
return $var;
}
}
?>Показать весь текст
Заполнить форму текущей работой