<?php
/*
 * e107 website system
 *
 * Copyright (C) 2008-2009 e107 Inc (e107.org)
 * Released under the terms and conditions of the
 * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
 *
 */

/**
 *
 * @package     e107
 * @subpackage  faqs
 * @author      e107inc
 *
 *	FAQ plugin admin UI
 */

require_once("../../class2.php");

class faq_admin extends e_admin_dispatcher
{

	protected $modes = array(
		'main'		=> array(
			'controller' 	=> 'faq_main_ui',
			'path' 			=> null,
			'ui' 			=> 'faq_admin_form_ui',
			'uipath' 		=> null
		),
		'cat'		=> array(
			'controller' 	=> 'faq_cat_ui',
			'path' 			=> null,
			'ui' 			=> 'faq_cat_form_ui',
			'uipath' 		=> null
		)					
	);	

	protected $adminMenu = array(
		'main/list'		=> array('caption'=> LAN_MANAGE, 'perm' => 'P'),
		'main/create'	=> array('caption'=> LAN_CREATE_ITEM, 'perm' => 'P'),
		'main/pending'	=> array('caption'=> "Unanswered", 'perm' => 'P', 'uri'=>"admin_config.php?mode=main&action=list&filter=pending"),

		'cat/list' 		=> array('caption'=> LAN_CATEGORIES, 'perm' => 'P'),
		'cat/create' 	=> array('caption'=> LAN_CREATE_CATEGORY, 'perm' => 'P'),
		'main/prefs' 	=> array('caption'=> LAN_PREFS, 'perm' => '0'),
	//	'main/custom'	=> array('caption'=> 'Custom Page', 'perm' => '0')		
	);


	protected $perm = array(
	//	'main/prefs'    => '0'
	);

	protected $adminMenuAliases = array(
		'main/edit'	=> 'main/list'				
	);	
	
	protected $menuTitle = 'FAQs';

	//
	function init()
	{
	    if(!empty($_GET['filter']))
	    {
			$action = $_GET['filter'];
			$this->adminMenu['main/'.$action]['selected'] = true;
	    }

		$pref = e107::pref('faqs');

		$this->access = array(
			'main/create'   => varset($pref['admin_faq_create'],   e_UC_ADMIN),
			'main/edit'     => varset($pref['admin_faq_edit'],     e_UC_ADMIN),
			'main/delete'   => varset($pref['admin_faq_delete'],   e_UC_ADMIN),
			'cat/list'      => check_class($pref['admin_cat_create']) || check_class($pref['admin_cat_edit']) ? e_UC_ADMIN : e_UC_NOBODY,
			'cat/create'    => varset($pref['admin_cat_create'],   e_UC_ADMIN),
			'cat/edit'      => varset($pref['admin_cat_edit'],     e_UC_ADMIN),
			'cat/delete'    => varset($pref['admin_cat_delete'],   e_UC_ADMIN),
		);

	}
}

class faq_cat_ui extends e_admin_ui
{ 	 	 
		protected $pluginTitle	= LAN_PLUGIN_FAQS_NAME;
		protected $pluginName	= 'plugin';

		protected $table 		= "faqs_info";
		protected $pid			= "faq_info_id";
		protected $perPage 		= 5; //no limit
		protected $listOrder	= 'faq_info_order ASC';
		protected $sortField	= 'faq_info_order';
	 	 	
