Skip to content
Sergey Yakovlev edited this page Aug 7, 2013 · 4 revisions

For Module Developers

Gleez provides an easy way to create modules

Below is a simple example of a Gleez Slider Installer that provides the installation, uninstallation, activation and deactivation of the Gleez Slider Module. Contents of the class is limited only by your imagination. Necessarily only one thing - the exact name of methods. For more information go to Gleez Module API.

<?php defined('SYSPATH') OR die('No direct script access allowed.');
/**
 * Slider Installer
 *
 * @package    Gleez\Slider\Installer
 * @author     Gleez Team
 * @version    1.2.0
 * @copyright  (c) 2011-2013 Gleez Technologies
 * @license    http://gleezcms.org/license Gleez CMS License
 */
class Slider_Installer extends Slider {

	/**
	 * Install a module
	 *
	 * @uses    DB::insert
	 * @uses    DB::query
	 * @uses    Module::set_version
	 * @uses    Message::critical
	 * @uses    Cache::instance
	 * @uses    Widgets::install
	 */
	public static function install()
	{
		$table = Database::instance()->table_prefix() .'sliders';
		try
		{
			// Create the tables
			DB::query(NULL,
				"CREATE TABLE {$table} (
					id int(10) unsigned NOT NULL AUTO_INCREMENT,
					title varchar(60) NOT NULL,
					subtitle varchar(255) DEFAULT NULL,
					image varchar(255) DEFAULT NULL,
					status varchar(20) NOT NULL DEFAULT 'draft',
					PRIMARY KEY (id),
					UNIQUE KEY src (src)
				) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;"
			)
			->execute();

			try
			{
				$query = DB::insert('menus', array('title', 'name', 'descp', 'image', 'url', 'params', 'active', 'pid', 'lft', 'rgt', 'lvl', 'scp'))
					->values(array('Slider', 'slider', '', 'icon-picture', 'admin/slider', NULL, 1, 2, 25, 26, 2, 2));

				// Insert menu item
				DB::query(Database::INSERT, $query)->execute();

				// Delete menu cache
				Cache::instance('menus')->delete_all();
			}
			catch (Exception $e)
			{
				Message::critical($e->getMessage());
			}

			// Install the widget into database during module install
			Widgets::install(array('name' => 'slider/show', 'title' => 'Slider'), 'slider');

			// Set module version
			Module::set_version('slider', Slider::VERSION);
		}
		catch (Exception $e)
		{
			Message::critical($e->getMessage());
		}
	}

	/**
	 * Uninstall a deactivated module
	 *
	 * @uses  DB::delete
	 * @uses  Widgets::uninstall
	 * @uses  Message::critical
	 * @uses  Cache::instance
	 * @uses  Cache::delete_all
	 */
	public static function uninstall()
	{
		try
		{
			// Remove module
			DB::delete('slider')->execute();

			// Remove widget
			Widgets::uninstall('slider');

			// Delete menu cache
			Cache::instance('slider')->delete_all();
		}
		catch (Database_Exception $e)
		{
			Message::critical($e->getMessage());
		}
	}

	/**
	 * Activate module
	 *
	 * @throws  Database_Exception
	 *
	 * @uses    DB::update
	 * @uses    DB::query
	 * @uses    Cache::instance
	 * @uses    Message::critical
	 */
	public static function activate()
	{
		$query = DB::update('menus')->set(array('active' => 1))->where('name', '=', 'slider');

		try
		{
			// Enable menu item
			DB::query(Database::UPDATE, $query)->execute();

			// Delete menu cache
			Cache::instance('menus')->delete_all();
		}
		catch (Database_Exception $e)
		{
			Message::critical($e->getMessage());
		}
	}

	/**
	 * Deactivate module
	 *
	 * @uses    DB::update
	 * @uses    DB::query
	 * @uses    Cache::instance
	 * @uses    Message::critical
	 */
	public static function deactivate()
	{
		$query = DB::update('menus')->set(array('active' => 0))->where('name', '=', 'slider');

		try
		{
			// Disable menu item
			DB::query(Database::UPDATE, $query)->execute();

			// Delete menu cache
			Cache::instance('menus')->delete_all();
		}
		catch (Database_Exception $e)
		{
			Message::critical($e->getMessage());
		}
	}

}