mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-27 09:09:04 +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
|
@class bolink
|
||||||
@author ralfbecker
|
@author ralfbecker
|
||||||
@author ralfbecker
|
|
||||||
@abstract generalized linking between entries of phpGroupware apps - BO layer
|
@abstract generalized linking between entries of phpGroupware apps - BO layer
|
||||||
@discussion This class is the BO-layer of the links
|
@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:
|
@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
|
$this->public_functions += array( // extend the public_functions of solink
|
||||||
'query' => True,
|
'query' => True,
|
||||||
'title' => 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
|
@function app_list
|
||||||
@syntax app_list( )
|
@syntax app_list( )
|
||||||
@ -118,8 +230,11 @@
|
|||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
$method = $reg['query'];
|
$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);
|
return strchr($method,'.') ? ExecMethod($method,$pattern) : $this->$method($pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,13 +247,44 @@
|
|||||||
*/
|
*/
|
||||||
function title($app,$id)
|
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();
|
return array();
|
||||||
}
|
}
|
||||||
$method = $reg['title'];
|
$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
|
@class linkto_widget
|
||||||
@author ralfbecker
|
@author ralfbecker
|
||||||
@author ralfbecker
|
|
||||||
@abstract widget that enable you to make a link to an other entry of a link-aware app
|
@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
|
@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;
|
$search = $value['search'] ? 1 : 0;
|
||||||
$create = $value['create'] ? 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'])))
|
if ($search && count($ids = $this->link->query($value['app'],$value['query'])))
|
||||||
{
|
{
|
||||||
@ -76,15 +75,17 @@
|
|||||||
$create = $value['create'] ? 1 : 0;
|
$create = $value['create'] ? 1 : 0;
|
||||||
list($value['app']) = @$value['app']; // no multiselection
|
list($value['app']) = @$value['app']; // no multiselection
|
||||||
list($value['id']) = @$value['id'];
|
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";
|
//echo "<p>linkto_widget.postprocess: query='$value[query]',app='$value[app]',id='$value[id]', search=$search,create=$create</p>\n";
|
||||||
|
|
||||||
$templ->loop = $search;
|
|
||||||
|
|
||||||
if ($create)
|
if ($create)
|
||||||
{
|
{
|
||||||
$value = array_merge($value,$GLOBALS['phpgw_info']['etemplate']['extension_data']['linkto_widget'][$cell['name']]);
|
$value = array_merge($value,$GLOBALS['phpgw_info']['etemplate']['extension_data']['linkto_widget'][$cell['name']]);
|
||||||
// make the link
|
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";
|
echo "<p>linkto($value[app],$value[id],'$value[remark]')</p>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$templ->loop = $search || $create;
|
||||||
|
}
|
||||||
}
|
}
|
@ -15,7 +15,6 @@
|
|||||||
/*!
|
/*!
|
||||||
@class solink
|
@class solink
|
||||||
@author ralfbecker
|
@author ralfbecker
|
||||||
@author ralfbecker
|
|
||||||
@abstract generalized linking between entries of phpGroupware apps - DB layer
|
@abstract generalized linking between entries of phpGroupware apps - DB layer
|
||||||
@discussion This class is to access the links in the DB
|
@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:
|
@discussion Links have to ends each pointing to an entry, an entry is a double:
|
||||||
@ -31,7 +30,7 @@
|
|||||||
'unlink' => True,
|
'unlink' => True,
|
||||||
'chown' => True
|
'chown' => True
|
||||||
);
|
);
|
||||||
var $db,$db2;
|
var $db;
|
||||||
var $user;
|
var $user;
|
||||||
var $db_name = 'phpgw_links';
|
var $db_name = 'phpgw_links';
|
||||||
var $debug = 0;
|
var $debug = 0;
|
||||||
@ -50,9 +49,9 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
@function link
|
@function link
|
||||||
@syntax link( $app1,$name1,$id1,$app2,$name2,$id2,$remark='',$user=0 )
|
@syntax link( $app1,$id1,$app2,$id2,$remark='',$user=0 )
|
||||||
@author ralfbecker
|
@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 $remark Remark to be saved with the link (defaults to '')
|
||||||
@param $owner Owner of the link (defaults to user)
|
@param $owner Owner of the link (defaults to user)
|
||||||
@discussion Does NOT check if link already exists
|
@discussion Does NOT check if link already exists
|
||||||
@ -61,8 +60,9 @@
|
|||||||
function link( $app1,$id1,$app2,$id2,$remark='',$owner=0 )
|
function link( $app1,$id1,$app2,$id2,$remark='',$owner=0 )
|
||||||
{
|
{
|
||||||
if ($this->debug)
|
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 ||
|
if ($app1 == $app2 && $id1 == $id2 ||
|
||||||
$id1 == '' || $id2 == '' || $app1 == '' || $app2 == '')
|
$id1 == '' || $id2 == '' || $app1 == '' || $app2 == '')
|
||||||
{
|
{
|
||||||
@ -89,10 +89,10 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
@function get_links
|
@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
|
@author ralfbecker
|
||||||
@abstract returns array of links to $app,$name,$id
|
@abstract returns array of links to $app,$id
|
||||||
@param $only_app if set return only links from $only_app (eg. only addressbook-entries)
|
@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
|
@param $order defaults to newest links first
|
||||||
@result array of links or empty array if no matching links found
|
@result array of links or empty array if no matching links found
|
||||||
*/
|
*/
|
||||||
@ -111,6 +111,10 @@
|
|||||||
}
|
}
|
||||||
$this->db->query($sql);
|
$this->db->query($sql);
|
||||||
|
|
||||||
|
if ($not_only = $only_app[0] == '!')
|
||||||
|
{
|
||||||
|
$only_app = substr($only_app,1);
|
||||||
|
}
|
||||||
while ($this->db->next_record())
|
while ($this->db->next_record())
|
||||||
{
|
{
|
||||||
$row = $this->db->Record;
|
$row = $this->db->Record;
|
||||||
@ -129,7 +133,7 @@
|
|||||||
'id' => stripslashes($row['link_id1'])
|
'id' => stripslashes($row['link_id1'])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if ($only_app != '' && $link['app'] != $only_app)
|
if ($only_app && $not_only == ($link['app'] == $only_app))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -711,21 +711,11 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$app2var = array('addressbook' => 'id_addr','projects' => 'id_project','calendar' => 'id_event' );
|
||||||
$linkto = get_var('linkto',Array('POST'));
|
$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'])
|
$$var = $linkto['id'];
|
||||||
{
|
|
||||||
case 'addressbook':
|
|
||||||
$id_addr = $linkto['id'];
|
|
||||||
break;
|
|
||||||
case 'projects':
|
|
||||||
$id_project = $linkto['id'];
|
|
||||||
break;
|
|
||||||
case 'calendar':
|
|
||||||
$id_event = $linkto['id'];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// check wether to write dates or not
|
// check wether to write dates or not
|
||||||
if ($selfortoday)
|
if ($selfortoday)
|
||||||
@ -897,8 +887,8 @@
|
|||||||
$GLOBALS['phpgw']->template->set_file(array('info_edit_t' => 'form.tpl'));
|
$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_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))
|
if (is_array($error))
|
||||||
{
|
{
|
||||||
$GLOBALS['phpgw']->template->set_var('error_list',$GLOBALS['phpgw']->common->error_list($error));
|
$GLOBALS['phpgw']->template->set_var('error_list',$GLOBALS['phpgw']->common->error_list($error));
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
/*!
|
/*!
|
||||||
@class uilink
|
@class uilink
|
||||||
@author ralfbecker
|
@author ralfbecker
|
||||||
@author ralfbecker
|
|
||||||
@abstract generalized linking between entries of phpGroupware apps - HTML UI layer
|
@abstract generalized linking between entries of phpGroupware apps - HTML UI layer
|
||||||
@discussion This class is the UI to show/modify the links
|
@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:
|
@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->bolink( ); // call constructor of derived class
|
||||||
$this->public_functions += array( // extend public_functions
|
$this->public_functions += array( // extend public_functions
|
||||||
'getEntry' => True,
|
'getEntry' => True,
|
||||||
'show' => True
|
'showLinks' => True
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,16 +44,23 @@
|
|||||||
@author ralfbecker
|
@author ralfbecker
|
||||||
@abstract HTML UI to query user for one side of a link: an entry of a supported app
|
@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
|
@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'));
|
$value = get_var($name,array('POST'));
|
||||||
if (!is_array($value))
|
if (!is_array($value))
|
||||||
{
|
{
|
||||||
$value = array();
|
$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'])))
|
if ($value['search'] && count($ids = $this->query($value['app'],$value['query'])))
|
||||||
{
|
{
|
||||||
$value = array(
|
$value = array(
|
||||||
@ -82,14 +88,81 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@function show
|
@function showLinks
|
||||||
@syntax show( $app,$id )
|
@syntax showLinks( $name,$app,$id,$only_app='',$show_unlink=True )
|
||||||
@author ralfbecker
|
@author ralfbecker
|
||||||
@abstract HTML UI to show & delete existing links to $app,$id and to make new links
|
@abstract HTML UI to show & delete existing links to $app,$id
|
||||||
@discussion this should be called by each link-supporting app at the bottom of its view-entry-page
|
@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,6 +18,13 @@
|
|||||||
|
|
||||||
/* echo "<p>hook_addressbook_view(ab_id=$ab_id)</p>"; */
|
/* 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 = CreateObject('infolog.uiinfolog');
|
||||||
$infolog->get_list(True,'addr',$GLOBALS['ab_id']);
|
$infolog->get_list(True,'addr',$GLOBALS['ab_id']);
|
||||||
|
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
<?php
|
<?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' => '',);
|
$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 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)
|
%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
|
accept infolog en accept
|
||||||
action infolog en Action
|
action infolog en Action
|
||||||
Add a file infolog en Add a file
|
|
||||||
add infolog en Add
|
add infolog en Add
|
||||||
|
add a file infolog en Add a file
|
||||||
add sub infolog en add Sub
|
add sub infolog en add Sub
|
||||||
all infolog en All
|
all infolog en All
|
||||||
are you sure you want to delete this entry infolog en Are you sure you want to delete this entry
|
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
|
attach file infolog en Attach file
|
||||||
back to Projectlist infolog en Back to Projectlist
|
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
|
|
||||||
billed infolog en billed
|
billed infolog en billed
|
||||||
both infolog en both
|
both infolog en both
|
||||||
call infolog en call
|
call infolog en call
|
||||||
category infolog en Category
|
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
|
close infolog en Close
|
||||||
comment infolog en Comment
|
comment infolog en Comment
|
||||||
configuration infolog en Konfiguration
|
configuration infolog en Konfiguration
|
||||||
@ -23,83 +25,95 @@ csv-filename infolog en CSV-Filename
|
|||||||
csv-import common en CSV-Import
|
csv-import common en CSV-Import
|
||||||
datecreated infolog en date created
|
datecreated infolog en date created
|
||||||
days infolog en days
|
days infolog en days
|
||||||
default Filter for InfoLog infolog en Default Filter for InfoLog
|
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
|
|
||||||
description infolog en Description
|
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
|
done infolog en done
|
||||||
download infolog en Download
|
download infolog en Download
|
||||||
duration infolog en Duration
|
duration infolog en Duration
|
||||||
enddate can not be before startdate infolog en Enddate can not be before startdate
|
|
||||||
enddate infolog en Enddate
|
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
|
entry and all files infolog en Entry and all files
|
||||||
fax infolog en Fax
|
fax infolog en Fax
|
||||||
fieldseparator infolog en Fieldseparator
|
fieldseparator infolog en Fieldseparator
|
||||||
finish infolog en finish
|
finish infolog en finish
|
||||||
from infolog en From
|
from infolog en From
|
||||||
|
id infolog en Id
|
||||||
import infolog en Import
|
import infolog en Import
|
||||||
info log common en InfoLog
|
info log common en InfoLog
|
||||||
infolog common en InfoLog
|
infolog common en InfoLog
|
||||||
infolog - delete infolog en Info Log - Delete
|
infolog - delete infolog en Info Log - Delete
|
||||||
infolog - edit infolog en InfoLog - Edit
|
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 infolog en InfoLog - New
|
||||||
infolog - new subproject infolog en InfoLog - New Subproject
|
infolog - new subproject infolog en InfoLog - New Subproject
|
||||||
infolog preferences common en InfoLog preferences
|
|
||||||
infolog - subprojects from infolog en InfoLog - Subprojects from
|
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
|
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 - cancel infolog en No - Cancel
|
||||||
no entries found, try again ... infolog en no entries found, try again ...
|
no entries found, try again ... infolog en no entries found, try again ...
|
||||||
no filter infolog en no Filter
|
no filter infolog en no Filter
|
||||||
none infolog en None
|
none infolog en None
|
||||||
|
not infolog en not
|
||||||
not assigned infolog en not assigned
|
not assigned infolog en not assigned
|
||||||
note infolog en Note
|
note infolog en Note
|
||||||
not infolog en not
|
|
||||||
number of records to read (<=200) infolog en Number of records to read (<=200)
|
number of records to read (<=200) infolog en Number of records to read (<=200)
|
||||||
offer infolog en offer
|
offer infolog en offer
|
||||||
ongoing infolog en ongoing
|
ongoing infolog en ongoing
|
||||||
open infolog en open
|
open infolog en open
|
||||||
|
optional note to the link infolog en optional note to the Link
|
||||||
overdue infolog en overdue
|
overdue infolog en overdue
|
||||||
owner infolog en Owner
|
|
||||||
own infolog en own
|
own infolog en own
|
||||||
own open infolog en own open
|
own open infolog en own open
|
||||||
own overdue infolog en own overdue
|
own overdue infolog en own overdue
|
||||||
own upcoming infolog en own upcoming
|
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
|
owner infolog en Owner
|
||||||
pattern for search in addressbook infolog en pattern for search in Addressbook
|
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
|
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 infolog en Phonecall
|
||||||
|
phone/email infolog en Phone/Email
|
||||||
|
phonecall infolog en Phonecall
|
||||||
priority infolog en Priority
|
priority infolog en Priority
|
||||||
private infolog en Private
|
private infolog en Private
|
||||||
project infolog en Project
|
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:
|
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
|
responsible infolog en Responsible
|
||||||
|
search infolog en Search
|
||||||
search for: infolog en Search for:
|
search for: infolog en Search for:
|
||||||
select infolog en Select
|
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 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 infolog en showing %1
|
||||||
showing x - x of x infolog en showing %1 - %2 of %3
|
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
|
startdate infolog en Startdate
|
||||||
startrecord infolog en Startrecord
|
startrecord infolog en Startrecord
|
||||||
sub infolog en Sub
|
sub infolog en Sub
|
||||||
subject infolog en Subject
|
subject infolog en Subject
|
||||||
task infolog en ToDo
|
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
|
today infolog en Today
|
||||||
translation infolog en Translation
|
translation infolog en Translation
|
||||||
type infolog en Type
|
type infolog en Type
|
||||||
|
unlink infolog en Unlink
|
||||||
upcoming infolog en upcoming
|
upcoming infolog en upcoming
|
||||||
urgency infolog en urgency
|
urgency infolog en urgency
|
||||||
urgent infolog en urgent
|
urgent infolog en urgent
|
||||||
use Button to search for Address infolog en use Button to search for Address
|
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
|
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:\
|
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 other subs infolog en view other Subs
|
||||||
view subs infolog en view Subs
|
view subs infolog en view Subs
|
||||||
will-call infolog en will call
|
will-call infolog en will call
|
||||||
|
Loading…
Reference in New Issue
Block a user