		protected $fields = array(
			'checkboxes'				=> array('title'=> '',				'type' => null, 			'width' =>'5%', 'forced'=> TRUE, 'thclass'=>'center', 'class'=>'center'),
			'faq_info_icon' 			=> array('title'=> LAN_ICON,		'type' => 'icon',			'width' => '5%', 'thclass' => 'left', 'writeParms'=>'glyphs=1' ),	 
			'faq_info_id'				=> array('title'=> LAN_ID,			'type' => 'number',			'width' =>'5%', 'forced'=> TRUE),     		
         	'faq_info_title' 			=> array('title'=> LAN_TITLE,		'type' => 'text',			'width' => 'auto', 'thclass' => 'left', 'readParms'=>'editable=1'), 
         	'faq_info_about' 			=> array('title'=> LAN_DESCRIPTION,	'type' => 'bbarea',			'width' => '30%', 'readParms' => 'expand=...&truncate=50&bb=1'), // Display name
		 	'faq_info_parent' 			=> array('title'=> LAN_CATEGORY,	'type' => 'dropdown',		'width' => '5%', 'writeParms'=>''),		
			'faq_info_class' 			=> array('title'=> LAN_VISIBILITY,	'type' => 'userclass',		'width' => 'auto', 'data' => 'int', 'inline'=>true),
			'faq_info_metad' 			=> array('title'=> LANA_FAQ_METAD,	'type' => 'text',			'width' => 'auto', 'thclass' => 'left', 'readParms'=>'editable=1'), 
			'faq_info_metak' 			=> array('title'=> LANA_FAQ_METAK,	'type' => 'tags',			'width' => 'auto', 'thclass' => 'left', 'readParms'=>'editable=1'), 				
			'faq_info_sef' 				=> array('title'=> LAN_SEFURL,		'type' => 'text',			'width' => 'auto', 'thclass' => 'left', 'inline'=>true, 'writeParms'=>'size=xxlarge'), 				
	
			'faq_info_order' 			=> array('title'=> LAN_ORDER,		'type' => 'number',			'width' => '5%', 'thclass' => 'left' ),	
			'options' 					=> array('title'=> LAN_OPTIONS,		'type' => null,				'width' => '10%', 'forced'=>TRUE, 'thclass' => 'center last', 'class' => 'center','readParms'=>array('sort'=>1))
		);	
	
	protected $categories = array();
	
	public function init()
	{
		$sql = e107::getDb();
		
		$this->categories[0] = "(Root)";
		
		if($sql->select('faqs_info','*', 'faq_info_parent = 0 ORDER BY faq_info_title ASC'))
		{
			while ($row = $sql->fetch())
			{
				$this->categories[$row['faq_info_id']] = $row['faq_info_title'];
			}
		}
		
		$this->fields['faq_info_parent']['writeParms'] = $this->categories;
		
		/*
		if(e_AJAX_REQUEST) // ajax link sorting. 
		{
			$sql = e107::getDb();
			$c=0;
			if(isset($_POST['all']))
			{
				foreach($_POST['all'] as $id)
				{
					$sql->db_Update("faqs_info","faq_info_order = ".intval($c)." WHERE faq_info_id = ".intval($id));
					$c++;		
				}	
			}
			
		
			exit;
		}		
		*/
		
	}	
	/**
	 * Get FAQ Category data
	 *
	 * @param integer $id [optional] get category title, false - return whole array
	 * @param mixed $default [optional] default value if not found (default 'n/a')
	 * @return 
	 */
	function getFaqCategoryTree($id = false, $default = 'n/a')
	{
		// TODO get faq category tree
	}
		
}

class faq_cat_form_ui extends e_admin_form_ui
{
	public function faq_info_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->getFaqCategoryTree($curVal), false, 'TITLE');
			break;
			
			case 'write':
				return $this->selectbox('faq_info_parent', $controller->getFaqCategoryTree(), $curVal);
			break;
			
			case 'filter':
			case 'batch':
				return $controller->getFaqCategoryTree();
			break;
		}
	}
}

class faq_main_ui extends e_admin_ui
{

		protected $pluginTitle		= 'FAQs';
		protected $pluginName		= 'faqs';
		protected $eventName	    = 'faqs';
		protected $table			= "faqs";
		// without any Order or Limit. 
		
		//FIXME JOIN should occur automatically. We have all the data necessary to build the query. 
		// ie. faq_author is a 'user' field. 
		
