diff --git a/filemanager/inc/class.filemanager_hooks.inc.php b/filemanager/inc/class.filemanager_hooks.inc.php index 6f0ab19b71..5b4992969a 100644 --- a/filemanager/inc/class.filemanager_hooks.inc.php +++ b/filemanager/inc/class.filemanager_hooks.inc.php @@ -212,6 +212,35 @@ class filemanager_hooks 'forced' => 'yes', ), ); + { + $link = egw::link('/index.php','menuaction=filemanager.filemanager_merge.show_replacements'); + + $settings['default_document'] = array( + 'type' => 'input', + 'size' => 60, + 'label' => 'Default document to insert entries', + 'name' => 'default_document', + 'help' => lang('If you specify a document (full vfs path) here, %1 displays an extra document icon for each entry. That icon allows to download the specified document with the data inserted.',lang('timesheet')).' '. + lang('The document can contain placeholder like {{%3}}, to be replaced with the data (%1full list of placeholder names%2).','','', 'name').' '. + lang('The following document-types are supported:'). implode(',',bo_merge::get_file_extensions()), + 'run_lang' => false, + 'xmlrpc' => True, + 'admin' => False, + ); + $settings['document_dir'] = array( + 'type' => 'input', + 'size' => 60, + 'label' => 'Directory with documents to insert entries', + 'name' => 'document_dir', + 'help' => lang('If you specify a directory (full vfs path) here, %1 displays an action for each document. That action allows to download the specified document with the %1 data inserted.', lang('timesheet')).' '. + lang('The document can contain placeholder like {{%3}}, to be replaced with the data (%1full list of placeholder names%2).','','','name').' '. + lang('The following document-types are supported:'). implode(',',bo_merge::get_file_extensions()), + 'run_lang' => false, + 'xmlrpc' => True, + 'admin' => False, + 'default' => '/templates/filemanager', + ); + } // Import / Export for nextmatch if ($GLOBALS['egw_info']['user']['apps']['importexport']) { diff --git a/filemanager/inc/class.filemanager_merge.inc.php b/filemanager/inc/class.filemanager_merge.inc.php new file mode 100644 index 0000000000..1500803c50 --- /dev/null +++ b/filemanager/inc/class.filemanager_merge.inc.php @@ -0,0 +1,188 @@ + true, + ); + + /** + * Fields that are numeric, for special numeric handling + */ + protected $numeric_fields = array( + ); + + /** + * Business object to pull records from + */ + protected $bo = null; + + /** + * Constructor + * + */ + function __construct() + { + parent::__construct(); + } + + /** + * Get replacements + * + * @param int $id id of entry + * @param string &$content=null content to create some replacements only if they are use + * @return array|boolean + */ + protected function get_replacements($id,&$content=null) + { + if (!($replacements = $this->filemanager_replacements($id, '', $content))) + { + return false; + } + return $replacements; + } + + /** + * Get filemanager replacements + * + * @param int $id id (vfs path) of entry + * @param string $prefix='' prefix like eg. 'erole' + * @return array|boolean + */ + public function filemanager_replacements($id,$prefix='', &$content = null) + { + $info = array(); + $file = egw_vfs::lstat($id,true); + + $file['mtime'] = egw_time::to($file['mtime']); + $file['ctime'] = egw_time::to($file['ctime']); + + $file['name'] = egw_vfs::basename($id); + $file['dir'] = egw_vfs::decodePath(egw_vfs::dirname($id)); + $file['path'] = $id; + $file['hsize'] = egw_vfs::hsize($file['size']); + $file['mime'] = egw_vfs::mime_content_type($id); + $file['gid'] *= -1; // our widgets use negative gid's + if (($props = egw_vfs::propfind($id))) + { + foreach($props as $prop) $file[$prop['name']] = $prop['val']; + } + if (($file['is_link'] = egw_vfs::is_link($id))) + { + $file['symlink'] = egw_vfs::readlink($id); + } + $extra = egw_vfs::getExtraInfo($id); + + // Convert to human friendly values + if($content && strpos($content, '#') !== 0) + { + $this->cf_link_to_expand($file, $content, $info); + } + + // Set any missing custom fields, or the marker will stay + foreach(config::get_customfields('filemanager') as $name => $field) + { + if(!$file['#'.$name]) $file['#'.$name] = ''; + } + + // Links + /* Not applicable to filemanager + $file['links'] = $this->get_links('filemanager', $id, '!'.egw_link::VFS_APPNAME); + $file['attachments'] = $this->get_links('filemanager', $id, egw_link::VFS_APPNAME); + $file['links_attachments'] = $this->get_links('filemanager', $id); + foreach(array_keys($GLOBALS['egw_info']['user']['apps']) as $app) + { + $file["links/{$app}"] = $this->get_links('filemanager',$id, $app); + } + */ + + // Add markers + foreach($file as $key => &$value) + { + if(!$value) $value = ''; + $info['$$'.($prefix ? $prefix.'/':'').$key.'$$'] = $value; + } + return $info; + } + + /** + * Generate table with replacements for the preferences + * + */ + public function show_replacements() + { + $GLOBALS['egw_info']['flags']['app_header'] = lang('filemanager').' - '.lang('Replacements for inserting entries into documents'); + $GLOBALS['egw_info']['flags']['nonavbar'] = false; + common::egw_header(); + + echo "
'.lang('Filemanager fields:')." | |||
{{'.$name.'}} | '.lang($label).' | '; + if ($n&1) echo "||
'.lang('Custom fields').": | |||
{{#'.$name.'}} | '.$field['label']." | ||
'.lang('General fields:')." | |||
{{'.$name.'}} | '.$label." |