forked from extern/egroupware
Promote calendar-owner to full widget, loadable by etemplate on its own
This commit is contained in:
parent
843b53487b
commit
58b7f38426
@ -237,21 +237,30 @@ class calendar_export_csv implements importexport_iface_export_plugin {
|
||||
*
|
||||
*/
|
||||
public function get_selectors_etpl($definition = null) {
|
||||
$states = $GLOBALS['egw']->session->appsession('session_data','calendar');
|
||||
switch($states['view']) {
|
||||
case 'month':
|
||||
$query = $this->get_query_month($states);
|
||||
break;
|
||||
case 'week':
|
||||
case 'weekN':
|
||||
$query = $this->get_query_week($states);
|
||||
break;
|
||||
case 'day':
|
||||
$query = $this->get_query_day($states);
|
||||
break;
|
||||
$states = $this->bo->cal_prefs['saved_states'];
|
||||
$list = $GLOBALS['egw']->session->appsession('calendar_list','calendar');
|
||||
if(!$list['startdate'])
|
||||
{
|
||||
switch($states['view']) {
|
||||
case 'month':
|
||||
$query = $this->get_query_month($states);
|
||||
break;
|
||||
case 'week':
|
||||
case 'weekN':
|
||||
$query = $this->get_query_week($states);
|
||||
break;
|
||||
case 'day':
|
||||
$query = $this->get_query_day($states);
|
||||
break;
|
||||
}
|
||||
$start= new egw_time($query['start']);
|
||||
$end = new egw_time($query['end']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$start= new egw_time($list['startdate']);
|
||||
$end = new egw_time($list['enddate']);
|
||||
}
|
||||
$start= new egw_time($query['start']);
|
||||
$end = new egw_time($query['end']);
|
||||
if ($states['view'] == 'listview')
|
||||
{
|
||||
$list = $GLOBALS['egw']->session->appsession('calendar_list','calendar');
|
||||
@ -375,6 +384,9 @@ class calendar_export_csv implements importexport_iface_export_plugin {
|
||||
'no-enum-groups' => lang('only group-events'),
|
||||
'not-unknown' => lang('No meeting requests'),
|
||||
);
|
||||
|
||||
|
||||
$states = $this->bo->cal_prefs['saved_states'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
160
calendar/inc/class.calendar_owner_etemplate_widget.inc.php
Normal file
160
calendar/inc/class.calendar_owner_etemplate_widget.inc.php
Normal file
@ -0,0 +1,160 @@
|
||||
<?php
|
||||
/**
|
||||
* EGroupware - eTemplate serverside of owner list widget
|
||||
*
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
* @package etemplate
|
||||
* @subpackage api
|
||||
* @link http://www.egroupware.org
|
||||
* @author Nathan Gray
|
||||
* @copyright 2016 Nathan Gray
|
||||
* @version $Id$
|
||||
*/
|
||||
|
||||
/**
|
||||
* eTemplate tag list widget
|
||||
*
|
||||
* The naming convention is <appname>_<subtype>_etemplate_widget
|
||||
*/
|
||||
class calendar_owner_etemplate_widget extends etemplate_widget_taglist
|
||||
{
|
||||
|
||||
/**
|
||||
* Make sure all the needed select options are there
|
||||
*
|
||||
* @param string $cname
|
||||
* @param array $expand values for keys 'c', 'row', 'c_', 'row_', 'cont'
|
||||
*/
|
||||
public function beforeSendToClient($cname, array $expand=null)
|
||||
{
|
||||
|
||||
egw_framework::validate_file('.','et2_widget_owner','calendar');
|
||||
egw_framework::includeCSS('calendar');
|
||||
|
||||
$bo = new calendar_bo();
|
||||
|
||||
$form_name = self::form_name($cname, $this->id, $expand);
|
||||
|
||||
$value =& self::get_array(self::$request->content, $form_name);
|
||||
if (!is_array(self::$request->sel_options[$form_name]))
|
||||
{
|
||||
self::$request->sel_options[$form_name] = array();
|
||||
}
|
||||
$sel_options =& self::$request->sel_options[$form_name];
|
||||
|
||||
// Get user accounts, formatted nicely for grouping and matching
|
||||
// the ajax call calendar_uiforms->ajax_owner() - users first
|
||||
$accounts = array();
|
||||
$list = array('accounts', 'owngroups');
|
||||
foreach($list as $type)
|
||||
{
|
||||
$account_options = array('account_type' => $type);
|
||||
$accounts += accounts::link_query('',$account_options);
|
||||
}
|
||||
$accounts = array_intersect_key($accounts, $GLOBALS['egw']->acl->get_grants('calendar'));
|
||||
$sel_options += array_map(
|
||||
function($account_id, $account_name) {
|
||||
return array(
|
||||
'value' => ''.$account_id,
|
||||
'label' => $account_name,
|
||||
'app' => lang('home-accounts')
|
||||
);
|
||||
},
|
||||
array_keys($accounts), $accounts
|
||||
);
|
||||
|
||||
|
||||
// Add external owners that a select account widget will not find
|
||||
foreach($value as &$owner)
|
||||
{
|
||||
// Make sure it's a string for comparison
|
||||
$owner = ''.$owner;
|
||||
if(!is_numeric($owner))
|
||||
{
|
||||
$resource = $bo->resources[substr($owner, 0,1)];
|
||||
$label = egw_link::title($resource['app'], substr($owner,1));
|
||||
$linked_owners[$resource['app']][substr($owner,1)] = $label;
|
||||
}
|
||||
else if (!in_array($owner, array_keys($accounts)))
|
||||
{
|
||||
$label = egw_link::title('home-accounts',$owner);
|
||||
$resource = array('app'=> 'home-accounts');
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$sel_options[] = array('value' => $owner, 'label' => $label, 'app' => lang($resource['app']));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle ajax searches for owner across all supported resources
|
||||
*
|
||||
* @return Array List of matching results
|
||||
*/
|
||||
public static function ajax_owner()
|
||||
{
|
||||
$bo = new calendar_bo();
|
||||
|
||||
$query = $_REQUEST['query'];
|
||||
// Arbitrarily limited to 50 / resource
|
||||
$options = ['start' => 0, 'num_rows' => 50];
|
||||
$results = [];
|
||||
|
||||
$resources = array_merge(array('' => $bo->resources['']),$bo->resources);
|
||||
foreach($resources as $type => $data)
|
||||
{
|
||||
$mapped = array();
|
||||
$_results = array();
|
||||
|
||||
// Handle accounts seperately
|
||||
if($type == '')
|
||||
{
|
||||
$list = array('accounts', 'owngroups');
|
||||
foreach($list as $a_type)
|
||||
{
|
||||
$account_options = $options + array('account_type' => $a_type);
|
||||
$_results += accounts::link_query('',$account_options);
|
||||
}
|
||||
$_results = array_intersect_key($_results, $GLOBALS['egw']->acl->get_grants('calendar'));
|
||||
}
|
||||
else if ($data['app'] && egw_link::get_registry($data['app'], 'query'))
|
||||
{
|
||||
$_results = egw_link::query($data['app'], $query,$options);
|
||||
}
|
||||
if(!$_results) continue;
|
||||
$_results = array_unique($_results);
|
||||
|
||||
foreach($_results as $id => $title)
|
||||
{
|
||||
if($id && $title)
|
||||
{
|
||||
// Magicsuggest uses id, not value.
|
||||
$value = [
|
||||
'id' => $type.$id,
|
||||
'value'=> $type.$id,
|
||||
'label' => $title,
|
||||
'app' => lang($data['app'])
|
||||
];
|
||||
if(is_array($value['label']))
|
||||
{
|
||||
$value = array_merge($value, $value['label']);
|
||||
}
|
||||
$mapped[] = $value;
|
||||
}
|
||||
}
|
||||
if(count($mapped))
|
||||
{
|
||||
$results = array_merge($results, $mapped);
|
||||
}
|
||||
}
|
||||
|
||||
// switch regular JSON response handling off
|
||||
egw_json_request::isJSONRequest(false);
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode($results);
|
||||
common::egw_exit();
|
||||
}
|
||||
}
|
@ -616,61 +616,7 @@ class calendar_ui
|
||||
$content = $this->cal_prefs['saved_states'];
|
||||
$content['view'] = $this->view ? $this->view : 'week';
|
||||
$content['date'] = $this->date ? $this->date : egw_time();
|
||||
$owners = $this->owner ? is_array($this->owner) ? array($this->owner) : explode(',',$this->owner) : array($GLOBALS['egw_info']['user']['account_id']);
|
||||
|
||||
|
||||
$sel_options = array('owner' => array());
|
||||
|
||||
// Get user accounts, formatted nicely for grouping and matching
|
||||
// the ajax call calendar_uiforms->ajax_owner() - users first
|
||||
$accounts = array();
|
||||
$list = array('accounts', 'owngroups');
|
||||
foreach($list as $type)
|
||||
{
|
||||
$account_options = array('account_type' => $type);
|
||||
$accounts += accounts::link_query('',$account_options);
|
||||
}
|
||||
$accounts = array_intersect_key($accounts, $GLOBALS['egw']->acl->get_grants('calendar'));
|
||||
$sel_options['owner'] = array_map(
|
||||
function($account_id, $account_name) {
|
||||
return array(
|
||||
'value' => ''.$account_id,
|
||||
'label' => $account_name,
|
||||
'app' => lang('home-accounts')
|
||||
);
|
||||
},
|
||||
array_keys($accounts), $accounts
|
||||
);
|
||||
|
||||
|
||||
// Add external owners that a select account widget will not find
|
||||
$linked_owners = array();
|
||||
foreach($owners as &$owner)
|
||||
{
|
||||
$owner = ''.$owner;
|
||||
if(!is_numeric($owner))
|
||||
{
|
||||
$resource = $this->bo->resources[substr($owner, 0,1)];
|
||||
$label = egw_link::title($resource['app'], substr($owner,1));
|
||||
$linked_owners[$resource['app']][substr($owner,1)] = $label;
|
||||
}
|
||||
else if (!in_array($owner, array_keys($accounts)))
|
||||
{
|
||||
$label = egw_link::title('home-accounts',$owner);
|
||||
$resource = array('app'=> 'home-accounts');
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$sel_options['owner'][] = array('value' => $owner, 'label' => $label, 'app' => lang($resource['app']));
|
||||
}
|
||||
if($linked_owners)
|
||||
{
|
||||
// Send them to link registry too
|
||||
egw_json_response::get()->call('egw.link_title_callback',$linked_owners);
|
||||
}
|
||||
|
||||
$readonlys = array();
|
||||
$sel_options['status_filter'] = array(
|
||||
array('value' => 'default', 'label' => lang('Not rejected'), 'title' => lang('Show all status, but rejected')),
|
||||
|
@ -2941,75 +2941,6 @@ class calendar_uiforms extends calendar_ui
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle ajax searches for owner across all supported resources
|
||||
*
|
||||
* @return Array List of matching results
|
||||
*/
|
||||
public function ajax_owner()
|
||||
{
|
||||
$query = $_REQUEST['query'];
|
||||
// Arbitrarily limited to 50 / resource
|
||||
$options = ['start' => 0, 'num_rows' => 50];
|
||||
$results = [];
|
||||
if($query)
|
||||
{
|
||||
$resources = array_merge(array('' => $this->bo->resources['']),$this->bo->resources);
|
||||
foreach($resources as $type => $data)
|
||||
{
|
||||
$mapped = array();
|
||||
$_results = array();
|
||||
|
||||
// Handle accounts seperately
|
||||
if($type == '')
|
||||
{
|
||||
$list = array('accounts', 'owngroups');
|
||||
foreach($list as $a_type)
|
||||
{
|
||||
$account_options = $options + array('account_type' => $a_type);
|
||||
$_results += accounts::link_query('',$account_options);
|
||||
}
|
||||
$_results = array_intersect_key($_results, $GLOBALS['egw']->acl->get_grants('calendar'));
|
||||
}
|
||||
else if ($data['app'] && egw_link::get_registry($data['app'], 'query'))
|
||||
{
|
||||
$_results = egw_link::query($data['app'], $query,$options);
|
||||
}
|
||||
if(!$_results) continue;
|
||||
$_results = array_unique($_results);
|
||||
|
||||
foreach($_results as $id => $title)
|
||||
{
|
||||
if($id && $title)
|
||||
{
|
||||
// Magicsuggest uses id, not value.
|
||||
$value = [
|
||||
'id' => $type.$id,
|
||||
'value'=> $type.$id,
|
||||
'label' => $title,
|
||||
'app' => lang($data['app'])
|
||||
];
|
||||
if(is_array($value['label']))
|
||||
{
|
||||
$value = array_merge($value, $value['label']);
|
||||
}
|
||||
$mapped[] = $value;
|
||||
}
|
||||
}
|
||||
if(count($mapped))
|
||||
{
|
||||
$results = array_merge($results, $mapped);
|
||||
}
|
||||
}
|
||||
}
|
||||
// switch regular JSON response handling off
|
||||
egw_json_request::isJSONRequest(false);
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode($results);
|
||||
common::egw_exit();
|
||||
}
|
||||
|
||||
/**
|
||||
* imports a mail as Calendar
|
||||
*
|
||||
|
@ -29,7 +29,7 @@ var et2_calendar_owner = et2_taglist_email.extend(
|
||||
{
|
||||
attributes: {
|
||||
"autocomplete_url": {
|
||||
"default": "calendar.calendar_uiforms.ajax_owner.etemplate"
|
||||
"default": "calendar_owner_etemplate_widget::ajax_owner"
|
||||
},
|
||||
"autocomplete_params": {
|
||||
"name": "Autocomplete parameters",
|
||||
@ -90,4 +90,4 @@ var et2_calendar_owner = et2_taglist_email.extend(
|
||||
return this.taglist.getValue();
|
||||
}
|
||||
});
|
||||
et2_register_widget(et2_calendar_owner, ["calendar_owner"]);
|
||||
et2_register_widget(et2_calendar_owner, ["calendar-owner"]);
|
@ -38,7 +38,7 @@
|
||||
<date statustext="Enddate of the export" id="end"/>
|
||||
</row>
|
||||
<row>
|
||||
<taglist id="owner" empty_label="Owner" span="2" class="shorter" autocomplete_url="calendar.calendar_uiforms.ajax_owner.etemplate" allowFreeEntries="false"/>
|
||||
<calendar-owner id="owner" empty_label="Owner" span="2" class="shorter" allowFreeEntries="false" autocomplete_url="calendar.calendar_owner_etemplate_widget.ajax_owner"/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
|
@ -27,7 +27,7 @@ if(view_change >= 0) {update.view = app.calendar.sidebox_changes_views[view_chan
|
||||
<textbox type="hidden" id="first"/>
|
||||
<textbox type="hidden" id="last"/>
|
||||
<select-cat id="cat_id" empty_label="All categories" width="86%" onchange="app.calendar.update_state({cat_id: widget.getValue()});" expand_multiple_rows="4"/>
|
||||
<calendar_owner id="owner" class="et2_fullWidth" onchange="app.calendar.update_state({owner: widget.getValue()}); return false;" multiple="true" allowFreeEntries="false"/>
|
||||
<calendar-owner id="owner" class="et2_fullWidth" onchange="app.calendar.update_state({owner: widget.getValue()}); return false;" multiple="true" allowFreeEntries="false"/>
|
||||
|
||||
<!--
|
||||
<taglist id="owner" class="et2_fullWidth" onchange="app.calendar.update_state({owner: widget.getValue()});" autocomplete_params=''/>
|
||||
|
Loading…
Reference in New Issue
Block a user