2005-12-19 05:23:14 +01:00
< ? php
2006-08-26 18:32:29 +02:00
/**
2008-10-07 10:57:09 +02:00
* TimeSheet - diverse hooks : Admin - , Preferences - and SideboxMenu - Hooks
2006-08-26 18:32:29 +02:00
*
* @ link http :// www . egroupware . org
* @ author Ralf Becker < RalfBecker - AT - outdoor - training . de >
* @ package timesheet
2011-06-26 16:29:35 +02:00
* @ copyright ( c ) 2005 - 11 by Ralf Becker < RalfBecker - AT - outdoor - training . de >
2006-08-26 18:32:29 +02:00
* @ license http :// opensource . org / licenses / gpl - license . php GPL - GNU General Public License
2008-10-07 10:57:09 +02:00
* @ version $Id $
2006-08-26 18:32:29 +02:00
*/
2005-12-19 05:23:14 +01:00
if ( ! defined ( 'TIMESHEET_APP' ))
{
define ( 'TIMESHEET_APP' , 'timesheet' );
}
2008-10-07 10:57:09 +02:00
/**
* diverse hooks as static methods
*
*/
class timesheet_hooks
2005-12-19 05:23:14 +01:00
{
2009-10-19 19:04:11 +02:00
/**
* Instance of timesheet_bo class
*
* @ var timesheet_bo
*/
static $timesheet_bo ;
2008-10-07 10:57:09 +02:00
/**
* Hook called by link - class to include timesheet in the appregistry of the linkage
*
* @ param array / string $location location and other parameters ( not used )
* @ return array with method - names
*/
static function search_link ( $location )
{
return array (
'query' => TIMESHEET_APP . '.timesheet_bo.link_query' ,
'title' => TIMESHEET_APP . '.timesheet_bo.link_title' ,
'titles' => TIMESHEET_APP . '.timesheet_bo.link_titles' ,
'view' => array (
2011-06-02 19:10:26 +02:00
'menuaction' => TIMESHEET_APP . '.timesheet_ui.edit' ,
2008-10-07 10:57:09 +02:00
),
'view_id' => 'ts_id' ,
2011-04-19 20:52:25 +02:00
'view_popup' => '600x425' ,
2011-06-02 19:10:26 +02:00
'index' => array (
'menuaction' => 'timesheet.timesheet_ui.index' ,
),
2008-10-07 10:57:09 +02:00
'add' => array (
'menuaction' => TIMESHEET_APP . '.timesheet_ui.edit' ,
),
'add_app' => 'link_app' ,
'add_id' => 'link_id' ,
2011-04-19 20:52:25 +02:00
'add_popup' => '600x425' ,
2008-10-07 10:57:09 +02:00
'file_access' => TIMESHEET_APP . '.timesheet_bo.file_access' ,
2011-06-26 16:29:35 +02:00
'file_access_user' => true , // file_access supports 4th parameter $user
2008-10-07 10:57:09 +02:00
);
}
2005-12-19 05:23:14 +01:00
2008-10-07 10:57:09 +02:00
/**
* Return the timesheets linked with given project ( s ) AND with entries of other apps , which are also linked to the same project
*
* Projectmanager will cumulate them in the other apps entries .
*
* @ param array $param int / array $param [ 'pm_id' ] project - id ( s )
* @ return array with pm_id , pe_id , pe_app ( 'timesheet' ), pe_app_id ( ts_id ), other_id , other_app , other_app_id
*/
static function cumulate ( $param )
2005-12-19 05:23:14 +01:00
{
2008-10-07 10:57:09 +02:00
$links = egw_link :: get_3links ( TIMESHEET_APP , 'projectmanager' , $param [ 'pm_id' ]);
$rows = array ();
foreach ( $links as $link )
{
$rows [ $link [ 'id' ]] = array (
'pm_id' => $link [ 'id2' ],
'pe_id' => $link [ 'id' ],
'pe_app' => $link [ 'app1' ],
'pe_app_id' => $link [ 'id1' ],
'other_id' => $link [ 'link3' ],
'other_app' => $link [ 'app3' ],
'other_app_id' => $link [ 'id3' ],
);
}
return $rows ;
2005-12-19 05:23:14 +01:00
}
/**
* hooks to build projectmanager ' s sidebox - menu plus the admin and preferences sections
*
* @ param string / array $args hook args
*/
2008-10-07 10:57:09 +02:00
static function all_hooks ( $args )
2005-12-19 05:23:14 +01:00
{
$appname = TIMESHEET_APP ;
$location = is_array ( $args ) ? $args [ 'location' ] : $args ;
//echo "<p>ts_admin_prefs_sidebox_hooks::all_hooks(".print_r($args,True).") appname='$appname', location='$location'</p>\n";
if ( $location == 'sidebox_menu' )
{
$file = array (
);
display_sidebox ( $appname , $GLOBALS [ 'egw_info' ][ 'apps' ][ $appname ][ 'title' ] . ' ' . lang ( 'Menu' ), $file );
}
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'preferences' ] && $location != 'admin' )
{
$file = array (
2009-08-17 20:33:50 +02:00
'Preferences' => egw :: link ( '/index.php' , 'menuaction=preferences.uisettings.index&appname=' . $appname ),
2009-03-23 10:53:03 +01:00
'Grant Access' => egw :: link ( '/index.php' , 'menuaction=preferences.uiaclprefs.index&acl_app=' . $appname ),
2011-06-21 23:14:51 +02:00
'Edit Categories' => egw :: link ( '/index.php' , 'menuaction=preferences.preferences_categories_ui.index&cats_app=' . $appname . '&cats_level=True&global_cats=True' )
2005-12-19 05:23:14 +01:00
);
2009-10-19 19:04:11 +02:00
2005-12-19 05:23:14 +01:00
if ( $location == 'preferences' )
{
display_section ( $appname , $file );
}
else
{
display_sidebox ( $appname , lang ( 'Preferences' ), $file );
}
}
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'admin' ] && $location != 'preferences' )
{
$file = Array (
2009-03-23 10:53:03 +01:00
'Site Configuration' => egw :: link ( '/index.php' , 'menuaction=admin.uiconfig.index&appname=' . $appname ),
'Custom fields' => egw :: link ( '/index.php' , 'menuaction=admin.customfields.edit&appname=' . $appname ),
'Global Categories' => egw :: link ( '/index.php' , array (
2011-06-21 23:14:51 +02:00
'menuaction' => 'admin.admin_categories.index' ,
2005-12-19 05:23:14 +01:00
'appname' => $appname ,
'global_cats' => True )),
2009-03-23 10:53:03 +01:00
'Edit Status' => egw :: link ( '/index.php' , 'menuaction=timesheet.timesheet_ui.editstatus' ),
2005-12-19 05:23:14 +01:00
);
if ( $location == 'admin' )
{
display_section ( $appname , $file );
}
else
{
display_sidebox ( $appname , lang ( 'Admin' ), $file );
}
}
}
2008-10-07 10:57:09 +02:00
2005-12-19 05:23:14 +01:00
/**
* populates $GLOBALS [ 'settings' ] for the preferences
*/
2008-10-07 10:57:09 +02:00
static function settings ()
2005-12-19 05:23:14 +01:00
{
2011-02-04 21:03:42 +01:00
$settings = array ();
2009-10-19 19:04:11 +02:00
if ( is_null ( self :: $timesheet_bo )) self :: $timesheet_bo = new timesheet_bo ();
2011-02-04 21:03:42 +01:00
if ( self :: $timesheet_bo -> status_labels )
{
$settings [ 'predefined_status' ] = array (
2009-10-19 19:04:11 +02:00
'type' => 'select' ,
'label' => 'Status of created timesheets' ,
'name' => 'predefined_status' ,
'values' => self :: $timesheet_bo -> status_labels ,
'help' => 'Select the predefined status, when creating a new timesheet ' ,
'xmlrpc' => True ,
'admin' => False ,
2011-02-04 21:03:42 +01:00
);
}
// Merge print
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'filemanager' ])
{
$link = egw :: link ( '/index.php' , 'menuaction=timesheet.timesheet_merge.show_replacements' );
$settings [ 'default_document' ] = array (
'type' => 'input' ,
'size' => 60 ,
'label' => 'Default document to insert entries' ,
'name' => 'default_document' ,
2011-07-11 19:01:55 +02:00
'help' => lang ( 'If you specify a document (full vfs path) here, %1 displays an extra document icon for each entry. That icon allows to download the specified document with the data inserted.' , lang ( 'timesheet' )) . ' ' .
lang ( 'The document can contain placeholder like {{%3}}, to be replaced with the data (%1full list of placeholder names%2).' , '<a href="' . $link . '" target="_blank">' , '</a>' , 'ts_title' ) . ' ' .
lang ( 'The following document-types are supported:' ) . implode ( ',' , bo_merge :: get_file_extensions ()),
2011-02-04 21:03:42 +01:00
'run_lang' => false ,
'xmlrpc' => True ,
'admin' => False ,
);
$settings [ 'document_dir' ] = array (
'type' => 'input' ,
'size' => 60 ,
'label' => 'Directory with documents to insert entries' ,
'name' => 'document_dir' ,
2011-07-11 19:01:55 +02:00
'help' => lang ( 'If you specify a directory (full vfs path) here, %1 displays an action for each document. That action allows to download the specified document with the %1 data inserted.' , lang ( 'timesheet' )) . ' ' .
lang ( 'The document can contain placeholder like {{%3}}, to be replaced with the data (%1full list of placeholder names%2).' , '<a href="' . $link . '" target="_blank">' , '</a>' , 'ts_title' ) . ' ' .
lang ( 'The following document-types are supported:' ) . implode ( ',' , bo_merge :: get_file_extensions ()),
2011-02-04 21:03:42 +01:00
'run_lang' => false ,
'xmlrpc' => True ,
'admin' => False ,
2011-06-11 13:57:51 +02:00
'default' => '/templates/timesheet' ,
2011-02-04 21:03:42 +01:00
);
}
2011-03-02 01:06:50 +01:00
// Import / Export for nextmatch
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'importexport' ])
{
$definitions = new importexport_definitions_bo ( array (
'type' => 'export' ,
'application' => 'timesheet'
));
$options = array ();
2011-03-21 17:19:52 +01:00
foreach (( array ) $definitions -> get_definitions () as $identifier )
{
try
{
2011-03-02 01:06:50 +01:00
$definition = new importexport_definition ( $identifier );
2011-03-21 17:19:52 +01:00
}
catch ( Exception $e )
{
2011-03-02 01:06:50 +01:00
// permission error
continue ;
}
2011-03-21 17:19:52 +01:00
if ( $title = $definition -> get_title ())
{
2011-03-02 01:06:50 +01:00
$options [ $title ] = $title ;
}
unset ( $definition );
}
2011-03-21 17:19:52 +01:00
$default_def = 'export-timesheet' ;
2011-03-02 01:06:50 +01:00
$settings [ 'nextmatch-export-definition' ] = array (
'type' => 'select' ,
'values' => $options ,
2011-07-11 19:01:55 +02:00
'label' => 'Export definition to use for nextmatch export' ,
2011-03-02 01:06:50 +01:00
'name' => 'nextmatch-export-definition' ,
'help' => lang ( 'If you specify an export definition, it will be used when you export' ),
'run_lang' => false ,
'xmlrpc' => True ,
'admin' => False ,
2011-03-21 17:19:52 +01:00
'default' => isset ( $options [ $default_def ]) ? $default_def : false ,
2011-03-02 01:06:50 +01:00
);
}
2011-02-04 21:03:42 +01:00
return $settings ;
2005-12-19 05:23:14 +01:00
}
2009-12-09 00:19:06 +01:00
}