merge from trunk(revision 23930:23943) to 1.4 branch

This commit is contained in:
Lars Kneschke 2007-05-26 06:59:35 +00:00
commit f32da9bdc0
26 changed files with 305 additions and 237 deletions

View File

@ -145,7 +145,10 @@ class socontacts_sql extends so_sql
else // by adr_one_location or org_unit
{
// org total for more then one $by
$append = "GROUP BY org_name HAVING {$by}_count > 1 ORDER BY org_name $sort";
$by_expr = $by == 'org_unit_count' ? "COUNT(DISTINCT CASE WHEN org_unit IS NULL THEN '' ELSE org_unit END)" :
"COUNT(DISTINCT CASE WHEN adr_one_locality IS NULL THEN '' ELSE adr_one_locality END)";
// $append = "GROUP BY org_name HAVING {$by}_count > 1 ORDER BY org_name $sort";
$append = "GROUP BY org_name HAVING $by_expr > 1 ORDER BY org_name $sort";
parent::search($param['search'],array('org_name'),$append,array(
"NULL AS $by",
'COUNT(org_name) AS org_count',
@ -292,7 +295,7 @@ class socontacts_sql extends so_sql
case 'boolean':
// only return the egw_addressbook columns, to not generate dublicates by the left join
// and to not return the NULL for contact_{id|owner} of not found custom fields!
$only_keys = 'DISTINCT '.$this->table_name.'.'.($only_keys ? 'contact_id' : '*');
$only_keys = 'DISTINCT '.$this->table_name.'.'.($only_keys ? 'contact_id AS contact_id' : '*');
break;
case 'string':
$only_keys = explode(',',$only_keys);
@ -413,7 +416,7 @@ class socontacts_sql extends so_sql
* @param string $name list-name
* @param int $owner user- or group-id
* @param array $contacts=array() contacts to add
* @return list_id or false on error
* @return int/boolean integer list_id, true if the list already exists or false on error
*/
function add_list($name,$owner,$contacts=array())
{
@ -424,7 +427,7 @@ class socontacts_sql extends so_sql
'list_owner' => $owner,
),__LINE__,__FILE__) && $this->db->next_record())
{
return $this->db->f('list_id'); // return existing list-id
return true; // return existing list-id
}
if (!$this->db->insert($this->lists_table,array(
'list_name' => $name,

View File

@ -80,8 +80,10 @@ class uicontacts extends bocontacts
// our javascript
// to be moved in a seperate file if rewrite is over
$GLOBALS['egw_info']['flags']['java_script'] .= $this->js();
if (strpos($GLOBALS['egw_info']['flags']['java_script'],'add_new_list') === false)
{
$GLOBALS['egw_info']['flags']['java_script'].= $this->js();
}
$this->config =& $GLOBALS['egw_info']['server'];
}
@ -140,7 +142,12 @@ class uicontacts extends bocontacts
}
elseif($_GET['add_list'])
{
if (($list = $this->add_list($_GET['add_list'],$_GET['owner']?$_GET['owner']:$this->user)))
$list = $this->add_list($_GET['add_list'],$_GET['owner']?$_GET['owner']:$this->user);
if ($list === true)
{
$msg = lang('List already exists!');
}
elseif ($list)
{
$msg = lang('List created');
}
@ -152,6 +159,7 @@ class uicontacts extends bocontacts
$preserv = array(
'do_email' => $do_email,
);
$to = $content['nm']['to'];
$content = array(
'msg' => $msg ? $msg : $_GET['msg'],
);
@ -180,7 +188,14 @@ class uicontacts extends bocontacts
'do_email' => $do_email,
'default_cols' => '!cat_id,contact_created_contact_modified',
'filter2_onchange' => "if(this.value=='add') { add_new_list(document.getElementById(form::name('filter')).value); this.value='';} else this.form.submit();",
'manual' => $do_email ? ' ' : false, // space for the manual icon
);
if ($do_email)
{
$content['nm']['filter2_onchange'] = str_replace('this.form.submit();',
"{ if (this.value && confirm('Add business email of whole distribution list?')) add_whole_list(this.value); else this.form.submit(); }",
$content['nm']['filter2_onchange']);
}
// use the state of the last session stored in the user prefs
if (($state = @unserialize($this->prefs[$do_email ? 'email_state' : 'index_state'])))
{
@ -199,6 +214,10 @@ class uicontacts extends bocontacts
$content['nm']['to'] = 'to';
$content['nm']['search'] = '@';
}
else
{
$content['nm']['to'] = $to;
}
$content['nm']['header_left'] = 'addressbook.email.left';
}
// Organisation stuff is not (yet) availible with ldap
@ -215,6 +234,7 @@ class uicontacts extends bocontacts
$sel_options['action'] = array();
if ($do_email)
{
$GLOBALS['egw_info']['flags']['include_xajax'] = true;
$sel_options['action'] = array(
'email' => lang('Add %1',lang('business email')),
'email_home' => lang('Add %1',lang('home email')),
@ -290,53 +310,43 @@ class uicontacts extends bocontacts
*/
function emailpopup($content=null,$msg=null)
{
switch($_POST['exec']['nm']['to']) {
case 'to':
case 'bcc':
case 'cc':
$to = $_POST['exec']['nm']['to'];
break;
default:
$to = 'to';
}
if ($_GET['compat']) // 1.2 felamimail or old email
if (strpos($GLOBALS['egw_info']['flags']['java_script'],'addEmail') === false)
{
$handler = "if (opener.document.doit[to].value != '')
if ($_GET['compat']) // 1.2 felamimail or old email
{
$handler = "if (opener.document.doit[to].value != '')
{
opener.document.doit[to].value += ',';
}
opener.document.doit[to].value += email";
}
else // 1.3+ felamimail
{
$handler = 'opener.addEmail(to,email)';
}
$GLOBALS['egw_info']['flags']['java_script'] .= "
}
else // 1.3+ felamimail
{
$handler = 'opener.addEmail(to,email)';
}
$GLOBALS['egw_info']['flags']['java_script'].= "
<script>
window.focus();
function addEmail(email)
{
var to = '$to';
// this does not work, as always to is selected after page reload
//if (document.getElementById('exec[nm][to][cc]').checked == true)
//{
// to = 'cc';
//}
//else
//{
// if (document.getElementById('exec[nm][to][bcc]').checked == true)
// {
// to = 'bcc';
// }
//}
//alert(to+': '+email);
var to = 'to';
if (document.getElementById('exec[nm][to][cc]').checked == true)
{
to = 'cc';
}
else
{
if (document.getElementById('exec[nm][to][bcc]').checked == true)
{
to = 'bcc';
}
}
$handler;
}
}
</script>
";
}
return $this->index($content,$msg,true);
}
@ -375,6 +385,34 @@ class uicontacts extends bocontacts
));
}
function ajax_add_whole_list($list)
{
$query = $GLOBALS['egw']->session->appsession('email','addressbook');
$query['filter2'] = (int)$list;
$action_msg = lang('%1 added',lang('Business email'));
$this->action('email',array(),true,$success,$failed,$action_msg,$query,$msg);
$response =& new xajaxResponse();
if ($success) $response->addScript($GLOBALS['egw']->js->body['onLoad']);
// close window only if no errors AND something added
if ($failed || !$success)
{
if (!$msg) $msg = $failed ? lang('%1 contact(s) %2, %3 failed because of insufficent rights !!!',$success,$action_msg,$failed) :
lang('%1 contact(s) %2',$success,$action_msg);
$response->addScript("alert('".addslashes($msg)."')");
// reset the filter
$response->addScript("document.getElementById('exec[nm][filter2]').value='';");
}
else
{
$response->addScript('window.close();');
}
return $response->getXML();
}
/**
* apply an action to multiple contacts
*
@ -384,7 +422,7 @@ class uicontacts extends bocontacts
* @param int &$success number of succeded actions
* @param int &$failed number of failed actions (not enought permissions)
* @param string &$action_msg translated verb for the actions, to be used in a message like %1 contacts 'deleted'
* @param string $session_name 'index' or 'email' depending if we are in the main list or the popup
* @param string/array $session_name 'index' or 'email', or array with session-data depending if we are in the main list or the popup
* @return boolean true if all actions succeded, false otherwise
*/
function action($action,$checked,$use_all,&$success,&$failed,&$action_msg,$session_name,&$msg)
@ -395,7 +433,7 @@ class uicontacts extends bocontacts
if ($use_all || in_array($action,array('remove_from_list','delete_list')))
{
// get the whole selection
$query = $GLOBALS['egw']->session->appsession($session_name,'addressbook');
$query = is_array($session_name) ? $session_name : $GLOBALS['egw']->session->appsession($session_name,'addressbook');
if ($use_all)
{
@ -1519,7 +1557,6 @@ $readonlys['button[vcard]'] = true;
}
$GLOBALS['egw_info']['flags']['include_xajax'] = true;
$GLOBALS['egw_info']['flags']['java_script'] .= $this->js();
$GLOBALS['egw_info']['flags']['java_script'] .= "<script>window.focus()</script>";
$GLOBALS['egw_info']['etemplate']['advanced_search'] = true;
@ -1681,6 +1718,11 @@ $readonlys['button[vcard]'] = true;
xajax_doXMLHTTP("addressbook.uicontacts.ajax_setFileasOptions",prefix,given,middle,family,suffix,org);
}
function add_whole_list(list)
{
xajax_doXMLHTTP("addressbook.uicontacts.ajax_add_whole_list",list);
}
function setOptions(options_str)
{
var options = options_str.split("\\\\b");
@ -1711,7 +1753,7 @@ $readonlys['button[vcard]'] = true;
if (name)
{
document.location.href = "'.$GLOBALS['egw']->link('/index.php',array(
'menuaction'=>'addressbook.uicontacts.index',
'menuaction'=>$_GET['menuaction'],//'addressbook.uicontacts.index',
'add_list'=>'',
)).'"+encodeURIComponent(name)+"&owner="+owner;
}

