True ); function customfields($appname='') { $this->types = array( 'text' => lang('textfield'), 'label' => lang('label'), 'select' => lang('selectbox'), 'radio' => lang('radiobox'), 'checkbox' => lang('checkbox'), ); $this->appname = $_GET['appname'] ? $_GET['appname'] : $appname; $this->tmpl =& CreateObject('etemplate.etemplate'); $this->config =& CreateObject('phpgwapi.config',$this->appname); } /** * @author ralfbecker * Edit/Create Custom fields with type * * @param $content Content from the eTemplate Exec */ function edit($content = 0) { $this->appname = $this->appname ? $this->appname : $content['appname']; $this->config =& CreateObject('phpgwapi.config',$this->appname); $this->fields = $this->get_customfields(); if (is_array($content)) { //echo '
'; print_r($content); echo "\n"; if($content['fields']['delete'] || $content['fields']['create']) { if($content['fields']['delete']) { $this->delete($content); } elseif($content['fields']['create']) { $this->create($content); } } else { list($action) = @each($content['button']); switch($action) { default: if (!$content['fields']['create'] && !$content['fields']['delete']) { break; // type change } case 'save': case 'apply': $this->update($content); if ($action != 'save') { break; } case 'cancel': $GLOBALS['egw']->redirect_link('/admin/'); exit; } } } else { list($type) = each($this->types); $content = array( 'type' => $type, ); } $GLOBALS['egw_info']['flags']['app_header'] = lang($this->appname).' - '.lang('Custom fields'); $readonlys = array(); //echo 'customfields=
'; print_r($this->fields); echo "\n"; $content['fields'] = array(); $n = 0; foreach($this->fields as $name => $data) { if(!is_array($data)) { $data = array(); $data['label'] = $name; $data['order'] = ($n+1) * 10; } if (is_array($data['values'])) { $values = ''; foreach($data['values'] as $var => $value) { $values .= (!empty($values) ? "\n" : '').$var.'='.$value; } $data['values'] = $values; } $content['fields'][++$n] = (array)$data + array( 'name' => $name ); $preserv_fields[$n]['old_name'] = $name; $readonlys['fields']["create$name"] = True; } $content['fields'][++$n] = array('name'=>'','order' => 10 * $n); // new line for create $readonlys['fields']["delete[]"] = True; //echo '
uicustomfields.edit(content =
'; print_r($content); echo "\n"; //echo 'readonlys =
'; print_r($readonlys); echo "\n"; $this->tmpl->read('admin.customfields'); $this->tmpl->exec('admin.customfields.edit',$content,array( 'type' => $this->types, 'type2' => $this->types2, ),$readonlys,array( 'fields' => $preserv_fields, 'appname' => $this->appname, )); } function update_fields(&$content) { foreach($content['fields'] as $field) { $name = trim($field['name']); $old_name = $field['old_name']; if (!empty($delete) && $delete == $old_name) { unset($this->fields[$old_name]); continue; } if (empty($name) && !empty($old_name)) // empty name not allowed { $content['error_msg'] = lang('Name must not be empty !!!'); } if (isset($field['old_name'])) { if (!empty($name) && $old_name != $name) // renamed { unset($this->fields[$old_name]); } elseif (empty($name)) { $name = $old_name; } } elseif (empty($name)) // new item and empty ==> ignore it { continue; } $values = array(); if (!empty($field['values'])) { foreach(explode("\n",$field['values']) as $line) { list($var,$value) = split('=',trim($line),2); $var = trim($var); $values[$var] = empty($value) ? $var : $value; } } $this->fields[$name] = array( 'type' => $field['type'], 'type2' => $field['type2'], 'label' => empty($field['label']) ? $name : $field['label'], 'help' => $field['help'], 'values'=> $values, 'len' => $field['len'], 'rows' => intval($field['rows']), 'order' => intval($field['order']) ); } if (!function_exists('sort_by_order')) { function sort_by_order($arr1,$arr2) { return $arr1['order'] - $arr2['order']; } } uasort($this->fields,sort_by_order); $n = 0; foreach($this->fields as $name => $data) { $this->fields[$name]['order'] = ($n += 10); } } function update(&$content) { $this->update_fields($content); // save changes to repository $this->save_repository(); } /** * deletes custom field from customfield definitions */ function delete(&$content) { unset($this->fields[key($content['fields']['delete'])]); // save changes to repository $this->save_repository(); } function create(&$content) { $new_name = trim($content['fields'][count($content['fields'])-1]['name']); if (empty($new_name) || isset($this->fields[$new_name])) { $content['error_msg'] .= empty($new_name) ? lang('You have to enter a name, to create a new field!!!') : lang("Field '%1' already exists !!!",$new_name); } else { $this->fields[$new_name] = $content['fields'][count($content['fields'])-1]; if(!$this->fields[$new_name]['label']) $this->fields[$new_name]['label'] = $this->fields[$new_name]['name']; $this->save_repository(); } return; } /** * save changes to repository */ function save_repository() { //echo '
uicustomfields::save_repository() \$this->fields=
'; print_r($this->fields); echo "\n"; $this->config->value('customfields',$this->fields); $this->config->save_repository(); } /** * get customfields of using application * * @author Cornelius Weiss * @retrun array with customfields */ function get_customfields() { $config = $this->config->read_repository(); //merge old config_name in phpgw_config table $config_name = isset($config['customfields']) ? 'customfields' : 'custom_fields'; return $config[$config_name]; } }