2009-11-09 12:57:34 +00:00
< ? php
/*
2013-03-07 14:56:37 +02:00
* 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
*/
2012-05-23 08:29:57 +00:00
2013-03-07 14:56:37 +02:00
require_once ( " ../../class2.php " );
2012-05-23 08:29:57 +00:00
2009-11-09 12:57:34 +00:00
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 ,
2009-11-12 16:55:50 +00:00
'ui' => 'faq_cat_form_ui' ,
2009-11-09 12:57:34 +00:00
'uipath' => null
)
);
protected $adminMenu = array (
2013-03-09 15:24:32 -08:00
'main/list' => array ( 'caption' => LAN_MANAGE , 'perm' => 'P' ),
2013-03-10 22:07:06 -07:00
'main/create' => array ( 'caption' => LAN_CREATE_ITEM , 'perm' => 'P' ),
'cat/list' => array ( 'caption' => LAN_CATEGORIES , 'perm' => 'P' ),
'cat/create' => array ( 'caption' => LAN_CREATE_CATEGORY , 'perm' => 'P' ),
2009-11-09 12:57:34 +00:00
'main/prefs' => array ( 'caption' => LAN_PREFS , 'perm' => '0' ),
// 'main/custom' => array('caption'=> 'Custom Page', 'perm' => '0')
);
protected $adminMenuAliases = array (
'main/edit' => 'main/list'
);
protected $menuTitle = 'FAQs' ;
}
class faq_cat_ui extends e_admin_ui
{
2013-03-07 14:56:37 +02:00
protected $pluginTitle = LAN_PLUGIN_FAQS_NAME ;
2009-11-09 12:57:34 +00:00
protected $pluginName = 'plugin' ;
protected $table = " faqs_info " ;
protected $pid = " faq_info_id " ;
2012-05-23 08:29:57 +00:00
protected $perPage = 5 ; //no limit
protected $listOrder = 'faq_info_order ASC' ;
2013-02-22 14:37:17 +02:00
protected $sortField = 'faq_info_order' ;
2009-11-09 12:57:34 +00:00
// protected $listQry = "SELECT * FROM #faq_info"; // without any Order or Limit.
// protected $editQry = "SELECT * FROM #faq_info WHERE faq_info_id = {ID}";
protected $fields = array (
2009-11-12 16:55:50 +00:00
'checkboxes' => array ( 'title' => '' , 'type' => null , 'width' => '5%' , 'forced' => TRUE , 'thclass' => 'center' , 'class' => 'center' ),
2009-11-09 12:57:34 +00:00
'faq_info_icon' => array ( 'title' => LAN_ICON , 'type' => 'icon' , 'width' => '5%' , 'thclass' => 'left' ),
2009-11-12 16:55:50 +00:00
'faq_info_id' => array ( 'title' => LAN_ID , 'type' => 'number' , 'width' => '5%' , 'forced' => TRUE ),
2013-02-06 10:22:45 -08:00
'faq_info_title' => array ( 'title' => LAN_TITLE , 'type' => 'text' , 'width' => 'auto' , 'thclass' => 'left' , 'readParms' => 'editable=1' ),
2009-11-12 16:55:50 +00:00
'faq_info_about' => array ( 'title' => LAN_DESCRIPTION , 'type' => 'bbarea' , 'width' => '30%' , 'readParms' => 'expand=...&truncate=50&bb=1' ), // Display name
2013-02-23 05:17:03 -08:00
'faq_info_parent' => array ( 'title' => LAN_CATEGORY , 'type' => 'dropdown' , 'width' => '5%' , 'writeParms' => '' ),
2013-02-20 22:06:39 -08:00
'faq_info_class' => array ( 'title' => LAN_VISIBILITY , 'type' => 'userclass' , 'width' => 'auto' , 'data' => 'int' , 'inline' => true ),
2013-02-23 05:17:03 -08:00
'faq_info_order' => array ( 'title' => LAN_ORDER , 'type' => 'number' , 'width' => '5%' , 'thclass' => 'left' ),
2012-05-23 08:29:57 +00:00
'options' => array ( 'title' => LAN_OPTIONS , 'type' => null , 'width' => '10%' , 'forced' => TRUE , 'thclass' => 'center last' , 'class' => 'center' , 'readParms' => 'sort=1' )
2009-11-09 12:57:34 +00:00
);
2012-05-23 08:29:57 +00:00
2013-02-23 05:17:03 -08:00
protected $categories = array ();
2012-05-23 08:29:57 +00:00
public function init ()
{
2013-02-23 05:17:03 -08:00
$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 ;
2013-02-21 17:39:40 -08:00
/*
2012-05-23 08:29:57 +00:00
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 ++ ;
}
}
2009-11-12 16:55:50 +00:00
2012-05-23 08:29:57 +00:00
exit ;
}
2013-02-21 17:39:40 -08:00
*/
2012-05-23 08:29:57 +00:00
}
2009-11-12 16:55:50 +00:00
/**
* Get FAQ Category data
2009-11-17 14:16:47 +00:00
*
2009-11-12 16:55:50 +00:00
* @ param integer $id [ optional ] get category title , false - return whole array
2009-11-17 14:16:47 +00:00
* @ param mixed $default [ optional ] default value if not found ( default 'n/a' )
2009-11-12 16:55:50 +00:00
* @ return
*/
function getFaqCategoryTree ( $id = false , $default = 'n/a' )
{
// TODO get faq category tree
}
2009-11-09 12:57:34 +00:00
}
2009-11-12 16:55:50 +00:00
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 ;
}
}
}
2009-11-09 12:57:34 +00:00
class faq_main_ui extends e_admin_ui
{
//TODO Move to Class above.
protected $pluginTitle = 'FAQs' ;
protected $pluginName = 'faqs' ;
protected $table = " faqs " ;
2009-11-11 20:57:34 +00:00
// without any Order or Limit.
2012-12-10 18:40:44 -08:00
//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.
2009-11-09 12:57:34 +00:00
2012-05-23 08:29:57 +00:00
protected $editQry = " SELECT * FROM #faqs WHERE faq_id = { ID} " ;
2009-11-09 12:57:34 +00:00
2012-05-23 08:29:57 +00:00
protected $pid = " faq_id " ;
2013-02-06 10:22:45 -08:00
protected $perPage = 5 ;
2012-05-23 08:29:57 +00:00
protected $batchDelete = true ;
2013-02-06 10:22:45 -08:00
protected $batchCopy = true ;
2012-05-23 08:29:57 +00:00
protected $listOrder = 'faq_order ASC' ;
2013-02-06 17:03:00 +02:00
protected $sortField = 'faq_order' ;
2013-02-24 19:54:56 -08:00
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'.
2009-11-09 12:57:34 +00:00
//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' ),
2013-02-24 19:54:56 -08:00
'faq_id' => array ( 'title' => LAN_ID , 'tab' => 0 , 'type' => 'int' , 'width' => '5%' , 'forced' => TRUE ),
2013-03-15 21:50:03 -07:00
'faq_question' => array ( 'title' => LANA_FAQ_QUESTION , 'tab' => 0 , 'type' => 'text' , 'width' => 'auto' , 'thclass' => 'left first' , 'required' => TRUE , 'readParms' => 'editable=1' , 'writeParms' => 'size=xxlarge' ),
2013-03-07 14:56:37 +02:00
'faq_answer' => array ( 'title' => LANA_FAQ_ANSWER , 'tab' => 0 , 'type' => 'bbarea' , 'width' => '30%' , 'readParms' => 'expand=1&truncate=50&bb=1' ),
2013-02-24 19:54:56 -08:00
'faq_parent' => array ( 'title' => LAN_CATEGORY , 'tab' => 0 , 'type' => 'dropdown' , 'data' => 'int' , 'inline' => true , 'width' => '10%' , 'filter' => TRUE , 'batch' => TRUE ),
2013-03-15 17:15:29 +02:00
2013-03-15 21:50:03 -07:00
'faq_tags' => array ( 'title' => LANA_FAQ_TAGS , 'tab' => 1 , 'type' => 'tags' , 'data' => 'str' , 'width' => 'auto' , 'inline' => true , 'help' => LANA_FAQ_TAGS_HELP ), // User id
2013-03-07 14:56:37 +02:00
'faq_comment' => array ( 'title' => LANA_FAQ_COMMENT , 'tab' => 1 , 'type' => 'userclass' , 'data' => 'int' , 'width' => 'auto' , 'inline' => true ), // User id
2013-03-15 17:15:29 +02:00
2013-02-24 19:54:56 -08:00
'faq_datestamp' => array ( 'title' => LAN_DATE , 'tab' => 1 , 'type' => 'datestamp' , 'data' => 'int' , 'width' => 'auto' , 'noedit' => false , 'writeParms' => '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
2013-03-07 14:56:37 +02:00
'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
2013-02-24 19:54:56 -08:00
'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' => 'sort=1' )
2009-11-09 12:57:34 +00:00
);
2012-05-23 08:29:57 +00:00
protected $fieldpref = array ( 'checkboxes' , 'faq_question' , 'faq_answer' , 'faq_parent' , 'faq_datestamp' , 'options' );
2009-11-09 12:57:34 +00:00
// optional, if $pluginName == 'core', core prefs will be used, else e107::getPluginConfig($pluginName);
protected $prefs = array (
2013-03-07 14:56:37 +02:00
'add_faq' => array ( 'title' => LANA_FAQ_PREF_1 , 'type' => 'userclass' , 'help' => 'Under construction' ),
'submit_question' => array ( 'title' => LANA_FAQ_PREF_2 , 'type' => 'userclass' , 'help' => 'Under construction' ),
'classic_look' => array ( 'title' => LANA_FAQ_PREF_3 , 'type' => 'boolean' , 'help' => 'Under construction' )
2009-11-09 12:57:34 +00:00
);
2013-02-23 04:19:36 -08:00
protected $categories = array ();
2012-05-23 08:29:57 +00:00
public function init ()
{
2013-02-23 04:19:36 -08:00
$sql = e107 :: getDb ();
if ( $sql -> select ( 'faqs_info' ))
{
while ( $row = $sql -> fetch ())
{
$this -> categories [ $row [ 'faq_info_id' ]] = $row [ 'faq_info_title' ];
}
}
$this -> fields [ 'faq_parent' ][ 'writeParms' ] = $this -> categories ;
2012-05-23 08:29:57 +00:00
}
2013-03-20 16:10:35 +02:00
public function beforeCreate ( $new_data )
2009-11-09 12:57:34 +00:00
{
2013-03-20 16:10:35 +02:00
// trim spaces
if ( ! empty ( $new_data [ 'faq_tags' ]))
2009-11-09 12:57:34 +00:00
{
2013-03-20 16:10:35 +02:00
$new_data [ 'faq_tags' ] = implode ( ',' , array_map ( 'trim' , explode ( ',' , $new_data [ 'faq_tags' ])));
2009-11-09 12:57:34 +00:00
}
2013-03-20 16:10:35 +02:00
return $new_data ;
}
public function beforeUpdate ( $new_data , $old_data , $id )
{
// trim spaces
if ( ! empty ( $new_data [ 'faq_tags' ]))
2009-11-09 12:57:34 +00:00
{
2013-03-20 16:10:35 +02:00
$new_data [ 'faq_tags' ] = implode ( ',' , array_map ( 'trim' , explode ( ',' , $new_data [ 'faq_tags' ])));
2009-11-09 12:57:34 +00:00
}
2013-03-20 16:10:35 +02:00
return $new_data ;
2009-11-10 19:13:07 +00:00
}
}
2009-11-09 12:57:34 +00:00
2009-11-10 19:13:07 +00:00
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 );
break ;
case 'filter' :
case 'batch' :
return $controller -> getFaqCategory ();
break ;
2009-11-09 12:57:34 +00:00
}
}
}
new faq_admin ();
require_once ( e_ADMIN . " auth.php " );
e107 :: getAdminUI () -> runPage ();
require_once ( e_ADMIN . " footer.php " );
exit ;