From 4983f4ab737378b6ffcb8e00758f66098dedd94f Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Sat, 26 May 2007 07:32:26 +0000 Subject: [PATCH 1/9] "fixed xmlrpc bugs reported by pe : - customfields were not send to KAddressbook (it's now a default, which can be turned off with $param['customfields']=false - tel_prefer should be the phone-number not the field-name (is now transparently converted)" --- addressbook/inc/class.boaddressbook.inc.php | 46 ++++++++++++++++++--- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/addressbook/inc/class.boaddressbook.inc.php b/addressbook/inc/class.boaddressbook.inc.php index 5dc2abd136..ee990cd3c0 100644 --- a/addressbook/inc/class.boaddressbook.inc.php +++ b/addressbook/inc/class.boaddressbook.inc.php @@ -179,16 +179,30 @@ class boaddressbook * * @internal * @param array $datas array of contact arrays + * @param boolean $read_customfields=false should the customfields be read, default no (contacts::read() does it already) * @return array */ - function data2xmlrpc($datas) + function data2xmlrpc($datas,$read_customfields=false) { if(is_array($datas)) { + if ($read_customfields) + { + $ids = array(); + foreach($datas as $data) + { + $ids[] = $data['id']; + } + $customfields = $this->contacts->read_customfields($ids); + } foreach($datas as $n => $nul) { $data =& $datas[$n]; // $n => &$data is php5 ;-) - + + if ($customfields && isset($customfields[$data['id']])) + { + $data += $customfields[$data['id']]; + } // remove empty or null elements, they dont need to be transfered $data = array_diff($data,array('',null)); @@ -213,6 +227,11 @@ class boaddressbook { $data['cat_id'] = $GLOBALS['server']->cats2xmlrpc(explode(',',$data['cat_id'])); } + // replacing the fieldname in tel_prefer with the actual number, if it exists and is non-empty + if (substr($data['tel_prefer'],0,4) === 'tel_' && $data[$data['tel_prefer']]) + { + $data['tel_prefer'] = $data[$data['tel_prefer']]; + } // translate fieldnames if required foreach($this->mapping as $from => $to) { @@ -286,6 +305,20 @@ class boaddressbook $cats = $GLOBALS['server']->xmlrpc2cats($data['cat_id']); $data['cat_id'] = count($cats) > 1 ? ','.implode(',',$cats).',' : (int)$cats[0]; } + // replacing the number in tel_prefer with the fieldname, if it matches a phone-number, otherwise keep it's content as is + if ($data['tel_prefer']) + { + $prefer = $data['tel_prefer']; + unset($data['tel_prefer']); + if (($key = array_search($prefer,$data)) !== false && substr($key,0,4) === 'tel_') + { + $data['tel_prefer'] = $key; + } + else + { + $data['tel_prefer'] = $prefer; + } + } return $data; } @@ -303,11 +336,14 @@ class boaddressbook * @param string $param['sort']='' sorting: ASC or DESC * @param string $param['order']='' column to order, default ('') n_family,n_given,email ASC * @param int $param['lastmod']=-1 return only values modified after given timestamp, default (-1) return all - * @param string $param['cquery='' return only entries starting with given character, default ('') all + * @param string $param['cquery']='' return only entries starting with given character, default ('') all + * @param string $param['customfields']=true return the customfields too, default yes * @return array of contacts */ function search($param) { + $read_customfields = !isset($param['customfields']) || $param['customfields']; + return $this->data2xmlrpc($this->contacts->old_read( (int) $param['start'], (int) $param['limit'], @@ -318,11 +354,11 @@ class boaddressbook $param['order'], $param['lastmod'] ? $param['lastmod'] : -1, $param['cquery'] - )); + ),$read_customfields); } /** - * Read one contract + * Read one contact * * @param mixed $id $id, $id[0] or $id['id'] contains the id of the contact * @return array contact From 915e5f74f2da11614c8f92b2647eaf69a0ce2cd2 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Sat, 26 May 2007 07:51:17 +0000 Subject: [PATCH 2/9] "fixed now working saving of column-selection after the memory-saving-fix" --- etemplate/inc/class.nextmatch_widget.inc.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/etemplate/inc/class.nextmatch_widget.inc.php b/etemplate/inc/class.nextmatch_widget.inc.php index b74e54cef7..4f141075c1 100644 --- a/etemplate/inc/class.nextmatch_widget.inc.php +++ b/etemplate/inc/class.nextmatch_widget.inc.php @@ -267,6 +267,9 @@ { $value['template'] =& new etemplate($value['template'],$tmpl->as_array()); } + $extension_data['template'] = $value['template']->name; // used for the column-selection, and might be set in get_rows() + $extension_data['columnselection_pref'] = $value['columnselection_pref']; + if ($total < 1 && $value['template']->rows > 1) { $value['template']->data[0]['h'.$value['template']->rows] .= ',1'; // disable the last data row From 7010efc75ca3bfcb369f8ebacabf3a8ebcdcc916 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Sat, 26 May 2007 07:58:37 +0000 Subject: [PATCH 3/9] "fixed not always working display of customfields (was still relying on the old pref instead the colum-selection)" --- addressbook/inc/class.uicontacts.inc.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/addressbook/inc/class.uicontacts.inc.php b/addressbook/inc/class.uicontacts.inc.php index a71ab5a42a..537e1bae1c 100644 --- a/addressbook/inc/class.uicontacts.inc.php +++ b/addressbook/inc/class.uicontacts.inc.php @@ -710,7 +710,7 @@ class uicontacts extends bocontacts 'col_filter' => array('tid' => $query['col_filter']['tid']), 'org_view' => $query['org_view'], )); - if ($state != $this->prefs['index_state']) + if ($state != $this->prefs[$do_email ? 'email_state' : 'index_state']) { $GLOBALS['egw']->preferences->add('addressbook',$do_email ? 'email_state' : 'index_state',$state); // save prefs, but do NOT invalid the cache (unnecessary) @@ -821,9 +821,11 @@ class uicontacts extends bocontacts } $rows = parent::search($query['advanced_search'] ? $query['advanced_search'] : $query['search'],$id_only, $order,'',$wildcard,false,$op,array((int)$query['start'],(int) $query['num_rows']),$query['col_filter']); - - // do we need the custom fields - if (!$id_only && $this->prefs['custom_colum'] != 'never' && $rows && $this->customfields) + + // do we need to read the custom fields, depends on the column is enabled and customfields exist + $columselection = $this->prefs['nextmatch-addressbook.'.($do_email ? 'email' : 'index').'.rows']; + if ($columselection) $columselection = explode(',',$columselection); + if (!$id_only && (!$columselection || in_array('customfields',$columselection)) && $rows && $this->customfields) { foreach((array) $rows as $n => $val) { @@ -943,7 +945,7 @@ class uicontacts extends bocontacts if (!$homeaddress) $rows['no_home'] = true; } // disable customfields column, if we have no customefield(s) - if (!$customfields) $rows['no_customfields'] = true; + if (!$this->customfields || !$this->prefs['no_auto_hide'] && !$customfields) $rows['no_customfields'] = true; $rows['order'] = $order; $rows['call_popup'] = $this->config['call_popup']; From 233a414efefb53e461bd8371c1712b96cebaa274 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Sat, 26 May 2007 19:06:12 +0000 Subject: [PATCH 4/9] new about page from Sebastian Ebeling --- about.php | 364 +++------------------------- phpgwapi/inc/class.about.inc.php | 384 ++++++++++++++++++++++++++++++ phpgwapi/setup/etemplates.inc.php | 26 ++ 3 files changed, 439 insertions(+), 335 deletions(-) create mode 100644 phpgwapi/inc/class.about.inc.php create mode 100644 phpgwapi/setup/etemplates.inc.php diff --git a/about.php b/about.php index 48a88e9b53..bc56f04e2f 100644 --- a/about.php +++ b/about.php @@ -1,343 +1,37 @@ + * @author Ralf Becker + * @license http://www.gnu.org/copyleft/gpl.html + * @link http://www.egroupware.org + * @version SVN: $Id$ + */ + $GLOBALS['egw_info'] = array( 'flags' => array( - 'currentapp' => isset($_GET['app']) && $_GET['app'] != 'eGroupWare' ? $_GET['app'] : 'about', - 'disable_Template_class' => True, - 'noheader' => True, + 'currentapp' => 'home', //'about', + 'disable_Template_class' => true, + 'noheader' => true, + 'nonavbar' => true ) ); + include('header.inc.php'); - + // create the about page +require_once(EGW_API_INC.'/class.about.inc.php'); + $aboutPage = new about(); - - -class about -{ - /** - * template object - */ - var $tpl; - - /** - * constructor of class about - * sets template and calls list or detail view - */ - function about() - { - // create template object - $this->tpl =& CreateObject('phpgwapi.Template', $GLOBALS['egw']->common->get_tpl_dir('phpgwapi')); - $this->tpl->set_file(array( - 'phpgw_about' => 'about.tpl', - 'phpgw_about_unknown' => 'about_unknown.tpl' - )); - - $title = isset($GLOBALS['egw_info']['apps'][$_GET['app']]) ? $GLOBALS['egw_info']['apps'][$_GET['app']]['title'] : 'eGroupWare'; - $GLOBALS['egw_info']['flags']['app_header'] = lang('About %1',$title); - $GLOBALS['egw']->common->egw_header(); - - // list or detail view - $app = isset($_GET['app']) && $_GET['app'] != 'eGroupWare' ? basename($_GET['app']) : 'about'; - if ($app) { - if (!($included = $GLOBALS['egw']->hooks->single('about',$app))) { - $detail = $included = file_exists(EGW_INCLUDE_ROOT . "/$app/setup/setup.inc.php"); - } - } else { - $detail = false; - } - if ($detail) { - $this->_detailView(); - } else { - $this->_listView(); - } - - $GLOBALS['egw']->common->egw_footer(); - } - - - - /** - * output of list view - */ - function _listView() - { - // eGW info - $this->tpl->set_block('phpgw_about', 'egroupware','egroupware'); - $this->tpl->set_var('phpgw_logo',$GLOBALS['egw']->common->image('phpgwapi','logo.gif')); - $this->tpl->set_var('phpgw_version',lang('eGroupWare API version %1',$GLOBALS['egw_info']['server']['versions']['phpgwapi'])); - $this->tpl->set_var('phpgw_message',lang('%1eGroupWare%2 is a multi-user, web-based groupware suite written in %3PHP%4.', - '','','','')); - $this->tpl->pparse('overview', 'egroupware'); - - // app_list_tablestart - $this->tpl->set_block('phpgw_about', 'app_list_tablestart','app_list_tablestart'); - $this->tpl->set_var('phpgw_app_listinfo', lang('List of your available applications')); - $this->tpl->set_var('phpgw_about_th_name', lang('name')); - $this->tpl->set_var('phpgw_about_th_author', lang('author')); - $this->tpl->set_var('phpgw_about_th_maintainer', lang('maintainer')); - $this->tpl->set_var('phpgw_about_th_version', lang('version')); - $this->tpl->set_var('phpgw_about_th_license', lang('license')); - $this->tpl->set_var('phpgw_about_th_details', lang('details')); - $this->tpl->pparse('phpgw_about', 'app_list_tablestart', true); - - // app_list_tablerows - $this->tpl->set_block('phpgw_about', 'app_list_tablerow', 'app_list_tablerow'); - foreach ($GLOBALS['egw_info']['user']['apps'] as $app => $appinfo) { - // get additional information about the application - $info = $this->_getParsedAppInfo($app); - - $this->tpl->set_var('phpgw_about_td_image', $GLOBALS['egw']->common->image($app,array('navbar','nonav'))); - $this->tpl->set_var('phpgw_about_td_title', $appinfo['title']); - $this->tpl->set_var('phpgw_about_td_author', $info['author']); - $this->tpl->set_var('phpgw_about_td_maintainer', $info['maintainer']); - $this->tpl->set_var('phpgw_about_td_version', $info['version']); - $this->tpl->set_var('phpgw_about_td_license', $info['license']); - $this->tpl->set_var('phpgw_about_td_details_img', $GLOBALS['egw']->common->image('phpgwapi','view.png')); - $this->tpl->set_var('phpgw_about_td_details_url', $GLOBALS['egw_info']['server']['webserver_url'].'/about.php?app='.$app); - $this->tpl->pparse('phpgw_about', 'app_list_tablerow', true); - } - - // app_list_table_stop - $this->tpl->set_block('phpgw_about', 'app_list_tablestop','app_list_tablestop'); - $this->tpl->pparse('phpgw_about', 'app_list_tablestop'); - - } - - - - /** - * output of detail view - */ - function _detailView() - { - echo ''; - $app = basename($_GET['app']); - include(EGW_INCLUDE_ROOT . "/$app/setup/setup.inc.php"); - $info = $setup_info[$app]; - $info['icon'] = $GLOBALS['egw']->common->image($app,array('navbar','nonav')); - $info['title'] = $GLOBALS['egw_info']['apps'][$app]['title']; - - $other_infos = array( - 'author' => lang('Author'), - 'maintainer' => lang('Maintainer'), - 'version' => lang('Version'), - 'license' => lang('License'), - ); - if($info[icon]) - { - $icon = $info[icon]; - } - $s = "\n"; - if(trim($icon) != "") - { - $s.= " - "; - } - else - { - $s .= " - "; - } - if ($info['description']) - { - $info['description'] = lang($info['description']); - $s .= "\n"; - if ($info['note']) - { - $info['note'] = lang($info['note']); - $s .= "\n"; - } - - } - foreach ($other_infos as $key => $val) - { - if (isset($info[$key])) - { - $s .= "\n"; - } - } - - if ($info['extra_untranslated']) - { - $s .= "\n"; - } - - $s .= "
\"$info[title]\"

$info[title]

$info[title]

$info[description]
$info[note]
$val"; - $infos = $info[$key]; - for ($n = 0; is_array($info[$key][$n]) && ($infos = $info[$key][$n]) || !$n; ++$n) - { - if (!is_array($infos) && isset($info[$key.'_email'])) - { - $infos = array('email' => $info[$key.'_email'],'name' => $infos); - } - elseif(!is_array($infos) && isset($info[$key.'_url'])) - { - $infos = array('url' => $info[$key.'_url'],'name' => $infos); - } - if (is_array($infos)) - { - if ($infos['email']) - { - $names = explode('
',$infos['name']); - $emails = split('@|
',$infos['email']); - if (count($names) < count($emails)/2) - { - $names = ''; - } - $infos = ''; - while (list($user,$domain) = $emails) - { - if ($infos) $infos .= '
'; - $name = $names ? array_shift($names) : $user; - $infos .= "$name"; - array_shift($emails); array_shift($emails); - } - } - elseif($infos['url']) - { - $img = $info[$key.'_img']; - if ($img) - { - $img_url = $GLOBALS['egw']->common->image('phpgwapi',$img); - if (!$img_url) - { - $img_url = $GLOBALS['egw']->common->image($info['name'],$img); - } - $infos = '

'.$infos['name'].'
'; - } - else - { - $infos = ''.$infos['name'].''; - } - } - } - $s .= ($n ? '
' : '') . $infos; - } - $s .= "
$info[extra_untranslated]
\n"; - - - $this->tpl->set_block('phpgw_about', 'application','application'); - $this->tpl->set_var('phpgw_app_about', $s); - $this->tpl->pparse('phpgw_about', 'application', True); - } - - - - /** - * parse informations from setup.inc.php file - * - * @param string app application name - * @return array html formated informations about author(s), - * maintainer(s), version, license of the - * given application - */ - function _getParsedAppInfo($app) - { - // define the return array - $ret = array( - 'author' => '', - 'maintainer' => '', - 'version' => '', - 'license' => '' - ); - - if (!file_exists(EGW_INCLUDE_ROOT . "/$app/setup/setup.inc.php")) { - return $ret; - } - - include(EGW_INCLUDE_ROOT . "/$app/setup/setup.inc.php"); - - $ret['license'] = $setup_info[$app]['license']; - $ret['version'] = $setup_info[$app]['version']; - $ret['author'] = $this->_getHtmlPersonalInfo($setup_info, $app, 'author'); - $ret['maintainer'] = $this->_getHtmlPersonalInfo($setup_info, $app, 'maintainer'); - - return $ret; - } - - - - /** - * helper to parse author and maintainer info - * - * @param array setup_info setup_info[$app] array - * @param string app application name - * @param string f 'author' or 'maintainer' - * - * @return string html formated informations of s - */ - function _getHtmlPersonalInfo($setup_info, $app, $f = 'author') - { - $authors = array(); - // get the author(s) - if ($setup_info[$app][$f]) { - // author is set - if (!is_array($setup_info[$app][$f])) { - // author is no array - $authors[0]['name'] = $setup_info[$app][$f]; - if ($setup_info[$app][$f.'_email']) { - $authors[0]['email'] = $setup_info[$app][$f.'_email']; - } - if ($setup_info[$app][$f.'_url']) { - $authors[0]['url'] = $setup_info[$app][$f.'_url']; - } - - } else { - // author is array - if ($setup_info[$app][$f]['name']) { - // only one author - $authors[0]['name'] = $setup_info[$app][$f]['name']; - if ($setup_info[$app][$f]['email']) { - $authors[0]['email'] = $setup_info[$app][$f]['email']; - } - if ($setup_info[$app][$f]['url']) { - $authors[0]['url'] = $setup_info[$app][$f]['url']; - } - } else { - // may be more authors - foreach ($setup_info[$app][$f] as $number => $values) { - if ($setup_info[$app][$f][$number]['name']) { - $authors[$number]['name'] = $setup_info[$app][$f][$number]['name']; - } - if ($setup_info[$app][$f][$number]['email']) { - $authors[$number]['email'] = $setup_info[$app][$f][$number]['email']; - } - if ($setup_info[$app][$f][$number]['url']) { - $authors[$number]['url'] = $setup_info[$app][$f][$number]['url']; - } - } - } - } - } - - // html format authors - $s = ''; - foreach ($authors as $author) { - if ($s != '') { - $s .= '
'; - } - $s .= lang('name').': '.$author['name']; - if ($author['email']) { - $s .= '
'.lang('email').': '.$author['email'].''; - } - if ($author['url']) { - $s .= '
'.lang('url').': '.$author['url'].''; - } - } - return $s; - } -} - -?> diff --git a/phpgwapi/inc/class.about.inc.php b/phpgwapi/inc/class.about.inc.php new file mode 100644 index 0000000000..2f4d9c2d19 --- /dev/null +++ b/phpgwapi/inc/class.about.inc.php @@ -0,0 +1,384 @@ + + * @author Ralf Becker + * @license http://www.gnu.org/copyleft/gpl.html + * @link http://www.egroupware.org + * @version SVN: $Id$ + */ + +/** + * Shows informations about eGroupWare + * - general information + * - installed applications + * - installed templates + * - installed languages + * + * Usage: + * + * $aboutPage = new about(); + * + * The constuctor will do all + * + * There is no typical so, bo ui structure, this class is all in one + * + * @since 1.4 + */ +class about +{ + /** + * constructor of about class + * decides to show tab- or detail view + * + * @since 1.4 + */ + function about() + { + // list or detail view + $name = 'eGroupWare'; + $detail = false; + $nonavbar = false; + + // application detail? + if (isset($_GET['app']) && $_GET['app'] != 'eGroupWare') { + $name = basename($_GET['app']); + $type = 'application'; + $detail = true; + } + + // template detail? + if (isset($_GET['template']) && $_GET['template'] != 'eGroupWare') { + $name = basename($_GET['template']); + $type = 'template'; + $detail = true; + } + + // navbar or not + if (isset($_GET['nonavbar'])) { + $nonavbar = $_GET['nonavbar']; + } + + + if ($detail) { + $this->_detailView($name, $type, $nonavbar); + } else { + $this->_listView(); + } + } + + + /** + * output of list view + * collects data and shows a tabbed view that lists + * - general informations + * - installed applications + * - installed templates + * - installed languages + * + * @return nothing + * + * @access private + * @since 1.4 + */ + function _listView() + { + // get informations about the applications + $apps = array(); + $apps[] = ''; // first empty row for eTemplate + foreach ($GLOBALS['egw_info']['user']['apps'] as $app => $appinfo) { + $info = $this->_getParsedAppInfo($app); + $apps[] = array( + 'appImage' => '', + 'appName' => $appinfo['title'], + 'appAuthor' => $info['author'], + 'appMaintainer' => $info['maintainer'], + 'appVersion' => $info['version'], + 'appLicense' => $this->_linkLicense($info['license']), + 'appDetails' => '' + ); + } + + // get informations about the templates + $templates = array(); + $templates[] = ''; // first empty row for eTemplate + foreach($GLOBALS['egw']->common->list_templates() as $template => $templateinfo) { + $info = $this->_getParsedTemplateInfo($template); + $templates[] = array( + 'templateImage' => '', + 'templateName' => $templateinfo['name'], + 'templateAuthor' => $info['author'], + 'templateMaintainer'=> $info['maintainer'], + 'templateVersion' => $info['version'], + 'templateLicense' => $this->_linkLicense($info['license']), + 'templateDetails' => '' + ); + } + + // get informations about installed languages + $translations = array(); + $translations[] = ''; // first empty row for eTemplate + $langs = $GLOBALS['egw']->translation->get_installed_langs(); + foreach($GLOBALS['egw']->translation->get_installed_langs() as $translation => $translationinfo) { + $translations[] = array( + 'langName' => $translationinfo.' ('.$translation.')' + ); + } + + + // fill content array for eTemplate + $content = array( + 'apiVersion' => '

'.lang('eGroupWare API version').' '.$GLOBALS['egw_info']['server']['versions']['phpgwapi'].'

', + 'applications' => $apps, + 'templates' => $templates, + 'translations' => $translations + ); + + $tmpl =& CreateObject('etemplate.etemplate', 'phpgwapi.about.index'); + $tmpl->exec('phpgwapi.about.index', $content); + } + + + /** + * output of detail view for applications or templates + * + * @param string $name application/template name + * @param string $type can be 'application' or 'template' :default $type='application' + * @param string $nonavbar don't show navbar :default $nonavbar=false + * @return nothing + * + * @access private + * @since 1.4 + */ + function _detailView($name, $type='application', $nonavbar=false) + { + // get the informations + switch ($type) { + case 'application': + $info = $this->_getParsedAppInfo($name); + break; + case 'template': + $info = $this->_getParsedTemplateInfo($name); + break; + } + + // app names are translated, template names not... + if ($type == 'application') { + $translatedName = lang($name); + } else { + $translatedName = $name; + } + + // fill content array + $content = array( + 'image' => '', + 'name' => '

'.$translatedName.'

', + 'description' => '

'.$info['description'].'

', + 'note' => $info['note'], + 'author' => $info['author'], + 'maintainer' => $info['maintainer'], + 'version' => $info['version'], + 'license' => $this->_linkLicense($info['license']) + ); + + $tmpl =& CreateObject('etemplate.etemplate', 'phpgwapi.about.detail'); + if ($nonavbar) { + $tmpl->exec('phpgwapi.about.detail', $content, array(), array(), array(), 2); + } else { + $GLOBALS['egw_info']['flags']['app_header'] = lang('About %1', $translatedName); + $tmpl->exec('phpgwapi.about.detail', $content); + } + } + + + /** + * parse template informations from setup.inc.php file + * + * @param string $template template template name + * @return array html formated informations about author(s), + * maintainer(s), version, license of the + * given application + * + * @access private + * @since 1.4 + */ + function _getParsedTemplateInfo($template) + { + // define the return array + $ret = array( + 'image' => (file_exists($GLOBALS['egw_info']['template'][$template]['icon'])) ? $GLOBALS['egw_info']['template'][$template]['icon'] : $GLOBALS['egw']->common->image('thisdoesnotexist',array('navbar','nonav')), + 'author' => '', + 'maintainer' => '', + 'version' => '', + 'license' => '', + 'description' => '', + 'note' => '' + ); + + if (!file_exists(EGW_INCLUDE_ROOT . "/phpgwapi/templates/$template/setup/setup.inc.php")) { + return $ret; + } + + include(EGW_INCLUDE_ROOT . "/phpgwapi/templates/$template/setup/setup.inc.php"); + + $ret['author'] = $this->_getHtmlPersonalInfo($GLOBALS['egw_info']['template'][$template], 'author'); + $ret['maintainer'] = $this->_getHtmlPersonalInfo($GLOBALS['egw_info']['template'][$template], 'maintainer'); + $ret['version'] = $GLOBALS['egw_info']['template'][$template]['version']; + $ret['license'] = $GLOBALS['egw_info']['template'][$template]['license']; + $ret['description'] = $GLOBALS['egw_info']['template'][$template]['description']; + $ret['note'] = $GLOBALS['egw_info']['template'][$template]['note']; + + return $ret; + } + + + /** + * parse application informations from setup.inc.php file + * + * @param string $app application name + * @return array html formated informations about author(s), + * maintainer(s), version, license of the + * given application + * + * @access private + * @since 1.4 + */ + function _getParsedAppInfo($app) + { + // define the return array + $ret = array( + 'image' => $GLOBALS['egw']->common->image($app,array('navbar','nonav')), + 'author' => '', + 'maintainer' => '', + 'version' => '', + 'license' => '', + 'description' => '', + 'note' => '' + ); + + if (!file_exists(EGW_INCLUDE_ROOT . "/$app/setup/setup.inc.php")) { + return $ret; + } + + include(EGW_INCLUDE_ROOT . "/$app/setup/setup.inc.php"); + + $ret['author'] = $this->_getHtmlPersonalInfo($setup_info[$app], 'author'); + $ret['maintainer'] = $this->_getHtmlPersonalInfo($setup_info[$app], 'maintainer'); + $ret['version'] = $setup_info[$app]['version']; + $ret['license'] = $setup_info[$app]['license']; + $ret['description'] = $setup_info[$app]['description']; + $ret['note'] = $setup_info[$app]['note']; + + return $ret; + } + + + /** + * helper to parse author and maintainer info from setup_info array + * + * @param array $setup_info setup_info[$app] array + * ($GLOBALS['egw_info']['template'][$template] array for template informations) + * @param string $f 'author' or 'maintainer', default='author' + * @return string html formated informations about author/maintainer + * + * @access private + * @since 1.4 + */ + function _getHtmlPersonalInfo($setup_info, $f = 'author') + { + $authors = array(); + // get the author(s) + if ($setup_info[$f]) { + // author is set + if (!is_array($setup_info[$f])) { + // author is no array + $authors[0]['name'] = $setup_info[$f]; + if ($setup_info[$f.'_email']) { + $authors[0]['email'] = $setup_info[$f.'_email']; + } + if ($setup_info[$f.'_url']) { + $authors[0]['url'] = $setup_info[$f.'_url']; + } + + } else { + // author is array + if ($setup_info[$f]['name']) { + // only one author + $authors[0]['name'] = $setup_info[$f]['name']; + if ($setup_info[$f]['email']) { + $authors[0]['email'] = $setup_info[$f]['email']; + } + if ($setup_info[$f]['url']) { + $authors[0]['url'] = $setup_info[$f]['url']; + } + } else { + // may be more authors + foreach ($setup_info[$f] as $number => $values) { + if ($setup_info[$f][$number]['name']) { + $authors[$number]['name'] = $setup_info[$f][$number]['name']; + } + if ($setup_info[$f][$number]['email']) { + $authors[$number]['email'] = $setup_info[$f][$number]['email']; + } + if ($setup_info[$f][$number]['url']) { + $authors[$number]['url'] = $setup_info[$f][$number]['url']; + } + } + } + } + } + + // html format authors + $s = ''; + foreach ($authors as $author) { + if ($s != '') { + $s .= '
'; + } + $s .= lang('name').': '.$author['name']; + if ($author['email']) { + $s .= '
'.lang('email').': '.$author['email'].''; + } + if ($author['url']) { + $s .= '
'.lang('url').': '.$author['url'].''; + } + } + return $s; + } + + + /** + * surround license string with link to license if it is known + * + * @param string $license the license to surround with link + * @return string linked licence if known, $licence if not known + * + * @access private + * @since 1.4 + */ + function _linkLicense($license) + { + // toupper known licenses + $knownLicenses = array( + 'GPL' => 'http://www.gnu.org/copyleft/gpl.html' + ); + + if (array_key_exists(strtoupper($license), $knownLicenses)) { + $license = ''.$license.''; + } + + return $license; + } +} + +?> \ No newline at end of file diff --git a/phpgwapi/setup/etemplates.inc.php b/phpgwapi/setup/etemplates.inc.php new file mode 100644 index 0000000000..0375cdd89a --- /dev/null +++ b/phpgwapi/setup/etemplates.inc.php @@ -0,0 +1,26 @@ + 'phpgwapi.about.detail','template' => '','lang' => '','group' => '0','version' => '1.4.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:7:{s:4:"type";s:4:"grid";s:7:"no_lang";s:1:"1";s:4:"size";s:9:"70%,,,,,4";s:4:"data";a:5:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:2:{s:4:"type";s:4:"html";s:4:"name";s:5:"image";}s:1:"B";a:3:{s:4:"type";s:4:"html";s:4:"name";s:4:"name";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"size";s:6:",,,,,4";s:7:"options";a:1:{i:5;s:1:"4";}}}i:2;a:1:{s:1:"A";a:2:{s:4:"type";s:4:"html";s:4:"name";s:11:"description";}}i:3;a:1:{s:1:"A";a:3:{s:4:"type";s:4:"html";s:4:"name";s:4:"note";s:7:"no_lang";s:1:"1";}}i:4;a:1:{s:1:"A";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:4:{s:2:"c1";s:7:"row,top";s:2:"c2";s:7:"row,top";s:2:"c3";s:7:"row,top";s:2:"c4";s:7:"row,top";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:6:"author";s:4:"span";s:2:"th";}s:1:"B";a:3:{s:4:"type";s:4:"html";s:4:"name";s:6:"author";s:7:"no_lang";s:1:"1";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:10:"maintainer";s:4:"span";s:2:"th";}s:1:"B";a:3:{s:4:"type";s:4:"html";s:7:"no_lang";s:1:"1";s:4:"name";s:10:"maintainer";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"version";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:4:"name";s:7:"version";s:7:"no_lang";s:1:"1";}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"license";}s:1:"B";a:3:{s:4:"type";s:4:"html";s:7:"no_lang";s:1:"1";s:4:"name";s:7:"license";}}}s:4:"rows";i:4;s:4:"cols";i:2;s:4:"size";s:6:",,,,,3";s:7:"options";a:1:{i:5;s:1:"3";}}}}s:4:"rows";i:4;s:4:"cols";i:1;s:7:"options";a:2:{i:0;s:3:"70%";i:5;s:1:"4";}}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:5:",,,,5";s:7:"options";a:1:{i:4;s:1:"5";}}}','size' => ',,,,5','style' => '','modified' => '1175950403',); + +$templ_data[] = array('name' => 'phpgwapi.about.index','template' => '','lang' => '','group' => '0','version' => '1.4.001','data' => 'a:2:{i:0;a:3:{s:4:"type";s:3:"tab";s:4:"name";s:40:"general|applications|templates|languages";s:5:"label";s:40:"general|applications|templates|languages";}i:1;a:7:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:2:{s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";}i:1;a:7:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"name";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"author";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:10:"maintainer";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"version";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"license";}s:1:"G";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"details";}}i:2;a:7:{s:1:"A";a:3:{s:4:"type";s:4:"html";s:4:"name";s:16:"${row}[appImage]";s:7:"no_lang";s:1:"1";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:4:"name";s:15:"${row}[appName]";s:7:"no_lang";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:4:"html";s:4:"name";s:17:"${row}[appAuthor]";s:7:"no_lang";s:1:"1";}s:1:"D";a:3:{s:4:"type";s:4:"html";s:4:"name";s:21:"${row}[appMaintainer]";s:7:"no_lang";s:1:"1";}s:1:"E";a:3:{s:4:"type";s:5:"label";s:4:"name";s:18:"${row}[appVersion]";s:7:"no_lang";s:1:"1";}s:1:"F";a:3:{s:4:"type";s:4:"text";s:4:"name";s:18:"${row}[appLicense]";s:7:"no_lang";s:1:"1";}s:1:"G";a:4:{s:4:"type";s:4:"html";s:5:"align";s:6:"center";s:4:"name";s:17:"${row}[appDetail]";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:2;s:4:"cols";i:7;s:4:"name";s:4:"rows";s:8:"disabled";s:1:"1";s:7:"options";a:0:{}}}','size' => '','style' => '','modified' => '1175950383',); + +$templ_data[] = array('name' => 'phpgwapi.about.index.applications','template' => '','lang' => '','group' => '0','version' => '1.4.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:236:"This is a list of your available applications.
For a complete list of applications available for eGroupWare visit www.egroupware.org/applications";}}i:2;a:1:{s:1:"A";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:2:{s:2:"c1";s:2:"th";s:2:"c2";s:7:"row,top";}i:1;a:7:{s:1:"A";a:5:{s:4:"type";s:5:"label";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:7:{s:4:"type";s:4:"grid";s:4:"size";s:3:",,1";s:4:"name";s:12:"applications";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:7:"options";a:1:{i:2;s:1:"1";}}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"name";s:12:"applications";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"name";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"author";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:10:"maintainer";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"version";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"license";}s:1:"G";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"details";}}i:2;a:7:{s:1:"A";a:4:{s:4:"type";s:4:"html";s:7:"no_lang";s:1:"1";s:4:"name";s:16:"${row}[appImage]";s:5:"align";s:6:"center";}s:1:"B";a:3:{s:4:"type";s:4:"html";s:7:"no_lang";s:1:"1";s:4:"name";s:15:"${row}[appName]";}s:1:"C";a:3:{s:4:"type";s:4:"html";s:7:"no_lang";s:1:"1";s:4:"name";s:17:"${row}[appAuthor]";}s:1:"D";a:3:{s:4:"type";s:4:"html";s:7:"no_lang";s:1:"1";s:4:"name";s:21:"${row}[appMaintainer]";}s:1:"E";a:3:{s:4:"type";s:5:"label";s:7:"no_lang";s:1:"1";s:4:"name";s:18:"${row}[appVersion]";}s:1:"F";a:4:{s:4:"type";s:4:"html";s:7:"no_lang";s:1:"1";s:4:"name";s:18:"${row}[appLicense]";s:5:"align";s:6:"center";}s:1:"G";a:4:{s:4:"type";s:4:"html";s:7:"no_lang";s:1:"1";s:5:"align";s:6:"center";s:4:"name";s:18:"${row}[appDetails]";}}}s:4:"rows";i:2;s:4:"cols";i:7;s:4:"name";s:12:"applications";s:7:"options";a:0:{}}}}s:4:"rows";i:2;s:4:"cols";i:1;s:4:"size";s:6:",,0,,5";s:7:"options";a:2:{i:4;s:1:"5";i:2;s:1:"0";}}}','size' => ',,0,,5','style' => '','modified' => '1175950363',); + +$templ_data[] = array('name' => 'phpgwapi.about.index.general','template' => '','lang' => '','group' => '0','version' => '1.4.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:4:"logo";}}i:2;a:1:{s:1:"A";a:2:{s:4:"type";s:4:"html";s:4:"name";s:10:"apiVersion";}}i:3;a:1:{s:1:"A";a:1:{s:4:"type";s:5:"hrule";}}i:4;a:1:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:1208:"

eGroupWare is a free enterprise ready groupware software for your network. It enables you to manage contacts, appointments, todos and many more for your whole business.

eGroupWare is a groupware server. It comes with a native web-interface which allowes to access your data from any platform all over the planet. Moreover you also have the choice to access the eGroupWare server with your favorite groupware client (Kontact, Evolution, Outlook) and also with your mobile or PDA via SyncML.

eGroupWare is international. At the time, it supports more than 25 languages including rtl support.

eGroupWare is platform independent. The server runs on Linux, Mac, Windows and many more other operating systems. On the client side, all you need is a internetbrowser such as Firefox, Konqueror, Internet Explorer and many more.


For more informations visit the eGroupWare Website

";}}}s:4:"rows";i:4;s:4:"cols";i:1;s:4:"size";s:8:"600,,,,5";s:7:"options";a:2:{i:0;s:3:"600";i:4;s:1:"5";}}}','size' => '600,,,,5','style' => '','modified' => '1175950348',); + +$templ_data[] = array('name' => 'phpgwapi.about.index.languages','template' => '','lang' => '','group' => '0','version' => '1.4.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:213:"This is a list of your available languages
For a complete list of languages available for eGroupWare visit www.egroupware.org/languages";}}i:2;a:1:{s:1:"A";a:7:{s:4:"type";s:4:"grid";s:4:"size";s:3:",,0";s:4:"data";a:3:{i:0;a:2:{s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";}i:1;a:1:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"language";}}i:2;a:1:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:7:"no_lang";s:1:"1";s:4:"name";s:16:"${row}[langName]";}}}s:4:"rows";i:2;s:4:"cols";i:1;s:4:"name";s:12:"translations";s:7:"options";a:1:{i:2;s:1:"0";}}}}s:4:"rows";i:2;s:4:"cols";i:1;s:4:"size";s:5:",,,,5";s:7:"options";a:1:{i:4;s:1:"5";}}}','size' => ',,,,5','style' => '','modified' => '1175950333',); + +$templ_data[] = array('name' => 'phpgwapi.about.index.templates','template' => '','lang' => '','group' => '0','version' => '1.4.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:223:"This is a list of your available templates
For a complete list of templates available for eGroupWare visit www.egroupware.org/templates";}}i:2;a:1:{s:1:"A";a:6:{s:4:"type";s:4:"grid";s:4:"name";s:9:"templates";s:4:"data";a:3:{i:0;a:2:{s:2:"c1";s:2:"th";s:2:"c2";s:7:"row,top";}i:1;a:7:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"name";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"author";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:10:"maintainer";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"version";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"license";}s:1:"G";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"details";}}i:2;a:7:{s:1:"A";a:3:{s:4:"type";s:4:"html";s:7:"no_lang";s:1:"1";s:4:"name";s:21:"${row}[templateImage]";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:7:"no_lang";s:1:"1";s:4:"name";s:20:"${row}[templateName]";}s:1:"C";a:3:{s:4:"type";s:4:"html";s:7:"no_lang";s:1:"1";s:4:"name";s:22:"${row}[templateAuthor]";}s:1:"D";a:3:{s:4:"type";s:4:"html";s:7:"no_lang";s:1:"1";s:4:"name";s:26:"${row}[templateMaintainer]";}s:1:"E";a:3:{s:4:"type";s:5:"label";s:7:"no_lang";s:1:"1";s:4:"name";s:23:"${row}[templateVersion]";}s:1:"F";a:4:{s:4:"type";s:4:"html";s:7:"no_lang";s:1:"1";s:4:"name";s:23:"${row}[templateLicense]";s:5:"align";s:6:"center";}s:1:"G";a:3:{s:4:"type";s:4:"html";s:4:"name";s:23:"${row}[templateDetails]";s:5:"align";s:6:"center";}}}s:4:"rows";i:2;s:4:"cols";i:7;s:7:"options";a:0:{}}}}s:4:"rows";i:2;s:4:"cols";i:1;s:4:"size";s:5:",,,,5";s:7:"options";a:1:{i:4;s:1:"5";}}}','size' => ',,,,5','style' => '','modified' => '1175950302',); + From ff82a825f701f5bac0a68973d7013666d93051f4 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Sun, 27 May 2007 06:25:08 +0000 Subject: [PATCH 5/9] bugfix: allowing again only to select calendar-groups --- calendar/setup/etemplates.inc.php | 4 +++- calendar/templates/default/edit.xet | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/calendar/setup/etemplates.inc.php b/calendar/setup/etemplates.inc.php index 4c8877908a..aa47507ab1 100644 --- a/calendar/setup/etemplates.inc.php +++ b/calendar/setup/etemplates.inc.php @@ -2,7 +2,7 @@ /** * eGroupWare - eTemplates for Application calendar * http://www.egroupware.org - * generated by soetemplate::dump4setup() 2007-05-07 20:30 + * generated by soetemplate::dump4setup() 2007-05-27 08:35 * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package calendar @@ -50,6 +50,8 @@ $templ_data[] = array('name' => 'calendar.edit.participants','template' => '','l $templ_data[] = array('name' => 'calendar.edit.participants','template' => '','lang' => '','group' => '0','version' => '1.3.002','data' => 'a:1:{i:0;a:7:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:6:{s:1:"A";s:2:"95";s:2:"c3";s:4:",top";s:2:"c1";s:3:"row";s:2:"c2";s:2:"th";s:2:"h1";s:8:",@no_add";s:1:"D";s:24:",@hide_status_recurrence";}i:1;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"New";}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-account";s:4:"size";s:22:"User or group,both,,10";s:4:"name";s:7:"account";s:4:"help";s:13:"User or group";}i:2;a:3:{s:4:"type";s:10:"link-entry";s:4:"name";s:8:"resource";s:4:"size";s:14:"@cal_resources";}}s:1:"C";a:3:{s:4:"type";s:3:"int";s:4:"size";s:4:"1,,3";s:4:"name";s:8:"quantity";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:3:{s:4:"type";s:6:"button";s:5:"label";s:3:"Add";s:4:"name";s:3:"add";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:2;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Participants";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Quantity";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:10:"All future";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Status";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}}i:3;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"name";s:11:"${row}[app]";}s:1:"B";a:6:{s:4:"type";s:5:"label";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:26:"accounts_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:13:"${row}[title]";s:7:"no_lang";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:3:"int";s:4:"name";s:16:"${row}[quantity]";s:4:"size";s:4:"1,,3";}s:1:"D";a:3:{s:4:"type";s:8:"checkbox";s:4:"name";s:25:"${row}[status_recurrence]";s:5:"align";s:6:"center";}s:1:"E";a:4:{s:4:"type";s:6:"select";s:4:"name";s:14:"${row}[status]";s:7:"no_lang";s:1:"1";s:8:"onchange";i:1;}s:1:"F";a:9:{s:4:"type";s:6:"button";s:4:"data";a:2:{i:0;a:1:{s:2:"h1";s:19:",!@resources_status";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:16:"resources_select";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:27:"resources_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:22:"delete[$row_cont[uid]]";s:5:"align";s:6:"center";s:5:"label";s:6:"Delete";s:8:"onchange";i:1;s:4:"size";s:6:"delete";}}}s:4:"rows";i:3;s:4:"cols";i:6;s:4:"size";s:17:"100%,200,,,,,auto";s:4:"name";s:12:"participants";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"200";i:6;s:4:"auto";}}}','size' => '100%,200,,,,,auto','style' => '','modified' => '1172430059',); +$templ_data[] = array('name' => 'calendar.edit.participants','template' => '','lang' => '','group' => '0','version' => '1.3.003','data' => 'a:1:{i:0;a:7:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:6:{s:1:"A";s:2:"95";s:2:"c3";s:4:",top";s:2:"c1";s:3:"row";s:2:"c2";s:2:"th";s:2:"h1";s:8:",@no_add";s:1:"D";s:24:",@hide_status_recurrence";}i:1;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"New";}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-account";s:4:"size";s:27:"User or group,calendar+,,10";s:4:"name";s:7:"account";s:4:"help";s:13:"User or group";}i:2;a:3:{s:4:"type";s:10:"link-entry";s:4:"name";s:8:"resource";s:4:"size";s:14:"@cal_resources";}}s:1:"C";a:3:{s:4:"type";s:3:"int";s:4:"size";s:4:"1,,3";s:4:"name";s:8:"quantity";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:3:{s:4:"type";s:6:"button";s:5:"label";s:3:"Add";s:4:"name";s:3:"add";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:2;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Participants";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Quantity";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:10:"All future";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Status";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}}i:3;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"name";s:11:"${row}[app]";}s:1:"B";a:6:{s:4:"type";s:5:"label";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:26:"accounts_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:13:"${row}[title]";s:7:"no_lang";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:3:"int";s:4:"name";s:16:"${row}[quantity]";s:4:"size";s:4:"1,,3";}s:1:"D";a:3:{s:4:"type";s:8:"checkbox";s:4:"name";s:25:"${row}[status_recurrence]";s:5:"align";s:6:"center";}s:1:"E";a:4:{s:4:"type";s:6:"select";s:4:"name";s:14:"${row}[status]";s:7:"no_lang";s:1:"1";s:8:"onchange";i:1;}s:1:"F";a:9:{s:4:"type";s:6:"button";s:4:"data";a:2:{i:0;a:1:{s:2:"h1";s:19:",!@resources_status";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:16:"resources_select";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:27:"resources_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:22:"delete[$row_cont[uid]]";s:5:"align";s:6:"center";s:5:"label";s:6:"Delete";s:8:"onchange";i:1;s:4:"size";s:6:"delete";}}}s:4:"rows";i:3;s:4:"cols";i:6;s:4:"size";s:17:"100%,200,,,,,auto";s:4:"name";s:12:"participants";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"200";i:6;s:4:"auto";}}}','size' => '100%,200,,,,,auto','style' => '','modified' => '1172430059',); + $templ_data[] = array('name' => 'calendar.edit.recurrence','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:2:{s:2:"c1";s:3:"row";s:1:"A";s:2:"95";}i:1;a:1:{s:1:"A";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:8:"100%,200";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"200";}}}','size' => '100%,200','style' => '','modified' => '1118737412',); $templ_data[] = array('name' => 'calendar.edit.recurrence','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:6:{s:2:"c1";s:2:"th";s:1:"A";s:2:"95";s:2:"c2";s:3:"row";s:2:"c3";s:3:"row";s:2:"c4";s:3:"row";s:1:"D";s:3:"50%";}i:1;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:27:"Repeating Event Information";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:16:"be back soon ;-)";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:2;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,recur_type";s:5:"label";s:11:"Repeat type";}s:1:"B";a:2:{s:4:"type";s:6:"select";s:4:"name";s:10:"recur_type";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:4:"size";s:17:",,,recur_interval";s:5:"label";s:8:"Interval";}s:1:"D";a:4:{s:4:"type";s:13:"select-number";s:4:"name";s:14:"recur_interval";s:4:"help";s:53:"repeating interval, eg. 2 to repeat every second week";s:4:"size";s:9:"None,2,10";}}i:3;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:16:",,,recur_enddate";s:5:"label";s:8:"End date";}s:1:"B";a:3:{s:4:"type";s:4:"date";s:4:"name";s:13:"recur_enddate";s:4:"help";s:57:"repeat the event until which date (empty means unlimited)";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:4;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,recur_data";s:5:"label";s:11:"Repeat days";}s:1:"B";a:4:{s:4:"type";s:10:"select-dow";s:4:"size";s:3:"5,1";s:4:"name";s:10:"recur_data";s:4:"help";s:44:"Days of the week for a weekly repeated event";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:4;s:4:"cols";i:4;s:4:"size";s:8:"100%,200";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"200";}}}','size' => '100%,200','style' => '','modified' => '1118737412',); diff --git a/calendar/templates/default/edit.xet b/calendar/templates/default/edit.xet index 7781bdf09d..3621d60928 100644 --- a/calendar/templates/default/edit.xet +++ b/calendar/templates/default/edit.xet @@ -62,7 +62,7 @@ -