mirror of
https://github.com/e107inc/e107.git
synced 2025-01-17 20:58:30 +01:00
713 lines
16 KiB
PHP
713 lines
16 KiB
PHP
<?php
|
|
/*
|
|
* e107 website system
|
|
*
|
|
* Copyright (C) 2008-2016 e107 Inc (e107.org)
|
|
* Released under the terms and conditions of the
|
|
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
|
|
*
|
|
* @file
|
|
* Class installations to handle configuration forms on Admin UI.
|
|
*/
|
|
|
|
$eplug_admin = true;
|
|
|
|
require_once(__DIR__.'/../../class2.php');
|
|
|
|
if(!getperms("P") || !e107::isInstalled('gallery'))
|
|
{
|
|
e107::redirect('admin');
|
|
exit();
|
|
}
|
|
|
|
// [PLUGINS]/gallery/languages/[LANGUAGE]/[LANGUAGE]_admin.php
|
|
e107::lan('gallery', true, true);
|
|
|
|
$e_sub_cat = 'gallery';
|
|
|
|
|
|
/**
|
|
* Class plugin_gallery_admin.
|
|
*/
|
|
class plugin_gallery_admin extends e_admin_dispatcher
|
|
{
|
|
|
|
/**
|
|
* Required (set by child class).
|
|
*
|
|
* Controller map array in format.
|
|
* @code
|
|
* 'MODE' => array(
|
|
* 'controller' =>'CONTROLLER_CLASS_NAME',
|
|
* 'path' => 'CONTROLLER SCRIPT PATH',
|
|
* 'ui' => 'UI_CLASS', // extend of 'comments_admin_form_ui'
|
|
* 'uipath' => 'path/to/ui/',
|
|
* );
|
|
* @endcode
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $modes = array(
|
|
'main' => array(
|
|
'controller' => 'gallery_cat_admin_ui',
|
|
'path' => null,
|
|
'ui' => 'gallery_cat_admin_form_ui',
|
|
'uipath' => null
|
|
),
|
|
'cat' => array(
|
|
'controller' => 'gallery_cat_ui',
|
|
'path' => null,
|
|
'ui' => 'gallery_cat_form_ui',
|
|
'uipath' => null
|
|
)
|
|
);
|
|
|
|
/**
|
|
* Optional (set by child class).
|
|
*
|
|
* Required for admin menu render. Format:
|
|
* @code
|
|
* 'mode/action' => array(
|
|
* 'caption' => 'Link title',
|
|
* 'perm' => '0',
|
|
* 'url' => '{e_PLUGIN}plugname/admin_config.php',
|
|
* ...
|
|
* );
|
|
* @endcode
|
|
*
|
|
* Note that 'perm' and 'userclass' restrictions are inherited from the $modes, $access and $perm, so you don't
|
|
* have to set that vars if you don't need any additional 'visual' control.
|
|
*
|
|
* All valid key-value pair (see e107::getNav()->admin function) are accepted.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $adminMenu = array(
|
|
'main/prefs' => array('caption' => LAN_PREFS, 'perm' => 'P'),
|
|
'main/list' => array('caption' => LAN_CATEGORIES, 'perm' => 'P'),
|
|
'main/create' => array('caption' => LAN_CREATE, 'perm' => 'P'),
|
|
);
|
|
|
|
/**
|
|
* Optional (set by child class).
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $menuTitle = LAN_PLUGIN_GALLERY_TITLE;
|
|
|
|
/**
|
|
* Initial function.
|
|
*/
|
|
function init()
|
|
{
|
|
|
|
if(E107_DEBUG_LEVEL > 0)
|
|
{
|
|
$this->adminMenu['main/list'] = array(
|
|
'caption' => LAN_CATEGORY,
|
|
'perm' => 'P',
|
|
);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Class gallery_cat_admin_ui.
|
|
*/
|
|
class gallery_cat_admin_ui extends e_admin_ui
|
|
{
|
|
|
|
/**
|
|
* Could be LAN constant (multi-language support).
|
|
*
|
|
* @var string plugin name
|
|
*/
|
|
protected $pluginTitle = LAN_PLUGIN_GALLERY_TITLE;
|
|
|
|
/**
|
|
* Plugin name.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $pluginName = 'gallery';
|
|
|
|
/**
|
|
* Plugin table.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $table = "core_media_cat";
|
|
|
|
/**
|
|
* Primary key in plugin table.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $pid = "media_cat_id";
|
|
|
|
/**
|
|
* Default (db) limit value.
|
|
*
|
|
* @var integer
|
|
*/
|
|
protected $perPage = 10;
|
|
|
|
/**
|
|
* SQL order, false to disable order, null is default order.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $listOrder = 'media_cat_order';
|
|
|
|
/**
|
|
* SQL query for listing. Without any Order or Limit.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $listQry = "SELECT * FROM `#core_media_cat` WHERE media_cat_owner = 'gallery' ";
|
|
|
|
/**
|
|
* UI field data.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $fields = array(
|
|
'checkboxes' => array(
|
|
'title' => '',
|
|
'type' => null,
|
|
'width' => '5%',
|
|
'forced' => true,
|
|
'thclass' => 'center',
|
|
'class' => 'center',
|
|
),
|
|
'media_cat_image' => array(
|
|
'title' => LAN_IMAGE,
|
|
'type' => 'image',
|
|
'data' => 'str',
|
|
'width' => '100px',
|
|
'thclass' => 'center',
|
|
'class' => 'center',
|
|
'readParms' => 'thumb=60&thumb_urlraw=0&thumb_aw=60',
|
|
'readonly' => false,
|
|
'batch' => false,
|
|
'filter' => false,
|
|
),
|
|
'media_cat_owner' => array(
|
|
'title' => LAN_OWNER,
|
|
'type' => 'hidden',
|
|
'nolist' => true,
|
|
'width' => 'auto',
|
|
'thclass' => 'left',
|
|
'readonly' => false,
|
|
'writeParms' => 'value=gallery',
|
|
),
|
|
'media_cat_category' => array(
|
|
'title' => LAN_CATEGORY,
|
|
'type' => 'hidden',
|
|
'nolist' => true,
|
|
'width' => 'auto',
|
|
'thclass' => 'left',
|
|
'readonly' => true,
|
|
),
|
|
'media_cat_title' => array(
|
|
'title' => LAN_TITLE,
|
|
'type' => 'text',
|
|
'width' => 'auto',
|
|
'thclass' => 'left',
|
|
'readonly' => false,
|
|
'inline' => true,
|
|
),
|
|
'media_cat_sef' => array(
|
|
'title' => LAN_SEFURL,
|
|
'type' => 'text',
|
|
'inline' => true,
|
|
'width' => 'auto',
|
|
'thclass' => 'left',
|
|
),
|
|
'media_cat_diz' => array(
|
|
'title' => LAN_DESCRIPTION,
|
|
'type' => 'bbarea',
|
|
'width' => '30%',
|
|
'readParms' => 'expand=...&truncate=150&bb=1',
|
|
'readonly' => false,
|
|
),
|
|
'media_cat_class' => array(
|
|
'title' => LAN_VISIBILITY,
|
|
'type' => 'userclass',
|
|
'width' => 'auto',
|
|
'data' => 'int',
|
|
'filter' => true,
|
|
'batch' => true,
|
|
),
|
|
'media_cat_order' => array(
|
|
'title' => LAN_ORDER,
|
|
'type' => 'text',
|
|
'width' => 'auto',
|
|
'thclass' => 'center',
|
|
'class' => 'center',
|
|
),
|
|
'options' => array(
|
|
'title' => LAN_OPTIONS,
|
|
'type' => null,
|
|
'width' => '5%',
|
|
'forced' => true,
|
|
'thclass' => 'center last',
|
|
'class' => 'right',
|
|
),
|
|
);
|
|
|
|
/**
|
|
* Referenced from $prefs property per field - 'tab => xxx' where xxx is the tab key (identifier).
|
|
*
|
|
* Example:
|
|
* @code
|
|
* array(
|
|
* '0' => 'Tab label',
|
|
* '1' => 'Another label',
|
|
* );
|
|
* @endcode
|
|
*
|
|
* @var array
|
|
* Edit/create form tabs.
|
|
*/
|
|
protected $preftabs = array(
|
|
LAN_GENERAL,
|
|
LAN_GALLERY_ADMIN_03,
|
|
LAN_GALLERY_ADMIN_32,
|
|
);
|
|
|
|
/**
|
|
* Plugin Preference description array.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $prefs = array(
|
|
'popup_w' => array(
|
|
'title' => LAN_GALLERY_ADMIN_04,
|
|
'tab' => 0,
|
|
'type' => 'text',
|
|
'data' => 'int',
|
|
'help' => LAN_GALLERY_ADMIN_05,
|
|
),
|
|
'popup_h' => array(
|
|
'title' => LAN_GALLERY_ADMIN_06,
|
|
'tab' => 0,
|
|
'type' => 'text',
|
|
'data' => 'int',
|
|
'help' => LAN_GALLERY_ADMIN_07,
|
|
),
|
|
'downloadable' => array(
|
|
'title' => LAN_GALLERY_ADMIN_08,
|
|
'tab' => 0,
|
|
'type' => 'boolean',
|
|
'data' => 'int',
|
|
'help' => LAN_GALLERY_ADMIN_09,
|
|
),
|
|
'slideshow_category' => array(
|
|
'title' => LAN_GALLERY_ADMIN_10,
|
|
'tab' => 1,
|
|
'type' => 'dropdown',
|
|
'data' => 'str',
|
|
'help' => LAN_GALLERY_ADMIN_11,
|
|
),
|
|
'slideshow_duration' => array(
|
|
'title' => LAN_GALLERY_ADMIN_12,
|
|
'type' => 'number',
|
|
'tab' => 1,
|
|
'data' => 'integer',
|
|
'help' => LAN_GALLERY_ADMIN_13,
|
|
),
|
|
'slideshow_auto' => array(
|
|
'title' => LAN_GALLERY_ADMIN_14,
|
|
'type' => 'boolean',
|
|
'tab' => 1,
|
|
'data' => 'integer',
|
|
'help' => LAN_GALLERY_ADMIN_15,
|
|
),
|
|
'slideshow_freq' => array(
|
|
'title' => LAN_GALLERY_ADMIN_16,
|
|
'type' => 'number',
|
|
'tab' => 1,
|
|
'data' => 'integer',
|
|
'help' => LAN_GALLERY_ADMIN_17,
|
|
),
|
|
'slideshow_effect' => array(
|
|
'title' => LAN_GALLERY_ADMIN_18,
|
|
'type' => 'dropdown',
|
|
'tab' => 1,
|
|
'data' => 'str',
|
|
'help' => LAN_GALLERY_ADMIN_19
|
|
),
|
|
'perpage' => array(
|
|
'title' => LAN_GALLERY_ADMIN_20,
|
|
'tab' => 0,
|
|
'type' => 'number',
|
|
'data' => 'int',
|
|
'help' => LAN_GALLERY_ADMIN_21,
|
|
),
|
|
'orderby' => array(
|
|
'title' => LAN_GALLERY_ADMIN_22,
|
|
'tab' => 0,
|
|
'type' => 'dropdown',
|
|
'data' => 'str',
|
|
'writeParms' => array(
|
|
'optArray' => array(
|
|
'media_id ASC' => LAN_GALLERY_ADMIN_23,
|
|
'media_id DESC' => LAN_GALLERY_ADMIN_24,
|
|
'media_name ASC' => LAN_GALLERY_ADMIN_25,
|
|
'media_name DESC' => LAN_GALLERY_ADMIN_26,
|
|
'media_caption ASC' => LAN_GALLERY_ADMIN_27,
|
|
'media_caption DESC' => LAN_GALLERY_ADMIN_28,
|
|
),
|
|
),
|
|
),
|
|
'pp_global' => array(
|
|
'title' => LAN_GALLERY_ADMIN_70,
|
|
'type' => 'boolean',
|
|
'data' => 'int',
|
|
'tab' => 2,
|
|
),
|
|
'pp_hook' => array(
|
|
'title' => LAN_GALLERY_ADMIN_71,
|
|
'type' => 'text',
|
|
'data' => 'str',
|
|
'writeParms' => array(
|
|
'default' => 'data-gal',
|
|
),
|
|
'tab' => 2,
|
|
),
|
|
'pp_animation_speed' => array(
|
|
'title' => LAN_GALLERY_ADMIN_33,
|
|
'type' => 'dropdown',
|
|
'data' => 'str',
|
|
'writeParms' => array(
|
|
'optArray' => array(
|
|
'fast' => LAN_GALLERY_ADMIN_62,
|
|
'slow' => LAN_GALLERY_ADMIN_63,
|
|
'normal' => LAN_GALLERY_ADMIN_64,
|
|
),
|
|
),
|
|
'tab' => 2,
|
|
),
|
|
'pp_slideshow' => array(
|
|
'title' => LAN_GALLERY_ADMIN_34,
|
|
'type' => 'text',
|
|
'data' => 'int',
|
|
'writeParms' => array(
|
|
'default' => 5000,
|
|
),
|
|
'tab' => 2,
|
|
),
|
|
'pp_autoplay_slideshow' => array(
|
|
'title' => LAN_GALLERY_ADMIN_35,
|
|
'type' => 'boolean',
|
|
'data' => 'int',
|
|
'tab' => 2,
|
|
),
|
|
'pp_opacity' => array(
|
|
'title' => LAN_GALLERY_ADMIN_36,
|
|
'help' => LAN_GALLERY_ADMIN_37,
|
|
'type' => 'text',
|
|
'data' => 'float',
|
|
'writeParms' => array(
|
|
'default' => 0.80,
|
|
),
|
|
'tab' => 2,
|
|
),
|
|
'pp_show_title' => array(
|
|
'title' => LAN_GALLERY_ADMIN_38,
|
|
'type' => 'boolean',
|
|
'data' => 'int',
|
|
'tab' => 2,
|
|
),
|
|
'pp_allow_resize' => array(
|
|
'title' => LAN_GALLERY_ADMIN_39,
|
|
'help' => LAN_GALLERY_ADMIN_40,
|
|
'type' => 'boolean',
|
|
'data' => 'int',
|
|
'tab' => 2,
|
|
),
|
|
'pp_default_width' => array(
|
|
'title' => LAN_GALLERY_ADMIN_41,
|
|
'type' => 'text',
|
|
'data' => 'int',
|
|
'writeParms' => array(
|
|
'default' => 500,
|
|
),
|
|
'tab' => 2,
|
|
),
|
|
'pp_default_height' => array(
|
|
'title' => LAN_GALLERY_ADMIN_42,
|
|
'type' => 'text',
|
|
'data' => 'int',
|
|
'writeParms' => array(
|
|
'default' => 344,
|
|
),
|
|
'tab' => 2,
|
|
),
|
|
'pp_counter_separator_label' => array(
|
|
'title' => LAN_GALLERY_ADMIN_43,
|
|
'help' => LAN_GALLERY_ADMIN_44,
|
|
'type' => 'text',
|
|
'data' => 'str',
|
|
'writeParms' => array(
|
|
'default' => '/',
|
|
),
|
|
'tab' => 2,
|
|
),
|
|
'pp_theme' => array(
|
|
'title' => LAN_THEME,
|
|
'type' => 'dropdown',
|
|
'data' => 'str',
|
|
'writeParms' => array(
|
|
'optArray' => array(
|
|
'pp_default' => LAN_DEFAULT,
|
|
'light_rounded' => LAN_GALLERY_ADMIN_65,
|
|
'dark_rounded' => LAN_GALLERY_ADMIN_66,
|
|
'light_square' => LAN_GALLERY_ADMIN_67,
|
|
'dark_square' => LAN_GALLERY_ADMIN_68,
|
|
'facebook' => LAN_GALLERY_ADMIN_69,
|
|
),
|
|
),
|
|
'tab' => 2,
|
|
),
|
|
'pp_horizontal_padding' => array(
|
|
'title' => LAN_GALLERY_ADMIN_46,
|
|
'help' => LAN_GALLERY_ADMIN_47,
|
|
'type' => 'text',
|
|
'data' => 'int',
|
|
'writeParms' => array(
|
|
'default' => 20,
|
|
),
|
|
'tab' => 2,
|
|
),
|
|
'pp_hideflash' => array(
|
|
'title' => LAN_GALLERY_ADMIN_48,
|
|
'help' => LAN_GALLERY_ADMIN_49,
|
|
'type' => 'boolean',
|
|
'data' => 'int',
|
|
'tab' => 2,
|
|
),
|
|
'pp_wmode' => array(
|
|
'title' => LAN_GALLERY_ADMIN_50,
|
|
'help' => LAN_GALLERY_ADMIN_51,
|
|
'type' => 'text',
|
|
'data' => 'str',
|
|
'writeParms' => array(
|
|
'default' => 'opaque',
|
|
),
|
|
'tab' => 2,
|
|
),
|
|
'pp_autoplay' => array(
|
|
'title' => LAN_GALLERY_ADMIN_52,
|
|
'type' => 'boolean',
|
|
'data' => 'int',
|
|
'tab' => 2,
|
|
),
|
|
'pp_modal' => array(
|
|
'title' => LAN_GALLERY_ADMIN_53,
|
|
'help' => LAN_GALLERY_ADMIN_54,
|
|
'type' => 'boolean',
|
|
'data' => 'int',
|
|
'tab' => 2,
|
|
),
|
|
'pp_deeplinking' => array(
|
|
'title' => LAN_GALLERY_ADMIN_55,
|
|
'help' => LAN_GALLERY_ADMIN_56,
|
|
'type' => 'boolean',
|
|
'data' => 'int',
|
|
'tab' => 2,
|
|
),
|
|
'pp_overlay_gallery' => array(
|
|
'title' => LAN_GALLERY_ADMIN_57,
|
|
'help' => LAN_GALLERY_ADMIN_58,
|
|
'type' => 'boolean',
|
|
'data' => 'int',
|
|
'tab' => 2,
|
|
),
|
|
'pp_keyboard_shortcuts' => array(
|
|
'title' => LAN_GALLERY_ADMIN_59,
|
|
'help' => LAN_GALLERY_ADMIN_60,
|
|
'type' => 'boolean',
|
|
'data' => 'int',
|
|
'tab' => 2,
|
|
),
|
|
'pp_ie6_fallback' => array(
|
|
'title' => LAN_GALLERY_ADMIN_61,
|
|
'type' => 'boolean',
|
|
'data' => 'int',
|
|
'tab' => 2,
|
|
),
|
|
);
|
|
|
|
private $ownerCount;
|
|
|
|
/**
|
|
* Initial function.
|
|
*/
|
|
function init()
|
|
{
|
|
$effects = array(
|
|
'scrollHorz' => LAN_GALLERY_ADMIN_29,
|
|
'scrollVert' => LAN_GALLERY_ADMIN_30,
|
|
'fade' => LAN_GALLERY_ADMIN_31,
|
|
);
|
|
|
|
$this->prefs['slideshow_effect']['writeParms'] = $effects;
|
|
$this->prefs['slideshow_effect']['readParms'] = $effects;
|
|
|
|
$categories = e107::getMedia()->getCategories('gallery');
|
|
$cats = array();
|
|
foreach($categories as $k => $var)
|
|
{
|
|
$id = preg_replace("/[^0-9]/", '', $k);
|
|
$cats[$id] = $var['media_cat_title'];
|
|
}
|
|
|
|
$this->prefs['slideshow_category']['writeParms'] = $cats;
|
|
$this->prefs['slideshow_category']['readParms'] = $cats;
|
|
|
|
$mes = e107::getMessage();
|
|
$tp = e107::getParser();
|
|
|
|
$x = LAN_PLUGIN_GALLERY_TITLE;
|
|
$y = "<a href='" . e_ADMIN . "image.php'>" . LAN_MEDIAMANAGER . "</a>";
|
|
|
|
$message = $tp->lanVars(LAN_GALLERY_ADMIN_01, array($x, $y), true);
|
|
$mes->addInfo($message);
|
|
|
|
$this->setGalleryCount();
|
|
}
|
|
|
|
|
|
|
|
function setGalleryCount()
|
|
{
|
|
|
|
$sql = e107::getDb();
|
|
|
|
if($sql->gen("SELECT media_cat_owner, MAX(CAST(SUBSTRING_INDEX(media_cat_category, '_', -1 ) AS UNSIGNED)) as maxnum, count(media_cat_id) as number FROM `#core_media_cat` GROUP BY media_cat_owner"))
|
|
{
|
|
while($row = $sql->fetch())
|
|
{
|
|
$this->ownerCount[$row['media_cat_owner']] = $row['number'];
|
|
$own = $row['media_cat_owner'];
|
|
// if(!in_array($own,$this->restricted))
|
|
{
|
|
// $this->fields['media_cat_owner']['writeParms'][$own] = $own;
|
|
|
|
if($row['maxnum'] > 0)
|
|
{
|
|
$this->ownerCount[$row['media_cat_owner']] = $row['maxnum']; // $maxnum;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
e107::getMessage()->addDebug("Max value for category names: ".print_a($this->ownerCount,true));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
public function beforeCreate($new_data, $old_data)
|
|
{
|
|
$new_data = $this->setCategory($new_data);
|
|
|
|
return $new_data;
|
|
}
|
|
|
|
|
|
public function beforeUpdate($new_data, $old_data, $id)
|
|
{
|
|
// $new_data = $this->setCategory($new_data);
|
|
|
|
return $new_data;
|
|
}
|
|
|
|
private function setCategory($new_data)
|
|
{
|
|
$type = 'image_';
|
|
|
|
$increment = ($this->ownerCount['gallery'] +1);
|
|
|
|
$new_data['media_cat_owner'] = 'gallery';
|
|
$new_data['media_cat_category'] = 'gallery_'.$type.$increment;
|
|
|
|
if(empty($new_data['media_cat_sef']))
|
|
{
|
|
$new_data['media_cat_sef'] = eHelper::title2sef($new_data['media_cat_title']);
|
|
}
|
|
|
|
return $new_data;
|
|
}
|
|
|
|
|
|
function galleryPage()
|
|
{
|
|
$mes = e107::getMessage();
|
|
$tp = e107::getParser();
|
|
|
|
$x = LAN_PLUGIN_GALLERY_TITLE;
|
|
$y = "<a href='" . e_ADMIN . "image.php'>" . LAN_MEDIAMANAGER . "</a>";
|
|
|
|
$message = $tp->lanVars(LAN_GALLERY_ADMIN_01, array($x, $y), true);
|
|
$mes->addInfo($message);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
class gallery_cat_admin_form_ui extends e_admin_form_ui
|
|
{
|
|
|
|
// Override the default Options field.
|
|
public function gallery_category_parent($curVal, $mode)
|
|
{
|
|
// TODO - catlist combo without current cat ID in write mode, parents only for batch/filter.
|
|
// Get UI instance.
|
|
$controller = $this->getController();
|
|
switch($mode)
|
|
{
|
|
case 'read':
|
|
return e107::getParser()->toHTML($controller->getDownloadCategoryTree($curVal), false, 'TITLE');
|
|
break;
|
|
|
|
case 'write':
|
|
return $this->select('gallery_category_parent', $controller->getDownloadCategoryTree(), $curVal);
|
|
break;
|
|
|
|
case 'filter':
|
|
case 'batch':
|
|
return $controller->getDownloadCategoryTree();
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
class gallery_main_admin_ui extends e_admin_ui
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
class gallery_main_admin_form_ui extends e_admin_form_ui
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
new plugin_gallery_admin();
|
|
require_once(e_ADMIN . "auth.php");
|
|
e107::getAdminUI()->runPage(); //gallery/includes/admin.php is auto-loaded.
|
|
require_once(e_ADMIN . "footer.php");
|
|
|