		protected $listQry		= "SELECT  f.*, u.* FROM #faqs AS f LEFT JOIN #user AS u ON f.faq_author = u.user_id "; // Should not be necessary.
		
		protected $editQry		= "SELECT * FROM #faqs WHERE faq_id = {ID}";
		
		protected $pid 			= "faq_id";
		protected $perPage 		= 10;
		protected $batchDelete	= true;
		protected $batchCopy	= true;
		protected $listOrder	= 'faq_order ASC';
		protected $sortField	= 'faq_order';
		protected $tabs			= array('FAQs',"Details"); // Simpler method than 'fieldsets'. Allows for easy moving of fields between tabs and works as required by 'news' and 'custom pages'. 
		
		//TODO - finish 'user' type, set 'data' to all editable fields, set 'noedit' for all non-editable fields
    	protected $fields = array(
			'checkboxes'			=> array('title'=> '',				                'type' => null, 			'width' =>'5%', 'forced'=> TRUE, 'thclass'=>'center', 'class'=>'center'),
			'faq_id'				=> array('title'=> LAN_ID,			    'tab' => 0, 'type' => null,			    'width' =>'5%', 'forced'=> TRUE),
         	'faq_question' 			=> array('title'=> LANA_FAQ_QUESTION,	'tab' => 0, 'type' => 'text',			'width' => 'auto', 'thclass' => 'left first', 'required'=>TRUE, 'readParms'=>'editable=1', 'writeParms'=>'maxlength=1000&size=block-level'),
         	'faq_answer' 			=> array('title'=> LANA_FAQ_ANSWER,		'tab' => 0,	'type' => 'bbarea',			'width' => '30%', 'readParms' => 'expand=1&truncate=50&bb=1'), 
		 	'faq_parent' 			=> array('title'=> LAN_CATEGORY,	    'tab' => 0,	'type' => 'dropdown',		'data'=> 'int', 'inline'=>true,'width' => '10%', 'filter'=>TRUE, 'batch'=>TRUE),

			'faq_tags' 				=> array('title'=> LANA_FAQ_TAGS,		'tab' => 1, 'type' => 'tags',		    'data' => 'str',	'width' => 'auto', 'inline'=> true, 'help' => LANA_FAQ_TAGS_HELP),	// User id
			'faq_comment' 			=> array('title'=> LANA_FAQ_COMMENT,	'tab' => 1, 'type' => 'userclass',		'data' => 'int',	'width' => 'auto', 'inline'=> true),	// User id
			
			'faq_datestamp' 		=> array('title'=> LAN_DATE,		    'tab' => 1, 'type' => 'datestamp',		'data'=> 'int','width' => 'auto', 'noedit' => false,'writeParms'=>'type=datetime&auto=1'),
       		'faq_author' 			=> array('title'=> LAN_USER,		    'tab' => 1, 'type' => 'user',			'data'=> 'int', 'width' => 'auto', 'thclass' => 'center', 'class'=>'center', 'writeParms' => 'currentInit=1', 'filter' => true, 'batch' => true, 'nolist' => true	),	 	// Photo
			'faq_author_ip' 		=> array('title'=> LAN_IP,		        'tab' => 1, 'type' => 'ip',		        'readonly'=>2,	'data'=> 'str', 'width' => 'auto', 'thclass' => 'center', 'class'=>'center', 'writeParms' => 'currentInit=1', 'filter' => true, 'batch' => true, 'nolist' => true	),	 	// Photo

			'u.user_name' 			=> array('title'=> LANA_FAQ_UNAME,		'tab' => 1, 'type' => 'user',			'width' => 'auto', 'noedit' => true, 'readParms'=>'idField=faq_author&link=1'),	// User name
       		'u.user_loginname' 		=> array('title'=> LANA_FAQ_ULOGINNAME,	'tab' => 1, 'type' => 'user',			'width' => 'auto', 'noedit' => true, 'readParms'=>'idField=faq_author&link=1'),	// User login name
			'faq_order' 			=> array('title'=> LAN_ORDER,		    'tab' => 1, 'type' => 'number',			'data'=> 'int','width' => '5%', 'thclass' => 'center','nolist' => false, 'noedit'=>false, 'readParms'=>'editable=1'),
			'options' 				=> array('title'=> LAN_OPTIONS,			'type' => null,				'forced'=>TRUE, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center','readParms'=>array('sort'=>1)),
			'pending'               => array('title' => 'internal',        'type' => 'hidden',    'data'=>false, 'writeParms'=>array()),
		);
		 
		protected $fieldpref = array('checkboxes', 'faq_question', 'faq_answer', 'faq_parent', 'faq_datestamp', 'options');

		protected $preftabs        = array("General", LAN_ADMIN );
		// optional, if $pluginName == 'core', core prefs will be used, else e107::getPluginConfig($pluginName);
		protected $prefs = array( 
			'add_faq'	   				=> array('title'=> LANA_FAQ_PREF_1, 'tab'=>0, 'type'=>'userclass' ),
			'submit_question'	   		=> array('title'=> LANA_FAQ_PREF_2, 'tab'=>0, 'type'=>'userclass' ),
			'submit_question_limit'     => array('title'=> "'Ask a Question' limit per user",  'tab'=>0, 'type'=>'number', 'data'=>'int', 'help'=>'0 = no limit'),
			'submit_question_language'	=> array('title'=> "'Ask a Question' limited to", 'tab'=>0,'type'=>'dropdown' ),

			'submit_question_acknowledgement'   => array('title'=> "Submitted Questions Acknowledgement", 'type'=>'textarea', 'help'=>'Leave blank to use default' ),

			'classic_look'				=> array('title'=> LANA_FAQ_PREF_3,'tab'=>0, 'type'=>'boolean' ),
			'list_type'				    => array('title'=> "List Type", 'tab'=>0,'type'=>'dropdown', 'writeParms'=>array('ul'=>'Unordered List', 'ol'=>'Ordered List') ),
			'page_title'				=> array('title'=> "Page Title", 'tab'=>0,'type'=>'text', 'multilan'=>true, 'help'=>'Leave blank to use default' ),
			'new'				        => array('title'=> "'New' FAQs are no more than", 'tab'=>0,'type'=>'number', 'writeParms'=>'size=mini&default=0&post=days old', 'help'=>'Leave blank to use default' ),
			'display_total'				=> array('title'=> "Display FAQ total", 'tab'=>0,'type'=>'boolean', 'data'=>'int' ),
			'display_datestamp'			=> array('title'=> "Display Datestamp", 'tab'=>0,'type'=>'boolean', 'data'=>'int' ),
			'display_social'			=> array('title'=> "Display Social buttons", 'tab'=>0,'type'=>'boolean', 'data'=>'int' ),

			'orderby'                   => array('title'=> LAN_ORDER, 'tab'=>0,'type'=>'dropdown', 'writeParms'=>array('faq_order-ASC'=>"Specified Order", 'faq_id-ASC'=>'ID ASC', 'faq_id-DESC'=>'ID DESC', 'faq_datestamp-ASC'=>'Date ASC', 'faq_datestamp-DESC'=>'Date DESC')),

			'admin_faq_create'	   		=> array('title'=> "Create FAQ", 'tab'=>1, 'type'=>'userclass', 'writeParms'=>'default=254&classlist=main,admin,classes,no-excludes' ),
			'admin_faq_edit'	   		=> array('title'=> "Edit FAQ", 'tab'=>1, 'type'=>'userclass', 'writeParms'=>'default=254&classlist=main,admin,classes,no-excludes' ),
			'admin_faq_delete'	   		=> array('title'=> "Delete FAQ", 'tab'=>1, 'type'=>'userclass', 'writeParms'=>'default=254&classlist=main,admin,classes,no-excludes' ),

			'admin_cat_create'	   		=> array('title'=> "Create Category", 'tab'=>1, 'type'=>'userclass' , 'writeParms'=>'default=254&classlist=main,admin,classes,no-excludes' ),
			'admin_cat_edit'	   		=> array('title'=> "Edit Category", 'tab'=>1, 'type'=>'userclass' , 'writeParms'=>'default=254&classlist=main,admin,classes,no-excludes' ),
			'admin_cat_delete'	   		=> array('title'=> "Delete category", 'tab'=>1, 'type'=>'userclass' , 'writeParms'=>'default=254&classlist=main,admin,classes,no-excludes' ),
		);

	protected $categories = array();

	
	public function init()
	{
		$this->prefs['submit_question_language']['writeParms'] = array(0=> 'English', 1=>'All Languages');


		$sql = e107::getDb();
		if($sql->select('faqs_info'))
		{
			while ($row = $sql->fetch())
			{
				$this->categories[$row['faq_info_id']] = $row['faq_info_title'];
			}
		}

		$faqOrder = e107::pref('faqs','orderby');

		if(!empty($faqOrder))
		{
			list($sortField,$sortASC) = explode("-",$faqOrder);
			$this->listOrder = $sortField." ".$sortASC;

			if($sortField != 'faq_order')
			{
				$this->fields['options']['readParms']['sort'] = 0;
			}

		}


		$this->fields['faq_parent']['writeParms'] = $this->categories;

		//$this->fields['pending']['writeParms']['show'] = 1;
		$this->fields['pending']['writeParms']['value'] = ($_GET['filter'] == 'pending') ? 1 : 0;

		if(!empty($_GET['filter'])) // hide re-ordering when looking at 'unanswered' list and sort by datestamp.
		{
			$this->listQry .= " WHERE f.faq_parent = 0 ";
			$this->listOrder = "faq_datestamp ASC";
			$this->fields['options']['readParms'] = '';
			$this->sortField = false;
		}
		else
		{
			$this->listQry .= " WHERE f.faq_parent != 0 ";
		}

	}
	
	public function beforeCreate($new_data)
	{
		// trim spaces
		if(!empty($new_data['faq_tags']))
		{
			$new_data['faq_tags'] = implode(',', array_map('trim', explode(',', $new_data['faq_tags'])));
		}

		$new_data['faq_order'] = 0;

		return $new_data;
	}
	
	
	public function beforeUpdate($new_data, $old_data, $id)
	{
		// trim spaces
		if(!empty($new_data['faq_tags']))
		{
			$new_data['faq_tags'] = implode(',', array_map('trim', explode(',', $new_data['faq_tags'])));
		}

	//	e107::getMessage()->addInfo(print_a($new_data, true));

		if(!empty($new_data['pending']))
		{
			$new_data['faq_datestamp'] = time();
		}

		return $new_data;
	}
}

class faq_admin_form_ui extends e_admin_form_ui
{
	/**
	 * faq_parent field method
	 * 
	 * @param integer $curVal
	 * @param string $mode
	 * @return mixed
	 */
	function faq_parent($curVal,$mode)
	{ 
		// Get UI instance
		$controller = $this->getController();
		
		switch($mode)
		{
			case 'read':
				return e107::getParser()->toHTML($controller->getFaqCategory($curVal), false, 'TITLE');
			break;
			
			case 'write':

				return $this->selectbox('faq_parent', $controller->getFaqCategory(), $curVal).$this->hidden('pending', $pending);
			break;
			
			case 'filter':
			case 'batch':
				return $controller->getFaqCategory();
			break;
		}
	}
}

new faq_admin();

require_once(e_ADMIN."auth.php");
e107::getAdminUI()->runPage();

require_once(e_ADMIN."footer.php");
exit;