File diff suppressed because one or more lines are too long

View File

@ -16,6 +16,7 @@ add a contact to this organisation addressbook de Einen Kontakt zu dieser Organi
add a new contact addressbook de Neuen Kontakt anlegen
add a new list addressbook de Neuen Verteiler hinzufügen
add a single entry by passing the fields. addressbook de Hinzufügen eines einzelnen Eintrags durch Übergeben der Felder.
add business email of whole distribution list? addressbook de E-Mail geschäftl. der kompletten Liste hinzufügen?
add custom field addressbook de Benutzerdefiniertes Feld hinzufügen
add to distribution list: addressbook de Hinzufügen zu Verteiler:
added by synchronisation addressbook de Hinzugefügt über die Synchronisation

View File

@ -16,6 +16,7 @@ add a contact to this organisation addressbook en Add a contact to this organisa
add a new contact addressbook en Add a new contact
add a new list addressbook en Add a new list
add a single entry by passing the fields. addressbook en Add a single entry by passing the fields.
add business email of whole distribution list? addressbook en Add business email of whole distribution list?
add custom field addressbook en Add Custom Field
add to distribution list: addressbook en Add to distribution list:
added by synchronisation addressbook en added by synchronisation
@ -196,6 +197,7 @@ link title for contacts show addressbook en Link title for contacts show
links addressbook en Links
list all categories addressbook en List all categories
list all customfields addressbook en List all customfields
list already exists! addressbook en List already exists!
list created addressbook en List created
list creation failed, no rights! addressbook en List creation failed, no rights!
load vcard addressbook en Load VCard

