diff --git a/e107_plugins/gallery/admin_gallery.php b/e107_plugins/gallery/admin_gallery.php
new file mode 100644
index 000000000..3ae513788
--- /dev/null
+++ b/e107_plugins/gallery/admin_gallery.php
@@ -0,0 +1,34 @@
+runPage(); //gallery/includes/admin.php is auto-loaded.
+ require_once(e_ADMIN."footer.php");
+ exit;
+
+
+?>
\ No newline at end of file
diff --git a/e107_plugins/gallery/gallery.php b/e107_plugins/gallery/gallery.php
new file mode 100644
index 000000000..f94ecdd32
--- /dev/null
+++ b/e107_plugins/gallery/gallery.php
@@ -0,0 +1,102 @@
+catList = e107::getMedia()->getCategories('gallery');
+
+ if(($_GET['cat']) && isset($this->catList[$_GET['cat']]))
+ {
+ $this->showImages($_GET['cat']);
+ }
+ else
+ {
+ $this->listCategories();
+ }
+ }
+
+ function listCategories()
+ {
+ $template = e107::getTemplate('gallery');
+ $sc = e107::getScBatch('gallery',TRUE);
+
+ $text = "";
+ foreach($this->catList as $val)
+ {
+ $sc->setParserVars($val);
+ $text .= e107::getParser()->parseTemplate($template['CAT_ITEM'],TRUE);
+ }
+ $text = $template['CAT_START'].$text.$template['CAT_END'];
+ e107::getRender()->tablerender("Gallery",$text);
+ }
+
+ //TODO Shadowbox/Popup support.
+ function showImages($cat)
+ {
+ $mes = e107::getMessage();
+ $template = e107::getTemplate('gallery');
+ $list = e107::getMedia()->getImages($cat);
+ $sc = e107::getScBatch('gallery',TRUE);
+
+ $text = "";
+ foreach($list as $row)
+ {
+ $sc->setParserVars($row);
+ $text .= e107::getParser()->parseTemplate($template['LIST_ITEM'],TRUE);
+ }
+
+ $text = $template['LIST_START'].$text.$template['LIST_END'];
+
+ e107::getRender()->tablerender("Gallery :: ".str_replace("_"," ",$cat),$mes->render().$text);
+
+ }
+
+}
+
+
+new gallery;
+
+require_once(FOOTERF);
+exit;
+
+
+?>
\ No newline at end of file
diff --git a/e107_plugins/gallery/gallery_setup.php b/e107_plugins/gallery/gallery_setup.php
new file mode 100644
index 000000000..652a90e3d
--- /dev/null
+++ b/e107_plugins/gallery/gallery_setup.php
@@ -0,0 +1,53 @@
+add("custom install 'pre' function.", E_MESSAGE_SUCCESS);
+ }
+
+ function install_post($var)
+ {
+ $sql = e107::getDb();
+ $mes = eMessage::getInstance();
+ // $mes->add("custom install 'post' function.", E_MESSAGE_SUCCESS);
+ }
+
+ function uninstall_pre($var)
+ {
+ $sql = e107::getDb();
+ $mes = eMessage::getInstance();
+ // $mes->add("custom uninstall 'pre' function.", E_MESSAGE_SUCCESS);
+ }
+
+
+ // IMPORTANT : This function below is for modifying the CONTENT of the tables only, NOT the table-structure.
+ // To Modify the table-structure, simply modify your {plugin}_sql.php file and an update will be detected automatically.
+ /*
+ * @var $needed - true when only a check for a required update is being performed.
+ * Return: Reason the upgrade is required, otherwise set it to return FALSE.
+ */
+ function upgrade_post($needed)
+ {
+
+ }
+}
diff --git a/e107_plugins/gallery/images/gallery_16.png b/e107_plugins/gallery/images/gallery_16.png
new file mode 100644
index 000000000..7d7da74d2
Binary files /dev/null and b/e107_plugins/gallery/images/gallery_16.png differ
diff --git a/e107_plugins/gallery/images/gallery_32.png b/e107_plugins/gallery/images/gallery_32.png
new file mode 100644
index 000000000..377440b07
Binary files /dev/null and b/e107_plugins/gallery/images/gallery_32.png differ
diff --git a/e107_plugins/gallery/includes/admin.php b/e107_plugins/gallery/includes/admin.php
new file mode 100644
index 000000000..2ad8532bb
--- /dev/null
+++ b/e107_plugins/gallery/includes/admin.php
@@ -0,0 +1,173 @@
+ array('controller' =>'CONTROLLER_CLASS'[, 'index' => 'list', 'path' => 'CONTROLLER SCRIPT PATH', 'ui' => 'UI CLASS NAME child of e_admin_ui', 'uipath' => 'UI SCRIPT PATH']);
+ * Note - default mode/action is autodetected in this order:
+ * - $defaultMode/$defaultAction (owned by dispatcher - see below)
+ * - $adminMenu (first key if admin menu array is not empty)
+ * - $modes (first key == mode, corresponding 'index' key == action)
+ * @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
+ )
+ );
+
+ /* Both are optional
+ protected $defaultMode = null;
+ protected $defaultAction = null;
+ */
+
+ /**
+ * Format: 'MODE/ACTION' => array('caption' => 'Menu link title'[, 'url' => '{e_PLUGIN}release/admin_config.php', 'perm' => '0']);
+ * Additionally, any valid e_admin_menu() key-value pair could be added to the above array
+ * @var array
+ */
+ protected $adminMenu = array(
+ // 'main/list' => array('caption'=> LAN_CATEGORY, 'perm' => 'P'),
+ // 'main/create' => array('caption'=> LAN_CREATE, 'perm' => 'P'),
+ 'main/gallery' => array('caption'=> 'Info', 'perm' => 'P')//, 'url'=>'{e_ADMIN}image.php'
+ );
+
+
+ /**
+ * Optional, mode/action aliases, related with 'selected' menu CSS class
+ * Format: 'MODE/ACTION' => 'MODE ALIAS/ACTION ALIAS';
+ * This will mark active main/list menu item, when current page is main/edit
+ * @var array
+ */
+ protected $adminMenuAliases = array(
+ /// 'main/edit' => 'main/list',
+ // 'cat/edit' => 'cat/list'
+ );
+
+ /**
+ * Navigation menu title
+ * @var string
+ */
+ protected $menuTitle = 'Gallery';
+}
+
+
+class gallery_cat_admin_ui extends e_admin_ui
+{
+ protected $pluginTitle = 'Gallery Categories';
+ protected $pluginName = 'gallery';
+ protected $table = "core_media_cat";
+ protected $pid = "media_cat_id";
+ protected $perPage = 10; //no limit
+ protected $listOrder = 'media_cat_order';
+
+ protected $listQry = "SELECT * FROM #core_media_cat WHERE media_cat_owner = 'gallery' "; // without any Order or Limit.
+ // protected $editQry = "SELECT * FROM #faq_info WHERE faq_info_id = {ID}";
+
+ protected $fields = array(
+ 'checkboxes' => array('title'=> '', 'type' => null, 'width' =>'5%', 'forced'=> TRUE, 'thclass'=>'center', 'class'=>'center'),
+ // 'media_cat_id' => array('title'=> LAN_ID, 'type' => 'number', 'width' =>'5%', 'forced'=> TRUE, 'readonly'=>TRUE),
+ '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'=> "Owner", 'type' => 'hidden', 'width' => 'auto', 'thclass' => 'left', 'readonly'=>FALSE, 'writeParms' =>'value=gallery'),
+ 'media_cat_category' => array('title'=> LAN_CATEGORY, 'type' => 'hidden', 'width' => 'auto', 'thclass' => 'left', 'readonly'=>TRUE),
+ 'media_cat_title' => array('title'=> LAN_TITLE, 'type' => 'text', 'width' => 'auto', 'thclass' => 'left', 'readonly'=>FALSE),
+ 'media_cat_diz' => array('title'=> LAN_DESCRIPTION, 'type' => 'bbarea', 'width' => '30%', 'readParms' => 'expand=...&truncate=150&bb=1','readonly'=>FALSE), // Display name
+ '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' => '5%', 'thclass' => 'right', 'class'=> 'right' ),
+ 'options' => array('title'=> LAN_OPTIONS, 'type' => null, 'width' => '10%', 'forced'=>TRUE, 'thclass' => 'center last', 'class' => 'center')
+ );
+
+
+
+ public function beforeCreate($new_data)
+ {
+
+ $replace = array("_"," ","'",'"',"."); //FIXME Improve
+ $new_data['media_cat_category'] = strtolower(str_replace($replace,"",$new_data['media_cat_title']));
+ return $new_data;
+ }
+
+ function galleryPage()
+ {
+ $mes = e107::getMessage();
+ $message = "Gallery is active. Simply import and assign images to the gallery categories using the Media Manager";
+
+ $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->selectbox('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
+{
+
+
+
+
+}
diff --git a/e107_plugins/gallery/plugin.xml b/e107_plugins/gallery/plugin.xml
new file mode 100644
index 000000000..4c24452d2
--- /dev/null
+++ b/e107_plugins/gallery/plugin.xml
@@ -0,0 +1,18 @@
+
+
+";
+ }
+
+ function sc_gallery_cat_title($parm='')
+ {
+ $tp = e107::getParser();
+ $text = "";
+ $text .= $tp->toHtml($this->eParserVars['media_cat_title']);
+ $text .= "";
+ return $text;
+ }
+
+ function sc_gallery_cat_thumb($parm='')
+ {
+ $att = ($parm) ?$parm : 'aw=190&ah=150';
+ $text = "";
+ $text .= "
";
+ $text .= "";
+ return $text;
+ }
+
+
+}
diff --git a/e107_plugins/gallery/templates/gallery_template.php b/e107_plugins/gallery/templates/gallery_template.php
new file mode 100644
index 000000000..77257a977
--- /dev/null
+++ b/e107_plugins/gallery/templates/gallery_template.php
@@ -0,0 +1,42 @@
+";
+
+
+$GALLERY_TEMPLATE['LIST_ITEM'] =
+ "