diff --git a/admin/inc/class.customfields.inc.php b/admin/inc/class.customfields.inc.php new file mode 100644 index 0000000000..6ddc7dcd01 --- /dev/null +++ b/admin/inc/class.customfields.inc.php @@ -0,0 +1,288 @@ + 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]; + } + }