View File

@ -6,10 +6,14 @@
<menupopup rows="1" cols="1" id="org_view" no_lang="1" statustext="Select a view" onchange="1" options="All contacts"/>
</menulist>
</template>
<template id="addressbook.index.right" template="" lang="" group="0" version="1.3.001">
<menulist>
<menupopup label="Type" id="col_filter[tid]" statustext="Select addressbook type" onchange="1"/>
</menulist>
<template id="addressbook.index.right_add" template="" lang="" group="0" version="1.3.005">
<hbox>
<buttononly id="search" label="Advanced search" onclick="window.open(egw::link('/index.php','menuaction=addressbook.uicontacts.search'),'_blank','dependent=yes,width=850,height=440,scrollbars=yes,status=yes'); return false;"/>
<buttononly id="add" label="Add" statustext="Add a new contact" onclick="window.open(egw::link('/index.php','menuaction=addressbook.uicontacts.edit'),'_blank','dependent=yes,width=850,height=440,scrollbars=yes,status=yes'); return false;" class="rightPadAdd"/>
</hbox>
<styles>
.rightPadAdd { padding-right: 40px; }
</styles>
</template>
<template id="addressbook.index.rows" template="" lang="" group="0" version="1.3.002">
<grid width="100%">
@ -185,7 +189,7 @@
</row>
<row disabled="1">
<template id="addressbook.index.left"/>
<template align="right" id="addressbook.index.right"/>
<template align="right" id="addressbook.index.right_add"/>
</row>
<row>
<nextmatch options="addressbook.index.rows" id="nm" span="all"/>

View File

