[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Phpgroupware-cvs] phpgwapi/inc/class.sbox2.inc.php, 1.16
From: |
nomail |
Subject: |
[Phpgroupware-cvs] phpgwapi/inc/class.sbox2.inc.php, 1.16 |
Date: |
Thu, 30 Dec 2004 07:47:31 +0100 |
Update of /phpgwapi/inc
Added Files:
Branch:
class.sbox2.inc.php
date: 2004/12/30 06:47:31; author: skwashd; state: Exp; lines: +22 -27
Log Message:
new HEAD
=====================================================================
<?php
/**
* Class for creating select boxes for addresse, projects, array items,
...
* @author Ralf Becker <address@hidden>
* @copyright Copyright (C) 2000-2004 Free Software Foundation, Inc.
http://www.fsf.org/
* @license http://www.fsf.org/licenses/lgpl.html GNU Lesser General
Public License
* @package phpgwapi
* @subpackage gui
* @version $Id: class.sbox2.inc.php,v 1.16 2004/12/30 06:47:31 skwashd
Exp $
*/
if(!isset($GLOBALS['phpgw_info']['flags']['included_classes']['sbox']))
{
/**
* Include parent class
*/
include(PHPGW_API_INC . '/class.sbox.inc.php');
$GLOBALS['phpgw_info']['flags']['included_classes']['sbox'] =
True;
}
/**
* Class for creating select boxes for addresse, projects, array items,
...
*
* @package phpgwapi
* @subpackage gui
*/
class sbox2 extends sbox
{
/*
* Function: search for an id of an db-entry, eg. an address
* Parameter: $name base name for all template-vars and of
the submitted vars (not to conflict with other template-var-names !!!)
* $lang_name titel of the field
* $prompt for the JavaScript prompt()
* $id_name id of previosly selected entry
* $content from id (eg. 'company: lastname,
givenname' for address $id) if $id != 0, or
* array with searchresult (id's as key),
if array is empty if search was unsucsessful
* $multipe present a multiple selectable box
instead of one selector-button
* Returns: array with vars to set in temaplate, the vars are:
* {doSearchFkt} Javascript Funktion, place
somewhere in Template (before rest of the vars)
* {$name.'_title} button with titel $lang_name (if
JS) or just $lang_name
* {$name} content of $id if != 0, or lang('use
Button to search for').$lang_name
* {$name.'_nojs} searchfield + button if we have no
JavaScript, else empty
*
* To use call $template->set_var(getIdSearch( ... ));
* the template should look like {doSearchFkt}
<tr><td>{XXX_title}</td><td>{XXX}</td><td>{XXX_nojs}</td></tr> (XXX is
content of $name)
* In the submitted page the vars $query_XXX and $id_XXX are
set according to what is selected, see getAddress as Example
*/
function sbox2()
{
$this->sbox(); // call constructor extended class
}
function
getId($name,$lang_name,$prompt,$id_name,$content='',$note='',$multiple=False)
{
// echo
"<p>getId('$name','$lang_name','$prompt',$id_name,'$content') =";
$ret['doSearchFkt'] =
'<script language="JavaScript">'."\n".
" function doSearch(field,ask) {\n".
" field.value = prompt(ask,'');\n".
" if (field.value != 'null') {\n".
" if (field.value.length == 0)\n".
" field.value = '%';\n".
" field.form.submit();\n".
" } else\n".
" field.value = ''\n".
" }\n".
'</script>';
$ret[$name.'_title'] = is_array($content) &&
count($content) ? $lang_name :
'<script language="JavaScript">'."\n".
" document.writeln('<input type=\"hidden\" name=\"query_$name\"
value=\"\">');\n".
" document.writeln('<input type=\"button\"
onClick=\"doSearch(this.form.query_$name,\'$prompt\')\"
value=\"$lang_name\">');\n".
"</script>\n".
"<noscript>\n".
" $lang_name\n".
"</noscript>";
if (is_array($content))
{
// result from search
if (!count($content))
{
// search was unsuccsessful
$ret[$name] = lang('no entries found,
try again ...');
}
else
{
$ret[$name.'_OK'] = ''; // flag we have
something so select
if ($multiple)
{
$ret[$name] = '<select
name="id_'.$name.'[]" size=10 multiple>'."\n";
}
else
{
$ret[$name] = '<select
name="id_'.$name.'">'."\n";
}
while (list( $id,$text ) = each(
$content ))
{
$ret[$name] .= "<option
value=\"$id\">" . $GLOBALS['phpgw']->strip_html($text) . "\n";
}
$ret[$name] .= '<option
value="0">'.lang('none')."\n";
$ret[$name] .= '</select>';
}
}
else
{
if ($id_name)
{
$ret[$name] = $content . "\n<input
type=\"hidden\" name=\"id_$name\" value=\"$id_name\">";
}
else
{
$ret[$name] = "<span
class=note>$note</span>";
}
}
$ret[$name.'_nojs'] =
"<noscript>\n".
" <input name=\"query_$name\" value=\"\" size=10> <input type=\"submit\"
value=\"?\">\n".
"</noscript>";
// print_r($ret);
return $ret;
}
function event2name( $event )
{
if (!is_object($this->bocal))
{
$this->bocal =
createobject('calendar.bocalendar');
}
if (!is_array($event) && (int) $event > 0)
{
$event = $this->bocal->read_entry($event);
}
if (!is_array($event))
{
return 'not an event !!!';
}
$name =
$GLOBALS['phpgw']->common->show_date($this->bocal->maketime($event['start']) -
$this->bocal->datetime->tz_offset);
$name .= ' -- ' .
$GLOBALS['phpgw']->common->show_date($this->bocal->maketime($event['end']) -
$this->bocal->datetime->tz_offset);
$name .= ': ' . $event['title'];
return $GLOBALS['phpgw']->strip_html($name);
}
/*
* Function Allows you to show and select an event
from the calendar (works with and without javascript !!!)
* Parameters $name string with basename of all
variables (not to conflict with the name other template or submitted vars !!!)
* $id_name
id of the address for edit or 0 if none selected so far
* $query_name have to be
called $query_XXX, the search pattern after the submit, has to be passed back
to the function
* $multipe present
a multiple selectable box instead of one selector-button
* On Submit $id_XXX contains the selected event (if
!= 0)
* $query_XXX search
pattern if the search button is pressed by the user, or '' if regular submit
* Returns array with vars to set for the
template, set with: $template->set_var( getEvent( ... )); (see getId( ))
*
* Note As query's for an event are submitted,
you have to check $query_XXX if it is a search or a regular submit
(!$query_string)
*/
function getEvent(
$name,$id_name,$query_name,$title='',$multiple=False)
{
// echo
"<p>getEvent('$name',$id_name,'$query_name','$title')</p>";
// fallback if calendar is not installed or not enabled
for user
if (!file_exists(PHPGW_SERVER_ROOT.'/calendar') ||
!$GLOBALS['phpgw_info']['user']['apps']['calendar']['enabled'])
{
return array(
$name => "<input type=\"hidden\"
name=\"id_$name\" value=\"$id_name\">\n",
$name.'_no_js' => '',
$name.'_title' => ''
);
}
if ($id_name || $query_name)
{
if (!is_object($this->bocal))
{
$this->bocal =
createobject('calendar.bocalendar');
}
if ($query_name)
{
$event_ids =
$this->bocal->search_keywords($query_name);
$content = array( );
while ($event_ids && (list( $key,$id )
= each( $event_ids )))
{
$content[$id] =
$this->event2name( $id );
}
}
else
{
$event = $this->bocal->read_entry(
$id_name );
if ($event && is_array($event))
{
$content = $this->event2name(
$event );
}
}
}
if (!$title)
{
$title = lang('Calendar');
}
return $this->getId($name,$title,lang('Pattern for
Search in Calendar'),$id_name,$content,lang('use Button to search for
Calendarevent'),$multiple);
}
function addr2name( $addr )
{
$name = $addr['n_family'];
if ($addr['n_given'])
{
$name .= ', '.$addr['n_given'];
}
else
{
if ($addr['n_prefix'])
{
$name .= ', '.$addr['n_prefix'];
}
}
if ($addr['org_name'])
{
$name = $addr['org_name'].': '.$name;
}
return $GLOBALS['phpgw']->strip_html($name);
}
/*
* Function Allows you to show and select an
address from the addressbook (works with and without javascript !!!)
* Parameters $name string with basename of all
variables (not to conflict with the name other template or submitted vars !!!)
* $id_name
id of the address for edit or 0 if none selected so far
* $query_name have to be
called $query_XXX, the search pattern after the submit, has to be passed back
to the function
* $multipe present
a multiple selectable box instead of one selector-button
* On Submit $id_XXX contains the selected address
(if != 0)
* $query_XXX search
pattern if the search button is pressed by the user, or '' if regular submit
* Returns array with vars to set for the
template, set with: $template->set_var( getAddress( ... )); (see getId( ))
*
* Note As query's for an address are
submitted, you have to check $query_XXX if it is a search or a regular submit
(!$query_string)
*/
function getAddress(
$name,$id_name,$query_name,$title='',$multiple=False)
{
// echo
"<p>getAddress('$name',$id_name,'$query_name','$title')</p>";
if ($id_name || $query_name)
{
$contacts = createobject('phpgwapi.contacts');
if ($query_name)
{
$addrs = $contacts->read(
0,0,'',$query_name,'','DESC','org_name,n_family,n_given' );
$content = array( );
while ($addrs && (list( $key,$addr ) =
each( $addrs )))
{
$content[$addr['id']] =
$this->addr2name( $addr );
}
}
else
{
list( $addr ) =
$contacts->read_single_entry( $id_name );
if (count($addr))
{
$content = $this->addr2name(
$addr );
}
}
}
if (!$title)
{
$title = lang('Addressbook');
}
return $this->getId($name,$title,lang('Pattern for
Search in Addressbook'),$id_name,$content,lang('use Button to search for
Address'),$multiple);
}
function addr2email( $addr,$home='' )
{
if (!is_array($addr))
{
$home = substr($addr,-1) == 'h';
$contacts = createobject('phpgwapi.contacts');
list( $addr ) = $contacts->read_single_entry(
intval($addr) );
}
if ($home)
{
$home = '_home';
}
if (!count($addr) || !$addr['email'.$home])
{
return False;
}
if ($addr['n_given'])
{
$name = $addr['n_given'];
}
else
{
if ($addr['n_prefix'])
{
$name = $addr['n_prefix'];
}
}
$name .= ($name ? ' ' : '') . $addr['n_family'];
return $name.' <'.$addr['email'.$home].'>';
}
function getEmail( $name,$id_name,$query_name,$title='')
{
// echo
"<p>getAddress('$name',$id_name,'$query_name','$title')</p>";
if ($id_name || $query_name)
{
$contacts = createobject('phpgwapi.contacts');
if ($query_name)
{
$addrs = $contacts->read(
0,0,'',$query_name,'','DESC','org_name,n_family,n_given' );
$content = array( );
while ($addrs && (list($key,$addr) =
each($addrs)))
{
if ($addr['email'])
{
$content[$addr['id']] =
$this->addr2email( $addr );
}
if ($addr['email_home'])
{
$content[$addr['id'].'h'] = $this->addr2email( $addr,'_home' );
}
}
}
else
{
$content = $this->addr2email( $id_name
);
}
}
if (!$title)
{
$title = lang('Addressbook');
}
return $this->getId($name,$title,lang('Pattern for
Search in Addressbook'),$id_name,$content);
}
/*
* Function Allows you to show and select an
project from the projects-app (works with and without javascript !!!)
* Parameters $name string with basename of all
variables (not to conflict with the name other template or submitted vars !!!)
* $id_name
id of the project for edit or 0 if none selected so far
* $query_name have to be
called $query_XXX, the search pattern after the submit, has to be passed back
to the function
* On Submit $id_XXX contains the selected address
(if != 0)
* $query_XXX search
pattern if the search button is pressed by the user, or '' if regular submit
* Returns array with vars to set for the
template, set with: $template->set_var( getProject( ... )); (see getId( ))
*
* Note As query's for an address are
submitted, you have to check $query_XXX if it is a search or a regular submit
(!$query_string)
*/
function getProject( $name,$id_name,$query_name,$title='' )
{
// echo
"<p>getProject('$name',$id_name,'$query_name','$title')</p>";
// fallback if projects is not installed or not enabled
for user
if (!file_exists(PHPGW_SERVER_ROOT.'/projects') ||
!$GLOBALS['phpgw_info']['user']['apps']['projects']['enabled'])
{
return array(
$name => "<input type=\"hidden\"
name=\"id_$name\" value=\"$id_name\">\n",
$name.'_no_js' => '',
$name.'_title' => ''
);
}
if ($id_name || $query_name)
{
$projects = createobject('projects.boprojects');
if (!is_object($projects))
{
return '';
}
if ($query_name)
{
$projs = $projects->list_projects(
0,0,$query_name,'','','','',0,'mains','' );
$content = array();
while ($projs && (list($key,$proj) =
each($projs)))
{
$content[$proj['project_id']] =
$proj['title'];
}
}
else
{
if ($proj =
$projects->read_single_project( $id_name ))
{
$content = $proj['title'];
// $customer_id =
$proj['customer'];
}
}
}
if (!$title)
{
$title = lang('Project');
}
return $this->getId($name,$title,lang('Pattern for
Search in Projects'),$id_name,$content,lang('use Button to search for
Project'));
}
/*
* Function: Allows to show and select one item from
an array
* Parameters: $name string with
name of the submitted var which holds the key of the selected item form array
* $key
key(s) of already selected item(s) from $arr, eg. '1' or '1,2' or array with
keys
* $arr
array with items to select, eg. $arr = array ( 'y' => 'yes','n' => 'no','m' =>
'maybe');
* $no_lang
if !$no_lang send items through lang()
* $options
additional options (e.g. 'multiple')
* On submit $XXX is the key of the
selected item (XXX is the content of $name)
* Returns: string to set for a template or
to echo into html page
*/
function getArrayItem($name, $key,
$arr=0,$no_lang=0,$options='',$multiple=0)
{
// should be in class common.sbox
if (!is_array($arr))
{
$arr = array('no','yes');
}
if (0+$multiple > 0)
{
$options .= ' MULTIPLE SIZE='.(0+$multiple);
if (substr($name,-2) != '[]')
{
$name .= '[]';
}
}
$out = "<select name=\"$name\" $options>\n";
if (is_array($key))
{
$key = implode(',',$key);
}
while (list($k,$text) = each($arr))
{
$out .= '<option value="'.$k.'"';
if($k == $key || strstr(",$key,",",$k,"))
{
$out .= " SELECTED";
}
$out .= ">" . ($no_lang || $text == '' ? $text
: lang($text)) . "</option>\n";
}
$out .= "</select>\n";
return $out;
}
function getPercentage($name, $selected=0,$options='')
{
// reimplemented using getArrayItem
for ($i=0; $i <= 100; $i+=10)
{
$arr[$i] = "$i%";
}
return
$this->getArrayItem($name,$selected,$arr,1,$options);
}
function getPriority($name, $selected=2,$options='')
{
// reimplemented using getArrayItem
$arr = array('','low','normal','high');
return
$this->getArrayItem($name,$selected,$arr,0,$options);
}
function getAccessList($name,$selected='private',$options='')
{
// reimplemented using getArrayItem
$arr = array(
'private' => 'Private',
'public' => 'Global public',
'group' => 'Group public'
);
if (strstr($selected,','))
{
$selected = "group";
}
return
$this->getArrayItem($name,$selected,$arr,0,$options);
}
function getCountry($name='country',$selected=' ',$options='')
{
// reimplemented using getArrayItem
return
$this->getArrayItem($name,$selected,$this->country_array,0,$options);
}
function form_select($name='country',$selected=' ',$options='')
{
// reimplemented using getArrayItem (stupid name!!!)
return getCountry($name,$selected,$options);
}
function
accountInfo($id,$account_data=0,$longnames=0,$show_type=0)
{
if (!$id)
{
return ' ';
}
if (!is_array($account_data))
{
$accounts =
createobject('phpgwapi.accounts',$id);
$accounts->db = $GLOBALS['phpgw']->db;
$accounts->read_repository();
$account_data = $accounts->data;
}
$info = $show_type ?
'('.$account_data['account_type'].') ' : '';
switch ($longnames)
{
case 2: $info .=
'<'.$account_data['account_lid'].'> '; // fall-through
case 1: $info .=
$account_data['account_firstname'].' '.$account_data['account_lastname']; break;
default: $info .= $account_data['account_lid'];
break;
}
return $info;
}
/*
* Function: Allows to select one accountname
* Parameters: $name string with
name of the submitted var, which holds the account_id or 0 after submit
* $id
account_id of already selected account
* $longnames
0=account_lid 1=firstname lastname
*/
function
getAccount($name,$id,$longnames=0,$type='accounts',$multiple=0,$options='')
{
$accounts = createobject('phpgwapi.accounts');
$accounts->db = $GLOBALS['phpgw']->db;
$accs = $accounts->get_list($type);
if ($multiple < 0)
{
$aarr[] = lang('not assigned');
}
while ($a = current($accs))
{
$aarr[$a['account_id']] =
$this->accountInfo($a['account_id'],$a,$longnames,$type=='both');
next($accs);
}
return
$this->getArrayItem($name,$id,$aarr,1,$options,$multiple);
}
function getDate($n_year,$n_month,$n_day,$date,$options='')
{
if (is_array($date))
{
list($year,$month,$day) = $date;
}
elseif (!$date)
{
$day = $month = $year = 0;
}
else
{
$day = date('d',$date);
$month = date('m',$date);
$year = date('Y',$date);
}
return $GLOBALS['phpgw']->common->dateformatorder(
$this->getYears($n_year,$year),
$this->getMonthText($n_month,$month),
$this->getDays($n_day,$day)
);
}
function
getCategory($name,$cat_id='',$notall=False,$jscript=True,$multiple=0,$options='')
{
if (!is_object($this->cat))
{
$this->cat =
CreateObject('phpgwapi.categories');
}
if ($jscript)
{
$options .= ' onChange="this.form.submit();"';
}
if (0+$multiple > 0)
{
$options .= ' MULTIPLE SIZE='.(0+$multiple);
if (substr($name,-2) != '[]')
{
$name .= '[]';
}
}
/* Setup all and none first */
$cats_link = "\n<SELECT NAME=\"$name\" $options>\n";
if (!$notall)
{
$cats_link .= '<option value=""';
if ($cat_id=='all')
{
$cats_link .= ' selected';
}
$cats_link .= '>'.lang("all")."</option>\n";
}
/* Get global and app-specific category listings */
$cats_link .=
$this->cat->formatted_list('select','all',$cat_id,True);
$cats_link .= '</select>'."\n";
return $cats_link;
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Phpgroupware-cvs] phpgwapi/inc/class.sbox2.inc.php, 1.16,
nomail <=