From d89bce6364e9bb51ce11846fdffa6d057587647c Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Tue, 3 Sep 2002 23:09:21 +0000 Subject: [PATCH] link functionality is now working, the UI is not very pretty --- infolog/inc/class.bolink.inc.php | 156 +++++++++++++++++++++- infolog/inc/class.linkto_widget.inc.php | 15 ++- infolog/inc/class.solink.inc.php | 24 ++-- infolog/inc/class.uiinfolog.inc.php | 20 +-- infolog/inc/class.uilink.inc.php | 93 +++++++++++-- infolog/inc/hook_addressbook_view.inc.php | 9 +- infolog/setup/etemplates.inc.php | 10 +- infolog/setup/phpgw_en.lang | 60 +++++---- 8 files changed, 314 insertions(+), 73 deletions(-) diff --git a/infolog/inc/class.bolink.inc.php b/infolog/inc/class.bolink.inc.php index ad6b35d58a..9ed59ea681 100644 --- a/infolog/inc/class.bolink.inc.php +++ b/infolog/inc/class.bolink.inc.php @@ -21,7 +21,6 @@ /*! @class bolink @author ralfbecker - @author ralfbecker @abstract generalized linking between entries of phpGroupware apps - BO layer @discussion This class is the BO-layer of the links @discussion Links have to ends each pointing to an entry, an entry is a double: @@ -78,9 +77,122 @@ $this->public_functions += array( // extend the public_functions of solink 'query' => True, 'title' => True, + 'view' => True ); } + /*! + @function link + @syntax link( $app1,$id1,$app2,$id2='',$remark='',$user=0 ) + @author ralfbecker + @abstract creats a link between $app1,$id1 and $app2,$id2 - $id1 does NOT need to exist yet + @param $app1 app of $id1 + @param $id1 id of item to linkto or 0 if item not yet created or array with links of not created item + @param $app2 app of 2.linkend or array with links ($id2 not used) + @param $remark Remark to be saved with the link (defaults to '') + @param $owner Owner of the link (defaults to user) + @discussion Does NOT check if link already exists + @result db-errno or -1 (for param-error) or 0 for success + @result if $id1==0 or already an array: $id1 is array with links + */ + function link( $app1,&$id1,$app2,$id2='',$remark='',$owner=0 ) + { + if ($this->debug) + { + echo "

bolink.link('$app1',$id1,'$app2',$id2,'$remark',$owner)

\n"; + } + if (!$app1 || !$app2 || !$id1 && isarray($id2) || $app1 == $app2 && $id1 == $id2) + { + return -1; + } + if (is_array($id1) || !$id1) // create link only in $id1 array + { + if (!is_array($id1)) + { + $id1 = array( ); + } + $id1["$app2:$id2"] = array( + 'app' => $app2, + 'id' => $id2, + 'remark' => $remark, + 'owner' => $owner, + 'link_id' => "$app2:$id2" + ); + return 0; + } + if (is_array($app2) && !$id2) + { + reset($app2); + $err = 0; + while (!$err && list(,$link) = each($app2)) + { + $err = solink::link($app1,$id1,$link['app'],$link['id'],$link['remark'],$link['owner']); + } + return $err; + } + return solink::link($app1,$id1,$app2,$id2,$remark,$owner); + } + + /*! + @function get_links + @syntax get_links( $app,$id,$only_app='',$only_name='',$order='link_lastmod DESC' ) + @author ralfbecker + @abstract returns array of links to $app,$id (reimplemented to deal with not yet created items) + @param $id id of entry in $app or array of links if entry not yet created + @param $only_app if set return only links from $only_app (eg. only addressbook-entries) or NOT from if $only_app[0]=='!' + @param $order defaults to newest links first + @result array of links or empty array if no matching links found + */ + function get_links( $app,$id,$only_app='',$order='link_lastmod DESC' ) + { + if (is_array($id) || !$id) + { + $ids = array(); + if (is_array($id)) + { + if ($not_only = $only_app[0]) + { + $only_app = substr(1,$only_app); + } + reset($id); + while (list($key,$link) = each($id)) + { + if ($only_app && $not_only == ($link['app'] == $only_app)) + { + continue; + } + $ids[$key] = $link; + } + } + return $ids; + } + return solink::get_links($app,$id,$only_app,$order); + } + + /*! + @function unlink + @syntax unlink( $link_id,$app='',$id='',$owner='' ) + @author ralfbecker + @abstract Remove link with $link_id or all links matching given $app,$id + @param $link_id link-id to remove if > 0 + @param $app,$id,$owner if $link_id <= 0: removes all links matching the non-empty params + @discussion Note: if $link_id != '' and $id is an array: unlink removes links from that array only + @discussion unlink has to be called with &$id so see the result !!! + @result the number of links deleted + */ + function unlink($link_id,$app='',$id='',$owner='') + { + if ($link_id > 0 || !is_array($id)) + { + return solink::unlink($link_id,$app,$id,$owner); + } + $result = isset($id[$link_id]); + + unset($id[$link_id]); + + return $result; + } + /*! @function app_list @syntax app_list( ) @@ -101,7 +213,7 @@ function check_method($method,&$class,&$func) { - // Idea: check if method exist and cache the class + // Idea: check if method exist and cache the class } /*! @@ -118,8 +230,11 @@ return array(); } $method = $reg['query']; - echo "

bolink.query('$app','$pattern') => '$method'

\n"; + if ($this->debug) + { + echo "

bolink.query('$app','$pattern') => '$method'

\n"; + } return strchr($method,'.') ? ExecMethod($method,$pattern) : $this->$method($pattern); } @@ -132,13 +247,44 @@ */ function title($app,$id) { - if ($app == '' || !is_array($reg = $this->app_register[$app]) || !is_set($reg['title'])) + if ($app == '' || !is_array($reg = $this->app_register[$app]) || !isset($reg['title'])) { return array(); } $method = $reg['title']; - return strchr($method,'.') ? ExecuteMethod($method,$id) : $this->$method($id); + return strchr($method,'.') ? ExecMethod($method,$id) : $this->$method($id); + } + + /*! + @function view + @syntax view( $app,$id ) + @author ralfbecker + @abstract view entry $id of $app + @result array with name-value pairs for link to view-methode of $app to view $id + */ + function view($app,$id) + { + if ($app == '' || !is_array($reg = $this->app_register[$app]) || !isset($reg['view']) || !isset($reg['view_id'])) + { + return array(); + } + $view = $reg['view']; + + $names = explode(':',$reg['view_id']); + if (count($names) > 1) + { + $id = explode(':',$id); + while (list($n,$name) = each($names)) + { + $view[$name] = $id[$n]; + } + } + else + { + $view[$reg['view_id']] = $id; + } + return $view; } /*! diff --git a/infolog/inc/class.linkto_widget.inc.php b/infolog/inc/class.linkto_widget.inc.php index 63c99f7c3c..ef12e07528 100644 --- a/infolog/inc/class.linkto_widget.inc.php +++ b/infolog/inc/class.linkto_widget.inc.php @@ -15,7 +15,6 @@ /*! @class linkto_widget @author ralfbecker - @author ralfbecker @abstract widget that enable you to make a link to an other entry of a link-aware app @discussion This widget is independent of the UI as it only uses etemplate-widgets and has therefor no render-function */ @@ -36,7 +35,7 @@ { $search = $value['search'] ? 1 : 0; $create = $value['create'] ? 1 : 0; - echo "

linkto_widget.preprocess: query='$value[query]',app='$value[app]',search=$search,create=$create

\n"; + //echo "

linkto_widget.preprocess: query='$value[query]',app='$value[app]',search=$search,create=$create

\n"; if ($search && count($ids = $this->link->query($value['app'],$value['query']))) { @@ -76,15 +75,17 @@ $create = $value['create'] ? 1 : 0; list($value['app']) = @$value['app']; // no multiselection list($value['id']) = @$value['id']; - echo "

linkto_widget.postprocess: query='$value[query]',app='$value[app]',id='$value[id]', search=$search,create=$create

\n"; - - $templ->loop = $search; + //echo "

linkto_widget.postprocess: query='$value[query]',app='$value[app]',id='$value[id]', search=$search,create=$create

\n"; if ($create) { $value = array_merge($value,$GLOBALS['phpgw_info']['etemplate']['extension_data']['linkto_widget'][$cell['name']]); - // make the link - echo "

linkto($value[app],$value[id],'$value[remark]')

\n"; + if ($value['to_app']) // make the link + { + $this->link->link($value['to_app'],$value['to_id'],$value['app'],$value['id'],$value['remark']); + echo "

linkto($value[app],$value[id],'$value[remark]')

\n"; + } } + $templ->loop = $search || $create; } } \ No newline at end of file diff --git a/infolog/inc/class.solink.inc.php b/infolog/inc/class.solink.inc.php index d099c3bbf0..144cd0ed23 100644 --- a/infolog/inc/class.solink.inc.php +++ b/infolog/inc/class.solink.inc.php @@ -15,7 +15,6 @@ /*! @class solink @author ralfbecker - @author ralfbecker @abstract generalized linking between entries of phpGroupware apps - DB layer @discussion This class is to access the links in the DB @discussion Links have to ends each pointing to an entry, an entry is a double: @@ -31,7 +30,7 @@ 'unlink' => True, 'chown' => True ); - var $db,$db2; + var $db; var $user; var $db_name = 'phpgw_links'; var $debug = 0; @@ -50,9 +49,9 @@ /*! @function link - @syntax link( $app1,$name1,$id1,$app2,$name2,$id2,$remark='',$user=0 ) + @syntax link( $app1,$id1,$app2,$id2,$remark='',$user=0 ) @author ralfbecker - @abstract creats a link between $app1,$name1,$id1 and $app2,$name2,$id2 + @abstract creats a link between $app1,$id1 and $app2,$id2 @param $remark Remark to be saved with the link (defaults to '') @param $owner Owner of the link (defaults to user) @discussion Does NOT check if link already exists @@ -61,8 +60,9 @@ function link( $app1,$id1,$app2,$id2,$remark='',$owner=0 ) { if ($this->debug) - echo "

solink.link($app1,$id1,$app2,$id2,'$remark',$owner)

\n"; - + { + echo "

solink.link('$app1',$id1,'$app2',$id2,'$remark',$owner)

\n"; + } if ($app1 == $app2 && $id1 == $id2 || $id1 == '' || $id2 == '' || $app1 == '' || $app2 == '') { @@ -89,10 +89,10 @@ /*! @function get_links - @syntax get_links( $app,$name,$id,$only_app='',$only_name='',$order='link_lastmod DESC' ) + @syntax get_links( $app,$id,$only_app='',$only_name='',$order='link_lastmod DESC' ) @author ralfbecker - @abstract returns array of links to $app,$name,$id - @param $only_app if set return only links from $only_app (eg. only addressbook-entries) + @abstract returns array of links to $app,$id + @param $only_app if set return only links from $only_app (eg. only addressbook-entries) or NOT from if $only_app[0]=='!' @param $order defaults to newest links first @result array of links or empty array if no matching links found */ @@ -111,6 +111,10 @@ } $this->db->query($sql); + if ($not_only = $only_app[0] == '!') + { + $only_app = substr($only_app,1); + } while ($this->db->next_record()) { $row = $this->db->Record; @@ -129,7 +133,7 @@ 'id' => stripslashes($row['link_id1']) ); } - if ($only_app != '' && $link['app'] != $only_app) + if ($only_app && $not_only == ($link['app'] == $only_app)) { continue; } diff --git a/infolog/inc/class.uiinfolog.inc.php b/infolog/inc/class.uiinfolog.inc.php index 736ea29b97..bfd0babde2 100644 --- a/infolog/inc/class.uiinfolog.inc.php +++ b/infolog/inc/class.uiinfolog.inc.php @@ -711,21 +711,11 @@ return; } + $app2var = array('addressbook' => 'id_addr','projects' => 'id_project','calendar' => 'id_event' ); $linkto = get_var('linkto',Array('POST')); - if (is_array($linkto) && $linkto['create']) + if (is_array($linkto) && $linkto['create'] && ($var = $app2var[$linkto['app']])) { - switch ($linkto['app']) - { - case 'addressbook': - $id_addr = $linkto['id']; - break; - case 'projects': - $id_project = $linkto['id']; - break; - case 'calendar': - $id_event = $linkto['id']; - break; - } + $$var = $linkto['id']; } // check wether to write dates or not if ($selfortoday) @@ -897,8 +887,8 @@ $GLOBALS['phpgw']->template->set_file(array('info_edit_t' => 'form.tpl')); $GLOBALS['phpgw']->template->set_block('info_edit_t','info_edit'); - $GLOBALS['phpgw']->template->set_var('linkto',$this->link->getEntry('linkto')); - + $GLOBALS['phpgw']->template->set_var('linkto',$this->link->getEntry('linkto','infolog',&$info_id). + $this->link->showLinks('links','infolog',$info_id)); if (is_array($error)) { $GLOBALS['phpgw']->template->set_var('error_list',$GLOBALS['phpgw']->common->error_list($error)); diff --git a/infolog/inc/class.uilink.inc.php b/infolog/inc/class.uilink.inc.php index c6ccf616a0..e8991d6ad4 100644 --- a/infolog/inc/class.uilink.inc.php +++ b/infolog/inc/class.uilink.inc.php @@ -21,7 +21,6 @@ /*! @class uilink @author ralfbecker - @author ralfbecker @abstract generalized linking between entries of phpGroupware apps - HTML UI layer @discussion This class is the UI to show/modify the links @discussion Links have to ends each pointing to an entry, an entry is a double: @@ -35,7 +34,7 @@ $this->bolink( ); // call constructor of derived class $this->public_functions += array( // extend public_functions 'getEntry' => True, - 'show' => True + 'showLinks' => True ); } @@ -45,16 +44,23 @@ @author ralfbecker @abstract HTML UI to query user for one side of a link: an entry of a supported app @param $name base-name of the input-fields - @result html for query + @result html: table-row(s) with 4 cols */ - function getEntry($name) + function getEntry($name,$app='',$id=0) { $value = get_var($name,array('POST')); if (!is_array($value)) { $value = array(); } - echo "

$name = "; _debug_array($value); + if ($this->debug) + { + echo "

uilink.getEntry('$name','$app',$id): $name = "; _debug_array($value); + } + if ($value['create'] && $value['app'] && $value['id'] && $app) + { + $this->link($app,&$id,$value['app'],$value['id'],$value['remark']); + } if ($value['search'] && count($ids = $this->query($value['app'],$value['query']))) { $value = array( @@ -82,14 +88,81 @@ } /*! - @function show - @syntax show( $app,$id ) + @function showLinks + @syntax showLinks( $name,$app,$id,$only_app='',$show_unlink=True ) @author ralfbecker - @abstract HTML UI to show & delete existing links to $app,$id and to make new links - @discussion this should be called by each link-supporting app at the bottom of its view-entry-page + @abstract HTML UI to show & delete existing links to $app,$id + @param $name base-name of the input-fields + @param $only_app if set return only links from $only_app (eg. only addressbook-entries) or NOT from if $only_app[0]=='!' + @param $show_unlink boolean show unlink button for each link (default true) + @result html: table-row(s) with 4 cols */ - function show($app,$id) + function showLinks($name,$app,$id,$only_app='',$show_unlink=True) { + $value = get_var($name,array('POST')); + if (!is_array($value)) + { + $value = array(); + } + list($unlink) = @each($value['unlink']); + if ($this->debug) + { + echo "

uilink.showLinks: app='$app',id='$id', unlink=$unlink, $name = "; _debug_array($value); + } + if ($unlink) + { + $this->unlink($unlink,$app,$id); + //echo "

$unlink unlinked

\n"; + } + $etemplate = CreateObject('etemplate.etemplate','infolog.linklist_widget'); + $links = $this->get_links($app,$id,$only_app); + $value = array(); + for($row=$etemplate->rows-1; list(,$link) = each($links); ++$row) + { + $value[$row] = $link; + $value[$row]['title'] = $this->title($link['app'],$link['id']); + } + $value['app'] = $app; + $value['id'] = $id; + $value['title'] = $this->title($app,$id); + + $out = $etemplate->show($value,'','',$name); + + $out = str_replace('[]','',$out); + return eregi_replace('[]*>','',$out); + } + + /*! + @function viewLink + @syntax viewLink( $app,$id,$content='' ) + @author ralfbecker + @abstract link to view entry $id of $app + @param $content if set result will be like "$content" + @result link to view $id in $app or False if no link for $app registered or $id=='' + */ + function viewLink($app,$id,$html='') + { + $view = $this->view($app,$id); + if (!count($view)) + { + return False; + } + $html = CreateObject('infolog.html'); + return $content == '' ? $html->link('/index.php',$view) : $html->a_href($content,'/index.php',$view); + } + + /*! + @function linkBox + @syntax linkBox( $app,$id,$only_app='',$show_unlink=True ) + @author ralfbecker + @abstract HTML UI to show, delete & add links to $app,$id + @param $only_app if set return only links from $only_app (eg. only addressbook-entries) or NOT from if $only_app[0]=='!' + @param $show_unlink boolean show unlink button for each link (default true) + @result html: table-row(s) with 4 cols + */ + function linkBox($app,$id,$only_app='',$show_unlink=True) + { + } } diff --git a/infolog/inc/hook_addressbook_view.inc.php b/infolog/inc/hook_addressbook_view.inc.php index de0bc3093f..b49cd7ed9e 100644 --- a/infolog/inc/hook_addressbook_view.inc.php +++ b/infolog/inc/hook_addressbook_view.inc.php @@ -18,7 +18,14 @@ /* echo "

hook_addressbook_view(ab_id=$ab_id)

"; */ + $link = CreateObject('infolog.uilink'); + $out = ''.$link->getEntry('entry','addressbook',$GLOBALS['ab_id'])."\n". + $link->showLinks('links','addressbook',$GLOBALS['ab_id'],'!infolog')."
\n"; + $html = CreateObject('infolog.html'); + $out = $html->form($out,'','/index.php',array('menuaction'=>'addressbook.uiaddressbook.view','ab_id'=>$GLOBALS['ab_id'])); + $GLOBALS['phpgw']->template->set_var('phpgw_body',$out,True); + $infolog = CreateObject('infolog.uiinfolog'); $infolog->get_list(True,'addr',$GLOBALS['ab_id']); - $GLOBALS['phpgw_info']['flags']['currentapp'] = $save_app; + $GLOBALS['phpgw_info']['flags']['currentapp'] = $save_app; diff --git a/infolog/setup/etemplates.inc.php b/infolog/setup/etemplates.inc.php index f14d295196..9b41e9a84a 100644 --- a/infolog/setup/etemplates.inc.php +++ b/infolog/setup/etemplates.inc.php @@ -1,7 +1,13 @@ 'infolog.linkto_widget.create','template' => '','lang' => '','group' => '0','version' => '0.9.15.001','data' => 'a:3:{i:0;a:0:{}i:1;a:3:{s:1:\"A\";a:2:{s:4:\"type\";s:5:\"label\";s:4:\"name\";s:3:\"app\";}s:1:\"B\";a:3:{s:4:\"type\";s:6:\"select\";s:4:\"name\";s:2:\"id\";s:4:\"help\";s:28:\"Select an entry to link with\";}s:1:\"C\";a:4:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:4:\"Link\";s:4:\"name\";s:6:\"create\";s:4:\"help\";s:29:\"click here to create the Link\";}}i:2;a:3:{s:1:\"A\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:6:\"Remark\";}s:1:\"B\";a:5:{s:4:\"type\";s:4:\"text\";s:4:\"size\";s:5:\"50,50\";s:4:\"span\";s:3:\"all\";s:4:\"name\";s:6:\"remark\";s:4:\"help\";s:25:\"optional note to the Link\";}s:1:\"C\";a:1:{s:4:\"type\";s:5:\"label\";}}}','size' => '','style' => '',); +$templ_data[] = array('name' => 'infolog.linklist_widget','template' => '','lang' => '','group' => '0','version' => '0.9.15.001','data' => 'a:3:{i:0;a:2:{s:2:\"c1\";s:3:\"nmh\";s:2:\"c2\";s:3:\"nmr\";}i:1;a:4:{s:1:\"A\";a:3:{s:4:\"type\";s:5:\"label\";s:4:\"size\";s:1:\"b\";s:4:\"name\";s:3:\"app\";}s:1:\"B\";a:4:{s:4:\"type\";s:5:\"label\";s:4:\"size\";s:1:\"b\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:5:\"title\";}s:1:\"C\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:6:\"Remark\";}s:1:\"D\";a:4:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:2:\"Id\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:2:\"id\";}}i:2;a:4:{s:1:\"A\";a:2:{s:4:\"type\";s:5:\"label\";s:4:\"name\";s:11:\"${row}[app]\";}s:1:\"B\";a:3:{s:4:\"type\";s:5:\"label\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:13:\"${row}[title]\";}s:1:\"C\";a:3:{s:4:\"type\";s:5:\"label\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:14:\"${row}[remark]\";}s:1:\"D\";a:4:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:6:\"Unlink\";s:4:\"name\";s:26:\"unlink[$row_cont[link_id]]\";s:4:\"help\";s:39:\"Remove this link (not the entry itself)\";}}}','size' => '','style' => '',); + +$templ_data[] = array('name' => 'infolog.linklist_widget','template' => '','lang' => '','group' => '0','version' => '0.9.15.002','data' => 'a:2:{i:0;a:1:{s:2:\"c1\";s:3:\"nmr\";}i:1;a:4:{s:1:\"A\";a:2:{s:4:\"type\";s:5:\"label\";s:4:\"name\";s:11:\"${row}[app]\";}s:1:\"B\";a:3:{s:4:\"type\";s:5:\"label\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:13:\"${row}[title]\";}s:1:\"C\";a:3:{s:4:\"type\";s:5:\"label\";s:7:\"no_lang\";s:1:\"1\";s:4:\"name\";s:14:\"${row}[remark]\";}s:1:\"D\";a:4:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:6:\"Unlink\";s:4:\"name\";s:26:\"unlink[$row_cont[link_id]]\";s:4:\"help\";s:39:\"Remove this link (not the entry itself)\";}}}','size' => '','style' => '',); + +$templ_data[] = array('name' => 'infolog.linklist_widget.test','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:2:{i:0;a:0:{}i:1;a:1:{s:1:\"A\";a:2:{s:4:\"type\";s:8:\"linklist\";s:4:\"name\";s:5:\"links\";}}}','size' => '','style' => '',); + +$templ_data[] = array('name' => 'infolog.linkto_widget.create','template' => '','lang' => '','group' => '0','version' => '0.9.15.001','data' => 'a:3:{i:0;a:0:{}i:1;a:4:{s:1:\"A\";a:2:{s:4:\"type\";s:5:\"label\";s:4:\"name\";s:3:\"app\";}s:1:\"B\";a:3:{s:4:\"type\";s:6:\"select\";s:4:\"name\";s:2:\"id\";s:4:\"help\";s:28:\"Select an entry to link with\";}s:1:\"C\";a:4:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:4:\"Link\";s:4:\"name\";s:6:\"create\";s:4:\"help\";s:29:\"click here to create the Link\";}s:1:\"D\";a:4:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:10:\"New search\";s:4:\"name\";s:3:\"new\";s:4:\"help\";s:36:\"start a new search, cancel this link\";}}i:2;a:4:{s:1:\"A\";a:2:{s:4:\"type\";s:5:\"label\";s:5:\"label\";s:6:\"Remark\";}s:1:\"B\";a:5:{s:4:\"type\";s:4:\"text\";s:4:\"size\";s:5:\"50,50\";s:4:\"span\";s:3:\"all\";s:4:\"name\";s:6:\"remark\";s:4:\"help\";s:25:\"optional note to the Link\";}s:1:\"C\";a:1:{s:4:\"type\";s:5:\"label\";}s:1:\"D\";a:1:{s:4:\"type\";s:5:\"label\";}}}','size' => '','style' => '',); $templ_data[] = array('name' => 'infolog.linkto_widget.search','template' => '','lang' => '','group' => '0','version' => '0.9.15.001','data' => 'a:2:{i:0;a:0:{}i:1;a:4:{s:1:\"A\";a:4:{s:4:\"type\";s:6:\"select\";s:5:\"label\";s:6:\"Search\";s:4:\"name\";s:3:\"app\";s:4:\"help\";s:26:\"Select an App to search in\";}s:1:\"B\";a:3:{s:4:\"type\";s:4:\"text\";s:4:\"name\";s:5:\"query\";s:4:\"help\";s:23:\"Enter the query pattern\";}s:1:\"C\";a:4:{s:4:\"type\";s:6:\"button\";s:5:\"label\";s:6:\"Search\";s:4:\"name\";s:6:\"search\";s:4:\"help\";s:30:\"click here to start the search\";}s:1:\"D\";a:3:{s:4:\"type\";s:5:\"label\";s:4:\"size\";s:1:\"i\";s:4:\"name\";s:3:\"msg\";}}}','size' => '','style' => '',); diff --git a/infolog/setup/phpgw_en.lang b/infolog/setup/phpgw_en.lang index edbf3cf669..eedd2cab91 100644 --- a/infolog/setup/phpgw_en.lang +++ b/infolog/setup/phpgw_en.lang @@ -1,19 +1,21 @@ %1 records imported infolog en %1 records imported %1 records read (not yet imported, you may go back and uncheck test import) infolog en %1 records read (not yet imported, you may go %2back%3 and uncheck Test Import) +file-attachments via symlinks instead of uploads and retrieval via file:/path for direct lan-clients infolog en en accept infolog en accept action infolog en Action -Add a file infolog en Add a file add infolog en Add +add a file infolog en Add a file add sub infolog en add Sub all infolog en All are you sure you want to delete this entry infolog en Are you sure you want to delete this entry attach file infolog en Attach file -back to Projectlist infolog en Back to Projectlist -file-attachments via symlinks instead of uploads and retrieval via file:/path for direct lan-clients infolog en file-attachments via symlinks instead of uploads and retrieval via file:/path for direct lan-clients +back to projectlist infolog en Back to Projectlist billed infolog en billed both infolog en both call infolog en call category infolog en Category +click here to create the link infolog en click here to create the Link +click here to start the search infolog en click here to start the search close infolog en Close comment infolog en Comment configuration infolog en Konfiguration @@ -23,83 +25,95 @@ csv-filename infolog en CSV-Filename csv-import common en CSV-Import datecreated infolog en date created days infolog en days -default Filter for InfoLog infolog en Default Filter for InfoLog -description can not exceed 8000 characters in length infolog en Description can not exceed 8000 characters in length +default filter for infolog infolog en Default Filter for InfoLog description infolog en Description +description can not exceed 8000 characters in length infolog en Description can not exceed 8000 characters in length done infolog en done download infolog en Download duration infolog en Duration -enddate can not be before startdate infolog en Enddate can not be before startdate enddate infolog en Enddate +enddate can not be before startdate infolog en Enddate can not be before startdate +enter the query pattern infolog en Enter the query pattern entry and all files infolog en Entry and all files fax infolog en Fax fieldseparator infolog en Fieldseparator finish infolog en finish from infolog en From +id infolog en Id import infolog en Import info log common en InfoLog infolog common en InfoLog infolog - delete infolog en Info Log - Delete infolog - edit infolog en InfoLog - Edit -infolog-fieldname infolog en Info Log-Fieldname -infolog - import CSV-File infolog en InfoLog - Import CSV-File +infolog - import csv-file infolog en InfoLog - Import CSV-File infolog - new infolog en InfoLog - New infolog - new subproject infolog en InfoLog - New Subproject -infolog preferences common en InfoLog preferences infolog - subprojects from infolog en InfoLog - Subprojects from -Invalid filename infolog en Invalid filename +infolog preferences common en InfoLog preferences +infolog-fieldname infolog en Info Log-Fieldname +invalid filename infolog en Invalid filename last changed infolog en last changed -list no Subs/Childs infolog en List no Subs/Childs +link infolog en Link +list no subs/childs infolog en List no Subs/Childs +new search infolog en New search no - cancel infolog en No - Cancel no entries found, try again ... infolog en no entries found, try again ... no filter infolog en no Filter none infolog en None +not infolog en not not assigned infolog en not assigned note infolog en Note -not infolog en not number of records to read (<=200) infolog en Number of records to read (<=200) offer infolog en offer ongoing infolog en ongoing open infolog en open +optional note to the link infolog en optional note to the Link overdue infolog en overdue -owner infolog en Owner own infolog en own own open infolog en own open own overdue infolog en own overdue own upcoming infolog en own upcoming -path on (web-)serverside
eg. /var/samba/Share infolog en path on (web-)serverside
eg. /var/samba/Share -pattern for search in addressbook infolog en pattern for search in Addressbook +owner infolog en Owner +path on (web-)serverside
eg. /var/samba/share infolog en path on (web-)serverside
eg. /var/samba/Share +pattern for search in addressbook infolog en pattern for search in projects infolog en pattern for search in Projects -phonecall infolog en Phonecall -phone/email infolog en Phone/Email phone infolog en Phonecall +phone/email infolog en Phone/Email +phonecall infolog en Phonecall priority infolog en Priority private infolog en Private project infolog en Project -reg. expr. for local IP's
eg. ^192\.168\.1\. infolog en reg. expr. for local IP's
eg. ^192\.168\.1\. re: infolog en Re: +reg. expr. for local ip's
eg. ^192\.168\.1\. infolog en reg. expr. for local IP's
eg. ^192\.168\.1\. +remark infolog en Remark +remove this link (not the entry itself) infolog en Remove this link (not the entry itself) responsible infolog en Responsible +search infolog en Search search for: infolog en Search for: select infolog en Select +select an app to search in infolog en Select an App to search in +select an entry to link with infolog en Select an entry to link with show full usernames infolog en Show full usernames +show open events: tasks/calls/notes on main screen infolog en Show open Events: Tasks/Calls/Notes on main screen showing x infolog en showing %1 showing x - x of x infolog en showing %1 - %2 of %3 -show open Events: Tasks/Calls/Notes on main screen infolog en Show open Events: Tasks/Calls/Notes on main screen +start a new search, cancel this link infolog en start a new search, cancel this link startdate infolog en Startdate startrecord infolog en Startrecord sub infolog en Sub subject infolog en Subject task infolog en ToDo -test Import (show importable records only in browser) infolog en Test Import (show importable records only in browser) +test import (show importable records only in browser) infolog en Test Import (show importable records only in browser) today infolog en Today translation infolog en Translation type infolog en Type +unlink infolog en Unlink upcoming infolog en upcoming urgency infolog en urgency urgent infolog en urgent -use Button to search for Address infolog en use Button to search for Address -use Button to search for Project infolog en use Button to search for Project -valid path on clientside
eg. \\Server\Share or e:\ infolog en valid path on clientside
eg. \\Server\Share or e:\ +use button to search for address infolog en use Button to search for Address +use button to search for project infolog en use Button to search for Project +valid path on clientside
eg. \\server\share or e:\ infolog en valid path on clientside
eg. \\Server\Share or e:\ view other subs infolog en view other Subs view subs infolog en view Subs will-call infolog en will call