@ -105,7 +105,7 @@
);
$this->IMAPServerType = array(
'1' => array(
/* '1' => array(
'fieldNames' => array(
'imapServer',
'imapPort',
@ -118,7 +118,7 @@
'description' => 'standard POP3 server',
'protocol' => 'pop3',
'classname' => 'defaultpop'
),
),*/
'2' => array(
'fieldNames' => array(
'imapServer',
@ -578,7 +578,7 @@
'imapPort' => 993,
'imapTLSEncryption' => 'yes',
),
'pop3' => array(
/* 'pop3' => array(
'imapType' => 1,
'imapPort' => 110,
'imapTLSEncryption' => 0,
@ -587,7 +587,7 @@
'imapType' => 1,
'imapPort' => 995,
'imapTLSEncryption' => '1',
),
),*/
),
'mail_login_type' => 'imapLoginType',
'mail_suffix' => 'defaultDomain',

View File

@ -395,7 +395,7 @@
$rows = array(
lang('description'),
lang('smtp server name'),
lang('imap/pop3 server name'),
lang('imap server name'),
lang('application'),
lang('group'),
lang('delete'),
@ -556,7 +556,7 @@
$this->t->set_var('lang_LDAP_server_base_dn',lang('LDAP server accounts DN'));
$this->t->set_var('lang_use_LDAP_defaults',lang('use LDAP defaults'));
$this->t->set_var('lang_LDAP_settings',lang('LDAP settings'));
$this->t->set_var('lang_select_type_of_imap/pop3_server',lang('select type of IMAP/POP3 server'));
$this->t->set_var('lang_select_type_of_imap/pop3_server',lang('select type of IMAP server'));
$this->t->set_var('lang_pop3_server_hostname_or_IP_address',lang('POP3 server hostname or ip address'));
$this->t->set_var('lang_pop3_server_port',lang('POP3 server port'));
$this->t->set_var('lang_imap_server_hostname_or_IP_address',lang('IMAP server hostname or ip address'));

View File

@ -21,6 +21,7 @@ cyrus imap server emailadmin de Cyrus IMAP-Server
cyrus imap server administration emailadmin de Cyrus IMAP-Server Administration
default emailadmin de Vorgabe
deliver extern emailadmin de extern ausliefern
do not validate certificate emailadmin de Zertifikat nicht überprüfen
do you really want to delete this profile emailadmin de Wollen Sie dieses Profil wirklich löschen
domainname emailadmin de Domänenname
edit email settings emailadmin de E-Mail-Einstellungen
@ -30,6 +31,7 @@ email settings common de E-Mail-Konto
emailadmin emailadmin de EMailAdmin
enable cyrus imap server administration emailadmin de Cyrus IMAP-Server Administration aktivieren
enable sieve emailadmin de Sieve aktivieren
encrypted connection emailadmin de verschlüsselte Verbindung
encryption settings emailadmin de Verschlüsselungseinstellungen
enter your default mail domain (from: user@domain) emailadmin de Standard E-Mail-Domain (Von: benutzer@domain)
error connecting to imap server. %s : %s. emailadmin de Fehler beim Verbinden mit dem IMAP Server. %s : %s.
@ -46,6 +48,7 @@ imap server closed the connection. emailadmin de IMAP Server hat die Verbindung
imap server closed the connection. server responded: %s emailadmin de IMAP Server hat die Verbindung beendet. Server Antwort: %s
imap server hostname or ip address emailadmin de IMAP-Server Hostname oder IP-Adresse
imap server logintyp emailadmin de IMAP-Server Loginverfahren
imap server name emailadmin de IMAP-Server Name
imap server port emailadmin de IMAP-Server Port
imap/pop3 server name emailadmin de IMAP/POP3-Server Name
in mbyte emailadmin de in MByte
@ -81,6 +84,7 @@ qmaildotmode emailadmin de qmaildotmode
qouta size in mbyte emailadmin de Quota Größe in MByte
quota settings emailadmin de Quota Einstellungen
remove emailadmin de Entfernen
select type of imap server emailadmin de IMAP-Server Typ auswählen
select type of imap/pop3 server emailadmin de IMAP/POP3-Server Typ auswählen
select type of smtp server emailadmin de SMTP-Server Typ auswählen
server settings emailadmin de Server-Einstellungen

View File

@ -21,6 +21,7 @@ cyrus imap server emailadmin en Cyrus IMAP Server
cyrus imap server administration emailadmin en Cyrus IMAP server administration
default emailadmin en default
deliver extern emailadmin en deliver extern
do not validate certificate emailadmin en do not validate certificate
do you really want to delete this profile emailadmin en Do you really want to delete this Profile
domainname emailadmin en Domainname
edit email settings emailadmin en Edit email settings
@ -30,6 +31,7 @@ email settings common en Email settings
emailadmin emailadmin en EMailAdmin
enable cyrus imap server administration emailadmin en enable Cyrus IMAP server administration
enable sieve emailadmin en Enable Sieve
encrypted connection emailadmin en encrypted connection
encryption settings emailadmin en Encryption settings
enter your default mail domain (from: user@domain) emailadmin en Enter your default mail domain (from: user@domain)
error connecting to imap server. %s : %s. emailadmin en Error connecting to IMAP server. %s : %s.
@ -46,6 +48,7 @@ imap server closed the connection. emailadmin en IMAP server closed the connecti
imap server closed the connection. server responded: %s emailadmin en IMAP Server closed the connection. Server Responded: %s
imap server hostname or ip address emailadmin en IMAP server hostname or ip address
imap server logintyp emailadmin en IMAP server login type
imap server name emailadmin en imap server name
imap server port emailadmin en IMAP server port
imap/pop3 server name emailadmin en IMAP/POP3 server name
in mbyte emailadmin en in MByte
@ -81,6 +84,7 @@ qmaildotmode emailadmin en qmaildotmode
qouta size in mbyte emailadmin en Qouta size in MByte
quota settings emailadmin en Quota settings
remove emailadmin en Remove
select type of imap server emailadmin en select type of IMAP server
select type of imap/pop3 server emailadmin en Select type of IMAP/POP3 server
select type of smtp server emailadmin en Select type of SMTP Server
server settings emailadmin en Server settings

View File

@ -6,7 +6,7 @@
<tr>
<th width="33%" id="tab1" class="activetab" onclick="javascript:tab.display(1);"><a href="#" tabindex="1" accesskey="1" onfocus="tab.display(1);" onclick="tab.display(1); return(false);">Global</a></th>
<th width="33%" id="tab2" class="activetab" onclick="javascript:tab.display(2);"><a href="#" tabindex="2" accesskey="2" onfocus="tab.display(2);" onclick="tab.display(2); return(false);">SMTP</a></th>
<th width="33%" id="tab3" class="activetab" onclick="javascript:tab.display(3);"><a href="#" tabindex="3" accesskey="3" onfocus="tab.display(3);" onclick="tab.display(3); return(false);">POP3/IMAP</a></th>
<th width="33%" id="tab3" class="activetab" onclick="javascript:tab.display(3);"><a href="#" tabindex="3" accesskey="3" onfocus="tab.display(3);" onclick="tab.display(3); return(false);">IMAP</a></th>
<!-- <th id="tab4" class="activetab" onclick="javascript:tab.display(4);"><a href="#" tabindex="4" accesskey="4" onfocus="tab.display(4);" onclick="tab.display(4); return(false);">extern</a></th> -->
</tr>
</table>

View File

@ -10,7 +10,7 @@
* @version $Id$
*/
/**
/**
* AJAX Select Widget
*
* Using AJAX, this widget allows a type-ahead find similar to a ComboBox, where as the user enters information,
@ -25,10 +25,13 @@
{
var $public_functions = array(
'pre_process' => True,
'post_process' => True
'post_process' => True,
'ajax_search' => True,
);
var $human_name = 'AJAX Select'; // this is the name for the editor
private $debug = false;
function ajax_select_widget($ui='')
{
@ -59,7 +62,21 @@
*/
function pre_process($name,&$value,&$cell,&$readonlys,&$extension_data,&$tmpl)
{
//echo "<p>ajax_select_widget::pre_process('$name',$value," . print_r($cell, true) . "," . print_r($extension_data, true) . ")</p>\n";
if($this->debug) {
echo __METHOD__ . '<br />';
printf("Name:%20s<br />", $name);
echo 'Value:';
_debug_array($value);
echo 'Cell:';
_debug_array($cell);
echo 'Readonlys:';
_debug_array($readonlys);
echo 'Extension_data:';
_debug_array($extension_data);
}
// Get Options
if(!is_array($cell['size'])) {
@ -69,7 +86,9 @@
$options['id_field'],
$options['template'],
$options['filter'],
$options['filter2']
$options['filter2'],
$options['link'],
$options['icon']
) = explode(',', $cell['size']);
} else {
$options = $cell['size'];
@ -128,6 +147,21 @@
$widget =& new etemplate('etemplate.ajax_select_widget');
$widget->no_onclick = True;
// Link if readonly & link is set
$search =& $widget->get_widget_by_name('search');
if(($cell['readonly'] || $readonlys['search']) && $options['link']) {
$search['type'] = 'label';
$search['no_lang'] = 1;
$search['size'] = ',' . $options['link'];
} else {
$search['type'] = 'text';
$search['size'] = '';
}
// Icon
$icon =& $widget->get_widget_by_path('/0/1A');
$icon['name'] = $options['icon'];
$cell['obj'] = &$widget;
// Save options for post_processing
@ -173,27 +207,29 @@
if($count == 1) {
$value = $results[0][$extension_data['id_field']];
echo 'Match found';
return true;
} else {
} elseif ($count > 1) {
$GLOBALS['egw_info']['etemplate']['validation_errors'][$name] = lang("More than 1 match for '%1'",$value_in['search']);
$loop = true;
return false;
} else {
$value = $value_in['search'];
return true;
}
}
}
} elseif (!$value_in['value'] && !$value_in['search']) {
$value = null;
$loop = $extension_data['required'];
$loop = $GLOBALS['egw_info']['etemplate']['loop'] || $extension_data['required'];
return !$extension_data['required'];
} else {
$value = $value_in['value'];
$loop = false;
$loop = $GLOBALS['egw_info']['etemplate']['loop'] || false;
return true;
}
}
function change($id, $value, $set_id, $query) {
function ajax_search($id, $value, $set_id, $query) {
$base_id = substr($id, 0, strrpos($id, '['));
$result_id = ($set_id ? $set_id : $base_id . '[results]');
$response = new xajaxResponse();
@ -233,8 +269,7 @@
if(!$query['template'] || $query['template'] == 'etemplate.ajax_select_widget.row') {
$query['template'] = 'etemplate.ajax_select_widget.row';
}
foreach($result_list as $key => $nul) {
$row =& $result_list[$key]; // $key => &$row is php5!
foreach($result_list as $key => &$row) {
if(!is_array($row)) {
continue;
}

View File

@ -209,7 +209,7 @@
}
if (!isset($value['cat_app'])) $value['cat_app'] = $app; // if no cat_app set, use the app from the get_rows func
$max = $GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'];
$max = (int)$GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'];
$row_options = array();
foreach(array(5,12,25,50,100,200,500,999) as $n)
{
@ -226,7 +226,7 @@
if (!isset($value['num_rows'])) $value['num_rows'] = $max;
if ($value['num_rows'] != $max)
{
$GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'] = $max = $value['num_rows'];
$GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'] = $max = (int)$value['num_rows'];
}
if (!$value['no_columnselection'])
{
@ -590,7 +590,8 @@
{
$loop = true; // num_rows changed
}
$max = $value['num_rows'] ? $value['num_rows'] : $GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'];
$value['num_rows'] = (int) $value['num_rows'];
$max = $value['num_rows'] ? $value['num_rows'] : (int)$GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'];
if(strpos($value['search'],'xjxquery')) {

View File

@ -311,7 +311,7 @@
$GLOBALS['egw']->xslttpl->set_var('phpgw',array('body_data' => $html));
}
}
$this->save_appsession($this->as_array(2) + array(
$this->save_appsession($sess = $this->as_array(2) + array(
'readonlys' => $readonlys,
'content' => $content,
'changes' => $changes,
@ -322,6 +322,7 @@
'java_script' => $GLOBALS['egw_info']['etemplate']['java_script'],
'java_script_from_flags' => $GLOBALS['egw_info']['flags']['java_script'],
'java_script_body_tags' => $GLOBALS['egw']->js->body,
'include_xajax' => $GLOBALS['egw_info']['flags']['include_xajax'],
'dom_enabled' => $GLOBALS['egw_info']['etemplate']['dom_enabled'],
'hooked' => $hooked != '' ? $hooked : $GLOBALS['egw_info']['etemplate']['hook_content'],
'hook_app' => $hooked ? $GLOBALS['egw_info']['flags']['currentapp'] : $GLOBALS['egw_info']['etemplate']['hook_app'],
@ -332,7 +333,27 @@
'method' => $method,
'name_vars' => $this->name_vars,
),$id);
/*
echo "<p><b>total size session data = ".($total=strlen(serialize($sess)))."</b></p>\n";
echo "<p>shares bigger then 1.0% percent of it:</p>\n";
foreach($sess as $key => $val)
{
$len = strlen(is_array($val) ? serialize($val) : $val);
$len .= ' ('.sprintf('%2.1lf',($percent = 100.0 * $len / $total)).'%)';
if ($percent < 1.0) continue;
echo "<p><b>$key</b>: strlen(\$val)=$len</p>\n";
if (is_array($val) && $len > 2000)
{
foreach($val as $k => $v)
{
$l = strlen(is_array($v) ? serialize($v) : $v);
$l .= ' ('.sprintf('%2.1lf',($p = 100.0 * $l / $total)).'%)';
if ($p < 1.0) continue;
echo "<p>&nbsp;- {$key}[$k]: strlen(\$v)=$l</p>\n";
}
}
}
*/
if ($this->sitemgr || (int) $output_mode == 1 || (int) $output_mode == -1) // return html
{
return $html;
@ -441,6 +462,8 @@
$GLOBALS['egw']->xslttpl->set_var('phpgw',array('body_data' => $session_data['hooked']));
}
}
if($session_data['include_xajax']) $GLOBALS['egw_info']['flags']['include_xajax'] = true;
if (!empty($session_data['app_header']))
{
$GLOBALS['egw_info']['flags']['app_header'] = $session_data['app_header'];

View File

@ -4,15 +4,15 @@
* Javascript file for AJAX select widget
*
* @author Nathan Gray <nathangray@sourceforge.net>
*
*
* @param widget_id the id of the ajax_select_widget
* @param onchange function to call if the value of the select widget is changed
* @param options the query object containing callback and settings
*
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package etemplate
* @subpackage extensions
* @link http://www.egroupware.org
*
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package etemplate
* @subpackage extensions
* @link http://www.egroupware.org
*
* @version $Id$
*/
@ -44,8 +44,7 @@ function ajax_select_widget_setup(widget_id, onchange, options) {
var widget = document.getElementById(widget_id + '[search]');
if(widget) {
widget.form.disableautocomplete = true;
widget.form.autocomplete = 'off';
widget.setAttribute('autocomplete', 'off');
if(widget.addEventListener) {
widget.addEventListener('keyup', change, true);
@ -118,7 +117,7 @@ function change(e, value) {
selects[i].style.visibility = 'hidden';
}
}
xajax_doXMLHTTP("etemplate.ajax_select_widget.change", id, value, set_id, query);
xajax_doXMLHTTP("etemplate.ajax_select_widget.ajax_search.etemplate", id, value, set_id, query);
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,18 @@
<?xml version="1.0"?>
<!-- $Id$ -->
<overlay>
<template id="etemplate.ajax_select_widget.row" template="" lang="" group="0" version="">
<grid>
<columns>
<column/>
<column/>
</columns>
<rows>
<row>
<description no_lang="1" id="id_field"/>
<description no_lang="1" id="title"/>
</row>
</rows>
</grid>
</template>
</overlay>

View File

@ -0,0 +1,31 @@
<?xml version="1.0"?>
<!-- $Id$ -->
<overlay>
<template id="etemplate.ajax_select_widget" template="" lang="" group="0" version="">
<grid>
<columns>
<column/>
<column/>
</columns>
<rows>
<row>
<textbox id="search"/>
<textbox id="value" class="select_value"/>
</row>
</rows>
</grid>
<styles>
.select_value {
display: none;
}
.resultBox {
background-color: white;
}
.resultBox div:hover {
background-color: #D3DCE3;
}
</styles>
</template>
</overlay>

View File

@ -88,4 +88,14 @@
}
.tab_body {
border: black solid 2px;
}
.nextmatch_header {
border: 1px solid black;
}
.nextmatch_header select {
width: 140px;
}
.nm_num_rows select {
width: 40px;
}

View File

@ -2,7 +2,7 @@
<!-- $Id$ -->
<overlay>
<template id="etemplate.nextmatch_widget.nm_row" template="" lang="" group="0" version="1.3.002">
<grid width="100%" spacing="0" padding="5">
<grid width="100%" spacing="0" padding="3">
<columns>
<column width="1%"/>
<column width="1%"/>
@ -21,17 +21,17 @@
<button image="first.gif" ro_image="first-grey.gif" label="First" id="first" statustext="go to the first entry"/>
<button image="left.gif" ro_image="left-grey.gif" label="Left" id="left" statustext="go to the previous page of entries"/>
<menulist>
<menupopup type="select-cat" options="-1,,,$cont[cat_app]" label="Category" id="cat_id" onchange="1" statustext="select a Category"/>
<menupopup type="select-cat" options="-1,,,$cont[cat_app]" label="Category" id="cat_id" onchange="1" statustext="select a Category" align="center"/>
</menulist>
<menulist>
<menupopup label="@filter_label" align="center" id="filter" onchange="@filter_onchange" statustext="@filter_help"/>
</menulist>
<menulist>
<menupopup label="@filter2_label" align="right" id="filter2" onchange="@filter2_onchange" statustext="@filter2_help"/>
<menupopup label="@filter2_label" align="center" id="filter2" onchange="@filter2_onchange" statustext="@filter2_help"/>
</menulist>
<textbox align="right" id="search" onchange="1" statustext="a pattern to be searched for"/>
<textbox align="right" id="search" onchange="1" statustext="a pattern to be searched for" size="12"/>
<button label="Search" id="start_search" statustext="to start the search"/>
<menulist>
<menulist class="nm_num_rows">
<menupopup id="num_rows" no_lang="1" onchange="1" statustext="How many entries should the list show"/>
</menulist>
<button image="right.gif" ro_image="right-grey.gif" label="Right" id="right" statustext="go to the next page of entries"/>
@ -51,9 +51,6 @@
</row>
</rows>
</grid>
<styles>
.thinBorder { border: 1px solid black; }
</styles>
</template>
<template id="etemplate.nextmatch_widget" template="" lang="" group="0" version="1.3.001">
<grid width="100%">

View File

@ -39,18 +39,19 @@ function emptyTrash() {
}
function onNodeSelect(_nodeID) {
if(document.getElementsByName("folderAction")[0].value == "moveMessage") {
resetMessageSelect();
formData = xajax.getFormValues('formMessageList');
setStatusMessage(movingMessages +' <span style="font-weight: bold;">'+ tree.getUserData(_nodeID, 'folderName') +'</span>');
document.getElementById('divMessageList').innerHTML = '';
xajax_doXMLHTTP("felamimail.ajaxfelamimail.moveMessages", _nodeID, formData);
} else {
resetMessageSelect();
setStatusMessage('<span style="font-weight: bold;">' + lang_loading + ' ' + tree.getUserData(_nodeID, 'folderName') + '</span>');
document.getElementById('divMessageList').innerHTML = '';
xajax_doXMLHTTP("felamimail.ajaxfelamimail.updateMessageView",_nodeID);
if(tree.getUserData(_nodeID, 'folderName')) {
if(document.getElementsByName("folderAction")[0].value == "moveMessage") {
resetMessageSelect();
formData = xajax.getFormValues('formMessageList');
setStatusMessage(movingMessages +' <span style="font-weight: bold;">'+ tree.getUserData(_nodeID, 'folderName') +'</span>');
document.getElementById('divMessageList').innerHTML = '';
xajax_doXMLHTTP("felamimail.ajaxfelamimail.moveMessages", _nodeID, formData);
} else {
resetMessageSelect();
setStatusMessage('<span style="font-weight: bold;">' + lang_loading + ' ' + tree.getUserData(_nodeID, 'folderName') + '</span>');
document.getElementById('divMessageList').innerHTML = '';
xajax_doXMLHTTP("felamimail.ajaxfelamimail.updateMessageView",_nodeID);
}
}
}

View File

@ -1108,7 +1108,7 @@
// access includes ties in result
if ($isaccess) {
$sql = preg_replace(
'/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.$nrows.' ',$sql);
'/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.(int)$nrows.' ',$sql);
if ($secs2cache>0) {
$ret =& $this->CacheExecute($secs2cache, $sql,$inputarr);
@ -1118,10 +1118,10 @@
return $ret; // PHP5 fix
} else if ($ismssql){
$sql = preg_replace(
'/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.$nrows.' ',$sql);
'/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.(int)$nrows.' ',$sql);
} else {
$sql = preg_replace(
'/(^\s*select\s)/i','\\1 '.$this->hasTop.' '.$nrows.' ',$sql);
'/(^\s*select\s)/i','\\1 '.$this->hasTop.' '.(int)$nrows.' ',$sql);
}
} else {
$nn = $nrows + $offset;
@ -1151,7 +1151,7 @@
}
$ADODB_COUNTRECS = $savec;
if ($rs && !$rs->EOF) {
$rs =& $this->_rs2rs($rs,$nrows,$offset);
$rs =& $this->_rs2rs($rs,(int)$nrows,(int)$offset);
}
//print_r($rs);
return $rs;
@ -3874,4 +3874,4 @@
}
} // defined
?>
?>

View File

@ -469,10 +469,11 @@ class ADODB_mysql extends ADOConnection {
// parameters use PostgreSQL convention, not MySQL
function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs=0)
{
$offsetStr =($offset>=0) ? "$offset," : '';
// jason judge, see http://phplens.com/lens/lensforum/msgs.php?id=9220
if ($nrows < 0) $nrows = '18446744073709551615';
$offsetStr = (($offset>=0) ? (int)$offset.',' : '').(int)$nrows;
//if the sql ends by a 'for update' it should be AFTER the LIMIT
$FORUPDATE = '';
//with PHP5 we could have used stripos and str_ireplace
@ -485,9 +486,9 @@ class ADODB_mysql extends ADOConnection {
}
if ($secs)
$rs =& $this->CacheExecute($secs,$sql." LIMIT $offsetStr$nrows $FORUPDATE",$inputarr);
$rs =& $this->CacheExecute($secs,$sql.' LIMIT '.$offsetStr.' '.$FORUPDATE,$inputarr);
else
$rs =& $this->Execute($sql." LIMIT $offsetStr$nrows $FORUPDATE",$inputarr);
$rs =& $this->Execute($sql.' LIMIT '.$offsetStr.' '.$FORUPDATE,$inputarr);
return $rs;
}

View File

@ -35,12 +35,12 @@ class ADODB_postgres7 extends ADODB_postgres64 {
// which makes obsolete the LIMIT limit,offset syntax
function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0)
{
$offsetStr = ($offset >= 0) ? " OFFSET $offset" : '';
$limitStr = ($nrows >= 0) ? " LIMIT $nrows" : '';
$offsetStr = ($offset >= 0) ? ' OFFSET '.(int)$offset : '';
$limitStr = ($nrows >= 0) ? ' LIMIT '.(int)$nrows : '';
if ($secs2cache)
$rs =& $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr);
$rs =& $this->CacheExecute($secs2cache,$sql.$limitStr.$offsetStr,$inputarr);
else
$rs =& $this->Execute($sql."$limitStr$offsetStr",$inputarr);
$rs =& $this->Execute($sql.$limitStr.$offsetStr,$inputarr);
return $rs;
}

View File

@ -1,92 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - API htmlarea translations (according to lang in user prefs) *
* http://www.eGroupWare.org *
* Modified by Ralf Becker <RalfBecker@outdoor-training.de> *
* This file is derived from htmlareas's lang/en.js file *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
$GLOBALS['egw_info']['flags'] = Array(
'currentapp' => 'home', // can't be phpgwapi, nor htmlarea (no own directory)
'noheader' => True,
'nonavbar' => True,
'noappheader' => True,
'noappfooter' => True,
'nofooter' => True,
'nocachecontrol' => True // allow cacheing
);
include('../../header.inc.php');
header('Content-type: text/javascript; charset='.$GLOBALS['egw']->translation->charset());
$GLOBALS['egw']->translation->add_app('htmlarea');
// I18N constants
// LANG: "en", ENCODING: UTF-8 | ISO-8859-1
// Author: Mihai Bazon, <mishoo@infoiasi.ro>
// FOR TRANSLATORS:
//
// 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE
// (at least a valid email address)
//
// 2. PLEASE TRY TO USE UTF-8 FOR ENCODING;
// (if this is not possible, please include a comment
// that states what encoding is necessary.)
?>
HTMLArea.I18N = {
// the following should be the filename without .js extension
// it will be used for automatically load plugin language.
lang: "<?php echo $GLOBALS['egw_info']['user']['preferences']['common']['lang']; ?>",
tooltips: {
bold: "<?php echo lang('Bold'); ?>",
italic: "<?php echo lang('Italic'); ?>",
underline: "<?php echo lang('Underline'); ?>",
strikethrough: "<?php echo lang('Strikethrough'); ?>",
subscript: "<?php echo lang('Subscript'); ?>",
superscript: "<?php echo lang('Superscript'); ?>",
justifyleft: "<?php echo lang('Justify Left'); ?>",
justifycenter: "<?php echo lang('Justify Center'); ?>",
justifyright: "<?php echo lang('Justify Right'); ?>",
justifyfull: "<?php echo lang('Justify Full'); ?>",
insertorderedlist: "<?php echo lang('Ordered List'); ?>",
insertunorderedlist: "<?php echo lang('Bulleted List'); ?>",
outdent: "<?php echo lang('Decrease Indent'); ?>",
indent: "<?php echo lang('Increase Indent'); ?>",
forecolor: "<?php echo lang('Font Color'); ?>",
hilitecolor: "<?php echo lang('Background Color'); ?>",
inserthorizontalrule: "<?php echo lang('Horizontal Rule'); ?>",
createlink: "<?php echo lang('Insert Web Link'); ?>",
insertimage: "<?php echo lang('Insert Image'); ?>",
inserttable: "<?php echo lang('Insert Table'); ?>",
htmlmode: "<?php echo lang('Toggle HTML Source'); ?>",
popupeditor: "<?php echo lang('Enlarge Editor'); ?>",
about: "<?php echo lang('About this editor'); ?>",
showhelp: "<?php echo lang('Help using editor'); ?>",
textindicator: "<?php echo lang('Current style'); ?>",
undo: "<?php echo lang('Undoes your last action'); ?>",
redo: "<?php echo lang('Redoes your last action'); ?>",
cut: "<?php echo lang('Cut selection'); ?>",
copy: "<?php echo lang('Copy selection'); ?>",
paste: "<?php echo lang('Paste from clipboard'); ?>"
},
buttons: {
"ok": "<?php echo lang('OK'); ?>",
"cancel": "<?php echo lang('Cancel'); ?>"
},
msg: {
"Path": "<?php echo lang('Path'); ?>",
"TEXT_MODE": "<?php echo lang('You are in TEXT MODE. Use the [<>] button to switch back to WYSIWIG.'); ?>"
}
};

View File

@ -132,9 +132,7 @@
<td>
<select name="newsettings[mail_server_type]">
<option value="imap" {selected_mail_server_type_imap}>IMAP</option>
<option value="pop3" {selected_mail_server_type_pop3}>POP-3</option>
<option value="imaps" {selected_mail_server_type_imaps}>IMAPS</option>
<option value="pop3s" {selected_mail_server_type_pop3s}>POP-3S</option>
</select>
</td>
</tr>