2004-08-01 17:36:04 +02:00
< ? php
2007-03-09 12:39:47 +01:00
/**
* eGroupWare - Calendar ' s shared base - class of all UI classes
*
* @ link http :// www . egroupware . org
* @ package calendar
* @ author Ralf Becker < RalfBecker - AT - outdoor - training . de >
2009-04-20 17:44:24 +02:00
* @ copyright ( c ) 2004 - 9 by RalfBecker - At - outdoor - training . de
2007-03-09 12:39:47 +01:00
* @ license http :// opensource . org / licenses / gpl - license . php GPL - GNU General Public License
* @ version $Id $
*/
2004-08-01 17:36:04 +02:00
/**
2005-11-09 00:15:14 +01:00
* Shared base - class of all calendar UserInterface classes
2004-08-01 17:36:04 +02:00
*
* It manages eg . the state of the controls in the UI and generated the calendar navigation ( sidebox - menu )
*
2005-11-09 00:15:14 +01:00
* The new UI , BO and SO classes have a strikt definition , in which time - zone they operate :
* UI only operates in user - time , so there have to be no conversation at all !!!
* BO ' s functions take and return user - time only ( ! ), they convert internaly everything to servertime , because
* SO operates only on server - time
*
* All permanent debug messages of the calendar - code should done via the debug - message method of the bocal class ! ! !
2004-08-01 17:36:04 +02:00
*/
2008-06-07 19:45:33 +02:00
class calendar_ui
2004-08-01 17:36:04 +02:00
{
/**
* @ var $debug mixed integer level or string function - name
*/
2005-11-09 00:15:14 +01:00
var $debug = false ;
2004-08-01 17:36:04 +02:00
/**
2006-08-22 18:50:45 +02:00
* instance of the bocal or bocalupdate class
2008-05-08 17:02:35 +02:00
*
2008-06-07 19:45:33 +02:00
* @ var calendar_boupdate
2004-08-01 17:36:04 +02:00
*/
2006-08-22 18:50:45 +02:00
var $bo ;
/**
* instance of jscalendar
*
* @ var jscalendar
*/
var $jscal ;
/**
* Reference to global datetime class
*
2011-01-05 22:49:55 +01:00
* @ var egw_datetime
2006-08-22 18:50:45 +02:00
*/
var $datetime ;
/**
2009-11-25 13:58:09 +01:00
* Instance of categories class
2006-08-22 18:50:45 +02:00
*
* @ var categories
*/
2009-11-25 13:58:09 +01:00
var $categories ;
2006-08-22 18:50:45 +02:00
/**
* Reference to global uiaccountsel class
*
* @ var uiaccountsel
*/
var $accountsel ;
2005-11-09 00:15:14 +01:00
/**
* @ var array $common_prefs reference to $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ]
*/
var $common_prefs ;
/**
* @ var array $cal_prefs reference to $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'calendar' ]
*/
var $cal_prefs ;
/**
* @ var int $wd_start user pref . workday start
*/
var $wd_start ;
/**
* @ var int $wd_start user pref . workday end
*/
var $wd_end ;
/**
* @ var int $interval_m user pref . interval
*/
var $interval_m ;
/**
* @ var int $user account_id of loged in user
*/
var $user ;
/**
* @ var string $date session - state : date ( Ymd ) of shown view
*/
var $date ;
/**
* @ var int $cat_it session - state : selected category
*/
var $cat_id ;
/**
2006-11-02 22:33:00 +01:00
* @ var int $filter session - state : selected filter , at the moment all or hideprivate
2005-11-09 00:15:14 +01:00
*/
var $filter ;
/**
* @ var int / array $owner session - state : selected owner ( s ) of shown calendar ( s )
*/
var $owner ;
/**
* @ var string $sortby session - state : filter of planner : 'category' or 'user'
*/
var $sortby ;
/**
* @ var string $view session - state : selected view
*/
var $view ;
/**
* @ var string $view menuaction of the selected view
*/
var $view_menuaction ;
2008-05-08 17:02:35 +02:00
2005-11-09 00:15:14 +01:00
/**
* @ var int $first first day of the shown view
*/
var $first ;
/**
* @ var int $last last day of the shown view
*/
var $last ;
2009-04-20 17:44:24 +02:00
2008-10-07 10:57:09 +02:00
/**
* @ var array $states_to_save all states that will be saved to the user prefs
*/
2010-06-09 18:14:19 +02:00
var $states_to_save = array ( 'owner' , 'filter' , 'cat_id' , 'view' , 'sortby' , 'planner_days' );
2004-08-01 17:36:04 +02:00
/**
* Constructor
2005-11-09 00:15:14 +01:00
*
2008-06-07 19:45:33 +02:00
* @ param boolean $use_boupdate use bocalupdate as parenent instead of bocal
2005-11-09 00:15:14 +01:00
* @ param array $set_states = null to manualy set / change one of the states , default NULL = use $_REQUEST
2004-08-01 17:36:04 +02:00
*/
2008-06-07 19:45:33 +02:00
function __construct ( $use_boupdate = false , $set_states = NULL )
2004-08-01 17:36:04 +02:00
{
2008-06-07 19:45:33 +02:00
if ( $use_boupdate )
{
$this -> bo = new calendar_boupdate ();
}
else
{
$this -> bo = new calendar_bo ();
}
2008-03-21 21:30:19 +01:00
$this -> jscal = $GLOBALS [ 'egw' ] -> jscalendar ;
$this -> datetime = $GLOBALS [ 'egw' ] -> datetime ;
$this -> accountsel = $GLOBALS [ 'egw' ] -> uiaccountsel ;
2009-11-25 13:58:09 +01:00
$this -> categories = new categories ( $this -> user , 'calendar' );
2010-02-17 14:29:28 +01:00
2005-11-09 00:15:14 +01:00
$this -> common_prefs = & $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ];
$this -> cal_prefs = & $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'calendar' ];
2007-04-26 17:29:15 +02:00
$this -> bo -> check_set_default_prefs ();
2005-11-09 00:15:14 +01:00
$this -> wd_start = 60 * $this -> cal_prefs [ 'workdaystarts' ];
$this -> wd_end = 60 * $this -> cal_prefs [ 'workdayends' ];
$this -> interval_m = $this -> cal_prefs [ 'interval' ];
2004-08-01 17:36:04 +02:00
2005-11-09 00:15:14 +01:00
$this -> user = $GLOBALS [ 'egw_info' ][ 'user' ][ 'account_id' ];
2004-08-01 17:36:04 +02:00
2005-11-09 00:15:14 +01:00
$this -> manage_states ( $set_states );
2004-08-01 17:36:04 +02:00
$GLOBALS [ 'uical' ] = & $this ; // make us available for ExecMethod, else it creates a new instance
2008-05-08 17:02:35 +02:00
2004-08-01 17:36:04 +02:00
// calendar does not work with hidden sidebox atm.
2005-11-09 00:15:14 +01:00
unset ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'common' ][ 'auto_hide_sidebox' ]);
2011-09-14 15:09:13 +02:00
2011-09-15 16:46:56 +02:00
// make sure the hook for export_limit is registered
2011-09-15 18:53:20 +02:00
if ( ! $GLOBALS [ 'egw' ] -> hooks -> hook_exists ( 'export_limit' , 'calendar' )) $GLOBALS [ 'egw' ] -> hooks -> register_single_app_hook ( 'calendar' , 'export_limit' );
2004-08-01 17:36:04 +02:00
}
2008-05-08 17:02:35 +02:00
2006-03-03 19:51:46 +01:00
/**
2006-03-04 10:54:31 +01:00
* Checks and terminates ( or returns for home ) with a message if $this -> owner include a user / resource we have no read - access to
*
* If currentapp == 'home' we return the error instead of terminating with it !!!
*
* @ return boolean / string false if there ' s no error or string with error - message
2006-03-03 19:51:46 +01:00
*/
function check_owners_access ()
{
2006-03-04 10:54:31 +01:00
$no_access = $no_access_group = array ();
2006-03-03 19:51:46 +01:00
foreach ( explode ( ',' , $this -> owner ) as $owner )
{
2009-12-04 11:22:33 +01:00
$owner = trim ( $owner );
2006-03-04 10:54:31 +01:00
if ( is_numeric ( $owner ) && $GLOBALS [ 'egw' ] -> accounts -> get_type ( $owner ) == 'g' )
{
foreach ( $GLOBALS [ 'egw' ] -> accounts -> member ( $owner ) as $member )
{
$member = $member [ 'account_id' ];
2009-06-09 14:16:15 +02:00
if ( ! $this -> bo -> check_perms ( EGW_ACL_READ | EGW_ACL_READ_FOR_PARTICIPANTS | EGW_ACL_FREEBUSY , 0 , $member ))
2006-03-04 10:54:31 +01:00
{
$no_access_group [ $member ] = $this -> bo -> participant_name ( $member );
2008-05-08 17:02:35 +02:00
}
2006-03-04 10:54:31 +01:00
}
}
2009-06-09 14:16:15 +02:00
elseif ( ! $this -> bo -> check_perms ( EGW_ACL_READ | EGW_ACL_READ_FOR_PARTICIPANTS | EGW_ACL_FREEBUSY , 0 , $owner ))
2006-03-03 19:51:46 +01:00
{
$no_access [ $owner ] = $this -> bo -> participant_name ( $owner );
}
}
if ( count ( $no_access ))
{
2013-11-11 15:02:08 +01:00
$msg = '<p class="message" align="center">' . lang ( 'Access denied to the calendar of %1 !!!' , implode ( ', ' , $no_access )) . " </p> \n " ;
2008-05-08 17:02:35 +02:00
2006-03-04 10:54:31 +01:00
if ( $GLOBALS [ 'egw_info' ][ 'flags' ][ 'currentapp' ] == 'home' )
{
return $msg ;
}
2011-06-14 20:33:26 +02:00
common :: egw_header ();
2006-03-04 10:54:31 +01:00
if ( $GLOBALS [ 'egw_info' ][ 'flags' ][ 'nonavbar' ]) parse_navbar ();
echo $msg ;
2011-06-14 20:33:26 +02:00
common :: egw_footer ();
common :: egw_exit ();
2006-03-03 19:51:46 +01:00
}
2006-03-04 10:54:31 +01:00
if ( count ( $no_access_group ))
{
2011-06-14 20:33:26 +02:00
$this -> bo -> warnings [ 'groupmembers' ] = lang ( 'Groupmember(s) %1 not included, because you have no access.' , implode ( ', ' , $no_access_group ));
2006-03-04 10:54:31 +01:00
}
return false ;
}
2008-05-08 17:02:35 +02:00
2006-03-04 10:54:31 +01:00
/**
2014-01-21 16:01:06 +01:00
* show the egw - framework plus evtl . $this -> group_warning from check_owner_access
2006-03-04 10:54:31 +01:00
*/
function do_header ()
{
2013-11-05 19:08:07 +01:00
// Include the jQuery-UI CSS - many more complex widgets use it
$theme = 'redmond' ;
egw_framework :: includeCSS ( " /phpgwapi/js/jquery/jquery-ui/ $theme /jquery-ui-1.10.3.custom.css " );
// Load our CSS after jQuery-UI, so we can override it
egw_framework :: includeCSS ( '/etemplate/templates/default/etemplate2.css' );
// load etemplate2
egw_framework :: validate_file ( '/etemplate/js/etemplate2.js' );
// load our app.js file
egw_framework :: validate_file ( '/calendar/js/app.js' );
2011-06-14 20:33:26 +02:00
common :: egw_header ();
2008-05-08 17:02:35 +02:00
2013-11-11 15:02:08 +01:00
if ( $this -> bo -> warnings ) echo '<p class="message" align="center">' . implode ( '<br />' , $this -> bo -> warnings ) . " </p> \n " ;
2006-03-03 19:51:46 +01:00
}
2004-08-01 17:36:04 +02:00
/**
* Manages the states of certain controls in the UI : date shown , category selected , ...
*
* The state of all these controls is updated if they are set in $_REQUEST or $set_states and saved in the session .
* The following states are used :
* - date or year , month , day : the actual date of the period displayed
* - cat_id : the selected category
* - owner : the owner of the displayed calendar
* - save_owner : the overriden owner of the planner
2006-11-02 22:33:00 +01:00
* - filter : the used filter : all or hideprivate
2004-08-01 17:36:04 +02:00
* - sortby : category or user of planner
2005-11-09 00:15:14 +01:00
* - view : the actual view , where dialogs should return to or which they refresh
2009-08-04 19:14:16 +02:00
* @ param array $set_states array to manualy set / change one of the states , default NULL = use $_REQUEST
2004-08-01 17:36:04 +02:00
*/
function manage_states ( $set_states = NULL )
{
2005-11-09 00:15:14 +01:00
$states = $states_session = $GLOBALS [ 'egw' ] -> session -> appsession ( 'session_data' , 'calendar' );
2009-04-20 17:44:24 +02:00
2008-10-07 10:57:09 +02:00
// retrieve saved states from prefs
if ( ! $states )
{
2009-04-20 17:44:24 +02:00
$states = unserialize ( $this -> bo -> cal_prefs [ 'saved_states' ]);
2008-10-07 10:57:09 +02:00
}
2009-04-20 17:44:24 +02:00
// only look at _REQUEST, if we are in the calendar (prefs and admin show our sidebox menu too!)
2004-08-01 17:36:04 +02:00
if ( is_null ( $set_states ))
{
2013-12-12 04:42:08 +01:00
// ajax-exec call has get-parameter in some json
if ( isset ( $_REQUEST [ 'json_data' ]) && ( $json_data = json_decode ( $_REQUEST [ 'json_data' ], true )) &&
! empty ( $json_data [ 'request' ][ 'parameters' ][ 0 ]))
{
parse_str ( substr ( $json_data [ 'request' ][ 'parameters' ][ 0 ], 10 ), $set_states ); // cut off "/index.php?"
}
else
{
$set_states = substr ( $_GET [ 'menuaction' ], 0 , 9 ) == 'calendar.' ? $_REQUEST : array ();
}
2004-08-01 17:36:04 +02:00
}
if ( ! $states [ 'date' ] && $states [ 'year' ] && $states [ 'month' ] && $states [ 'day' ])
{
$states [ 'date' ] = $this -> bo -> date2string ( $states );
}
foreach ( array (
'date' => $this -> bo -> date2string ( $this -> bo -> now_su ),
'cat_id' => 0 ,
2012-10-08 13:38:20 +02:00
'filter' => 'default' ,
2004-08-01 17:36:04 +02:00
'owner' => $this -> user ,
'save_owner' => 0 ,
'sortby' => 'category' ,
2005-11-09 00:15:14 +01:00
'planner_days' => 0 , // full month
2010-10-12 11:49:17 +02:00
'view' => ( $this -> bo -> cal_prefs [ 'defaultcalendar' ] ? $this -> bo -> cal_prefs [ 'defaultcalendar' ] : 'day' ), // use pref, if exists else use the dayview
2007-03-09 12:39:47 +01:00
'listview_days' => '' , // no range
2004-08-01 17:36:04 +02:00
) as $state => $default )
{
if ( isset ( $set_states [ $state ]))
{
2006-03-06 08:11:39 +01:00
if ( $state == 'owner' )
{
// only change the owners of the same resource-type as given in set_state[owner]
2006-03-09 19:19:33 +01:00
$set_owners = explode ( ',' , $set_states [ 'owner' ]);
2006-09-25 10:50:02 +02:00
if (( string ) $set_owners [ 0 ] === '0' ) // set exactly the specified owners (without the 0)
2006-03-06 08:11:39 +01:00
{
2012-01-07 23:21:48 +01:00
if ( $set_states [ 'owner' ] === '0,r0' ) // small fix for resources
{
$set_states [ 'owner' ] = $default ; // --> set default, instead of none
}
else
{
$set_states [ 'owner' ] = substr ( $set_states [ 'owner' ], 2 );
}
2006-03-06 08:11:39 +01:00
}
2006-09-25 10:50:02 +02:00
else // change only the owners of the given type
2006-03-06 08:11:39 +01:00
{
2008-05-08 17:02:35 +02:00
$res_type = is_numeric ( $set_owners [ 0 ]) ? false : $set_owners [ 0 ][ 0 ];
2006-09-25 10:50:02 +02:00
$owners = explode ( ',' , $states [ 'owner' ] ? $states [ 'owner' ] : $default );
foreach ( $owners as $key => $owner )
{
2008-05-08 17:02:35 +02:00
if ( ! $res_type && is_numeric ( $owner ) || $res_type && $owner [ 0 ] == $res_type )
2006-09-25 10:50:02 +02:00
{
unset ( $owners [ $key ]);
}
}
if ( ! $res_type || ! in_array ( $res_type . '0' , $set_owners ))
{
$owners = array_merge ( $owners , $set_owners );
}
$set_states [ 'owner' ] = implode ( ',' , $owners );
2006-03-06 08:11:39 +01:00
}
}
2006-03-16 19:17:18 +01:00
// for the uiforms class (eg. edit), dont store the (new) owner, as it might change the view
2009-07-09 11:50:47 +02:00
if ( substr ( $_GET [ 'menuaction' ], 0 , 25 ) == 'calendar.calendar_uiforms' )
2006-03-16 19:17:18 +01:00
{
$this -> owner = $set_states [ $state ];
continue ;
}
2004-08-01 17:36:04 +02:00
$states [ $state ] = $set_states [ $state ];
}
elseif ( ! is_array ( $states ) || ! isset ( $states [ $state ]))
{
$states [ $state ] = $default ;
}
if ( $state == 'date' )
{
$date_arr = $this -> bo -> date2array ( $states [ 'date' ]);
foreach ( array ( 'year' , 'month' , 'day' ) as $name )
{
$this -> $name = $states [ $name ] = $date_arr [ $name ];
}
}
$this -> $state = $states [ $state ];
}
2012-01-05 05:12:13 +01:00
// remove a given calendar from the view
if ( isset ( $_GET [ 'close' ]) && ( $k = array_search ( $_GET [ 'close' ], $owners = explode ( ',' , $this -> owner ))) !== false )
{
unset ( $owners [ $k ]);
$this -> owner = $states [ 'owner' ] = implode ( ',' , $owners );
}
2005-11-09 00:15:14 +01:00
if ( substr ( $this -> view , 0 , 8 ) == 'planner_' )
{
$states [ 'sortby' ] = $this -> sortby = $this -> view == 'planner_cat' ? 'category' : 'user' ;
$states [ 'view' ] = $this -> view = 'planner' ;
}
2004-08-01 17:36:04 +02:00
// set the actual view as return_to
2009-04-20 17:44:24 +02:00
if ( isset ( $_GET [ 'menuaction' ]))
2006-03-03 19:51:46 +01:00
{
2014-01-30 12:03:16 +01:00
list (, $class , $func ) = explode ( '.' , $_GET [ 'menuaction' ]);
2008-06-12 10:25:57 +02:00
if ( $func == 'index' )
{
$func = $this -> view ; $this -> view = 'index' ; // switch to the default view
}
2006-03-03 19:51:46 +01:00
}
else // eg. calendar/index.php
{
$func = $this -> view ;
2008-06-12 10:25:57 +02:00
$class = $this -> view == 'listview' ? 'calendar_uilist' : 'calendar_uiviews' ;
2006-03-03 19:51:46 +01:00
}
2008-06-12 10:25:57 +02:00
if ( $class == 'calendar_uiviews' || $class == 'calendar_uilist' )
2004-08-01 17:36:04 +02:00
{
2005-11-09 00:15:14 +01:00
// if planner_start_with_group is set in the users prefs: switch owner for planner to planner_start_with_group and back
if ( $this -> cal_prefs [ 'planner_start_with_group' ])
{
2006-05-16 06:08:12 +02:00
if ( $this -> cal_prefs [ 'planner_start_with_group' ] > 0 ) $this -> cal_prefs [ 'planner_start_with_group' ] *= - 1 ; // fix old 1.0 pref
2008-05-08 17:02:35 +02:00
if ( ! $states_session && ! $_GET [ 'menuaction' ]) $this -> view = '' ; // first call to calendar
2006-03-03 19:51:46 +01:00
2005-11-09 00:15:14 +01:00
if ( $func == 'planner' && $this -> view != 'planner' && $this -> owner == $this -> user )
{
//echo "<p>switched for planner to {$this->cal_prefs['planner_start_with_group']}, view was $this->view, func=$func, owner was $this->owner</p>\n";
$states [ 'save_owner' ] = $this -> save_owner = $this -> owner ;
$states [ 'owner' ] = $this -> owner = $this -> cal_prefs [ 'planner_start_with_group' ];
}
elseif ( $func != 'planner' && $this -> view == 'planner' && $this -> owner == $this -> cal_prefs [ 'planner_start_with_group' ] && $this -> save_owner )
{
//echo "<p>switched back to $this->save_owner, view was $this->view, func=$func, owner was $this->owner</p>\n";
$states [ 'owner' ] = $this -> owner = $this -> save_owner ;
$states [ 'save_owner' ] = $this -> save_owner = 0 ;
}
}
$this -> view = $states [ 'view' ] = $func ;
2004-08-01 17:36:04 +02:00
}
2008-06-07 19:45:33 +02:00
$this -> view_menuaction = $this -> view == 'listview' ? 'calendar.calendar_uilist.listview' : 'calendar.calendar_uiviews.' . $this -> view ;
2005-11-23 15:21:20 +01:00
2007-03-09 12:39:47 +01:00
if ( $this -> debug > 0 || $this -> debug == 'manage_states' ) $this -> bo -> debug_message ( 'uical::manage_states(%1) session was %2, states now %3' , True , $set_states , $states_session , $states );
2010-07-16 11:00:49 +02:00
// save the states in the session only when we are in calendar
if ( $GLOBALS [ 'egw_info' ][ 'flags' ][ 'currentapp' ] == 'calendar' )
2008-10-07 10:57:09 +02:00
{
2010-07-16 11:00:49 +02:00
$GLOBALS [ 'egw' ] -> session -> appsession ( 'session_data' , 'calendar' , $states );
// save defined states into the user-prefs
if ( ! empty ( $states ) && is_array ( $states ))
2009-10-12 11:34:56 +02:00
{
2010-07-16 11:00:49 +02:00
$saved_states = serialize ( array_intersect_key ( $states , array_flip ( $this -> states_to_save )));
if ( $saved_states != $this -> cal_prefs [ 'saved_states' ])
{
$GLOBALS [ 'egw' ] -> preferences -> add ( 'calendar' , 'saved_states' , $saved_states );
$GLOBALS [ 'egw' ] -> preferences -> save_repository ( false , 'user' , true );
}
2013-12-05 00:28:31 +01:00
// store state in request for clientside favorites to use
// remove date and other states never stored in a favorite
2014-01-24 10:47:33 +01:00
$states = array_diff_key ( $states , array ( 'date' => false , 'year' => false , 'month' => false , 'day' => false , 'save_owner' => false ));
if ( strpos ( $_GET [ 'menuaction' ], 'ajax_sidebox' ) !== false )
{
// sidebox request is from top frame, which has app.calendar NOT loaded by time response arrives
}
elseif ( egw_json_request :: isJSONRequest ())
{
$response = egw_json_response :: get ();
$response -> apply ( 'app.calendar.set_state' , array ( $states , $_GET [ 'menuaction' ]));
}
else
{
egw_framework :: set_extra ( 'calendar' , 'state' , $states );
}
2009-10-12 11:34:56 +02:00
}
2008-10-07 10:57:09 +02:00
}
2004-08-01 17:36:04 +02:00
}
/**
* gets the icons displayed for a given event
*
2009-08-04 19:14:16 +02:00
* @ param array $event
2004-08-01 17:36:04 +02:00
* @ return array of 'img' / 'title' pairs
*/
function event_icons ( $event )
{
2005-11-09 00:15:14 +01:00
$is_private = ! $event [ 'public' ] && ! $this -> bo -> check_perms ( EGW_ACL_READ , $event );
2004-08-01 17:36:04 +02:00
2012-06-24 08:04:44 +02:00
$icons = array ();
2004-08-01 17:36:04 +02:00
if ( ! $is_private )
{
if ( $event [ 'priority' ] == 3 )
{
2008-03-21 21:30:19 +01:00
$icons [] = html :: image ( 'calendar' , 'high' , lang ( 'high priority' ));
2004-08-01 17:36:04 +02:00
}
2005-11-09 00:15:14 +01:00
if ( $event [ 'recur_type' ] != MCAL_RECUR_NONE )
2004-08-01 17:36:04 +02:00
{
2008-03-21 21:30:19 +01:00
$icons [] = html :: image ( 'calendar' , 'recur' , lang ( 'recurring event' ));
2004-08-01 17:36:04 +02:00
}
2006-03-06 08:11:39 +01:00
// icons for single user, multiple users or group(s) and resources
2014-01-30 12:03:16 +01:00
foreach ( array_keys ( $event [ 'participants' ]) as $uid )
2006-03-06 08:11:39 +01:00
{
2008-05-08 17:02:35 +02:00
if ( is_numeric ( $uid ) || ! isset ( $this -> bo -> resources [ $uid [ 0 ]][ 'icon' ]))
2006-03-06 08:11:39 +01:00
{
if ( isset ( $icons [ 'single' ]) || $GLOBALS [ 'egw' ] -> accounts -> get_type ( $uid ) == 'g' )
{
unset ( $icons [ 'single' ]);
2008-03-21 21:30:19 +01:00
$icons [ 'multiple' ] = html :: image ( 'calendar' , 'users' );
2006-03-06 08:11:39 +01:00
}
elseif ( ! isset ( $icons [ 'multiple' ]))
{
2008-03-21 21:30:19 +01:00
$icons [ 'single' ] = html :: image ( 'calendar' , 'single' );
2006-03-06 08:11:39 +01:00
}
2008-05-08 17:02:35 +02:00
}
elseif ( ! isset ( $icons [ $uid [ 0 ]]) && isset ( $this -> bo -> resources [ $uid [ 0 ]]) && isset ( $this -> bo -> resources [ $uid [ 0 ]][ 'icon' ]))
2006-03-06 08:11:39 +01:00
{
2008-05-08 17:02:35 +02:00
$icons [ $uid [ 0 ]] = html :: image ( $this -> bo -> resources [ $uid [ 0 ]][ 'app' ],
( $this -> bo -> resources [ $uid [ 0 ]][ 'icon' ] ? $this -> bo -> resources [ $uid [ 0 ]][ 'icon' ] : 'navbar' ),
lang ( $this -> bo -> resources [ $uid [ 0 ]][ 'app' ]),
2006-03-06 08:11:39 +01:00
'width="16px" height="16px"' );
}
}
2004-08-01 17:36:04 +02:00
}
2006-03-16 19:17:18 +01:00
if ( $event [ 'non_blocking' ])
{
2008-03-21 21:30:19 +01:00
$icons [] = html :: image ( 'calendar' , 'nonblocking' , lang ( 'non blocking' ));
2006-03-16 19:17:18 +01:00
}
2004-08-01 17:36:04 +02:00
if ( $event [ 'public' ] == 0 )
{
2008-03-21 21:30:19 +01:00
$icons [] = html :: image ( 'calendar' , 'private' , lang ( 'private' ));
2004-08-01 17:36:04 +02:00
}
if ( isset ( $event [ 'alarm' ]) && count ( $event [ 'alarm' ]) >= 1 && ! $is_private )
{
2008-03-21 21:30:19 +01:00
$icons [] = html :: image ( 'calendar' , 'alarm' , lang ( 'alarm' ));
2004-08-01 17:36:04 +02:00
}
2009-11-18 14:58:01 +01:00
if ( $event [ 'participants' ][ $this -> user ][ 0 ] == 'U' )
{
$icons [] = html :: image ( 'calendar' , 'cnr-pending' , lang ( 'Needs action' ));
}
2004-08-01 17:36:04 +02:00
return $icons ;
}
/**
* Create a select - box item in the sidebox - menu
* @ privat used only by sidebox_menu !
*/
2014-01-30 12:03:16 +01:00
function _select_box ( $title , $name , $options )
2004-08-01 17:36:04 +02:00
{
2013-11-13 21:03:59 +01:00
$select = ' <select style="width: 99%;" name="' . $name . '" id="calendar_' . $name . '" title="' .
2004-08-01 17:36:04 +02:00
lang ( 'Select a %1' , lang ( $title )) . '">' .
$options . " </select> \n " ;
return array (
'text' => $select ,
'no_lang' => True ,
2013-12-12 05:19:59 +01:00
'link' => False ,
'icon' => false ,
2004-08-01 17:36:04 +02:00
);
}
2005-11-09 00:15:14 +01:00
/**
* Generate a link to add an event , incl . the necessary popup
*
* @ param string $content content of the link
* @ param string $date = null which date should be used as start - and end - date , default null = $this -> date
* @ param int $hour = null which hour should be used for the start , default null = $this -> hour
* @ param int $minute = 0 start - minute
2009-11-25 21:16:41 +01:00
* @ param array $extra_vars = null
2005-11-09 00:15:14 +01:00
* @ return string the link incl . content
*/
2009-11-25 21:16:41 +01:00
function add_link ( $content , $date = null , $hour = null , $minute = 0 , array $vars = null )
2005-11-09 00:15:14 +01:00
{
2009-11-25 21:16:41 +01:00
$vars [ 'menuaction' ] = 'calendar.calendar_uiforms.edit' ;
$vars [ 'date' ] = $date ? $date : $this -> date ;
2005-11-09 00:15:14 +01:00
if ( ! is_null ( $hour ))
{
$vars [ 'hour' ] = $hour ;
$vars [ 'minute' ] = $minute ;
}
2008-03-21 21:30:19 +01:00
return html :: a_href ( $content , '/index.php' , $vars , ' target="_blank" title="' . html :: htmlspecialchars ( lang ( 'Add' )) .
2005-11-09 00:15:14 +01:00
'" onclick="' . $this -> popup ( 'this.href' , 'this.target' ) . '; return false;"' );
}
2008-05-08 17:02:35 +02:00
2005-11-09 00:15:14 +01:00
/**
* returns javascript to open a popup window : window . open ( ... )
*
* @ param string $link link or this . href
* @ param string $target = '_blank' name of target or this . target
* @ param int $width = 750 width of the window
* @ param int $height = 400 height of the window
* @ return string javascript ( using single quotes )
*/
2010-04-15 20:23:02 +02:00
function popup ( $link , $target = '_blank' , $width = 750 , $height = 410 )
2008-02-07 14:59:34 +01:00
{
2009-08-04 19:14:16 +02:00
return 'egw_openWindowCentered2(' . ( $link == 'this.href' ? $link : " ' " . $link . " ' " ) . ',' .
2010-06-10 19:54:03 +02:00
( $target == 'this.target' ? $target : " ' " . $target . " ' " ) . " , $width , $height ,'yes') " ;
2008-02-07 14:59:34 +01:00
}
2005-11-09 00:15:14 +01:00
2004-08-01 17:36:04 +02:00
/**
* creates the content for the sidebox - menu , called as hook
*/
function sidebox_menu ()
{
2014-01-24 12:24:14 +01:00
$link_vars = array ();
2013-12-06 00:22:54 +01:00
// Magic etemplate2 favorites menu (from nextmatch widget)
2014-02-12 22:51:25 +01:00
display_sidebox ( 'calendar' , lang ( 'Favorites' ), egw_framework :: favorite_list ( 'calendar' ));
2013-12-12 04:42:08 +01:00
2014-01-30 12:03:16 +01:00
$file = array ( 'menuOpened' => true ); // menu open by default
2004-08-01 17:36:04 +02:00
$n = 0 ; // index for file-array
2005-11-09 00:15:14 +01:00
$planner_days_for_view = false ;
switch ( $this -> view )
{
case 'month' : $planner_days_for_view = 0 ; break ;
case 'week' : $planner_days_for_view = $this -> cal_prefs [ 'days_in_weekview' ] == 5 ? 5 : 7 ; break ;
case 'day' : $planner_days_for_view = 1 ; break ;
}
2004-08-01 17:36:04 +02:00
// Toolbar with the views
$views = '<table style="width: 100%;"><tr>' . " \n " ;
foreach ( array (
2005-11-09 00:15:14 +01:00
'add' => array ( 'icon' => 'new' , 'text' => 'add' ),
2008-06-07 19:45:33 +02:00
'day' => array ( 'icon' => 'today' , 'text' => 'Today' , 'menuaction' => 'calendar.calendar_uiviews.day' , 'date' => $this -> bo -> date2string ( $this -> bo -> now_su )),
'week' => array ( 'icon' => 'week' , 'text' => 'Weekview' , 'menuaction' => 'calendar.calendar_uiviews.week' ),
2009-11-22 15:01:48 +01:00
'weekN' => array ( 'icon' => 'multiweek' , 'text' => 'Multiple week view' , 'menuaction' => 'calendar.calendar_uiviews.weekN' ),
2008-06-07 19:45:33 +02:00
'month' => array ( 'icon' => 'month' , 'text' => 'Monthview' , 'menuaction' => 'calendar.calendar_uiviews.month' ),
2010-07-31 09:51:52 +02:00
//'year' => array('icon'=>'year','text'=>'yearview','menuaction' => 'calendar.calendar_uiviews.year'),
2008-06-07 19:45:33 +02:00
'planner' => array ( 'icon' => 'planner' , 'text' => 'Group planner' , 'menuaction' => 'calendar.calendar_uiviews.planner' , 'sortby' => $this -> sortby ),
2013-11-18 16:34:41 +01:00
'list' => array ( 'icon' => 'list' , 'text' => 'Listview' , 'menuaction' => 'calendar.calendar_uilist.listview' , 'ajax' => 'true' ),
2004-08-01 17:36:04 +02:00
) as $view => $data )
{
2014-01-30 12:03:16 +01:00
$icon_name = array_shift ( $data );
2005-11-09 00:15:14 +01:00
$title = array_shift ( $data );
$vars = array_merge ( $link_vars , $data );
2014-01-30 12:03:16 +01:00
$icon = html :: image ( 'calendar' , $icon_name , lang ( $title ), " class=sideboxstar " ); //to avoid jscadender from not displaying with pngfix
2010-06-04 10:49:23 +02:00
if ( $view == 'add' )
{
$link = html :: a_href ( $icon , 'javascript:' . $this -> popup ( egw :: link ( '/index.php' , array (
'menuaction' => 'calendar.calendar_uiforms.edit' ,
), false )));
}
else
{
$link = html :: a_href ( $icon , '/index.php' , $vars );
}
2006-03-02 19:15:25 +01:00
$views .= '<td align="center">' . $link . " </td> \n " ;
2004-08-01 17:36:04 +02:00
}
$views .= " </tr></table> \n " ;
2005-11-09 00:15:14 +01:00
2009-11-19 19:56:04 +01:00
// hack to disable invite ACL column, if not enabled in config
if ( $_GET [ 'menuaction' ] == 'preferences.uiaclprefs.index' &&
( ! $this -> bo -> require_acl_invite || $this -> bo -> require_acl_invite == 'groups' && ! ( $_REQUEST [ 'owner' ] < 0 )))
{
$views .= " <style type='text/css'> \n \t .aclInviteColumn { display: none; } \n </style> \n " ;
}
2004-08-01 17:36:04 +02:00
$file [ ++ $n ] = array ( 'text' => $views , 'no_lang' => True , 'link' => False , 'icon' => False );
// special views and view-options menu
$options = '' ;
foreach ( array (
array (
'text' => lang ( 'dayview' ),
2008-06-07 19:45:33 +02:00
'value' => 'menuaction=calendar.calendar_uiviews.day' ,
2006-03-03 19:51:46 +01:00
'selected' => $this -> view == 'day' ,
2004-08-01 17:36:04 +02:00
),
2006-06-02 21:38:08 +02:00
array (
'text' => lang ( 'four days view' ),
2008-06-07 19:45:33 +02:00
'value' => 'menuaction=calendar.calendar_uiviews.day4' ,
2006-06-02 21:38:08 +02:00
'selected' => $this -> view == 'day4' ,
),
2004-08-01 17:36:04 +02:00
array (
2005-11-09 00:15:14 +01:00
'text' => lang ( 'weekview with weekend' ),
2008-06-07 19:45:33 +02:00
'value' => 'menuaction=calendar.calendar_uiviews.week&days=7' ,
2006-03-03 19:51:46 +01:00
'selected' => $this -> view == 'week' && $this -> cal_prefs [ 'days_in_weekview' ] != 5 ,
2004-08-01 17:36:04 +02:00
),
array (
'text' => lang ( 'weekview without weekend' ),
2008-06-07 19:45:33 +02:00
'value' => 'menuaction=calendar.calendar_uiviews.week&days=5' ,
2006-03-03 19:51:46 +01:00
'selected' => $this -> view == 'week' && $this -> cal_prefs [ 'days_in_weekview' ] == 5 ,
2004-08-01 17:36:04 +02:00
),
2008-03-20 09:54:18 +01:00
array (
'text' => lang ( 'Multiple week view' ),
2008-06-07 19:45:33 +02:00
'value' => 'menuaction=calendar.calendar_uiviews.weekN' ,
2008-03-20 09:54:18 +01:00
'selected' => $this -> view == 'weekN' ,
),
2004-08-01 17:36:04 +02:00
array (
'text' => lang ( 'monthview' ),
2008-06-07 19:45:33 +02:00
'value' => 'menuaction=calendar.calendar_uiviews.month' ,
2006-03-03 19:51:46 +01:00
'selected' => $this -> view == 'month' ,
2004-08-01 17:36:04 +02:00
),
2010-07-31 09:51:52 +02:00
array (
'text' => lang ( 'yearview' ),
'value' => 'menuaction=calendar.calendar_uiviews.year' ,
'selected' => $this -> view == 'year' ,
),
2004-08-01 17:36:04 +02:00
array (
'text' => lang ( 'planner by category' ),
2008-06-07 19:45:33 +02:00
'value' => 'menuaction=calendar.calendar_uiviews.planner&sortby=category' .
2005-11-09 00:15:14 +01:00
( $planner_days_for_view !== false ? '&planner_days=' . $planner_days_for_view : '' ),
2006-03-03 19:51:46 +01:00
'selected' => $this -> view == 'planner' && $this -> sortby != 'user' ,
2004-08-01 17:36:04 +02:00
),
array (
'text' => lang ( 'planner by user' ),
2008-06-07 19:45:33 +02:00
'value' => 'menuaction=calendar.calendar_uiviews.planner&sortby=user' .
2005-11-09 00:15:14 +01:00
( $planner_days_for_view !== false ? '&planner_days=' . $planner_days_for_view : '' ),
2006-03-03 19:51:46 +01:00
'selected' => $this -> view == 'planner' && $this -> sortby == 'user' ,
2004-08-01 17:36:04 +02:00
),
2010-01-15 04:53:12 +01:00
array (
'text' => lang ( 'yearly planner' ),
'value' => 'menuaction=calendar.calendar_uiviews.planner&sortby=month' ,
'selected' => $this -> view == 'planner' && $this -> sortby == 'month' ,
),
2004-08-01 17:36:04 +02:00
array (
2005-11-09 00:15:14 +01:00
'text' => lang ( 'listview' ),
2013-12-13 01:09:40 +01:00
'value' => 'menuaction=calendar.calendar_uilist.listview&ajax=true' ,
2006-03-03 19:51:46 +01:00
'selected' => $this -> view == 'listview' ,
2004-08-01 17:36:04 +02:00
),
) as $data )
{
2008-03-21 21:30:19 +01:00
$options .= '<option value="' . $data [ 'value' ] . '"' . ( $data [ 'selected' ] ? ' selected="1"' : '' ) . '>' . html :: htmlspecialchars ( $data [ 'text' ]) . " </option> \n " ;
2004-08-01 17:36:04 +02:00
}
2010-06-04 23:28:26 +02:00
$file [ ++ $n ] = $this -> _select_box ( 'displayed view' , 'view' , $options , egw :: link ( '/index.php' , '' , false ));
2004-08-01 17:36:04 +02:00
// Search
$file [ ++ $n ] = array (
2014-01-24 12:24:14 +01:00
'text' => html :: input ( 'keywords' , '' , 'text' ,
'id="calendar_keywords" style="width: 97.5%;" placeholder="' . html :: htmlspecialchars ( lang ( 'Search' ) . '...' ) . '"' ),
2004-08-01 17:36:04 +02:00
'no_lang' => True ,
'link' => False ,
2013-12-12 05:19:59 +01:00
'icon' => false ,
2004-08-01 17:36:04 +02:00
);
// Minicalendar
2005-11-09 00:15:14 +01:00
$link = array ();
2004-08-01 17:36:04 +02:00
foreach ( array (
2008-06-07 19:45:33 +02:00
'day' => 'calendar.calendar_uiviews.day' ,
'week' => 'calendar.calendar_uiviews.week' ,
'month' => 'calendar.calendar_uiviews.month' ) as $view => $menuaction )
2004-08-01 17:36:04 +02:00
{
2008-05-08 17:02:35 +02:00
if ( $this -> view == 'planner' || $this -> view == 'listview' )
2005-11-09 00:15:14 +01:00
{
2013-12-18 06:23:45 +01:00
$link_vars [ 'menuaction' ] = $this -> view_menuaction ; // must be first one
2005-11-09 00:15:14 +01:00
switch ( $view )
{
2007-03-09 12:39:47 +01:00
case 'day' : $link_vars [ $this -> view . '_days' ] = $this -> view == 'planner' ? 1 : '' ; break ;
case 'week' : $link_vars [ $this -> view . '_days' ] = $this -> cal_prefs [ 'days_in_weekview' ] == 5 ? 5 : 7 ; break ;
case 'month' : $link_vars [ $this -> view . '_days' ] = 0 ; break ;
2005-11-09 00:15:14 +01:00
}
2013-12-18 06:23:45 +01:00
if ( $this -> view == 'listview' ) $link_vars [ 'ajax' ] = 'true' ;
2005-11-09 00:15:14 +01:00
}
2008-03-20 09:54:18 +01:00
elseif ( substr ( $this -> view , 0 , 4 ) == 'week' && $view == 'week' )
{
$link_vars [ 'menuaction' ] = $this -> view_menuaction ; // stay in the N-week-view
}
2007-03-09 12:39:47 +01:00
elseif ( $view == 'day' && $this -> view == 'day4' )
2005-11-09 00:15:14 +01:00
{
2007-03-09 12:39:47 +01:00
$link_vars [ 'menuaction' ] = $this -> view_menuaction ; // stay in the day-view
2005-11-09 00:15:14 +01:00
}
else
{
$link_vars [ 'menuaction' ] = $menuaction ;
}
2004-08-01 17:36:04 +02:00
unset ( $link_vars [ 'date' ]); // gets set in jscal
2010-06-04 23:28:26 +02:00
$link [ $view ] = $l = egw :: link ( '/index.php' , $link_vars , false );
2004-08-01 17:36:04 +02:00
}
2014-01-10 18:31:24 +01:00
if (( $flatdate = $this -> date )) // string if format YYYYmmdd or timestamp
{
$flatdate = is_int ( $flatdate ) ? adodb_date ( 'm/d/Y' , $flatdate ) :
substr ( $flatdate , 4 , 2 ) . '/' . substr ( $flatdate , 6 , 2 ) . '/' . substr ( $flatdate , 0 , 4 );
}
$jscalendar = '<div id="calendar-container"></div>' ;
2004-08-01 17:36:04 +02:00
$file [ ++ $n ] = array ( 'text' => $jscalendar , 'no_lang' => True , 'link' => False , 'icon' => False );
2009-04-20 17:44:24 +02:00
// set a baseurl for selectboxes, if we are not running inside calendar (eg. prefs or admin)
if ( substr ( $_GET [ 'menuaction' ], 0 , 9 ) != 'calendar.' )
{
2010-06-04 23:28:26 +02:00
$baseurl = egw :: link ( '/index.php' , array ( 'menuaction' => 'calendar.calendar_uiviews.index' ), false );
2009-04-20 17:44:24 +02:00
}
2011-06-13 21:52:55 +02:00
2004-08-01 17:36:04 +02:00
// Category Selection
2011-06-13 21:52:55 +02:00
$cat_id = explode ( ',' , $this -> cat_id );
2013-10-05 15:33:28 +02:00
$select = ' <select style="width: 87%;" id="calendar_cat_id" name="cat_id" title="' .
2011-06-13 21:52:55 +02:00
lang ( 'Select a %1' , lang ( 'Category' )) . '"' . ( $cat_id && count ( $cat_id ) > 1 ? ' multiple=true size=4' : '' ) . '>' .
2014-01-30 12:03:16 +01:00
'<option value="0">' . lang ( 'All categories' ) . '</option>' .
$this -> categories -> formatted_list ( 'select' , 'all' , $cat_id , 'True' ) .
" </select> \n " . html :: image ( 'phpgwapi' , 'attach' , '' , 'id="calendar_cat_id_multiple"' );
2011-06-13 21:52:55 +02:00
$file [ ++ $n ] = array (
'text' => $select ,
'no_lang' => True ,
2013-12-12 05:19:59 +01:00
'link' => False ,
'icon' => false ,
2011-06-13 21:52:55 +02:00
);
2004-08-01 17:36:04 +02:00
2006-11-02 22:33:00 +01:00
// Filter all or hideprivate
2014-01-30 12:03:16 +01:00
$filter_options = '' ;
2009-09-29 21:58:51 +02:00
foreach ( array (
2009-11-19 19:56:04 +01:00
'default' => array ( lang ( 'Not rejected' ), lang ( 'Show all status, but rejected' )),
'accepted' => array ( lang ( 'Accepted' ), lang ( 'Show only accepted events' )),
'unknown' => array ( lang ( 'Invitations' ), lang ( 'Show only invitations, not yet accepted or rejected' )),
'tentative' => array ( lang ( 'Tentative' ), lang ( 'Show only tentative accepted events' )),
2010-02-17 14:29:28 +01:00
'delegated' => array ( lang ( 'Delegated' ), lang ( 'Show only delegated events' )),
2009-11-19 19:56:04 +01:00
'rejected' => array ( lang ( 'Rejected' ), lang ( 'Show only rejected events' )),
'owner' => array ( lang ( 'Owner too' ), lang ( 'Show also events just owned by selected user' )),
'all' => array ( lang ( 'All incl. rejected' ), lang ( 'Show all status incl. rejected events' )),
'hideprivate' => array ( lang ( 'Hide private infos' ), lang ( 'Show all events, as if they were private' )),
2010-04-26 09:08:23 +02:00
'showonlypublic' => array ( lang ( 'Hide private events' ), lang ( 'Show only events flagged as public, (not checked as private)' )),
2009-11-19 19:56:04 +01:00
'no-enum-groups' => array ( lang ( 'only group-events' ), lang ( 'Do not include events of group members' )),
2011-06-14 20:33:26 +02:00
'not-unknown' => array ( lang ( 'No meeting requests' ), lang ( 'Show all status, but unknown' )),
2009-09-29 21:58:51 +02:00
) as $value => $label )
{
2009-11-19 19:56:04 +01:00
list ( $label , $title ) = $label ;
2014-01-30 12:03:16 +01:00
$filter_options .= '<option value="' . $value . '"' . ( $this -> filter == $value ? ' selected="selected"' : '' ) . ' title="' . $title . '">' . $label . '</options>' . " \n " ;
2009-09-29 21:58:51 +02:00
}
2012-07-15 10:01:13 +02:00
// add deleted filter, if history logging is activated
if ( $GLOBALS [ 'egw_info' ][ 'server' ][ 'calendar_delete_history' ])
2011-06-14 20:33:26 +02:00
{
2014-01-30 12:03:16 +01:00
$filter_options .= '<option value="deleted"' . ( $this -> filter == 'deleted' ? ' selected="selected"' : '' ) . ' title="' . lang ( 'Show events that have been deleted' ) . '">' . lang ( 'Deleted' ) . '</options>' . " \n " ;
2010-03-05 21:01:44 +01:00
}
2014-01-30 12:03:16 +01:00
$file [] = $this -> _select_box ( 'Filter' , 'filter' , $filter_options , $baseurl ? $baseurl . '&filter=' : '' );
2006-11-02 22:33:00 +01:00
2004-08-01 17:36:04 +02:00
// Calendarselection: User or Group
2006-08-22 18:50:45 +02:00
if ( count ( $this -> bo -> grants ) > 0 && $this -> accountsel -> account_selection != 'none' )
2004-08-01 17:36:04 +02:00
{
$grants = array ();
foreach ( $this -> bo -> list_cals () as $grant )
{
$grants [] = $grant [ 'grantor' ];
}
2012-01-07 23:21:48 +01:00
// we no longer exclude non-accounts from the account-selection: it shows all types of participants
$accounts = explode ( ',' , $this -> owner );
2013-10-05 15:33:28 +02:00
$current_view_url = egw :: link ( '/index.php' , array (
'menuaction' => $this -> view_menuaction ,
'date' => $this -> date ,
2013-12-13 01:09:40 +01:00
) + ( $this -> view == 'listview' ? array ( 'ajax' => 'true' ) : array ()), false );
2004-08-29 22:32:56 +02:00
$file [] = array (
'text' => "
2014-01-10 18:31:24 +01:00
< script type = \ " text/javascript \" src= \" { $GLOBALS [ 'egw_info' ][ 'server' ][ 'webserver_url' ] } /calendar/js/navigation.js \" id= \" calendar-navigation-script \" " .
" data-link-day-url = \" " . htmlspecialchars ( $link [ 'day' ]) .
" \" data-link-week-url= \" " . htmlspecialchars ( $link [ 'week' ]) .
" \" data-link-month-url= \" " . htmlspecialchars ( $link [ 'month' ]) .
" \" data-date= \" " . htmlspecialchars ( $flatdate ) .
" \" data-current-date= \" " . htmlspecialchars ( egw_time :: to ( 'now' , 'Ymd' )) .
" \" data-current-view-url= \" " . htmlspecialchars ( $current_view_url ) . " \" /></script> \n " .
2013-10-05 15:33:28 +02:00
2006-03-06 08:11:39 +01:00
$this -> accountsel -> selection ( 'owner' , 'uical_select_owner' , $accounts , 'calendar+' , count ( $accounts ) > 1 ? 4 : 1 , False ,
2013-11-13 21:03:59 +01:00
' style="width: ' . ( count ( $accounts ) > 1 && in_array ( $this -> common_prefs [ 'account_selection' ], array ( 'selectbox' , 'groupmembers' )) ? '99%' : '86%' ) . ';"' .
2013-10-05 15:33:28 +02:00
' title="' . lang ( 'select a %1' , lang ( 'user' )) . '"' , '' , $grants , false , array ( $this -> bo , 'participant_name' )),
2004-08-29 22:32:56 +02:00
'no_lang' => True ,
2013-12-12 05:19:59 +01:00
'link' => False ,
'icon' => false ,
2004-08-29 22:32:56 +02:00
);
2004-08-01 17:36:04 +02:00
}
2011-02-15 21:35:46 +01:00
// Merge print
2011-06-14 20:33:26 +02:00
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'calendar' ][ 'document_dir' ])
{
2011-02-15 21:35:46 +01:00
$options = '' ;
2011-06-17 17:16:40 +02:00
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'importexport' ])
2011-05-16 20:42:49 +02:00
{
2011-06-17 17:16:40 +02:00
$mime_filter = array ( '!' , // negativ filter, everything but ...
'application/vnd.oasis.opendocument.spreadsheet' ,
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
);
2011-05-16 20:42:49 +02:00
}
2011-09-15 16:46:56 +02:00
$documents = calendar_merge :: get_documents ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'calendar' ][ 'document_dir' ], '' , $mime_filter , 'calendar' );
2011-05-16 20:42:49 +02:00
foreach ( $documents as $key => $value )
2011-02-15 21:35:46 +01:00
{
2011-06-17 17:16:40 +02:00
$options .= '<option value="' . html :: htmlspecialchars ( $key ) . '">' . html :: htmlspecialchars ( $value ) . " </option> \n " ;
2011-02-15 21:35:46 +01:00
}
if ( $options != '' ) {
$options = '<option value="">' . lang ( 'Insert in document' ) . " </option> \n " . $options ;
2013-11-13 21:03:59 +01:00
$select = ' <select style="width: 99%;" name="merge" id="calendar_merge" title="' .
2013-10-05 15:33:28 +02:00
html :: htmlspecialchars ( lang ( 'Select a %1' , lang ( 'merge document...' ))) . '">' .
2011-02-17 19:27:37 +01:00
$options . " </select> \n " ;
$file [] = array (
'text' => $select ,
'no_lang' => True ,
2013-12-12 05:19:59 +01:00
'link' => False ,
'icon' => false ,
2011-02-17 19:27:37 +01:00
);
2011-02-15 21:35:46 +01:00
}
2008-05-08 17:02:35 +02:00
}
2011-02-15 21:35:46 +01:00
2005-11-09 00:15:14 +01:00
$appname = 'calendar' ;
2006-03-02 19:15:25 +01:00
$menu_title = lang ( 'Calendar Menu' );
2004-08-01 17:36:04 +02:00
display_sidebox ( $appname , $menu_title , $file );
2008-05-08 17:02:35 +02:00
2005-11-09 00:15:14 +01:00
// resources menu hooks
foreach ( $this -> bo -> resources as $resource )
{
if ( ! is_array ( $resource [ 'cal_sidebox' ])) continue ;
$menu_title = $resource [ 'cal_sidebox' ][ 'menu_title' ] ? $resource [ 'cal_sidebox' ][ 'menu_title' ] : lang ( $resource [ 'app' ]);
2006-03-06 08:11:39 +01:00
$file = ExecMethod ( $resource [ 'cal_sidebox' ][ 'file' ], array (
'menuaction' => $this -> view_menuaction ,
'owner' => $this -> owner ,
));
2005-11-09 00:15:14 +01:00
display_sidebox ( $appname , $menu_title , $file );
}
if ( $GLOBALS [ 'egw_info' ][ 'user' ][ 'apps' ][ 'admin' ])
2004-08-01 17:36:04 +02:00
{
$file = Array (
2010-06-04 23:28:26 +02:00
'Configuration' => egw :: link ( '/index.php' , 'menuaction=admin.uiconfig.index&appname=calendar' ),
'Custom Fields' => egw :: link ( '/index.php' , 'menuaction=admin.customfields.edit&appname=calendar' ),
'Holiday Management' => egw :: link ( '/index.php' , 'menuaction=calendar.uiholiday.admin' ),
2011-06-21 23:14:51 +02:00
'Global Categories' => egw :: link ( '/index.php' , 'menuaction=admin.admin_categories.index&appname=calendar' ),
2004-08-01 17:36:04 +02:00
);
2013-10-15 18:53:43 +02:00
$GLOBALS [ 'egw' ] -> framework -> sidebox ( $appname , lang ( 'Admin' ), $file , 'admin' );
2004-08-01 17:36:04 +02:00
}
}
2011-02-15 21:35:46 +01:00
public function merge ( $timespan = array ())
{
// Merge print
if ( $_GET [ 'merge' ])
{
if ( ! $timespan )
{
$timespan = array ( array (
2011-06-14 20:33:26 +02:00
'start' => is_array ( $this -> first ) ? $this -> bo -> date2ts ( $this -> first ) : $this -> first ,
2011-02-15 21:35:46 +01:00
'end' => is_array ( $this -> last ) ? $this -> bo -> date2ts ( $this -> last ) : $this -> last
));
}
2011-06-17 15:27:45 +02:00
$merge = new calendar_merge ();
2011-06-17 17:16:40 +02:00
return $merge -> download ( $_GET [ 'merge' ], $timespan , '' , $GLOBALS [ 'egw_info' ][ 'user' ][ 'preferences' ][ 'calendar' ][ 'document_dir' ]);
2011-02-15 21:35:46 +01:00
}
return false ;
}
2004-08-01 17:36:04 +02:00
}