diff --git a/admin/inc/class.admin_ui.inc.php b/admin/inc/class.admin_ui.inc.php index a0be17fa6a..89afcd9a04 100644 --- a/admin/inc/class.admin_ui.inc.php +++ b/admin/inc/class.admin_ui.inc.php @@ -10,8 +10,6 @@ * @version $Id$ */ -require_once EGW_INCLUDE_ROOT.'/etemplate/inc/class.etemplate.inc.php'; - /** * UI for admin */ @@ -36,9 +34,8 @@ class admin_ui * New index page * * @param array $content - * @param string $msg */ - public function index(array $content=null, $msg='') + public function index(array $content=null) { admin_statistics::check(); @@ -66,7 +63,7 @@ class admin_ui 'start' => false, 'order' => 'account_lid', 'sort' => 'ASC', - )) as $account_id => $data) + )) as $data) { $sel_options['filter'][$data['account_id']] = empty($data['account_description']) ? $data['account_lid'] : array( 'label' => $data['account_lid'], @@ -165,7 +162,7 @@ class admin_ui ++$group; // supporting both old way using $GLOBALS['menuData'] and new just returning data in hook $apps = array_unique(array_merge(array('admin'), $GLOBALS['egw']->hooks->hook_implemented('edit_user'))); - foreach($apps as $n => $app) + foreach($apps as $app) { if ($app == 'felamimail') continue; // disabled fmail for now, as it break whole admin, dono why $GLOBALS['menuData'] = $data = array(); @@ -177,13 +174,14 @@ if ($app == 'felamimail') continue; // disabled fmail for now, as it break whole if (empty($item['caption'])) { $item['caption'] = $item['description']; - unset($item[$description]); + unset($item['description']); } if (isset($item['url']) && isset($item['extradata'])) { $item['url'] = $item['extradata'].'&account_id=$id'; $item['id'] = substr($item['extradata'], 11); unset($item['extradata']); + $matches = null; if ($item['options'] && preg_match('/(egw_openWindowCentered2?|window.open)\([^)]+,(\d+),(\d+).*(title="([^"]+)")?/', $item['options'], $matches)) { $item['popup'] = $matches[2].'x'.$matches[3]; @@ -303,6 +301,7 @@ if ($app == 'felamimail') continue; // disabled fmail for now, as it break whole if (empty($data['id'])) { $data['id'] = $root.($app == 'admin' ? 'admin' : 'apps/'.$app).'/'; + $matches = null; if (preg_match_all('/(menuaction|load)=([^&]+)/', $data['link'], $matches)) { $data['id'] .= $matches[2][(int)array_search('load', $matches[1])]; @@ -314,9 +313,7 @@ if ($app == 'felamimail') continue; // disabled fmail for now, as it break whole } if (!empty($data['icon'])) { - $icon = $data['icon']; - list(,$icon) = explode($GLOBALS['egw_info']['server']['webserver_url'], $icon); - $icon = '../../../../..'.$icon; + $icon = etemplate_widget_tree::imagePath($data['icon']); if ($data['child'] || $data['item']) { $data['im1'] = $data['im2'] = $icon; @@ -330,16 +327,14 @@ if ($app == 'felamimail') continue; // disabled fmail for now, as it break whole $parent =& $tree['item']; $parts = explode('/', $data['id']); if ($data['id'][0] == '/') array_shift($parts); // remove root - $last_part = array_pop($parts); + array_pop($parts); $path = ''; foreach($parts as $part) { $path .= ($path == '/' ? '' : '/').$part; if (!isset($parent[$path])) { - $icon = $part == 'apps' ? common::image('phpgwapi', 'home') : common::image($part, 'navbar'); - list(,$icon) = explode($GLOBALS['egw_info']['server']['webserver_url'], $icon); - $icon = '../../../../..'.$icon; + $icon = etemplate_widget_tree::imagePath($part == 'apps' ? common::image('phpgwapi', 'home') : common::image($part, 'navbar')); $parent[$path] = array( 'id' => $path, 'text' => $part == 'apps' ? lang('Applications') : lang($part), diff --git a/etemplate/inc/class.etemplate_widget_tree.inc.php b/etemplate/inc/class.etemplate_widget_tree.inc.php index 034d8c9629..dab2324c1f 100644 --- a/etemplate/inc/class.etemplate_widget_tree.inc.php +++ b/etemplate/inc/class.etemplate_widget_tree.inc.php @@ -110,25 +110,9 @@ class etemplate_widget_tree extends etemplate_widget { $form_name = self::form_name($cname, $this->id); - $webserver_url = $GLOBALS['egw_info']['server']['webserver_url']; - if (empty($this->attrs['image_path'])) + if (($templated_path = self::templateImagePath($this->attrs['image_path'])) != $this->attrs['image_path']) { - $this->attrs['image_path'] = $webserver_url.'/phpgwapi/templates/default/images/dhtmlxtree/'; - } - // check if we have template-set specific image path - $image_path = $this->attrs['image_path']; - if ($webserver_url && $webserver_url != '/') - { - list(,$image_path) = explode($webserver_url, $image_path, 2); - } - $templated_path = strtr($image_path, array( - '/phpgwapi/templates/default' => $GLOBALS['egw']->framework->template_dir, - '/default/' => '/'.$GLOBALS['egw']->framework->template.'/', - )); - if (file_exists(EGW_SERVER_ROOT.$templated_path)) - { - $this->attrs['image_path'] = ($webserver_url != '/' ? $webserver_url : '').$templated_path; - self::setElementAttribute($form_name, 'image_path', $this->attrs['image_path']); + self::setElementAttribute($form_name, 'image_path', $this->attrs['image_path'] = $templated_path); //error_log(__METHOD__."() setting templated image-path for $form_name: $templated_path"); } @@ -137,7 +121,7 @@ class etemplate_widget_tree extends etemplate_widget { // += to keep further options set by app code self::$request->sel_options[$form_name] += self::typeOptions($this->attrs['type'], $this->attrs['options'], - $no_lang, $this->attrs['readonly'], self::get_array(self::$request->content, $form_name)); + $no_lang=null, $this->attrs['readonly'], self::get_array(self::$request->content, $form_name)); // if no_lang was modified, forward modification to the client if ($no_lang != $this->attr['no_lang']) @@ -161,6 +145,63 @@ class etemplate_widget_tree extends etemplate_widget } + /** + * Get template specific image path + * + * @param string $image_path=null default path to use, or empty to use default of /phpgwapi/templates/default/images/dhtmlxtree + * @return string templated url if available, otherwise default path + */ + public static function templateImagePath($image_path=null) + { + $webserver_url = $GLOBALS['egw_info']['server']['webserver_url']; + if (empty($image_path)) + { + $image_path = $webserver_url.'/phpgwapi/templates/default/images/dhtmlxtree/'; + } + // check if we have template-set specific image path + if ($webserver_url && $webserver_url != '/') + { + list(,$image_path) = explode($webserver_url, $image_path, 2); + } + $templated_path = strtr($image_path, array( + '/phpgwapi/templates/default' => $GLOBALS['egw']->framework->template_dir, + '/default/' => '/'.$GLOBALS['egw']->framework->template.'/', + )); + if (file_exists(EGW_SERVER_ROOT.$templated_path)) + { + return ($webserver_url != '/' ? $webserver_url : '').$templated_path; + //error_log(__METHOD__."() setting templated image-path for $form_name: $templated_path"); + } + return ($webserver_url != '/' ? $webserver_url : '').$image_path; + } + + /** + * Return image relative to trees image-path + * + * @param string $image url of image, eg. from common::image($image, $app) + * @return string path relative to image-path, to use when returning tree data eg. via json + */ + public static function imagePath($image) + { + static $image_path=null; + if (!isset($image_path)) $image_path = self::templateImagePath (); + + $parts = explode('/', $image_path); + $image_parts = explode('/', $image); + + // remove common parts + while(isset($parts[0]) && $parts[0] === $image_parts[0]) + { + array_shift($parts); + array_shift($image_parts); + } + // add .. for different parts, except last image part + $url = implode('/', array_merge(array_fill(0, count($parts)-1, '..'), $image_parts)); + + //error_log(__METHOD__."('$image') image_path=$image_path returning $url"); + return $url; + } + /** * Get options from $sel_options array for a given selectbox name *