mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-26 08:39:07 +01:00
link functionality is now working, the UI is not very pretty
This commit is contained in:
parent
94fb1f402d
commit
d89bce6364
@ -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 "<p>bolink.link('$app1',$id1,'$app2',$id2,'$remark',$owner)</p>\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 "<p>bolink.query('$app','$pattern') => '$method'</p>\n";
|
||||
|
||||
if ($this->debug)
|
||||
{
|
||||
echo "<p>bolink.query('$app','$pattern') => '$method'</p>\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;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -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 "<p>linkto_widget.preprocess: query='$value[query]',app='$value[app]',search=$search,create=$create</p>\n";
|
||||
//echo "<p>linkto_widget.preprocess: query='$value[query]',app='$value[app]',search=$search,create=$create</p>\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 "<p>linkto_widget.postprocess: query='$value[query]',app='$value[app]',id='$value[id]', search=$search,create=$create</p>\n";
|
||||
|
||||
$templ->loop = $search;
|
||||
//echo "<p>linkto_widget.postprocess: query='$value[query]',app='$value[app]',id='$value[id]', search=$search,create=$create</p>\n";
|
||||
|
||||
if ($create)
|
||||
{
|
||||
$value = array_merge($value,$GLOBALS['phpgw_info']['etemplate']['extension_data']['linkto_widget'][$cell['name']]);
|
||||
// make the link
|
||||
echo "<p>linkto($value[app],$value[id],'$value[remark]')</p>\n";
|
||||
if ($value['to_app']) // make the link
|
||||
{
|
||||
$this->link->link($value['to_app'],$value['to_id'],$value['app'],$value['id'],$value['remark']);
|
||||
echo "<p>linkto($value[app],$value[id],'$value[remark]')</p>\n";
|
||||
}
|
||||
}
|
||||
$templ->loop = $search || $create;
|
||||
}
|
||||
}
|
@ -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 "<p>solink.link($app1,$id1,$app2,$id2,'$remark',$owner)</p>\n";
|
||||
|
||||
{
|
||||
echo "<p>solink.link('$app1',$id1,'$app2',$id2,'$remark',$owner)</p>\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;
|
||||
}
|
||||
|
@ -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));
|
||||
|
@ -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 "<p>$name = "; _debug_array($value);
|
||||
if ($this->debug)
|
||||
{
|
||||
echo "<p>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 "<p>uilink.showLinks: app='$app',id='$id', unlink=$unlink, $name = "; _debug_array($value);
|
||||
}
|
||||
if ($unlink)
|
||||
{
|
||||
$this->unlink($unlink,$app,$id);
|
||||
//echo "<p>$unlink unlinked</p>\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('[</]*table[^>]*>','',$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 "<a href=[link]>$content</a>"
|
||||
@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)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,14 @@
|
||||
|
||||
/* echo "<p>hook_addressbook_view(ab_id=$ab_id)</p>"; */
|
||||
|
||||
$link = CreateObject('infolog.uilink');
|
||||
$out = '<table>'.$link->getEntry('entry','addressbook',$GLOBALS['ab_id'])."\n".
|
||||
$link->showLinks('links','addressbook',$GLOBALS['ab_id'],'!infolog')."</table>\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;
|
||||
|
@ -1,7 +1,13 @@
|
||||
<?php
|
||||
// eTemplates for Application 'infolog', generated by etemplate.dump() 2002-09-02 23:51
|
||||
// eTemplates for Application 'infolog', generated by etemplate.dump() 2002-09-04 01:02
|
||||
|
||||
$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: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' => '',);
|
||||
|
||||
|
@ -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)
|
||||
<b>file-attachments via symlinks</b> 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
|
||||
<b>file-attachments via symlinks</b> instead of uploads and retrieval via file:/path for direct lan-clients infolog en <b>file-attachments via symlinks</b> 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<br>eg. /var/samba/Share infolog en path on (web-)serverside<br>eg. /var/samba/Share
|
||||
pattern for search in addressbook infolog en pattern for search in Addressbook
|
||||
owner infolog en Owner
|
||||
path on (web-)serverside<br>eg. /var/samba/share infolog en path on (web-)serverside<br>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<br>eg. ^192\.168\.1\. infolog en reg. expr. for local IP's<br>eg. ^192\.168\.1\.
|
||||
re: infolog en Re:
|
||||
reg. expr. for local ip's<br>eg. ^192\.168\.1\. infolog en reg. expr. for local IP's<br>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 <u>only</u> in browser) infolog en Test Import (show importable records <u>only</u> in browser)
|
||||
test import (show importable records <u>only</u> in browser) infolog en Test Import (show importable records <u>only</u> 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<br>eg. \\Server\Share or e:\ infolog en valid path on clientside<br>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<br>eg. \\server\share or e:\ infolog en valid path on clientside<br>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
|
||||
|
Loading…
Reference in New Issue
Block a user