mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-10-06 01:52:08 +02:00
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) {
|
public function get_selectors_etpl($definition = null) {
|
||||||
$states = $GLOBALS['egw']->session->appsession('session_data','calendar');
|
$states = $this->bo->cal_prefs['saved_states'];
|
||||||
switch($states['view']) {
|
$list = $GLOBALS['egw']->session->appsession('calendar_list','calendar');
|
||||||
case 'month':
|
if(!$list['startdate'])
|
||||||
$query = $this->get_query_month($states);
|
{
|
||||||
break;
|
switch($states['view']) {
|
||||||
case 'week':
|
case 'month':
|
||||||
case 'weekN':
|
$query = $this->get_query_month($states);
|
||||||
$query = $this->get_query_week($states);
|
break;
|
||||||
break;
|
case 'week':
|
||||||
case 'day':
|
case 'weekN':
|
||||||
$query = $this->get_query_day($states);
|
$query = $this->get_query_week($states);
|
||||||
break;
|
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')
|
if ($states['view'] == 'listview')
|
||||||
{
|
{
|
||||||
$list = $GLOBALS['egw']->session->appsession('calendar_list','calendar');
|
$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'),
|
'no-enum-groups' => lang('only group-events'),
|
||||||
'not-unknown' => lang('No meeting requests'),
|
'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 = $this->cal_prefs['saved_states'];
|
||||||
$content['view'] = $this->view ? $this->view : 'week';
|
$content['view'] = $this->view ? $this->view : 'week';
|
||||||
$content['date'] = $this->date ? $this->date : egw_time();
|
$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();
|
$readonlys = array();
|
||||||
$sel_options['status_filter'] = array(
|
$sel_options['status_filter'] = array(
|
||||||
array('value' => 'default', 'label' => lang('Not rejected'), 'title' => lang('Show all status, but rejected')),
|
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
|
* imports a mail as Calendar
|
||||||
*
|
*
|
||||||
|
@ -29,7 +29,7 @@ var et2_calendar_owner = et2_taglist_email.extend(
|
|||||||
{
|
{
|
||||||
attributes: {
|
attributes: {
|
||||||
"autocomplete_url": {
|
"autocomplete_url": {
|
||||||
"default": "calendar.calendar_uiforms.ajax_owner.etemplate"
|
"default": "calendar_owner_etemplate_widget::ajax_owner"
|
||||||
},
|
},
|
||||||
"autocomplete_params": {
|
"autocomplete_params": {
|
||||||
"name": "Autocomplete parameters",
|
"name": "Autocomplete parameters",
|
||||||
@ -90,4 +90,4 @@ var et2_calendar_owner = et2_taglist_email.extend(
|
|||||||
return this.taglist.getValue();
|
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"/>
|
<date statustext="Enddate of the export" id="end"/>
|
||||||
</row>
|
</row>
|
||||||
<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>
|
</row>
|
||||||
</rows>
|
</rows>
|
||||||
</grid>
|
</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="first"/>
|
||||||
<textbox type="hidden" id="last"/>
|
<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"/>
|
<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=''/>
|
<taglist id="owner" class="et2_fullWidth" onchange="app.calendar.update_state({owner: widget.getValue()});" autocomplete_params=''/>
|
||||||
|
Loading…
Reference in New Issue
Block a user