Branch '2.3-stable' - kolab-webclient/horde kolab-webclient/imp release-notes.txt

Gunnar Wrobel wrobel at kolabsys.com
Wed Aug 31 06:51:28 CEST 2011


 kolab-webclient/horde/ChangeLog                                          |    6 
 kolab-webclient/horde/configuration/horde-3.3.11/10-kolab_prefs_base.php |    4 
 kolab-webclient/horde/horde.spec                                         |    2 
 kolab-webclient/horde/package.patch                                      |  146 ++
 kolab-webclient/imp/package.patch                                        |  707 ++++++++++
 release-notes.txt                                                        |    1 
 6 files changed, 863 insertions(+), 3 deletions(-)

New commits:
commit a4b964a162e1206ce260fd5a22543503ad5dd9eb
Author: Gunnar Wrobel <p at rdus.de>
Date:   Wed Aug 31 04:51:19 2011 +0000

    kolab/issue4745 (Horde preferences woes in Kolab 2.3.x)

diff --git a/kolab-webclient/horde/ChangeLog b/kolab-webclient/horde/ChangeLog
index b57c65c..93a59af 100644
--- a/kolab-webclient/horde/ChangeLog
+++ b/kolab-webclient/horde/ChangeLog
@@ -1,3 +1,9 @@
+2011-08-31  Gunnar Wrobel  <p at rdus.de>
+
+	* configuration/horde-3.3.11/10-kolab_prefs_base.php:
+
+	kolab/issue4745 (Horde preferences woes in Kolab 2.3.x)
+
 2011-08-24  Gunnar Wrobel  <p at rdus.de>
 
 	* configuration/horde-3.3.11/conf.php:
diff --git a/kolab-webclient/horde/configuration/horde-3.3.11/10-kolab_prefs_base.php b/kolab-webclient/horde/configuration/horde-3.3.11/10-kolab_prefs_base.php
index ddbd9d3..5dd0d4c 100644
--- a/kolab-webclient/horde/configuration/horde-3.3.11/10-kolab_prefs_base.php
+++ b/kolab-webclient/horde/configuration/horde-3.3.11/10-kolab_prefs_base.php
@@ -27,7 +27,7 @@ $_prefs['date_input_format'] = array(
 // horde/config/hooks.php.
 $_prefs['fullname'] = array(
     'value' => '',
-    'locked' => false,
+    'locked' => true,
     'shared' => true,
     'hook' => true,
     'type' => 'text',
@@ -39,7 +39,7 @@ $_prefs['fullname'] = array(
 // horde/config/hooks.php.
 $_prefs['from_addr'] = array(
     'value' => '',
-    'locked' => false,
+    'locked' => true,
     'shared' => true,
     'hook' => true,
     'type' => 'text',
diff --git a/kolab-webclient/horde/horde.spec b/kolab-webclient/horde/horde.spec
index bb56e0b..d6a6246 100644
--- a/kolab-webclient/horde/horde.spec
+++ b/kolab-webclient/horde/horde.spec
@@ -1,7 +1,7 @@
 # Macros
 %define         V_package horde
 %define         V_version 3.3.11
-%define         V_release 20110824
+%define         V_release 20110831
 
 # Package Information
 Name:		%{V_package}
diff --git a/kolab-webclient/horde/package.patch b/kolab-webclient/horde/package.patch
new file mode 100644
index 0000000..ee0b5cd
--- /dev/null
+++ b/kolab-webclient/horde/package.patch
@@ -0,0 +1,146 @@
+From: Gunnar Wrobel <p at rdus.de>
+Subject: [PATCH] t/horde/HK/GW/ZpushAnnotations
+
+Allows to modify the Zpush configuration.
+
+Signed-off-by: Gunnar Wrobel <p at rdus.de>
+
+diff -Naur a/config/prefs.php b/config/prefs.php
+--- a/config/prefs.php.dist	2010-05-04 22:00:29.938760839 +0200
++++ b/config/prefs.php.dist	2010-05-04 22:02:27.177573941 +0200
+@@ -165,6 +165,14 @@
+     'members' => array()
+ );
+ 
++$prefGroups['activesync'] = array(
++    'column' => _("Other Information"),
++    'label' => _("ActiveSync"),
++    'desc' => _("Configuration for syncing with PDAs, Smartphones and Outlook."),
++    'url' => 'services/portal/activesync.php',
++    'members' => array()
++);
++
+ // Personal Information preferences
+ 
+ // default identity
+diff -Naur a/services/portal/activesync.php b/services/portal/activesync.php
+--- a/services/portal/activesync.php	1970-01-01 01:00:00.000000000 +0100
++++ b/services/portal/activesync.php	2010-05-06 06:52:58.250251515 +0200
+@@ -0,0 +1,72 @@
++<?php
++/**
++ * $Horde: horde/services/portal/syncml.php,v 1.3.2.15 2009-01-06 15:27:33 jan Exp $
++ *
++ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
++ *
++ * See the enclosed file COPYING for license information (LGPL). If you
++ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
++ *
++ * @author Karsten Fourmont <karsten at horde.org>
++ */
++
++require_once dirname(__FILE__) . '/../../lib/base.php';
++
++if (!Auth::isAuthenticated()) {
++    Horde::authenticationFailureRedirect();
++}
++
++require_once 'Horde/Kolab/Storage.php';
++$folder = Kolab_Storage::getFolder('INBOX');
++$result = $folder->getActiveSync();
++$devices = isset($result['DEVICE']) ? $result['DEVICE'] : null;
++
++$actionID = Util::getFormData('actionID');
++switch ($actionID) {
++case 'save':
++    if (Util::getFormData('delete')) {
++        $deviceids = array_keys(Util::getFormData('delete'));
++        $deviceid = $deviceids[0];
++        $result = $folder->deleteActiveSyncDevice($deviceid);
++        if (is_a($result, 'PEAR_Error')) {
++            $notification->push(_("Error deleting device:")
++                                . ' ' . $result->getMessage(),
++                                'horde.error');
++        } else {
++            $notification->push(sprintf(_("Deleted ActiveSync device \"%s\"."),
++                                        $deviceid),
++                                'horde.success');
++            unset($devices[$deviceid]);
++        }
++    } else {
++        $modes = Util::getFormData('mode_select', array());
++        foreach ($modes as $deviceid => $mode) {
++            $devices[$deviceid]['MODE'] = $mode;
++        }
++        $data = array('DEVICE' => $devices);
++        $result = $folder->setActiveSyncDeviceData($data, 'DEVICE');
++        if (is_a($result, 'PEAR_Error')) {
++            $notification->push(_("Error storing synchronization modes:")
++                                . ' ' . $result->getMessage(),
++                                'horde.error');
++        } else {
++            $notification->push(_("Synchronization modes stored successfully."),
++                                'horde.success');
++        }
++    }
++}
++
++/* Show the header. */
++require_once 'Horde/Prefs/UI.php';
++$result = Horde::loadConfiguration('prefs.php', array('prefGroups', '_prefs'), 'horde');
++if (!is_a($result, 'PEAR_Error')) {
++    extract($result);
++}
++$app = 'horde';
++$chunk = Util::nonInputVar('chunk');
++Prefs_UI::generateHeader('activesync', $chunk);
++
++require HORDE_TEMPLATES . '/activesync/activesync.inc';
++if (!$chunk) {
++    require HORDE_TEMPLATES . '/common-footer.inc';
++}
+diff -Naur a/templates/activesync/activesync.inc b/templates/activesync/activesync.inc
+--- a/templates/activesync/activesync.inc	1970-01-01 01:00:00.000000000 +0100
++++ b/templates/activesync/activesync.inc	2010-05-05 06:08:23.358849561 +0200
+@@ -0,0 +1,41 @@
++<div class="smallheader">
++ <?php echo _("Known ActiveSync synchronisation devices") ?>
++</div>
++<?php if (!$devices): ?>
++<em><?php echo _("None") ?></em>
++<?php else: ?>
++<table class="striped">
++<tr>
++ <th><?php echo _("Device") ?></th>
++ <th><?php echo _("Type") ?></th>
++ <th><?php echo _("Mode") ?></th>
++</tr>
++<?php
++foreach ($devices as $device => $data) {
++?>
++<tr>
++ <td><?php echo htmlspecialchars($device) ?></td>
++ <td><?php echo htmlspecialchars($data['TYPE']) ?></td>
++ <td>
++   <select id="mode_select[<?php echo $device; ?>]" name="mode_select[<?php echo $device; ?>]">
++     <option value=""><?php echo _("Select the device mode:"); ?></option>
++     <option value="-1" <?php echo ($data['MODE'] === null || $data['MODE'] === '-1') ? 'selected="selected"' : ''; ?>>Default</option>
++     <option value="0" <?php echo ($data['MODE'] === '0') ? 'selected="selected"' : ''; ?>>Flat mode</option>
++     <option value="1" <?php echo ($data['MODE'] === '1') ? 'selected="selected"' : ''; ?>>Folder mode</option>
++   </select>
++ </td>
++ <td>
++   <input type="submit" class="button" value="<?php echo _("Delete") ?>" name="delete[<?php echo htmlspecialchars($device) ?>]"/>
++ </td>
++</tr>
++<?php } ?>
++</table>
++<?php endif; ?>
++<p>
++ <input type="hidden" name="actionID" value="save" />
++ <input type="submit" class="button" value="<?php echo _("Store device modes") ?>" />
++ <input id="prefs_return" type="button" class="button" onclick="cancelSubmit=true;document.location.href='<?php echo Horde::applicationUrl(Util::addParameter('services/prefs.php', 'app', 'horde'), true) ?>'" value="<?php echo _("Return to Options") ?>" />
++</p>
++
++</div>
++</form>
diff --git a/kolab-webclient/imp/package.patch b/kolab-webclient/imp/package.patch
new file mode 100644
index 0000000..39b5462
--- /dev/null
+++ b/kolab-webclient/imp/package.patch
@@ -0,0 +1,707 @@
+From: Gunnar Wrobel <p at rdus.de>
+Subject: [PATCH] t/imp/HideGroupwareFolders
+
+Hides special Kolab groupware folders.
+
+Signed-off-by: Gunnar Wrobel <p at rdus.de>
+
+---
+ horde-webmail/imp/config/hooks.php.dist |   11 +++++++-
+ 3 files changed, 50 insertions(+), 5 deletions(-)
+
+diff --git a/horde-webmail/imp/config/hooks.php.dist b/horde-webmail/imp/config/hooks.php.dist
+index 98e429e..f690ef5 100644
+--- a/config/hooks.php.dist
++++ b/config/hooks.php.dist
+@@ -590,7 +590,7 @@
+             case 'contact':
+                 return $GLOBALS['registry']->get('webroot', 'turba');
+ 
+-            case 'prefs':
++            case 'h-prefs':
+                 return $GLOBALS['registry']->get('webroot', 'horde') . '/services/prefs.php?app=horde';
+ 
+             default:
+@@ -644,7 +644,7 @@
+                     );
+                     break;
+ 
+-                case 'prefs':
++                case 'h-prefs':
+                     $icons[$name] = array(
+                         'icon' => 'prefs.png',
+                         'icondir' => $GLOBALS['registry']->getImageDir('horde'),
+From: Gunnar Wrobel <p at rdus.de>
+Subject: [PATCH] t/imp/H/GW/DefaultLoginView
+
+Allow to configure the default imp view shown to the user.
+
+STATUS: SUBMIT
+
+Signed-off-by: Gunnar Wrobel <p at rdus.de>
+
+---
+ config/conf.xml |    8 ++++++++
+ login.php       |    3 ++-
+ 2 files changed, 11 insertions(+), 1 deletions(-)
+
+diff --git a/config/conf.xml b/config/conf.xml
+index 517556e..92171b7 100644
+--- a/config/conf.xml
++++ b/config/conf.xml
+@@ -103,6 +103,14 @@
+      </configenum>
+     </case>
+    </configswitch>
++   <configenum name="default_view" desc="Which application view should be the
++   suggested default on the login page?">imp
++    <values>
++     <value desc="IMP">imp</value>
++     <value desc="DIMP">dimp</value>
++     <value desc="MIMP">mimp</value>
++    </values>
++   </configenum>
+   </configsection>
+  </configtab>
+ 
+diff --git a/login.php b/login.php
+index e6cd3c9..4644e93 100644
+--- a/login.php
++++ b/login.php
+@@ -257,7 +257,8 @@ if (!empty($conf['user']['select_view'])) {
+     $apps = $registry->listApps(null, true);
+     $view_cookie = isset($_COOKIE['default_imp_view'])
+         ? $_COOKIE['default_imp_view']
+-        : ($browser->isMobile() && isset($apps['mimp']) ? 'mimp' : 'imp');
++        : ($browser->isMobile() && isset($apps['mimp']) ? 'mimp' 
++           : isset($conf['user']['default_view']) ? $conf['user']['default_view'] : 'imp');
+     if (isset($apps['dimp']) || isset($apps['mimp'])) {
+         $views[] = array('sel' => $view_cookie == 'imp',
+                          'val' => 'imp', 'name' => _("Traditional"));
+-- 
+tg: (3a70f58..) t/imp/H/GW/DefaultLoginView (depends on: t/imp/H/JS/bug7739)
+-- 
+TOPGIT patch commit log
+=======================
+
+commit 580072bc0b627e05bfe3053efbd31b4215019923
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Thu Mar 26 19:22:37 2009 +0000
+
+    Merge change from http://kolab.org/cgi-bin/viewcvs-kolab.cgi/server/patches/horde-webmail/1.2.0/tg/t_imp_H_GW_DefaultLoginView.diff.diff?r1=1.3&r2=1.4
+
+commit e2430d5bafced289bb0b8ac9d073fca9a4e9bb4a
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Sun Mar 8 20:09:33 2009 +0000
+
+    Add the conf.xml part of the new configuration variable.
+
+commit df4a014051b707ab4bf5ded96264c3b4f3b62ac4
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Sun Mar 8 08:14:20 2009 +0000
+
+    Allow to configure the default view for imp.
+From: Gunnar Wrobel <p at rdus.de>
+Subject: [PATCH] t/dimp/H/GW/AclView
+
+Provide a possibility to edit IMAP folder acls within DIMP.
+
+kolab/issue3455 (There is no convenient/dimp-like way in dimp to set folder acls)
+https://www.intevation.de/roundup/kolab/issue3455
+
+[#8060] Additional entry in the folder popup to set IMAP ACLs
+http://bugs.horde.org/ticket/8060
+
+Signed-off-by: Gunnar Wrobel <p at rdus.de>
+
+---
+ acl.php                          |   12 ++++++++++--
+ templates/acl/acl.html           |   13 +++++++++++++
+ 2 files changed, 29 insertions(+), 2 deletions(-)
+
+diff --git a/acl.php b/acl.php
+index cfa285f..851d8de 100644
+--- a/acl.php
++++ b/acl.php
+@@ -162,14 +162,22 @@ if (is_callable(array('Horde', 'loadConfiguration'))) {
+ }
+ $app = 'imp';
+ $chunk = Util::nonInputVar('chunk');
+-Prefs_UI::generateHeader(null, $chunk);
++if ($_SESSION['imp']['default_view'] != 'dimp') {
++    Prefs_UI::generateHeader(null, $chunk);
++} else {
++    require $registry->get('templates', $app) . '/common-header.inc';
++    $GLOBALS['notification']->notify(array('listeners' => 'status'));
++}
+ 
+ /* Set up template. */
+ $t = new IMP_Template();
+ $t->setOption('gettext', true);
+ $t->set('aclurl', Horde::applicationUrl('acl.php'));
+ $t->set('forminput', Util::formInput());
+-$t->set('aclnavcell', Util::bufferOutput(array('Prefs_UI', 'generateNavigationCell'), 'acl'));
++$t->set('imp_view', $_SESSION['imp']['default_view'] != 'dimp');
++if ($_SESSION['imp']['default_view'] != 'dimp') {
++    $t->set('aclnavcell', Util::bufferOutput(array('Prefs_UI', 'generateNavigationCell'), 'acl'));
++}
+ $t->set('changefolder', Horde::link('#', _("Change Folder"), 'smallheader', '', 'ACLFolderChange(true); return false;'));
+ $t->set('sharedimg', Horde::img('shared.png', _("Change Folder")));
+ $t->set('options', IMP::flistSelect('', true, array(), $folder));
+diff --git a/templates/acl/acl.html b/templates/acl/acl.html
+index 79580aa..ae85ff4 100644
+--- a/templates/acl/acl.html
++++ b/templates/acl/acl.html
+@@ -2,11 +2,14 @@
+ <input type="hidden" name="actionID" value="" />
+ <tag:forminput />
+ 
++<if:imp_view>
+ <div class="header">
+  <tag:aclnavcell />
+  <gettext>Share mail folders</gettext>
+ </div>
++</if:imp_view>
+ 
++<if:imp_view>
+ <div class="header">
+  <ul>
+   <li>
+@@ -17,6 +20,12 @@
+  <span class="smallheader"><tag:current /></span>
+ </div>
+ </form>
++<else:imp_view>
++<div class="header">
++ <span class="smallheader"><tag:current /></span>
++</div>
++</else:imp_view>
++</if:imp_view>
+ 
+ <form method="post" name="acl" id="acl" action="<tag:aclurl />">
+ <input type="hidden" name="actionID" value="imp_acl_set" />
+@@ -76,9 +85,13 @@
+ </tr>
+ <tr>
+  <td colspan = "<tag:maxrule />" class="header" valign="middle">
++<if:imp_view>
+   <input type="button" class="button" id="fbutton" name="fbutton" onclick="$('acl').submit(); $('acl').disable();" value="<gettext>Save</gettext>" />
+   <input type="button" class="button" id="resetbut" name="resetbut" onclick="ACLFolderChange(true); return false;" value="<gettext>Reset</gettext>" />
+   <input type="button" class="button" id="back" name="back" onclick="$('acl').disable(); document.location.href='<tag:prefsurl />'" value="<gettext>Return to Options</gettext>" />
++<else:imp_view>
++  <input type="submit" class="button" id="fbutton" name="fbutton" value="<gettext>Save</gettext>" />
++</if:imp_view>
+  </td>
+  <td class="header"> </td>
+ </tr>
+-- 
+tg: (f251c16..) t/dimp/H/GW/AclView (depends on: t/dimp/H/GW/FoldersView)
+-- 
+TOPGIT patch commit log
+=======================
+
+commit e9630629c7479c73d3eb156f00544c34e95f0597
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Mon Jul 20 09:36:01 2009 +0200
+
+    Fix translation and improve header.
+
+commit 57041c04c322dd7dc57da5b171923b7ab000ec0a
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Sun Jun 21 23:58:30 2009 +0200
+
+    German translation.
+
+commit cac1482cec6c96a8a1d7fb7c0e8c2433877728f5
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Fri Mar 13 12:04:03 2009 +0000
+
+    Complete the patch description.
+
+commit 7a349ad9da06264378e84e54d7424f5dc78a9154
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Fri Mar 13 12:00:43 2009 +0000
+
+    Reduce the functionality of the ACL view when calling from DIMP. In addition add the call to the acl settings page within the folder context menu.
+
+commit 2fdc4d0fcd6e4956129f6ec11501112568b99c6d
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Sun Mar 8 19:59:30 2009 +0000
+
+    Completed a draft.
+From: Gunnar Wrobel <p at rdus.de>
+Subject: [PATCH] t/dimp/H/GW/FoldersView
+
+Provide a folders menu for dimp.
+
+kolab/issue3456 (There is no view in dimp that allows folder subscription)
+https://www.intevation.de/roundup/kolab/issue3456
+
+[#8059] DIMP provides no view to subscribe/unsubscribe to folders
+http://bugs.horde.org/ticket/8059
+
+Signed-off-by: Gunnar Wrobel <p at rdus.de>
+
+---
+ folders.php                    |   17 ++++++++++++-----
+ templates/folders/actions.html |    2 ++
+ 4 files changed, 25 insertions(+), 6 deletions(-)
+
+diff --git a/folders.php b/folders.php
+index a0425aa..c46b0e5 100644
+--- a/folders.php
++++ b/folders.php
+@@ -324,7 +324,9 @@ $folders_url = Util::addParameter($folders_url, 'folders_token', $folders_token)
+ 
+ $title = _("Folder Navigator");
+ require IMP_TEMPLATES . '/common-header.inc';
+-IMP::menu();
++if ($_SESSION['imp']['default_view'] != 'dimp') {
++    IMP::menu();
++}
+ IMP::status();
+ IMP::quota();
+ 
+@@ -375,6 +377,7 @@ if ($a_template->get('javascript')) {
+ }
+ 
+ $a_template->set('create_folder', !empty($GLOBALS['conf']['hooks']['permsdenied']) || (IMP::hasPermission('create_folders') && IMP::hasPermission('max_folders')));
++$a_template->set('imp_view', $_SESSION['imp']['default_view'] != 'dimp');
+ if ($prefs->getValue('subscribe')) {
+     $a_template->set('subscribe', true);
+     $subToggleText = ($showAll) ? _("Hide Unsubscribed") : _("Show Unsubscribed");
+@@ -414,9 +417,11 @@ $rowct = 0;
+ $morembox = $rows = array();
+ foreach ($raw_rows as $val) {
+     $val['nocheckbox'] = !empty($val['vfolder']);
+-    if (!empty($val['vfolder']) && ($val['value'] != IMPTREE_VFOLDER_KEY)) {
+-        $val['delvfolder'] = Horde::link($imp_search->deleteURL($val['value']), _("Delete Virtual Folder")) . _("Delete") . '</a>';
+-        $val['editvfolder'] = Horde::link($imp_search->editURL($val['value']), _("Edit Virtual Folder")) . _("Edit") . '</a>';
++    if ($_SESSION['imp']['default_view'] != 'dimp') {
++        if (!empty($val['vfolder']) && ($val['value'] != IMPTREE_VFOLDER_KEY)) {
++            $val['delvfolder'] = Horde::link($imp_search->deleteURL($val['value']), _("Delete Virtual Folder")) . _("Delete") . '</a>';
++            $val['editvfolder'] = Horde::link($imp_search->editURL($val['value']), _("Edit Virtual Folder")) . _("Edit") . '</a>';
++        }
+     }
+ 
+     $val['class'] = (++$rowct % 2) ? 'item0' : 'item1';
+@@ -433,7 +438,9 @@ foreach ($raw_rows as $val) {
+         if (!empty($val['unseen'])) {
+             $val['name'] = '<strong>' . $val['name'] . '</strong>';
+         }
+-        $val['name'] = Horde::link(Util::addParameter($name_url, 'mailbox', $val['value']), sprintf(_("View messages in %s"), ($val['vfolder']) ? $val['base_elt']['l'] : $val['display'])) . $val['name'] . '</a>';
++        if ($_SESSION['imp']['default_view'] != 'dimp') {
++            $val['name'] = Horde::link(Util::addParameter($name_url, 'mailbox', $val['value']), sprintf(_("View messages in %s"), ($val['vfolder']) ? $val['base_elt']['l'] : $val['display'])) . $val['name'] . '</a>';
++        }
+     }
+ 
+     $dir2 = _image($val, null, 'folder');
+diff --git a/templates/folders/actions.html b/templates/folders/actions.html
+index f882a82..619e4de 100644
+--- a/templates/folders/actions.html
++++ b/templates/folders/actions.html
+@@ -12,12 +12,14 @@
+     <select id="action_choose<tag:id />">
+      <option selected="selected"><gettext>Choose Action</gettext></option>
+      <option value="">--------------------</option>
++<if:imp_view>
+ <if:create_folder>
+      <option value="create_folder"><gettext>Create</gettext></option>
+ </if:create_folder>
+      <option value="rename_folder"><gettext>Rename</gettext></option>
+      <option value="delete_folder_confirm"><gettext>Delete</gettext></option>
+      <option value="folders_empty_mailbox_confirm"><gettext>Empty</gettext></option>
++</if:imp_view>
+ <if:notrash>
+      <option value="expunge_folder"><gettext>Purge</gettext></option>
+ </if:notrash>
+-- 
+tg: (a6f8c8b..) t/dimp/H/GW/FoldersView (depends on: t/kronolith/H/GW/UseDayHourStartEndAlsoInFBView)
+-- 
+TOPGIT patch commit log
+=======================
+
+commit c16643e792c3b185bc74bef7a600c06857b19406
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Mon Nov 9 23:16:11 2009 +0100
+
+    Fix tag name from view_imp to imp_view.
+
+commit 93403a869ff14d7868d4cc9c4687ea1270e3c225
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Mon Jun 22 08:39:51 2009 +0200
+
+    Typo
+
+commit ad147a4b42d61800400a2a779e884ee050358811
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Mon Jun 22 00:06:14 2009 +0200
+
+    Fixed menu entry name, added translation, fixed image.
+
+commit a1966161022108d9bf4831a8613b1db9a4e68c4d
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Fri Mar 13 11:06:45 2009 +0000
+
+    Include issue references in the patch description.
+
+commit de8c5e8cac0bfb29c9cf94989016487302da653f
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Fri Mar 13 11:04:54 2009 +0000
+
+    Exclude IMP specific functionality as requested by Sascha wilde in  kolab/issue3456 (There is no view in dimp that allows folder subscription).
+
+commit 9c9a343c04cf11f857bfeb4148f0ab9d9df7dce6
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Sun Mar 8 19:06:05 2009 +0000
+
+    Completed the hack.
+
+commit caa539aac138c4b77376ab9f4a4a86691709a96b
+Author: Gunnar Wrobel <p at rdus.de>
+Date:   Sun Mar 8 19:01:41 2009 +0000
+
+    Completed the hack.
+From: Gunnar Wrobel <p at rdus.de>
+Subject: [PATCH] t/dimp/HK/GW/ItipHandling
+
+Allow handling iTip messages in dimp.
+
+Signed-off-by: Gunnar Wrobel <p at rdus.de>
+
+---
+ lib/MIME/Viewer/itip.php |   98 ++++++++++++++++++++--------
+ 3 files changed, 108 insertions(+), 27 deletions(-)
+
+diff --git a/lib/MIME/Viewer/itip.php b/lib/MIME/Viewer/itip.php
+index 1f8fe1e..e030413 100644
+--- a/lib/MIME/Viewer/itip.php
++++ b/lib/MIME/Viewer/itip.php
+@@ -122,7 +122,7 @@ class IMP_MIME_Viewer_itip extends MIME_Viewer {
+                 break;
+ 
+             case 'import':
+-            case 'accept-import':
++            case 'acceptimport':
+                 // vFreebusy reply.
+                 // vFreebusy publish.
+                 // vEvent request.
+@@ -202,12 +202,12 @@ class IMP_MIME_Viewer_itip extends MIME_Viewer {
+                     $this->_msgs[$key][] = array('warning', _("This action is not yet implemented."));
+                 }
+ 
+-                if ($action != 'accept-import') {
++                if ($action != 'acceptimport') {
+                     break;
+                 }
+ 
+             case 'accept':
+-            case 'accept-import':
++            case 'acceptimport':
+             case 'deny':
+             case 'tentative':
+                 // vEvent request.
+@@ -279,7 +279,7 @@ class IMP_MIME_Viewer_itip extends MIME_Viewer {
+ 
+                     switch ($action) {
+                     case 'accept':
+-                    case 'accept-import':
++                    case 'acceptimport':
+                         $message = sprintf(_("%s has accepted."), $name);
+                         $subject = _("Accepted: ") . $vEvent->getAttribute('SUMMARY');
+                         $params['PARTSTAT'] = 'ACCEPTED';
+@@ -622,7 +622,7 @@ class IMP_MIME_Viewer_itip extends MIME_Viewer {
+         case 'PUBLISH':
+             $desc = _("%s wishes to make you aware of \"%s\".");
+             if ($registry->hasMethod('calendar/import')) {
+-                $options[] = '<option value="import">' .   _("Add this to my calendar") . '</option>';
++                $options['import'] = _("Add this to my calendar");
+             }
+             break;
+ 
+@@ -655,35 +655,35 @@ class IMP_MIME_Viewer_itip extends MIME_Viewer {
+                     : _("%s wishes to make you aware of \"%s\".");
+             }
+             if ($is_update && $registry->hasMethod('calendar/replace')) {
+-                $options[] = '<option value="accept-import">' . _("Accept and update in my calendar") . '</option>';
+-                $options[] = '<option value="import">' . _("Update in my calendar") . '</option>';
++                $options['acceptimport'] = _("Accept and update in my calendar");
++                $options['import'] = _("Update in my calendar");
+             } elseif ($registry->hasMethod('calendar/import')) {
+-                $options[] = '<option value="accept-import">' . _("Accept and add to my calendar") . '</option>';
+-                $options[] = '<option value="import">' . _("Add to my calendar") . '</option>';
++                $options['acceptimport'] = _("Accept and add to my calendar");
++                $options['import'] = _("Add to my calendar");
+             }
+-            $options[] = '<option value="accept">' . _("Accept request") . '</option>';
+-            $options[] = '<option value="tentative">' . _("Tentatively Accept request") . '</option>';
+-            $options[] = '<option value="deny">' . _("Deny request") . '</option>';
+-            // $options[] = '<option value="delegate">' . _("Delegate position") . '</option>';
++            $options['accept'] = _("Accept request");
++            $options['tentative'] = _("Tentatively Accept request");
++            $options['deny'] = _("Deny request");
++            // $options['delegate'] = _("Delegate position");
+             break;
+ 
+         case 'ADD':
+             $desc = _("%s wishes to ammend \"%s\".");
+             if ($registry->hasMethod('calendar/import')) {
+-                $options[] = '<option value="import">' .   _("Update this event on my calendar") . '</option>';
++                $options['import'] = _("Update this event on my calendar");
+             }
+             break;
+ 
+         case 'REFRESH':
+             $desc = _("%s wishes to receive the latest information about \"%s\".");
+-            $options[] = '<option value="send">' . _("Send Latest Information") . '</option>';
++            $options['send'] = _("Send Latest Information");
+             break;
+ 
+         case 'REPLY':
+             $desc = _("%s has replied to the invitation to \"%s\".");
+             $sender = $this->_headers->getValue('From');
+             if ($registry->hasMethod('calendar/updateAttendee')) {
+-                $options[] = '<option value="update">' . _("Update respondent status") . '</option>';
++                $options['update'] = _("Update respondent status");
+             }
+             break;
+ 
+@@ -691,12 +691,12 @@ class IMP_MIME_Viewer_itip extends MIME_Viewer {
+             if (is_a($instance = $vevent->getAttribute('RECURRENCE-ID'), 'PEAR_Error')) {
+                 $desc = _("%s has cancelled \"%s\".");
+                 if ($registry->hasMethod('calendar/delete')) {
+-                    $options[] = '<option value="delete">' . _("Delete from my calendar") . '</option>';
++                    $options['delete'] = _("Delete from my calendar");
+                 }
+             } else {
+                 $desc = _("%s has cancelled an instance of the recurring \"%s\".");
+                 if ($registry->hasMethod('calendar/replace')) {
+-                    $options[] = '<option value="import">' . _("Update in my calendar") . '</option>';
++                    $options['import'] = _("Update in my calendar");
+                 }
+             }
+             break;
+@@ -709,6 +709,36 @@ class IMP_MIME_Viewer_itip extends MIME_Viewer {
+             $desc = sprintf($desc, htmlspecialchars($sender), htmlspecialchars($summary));
+         }
+ 
++        if ($_SESSION['imp']['viewmode'] == 'dimp') {
++            require_once DIMP_BASE . '/lib/DIMP.php';
++
++            function _createMEntry($text, $image, $id, $class = '', $show_text = true, $app = null)
++            {
++                $params = array('icon' => $image, 'id' => $id, 'class' => $class);
++                if ($show_text) {
++                    $params['title'] = $text;
++                } else {
++                    $params['tooltip'] = $text;
++                }
++                if (isset($app)) {
++                    $params['app'] = $app;
++                }
++                return DIMP::actionButton($params);
++            }
++
++            $script = 'if (DIMP.baseWindow) {var B = DIMP.baseWindow.DimpBase;} else {B = DimpBase;};DimpCore.addMouseEvents({ id: \'button_invitation_cont\', type: \'itippopdown\', offset: \'button_invitation_cont\', left: true});';
++	    $script .= '[ \'acceptimport\', \'import\', \'accept\', \'tentative\', \'deny\', \'update\', \'send\' ].each(function(a) {var d = $(\'ctx_itippopdown_\' + a); if (d) { DimpCore.clickObserveHandler({ d: d, f: function(a) { B.itip(a, DIMP.conf.msg_index, DIMP.conf.msg_folder, ' . $id . '); window.close(); }.curry(a) })}})';
++
++            $html .= '<div><span id="button_invitation_cont">' . _createMEntry(_("Invitation"), 'kronolith.png', 'button_invitation', 'hasmenu', true, 'kronolith') . Horde::img('popdown.png', '', array(), $GLOBALS['registry']->getImageDir('dimp')) . '</span></div><p/><script type="text/javascript">' . $script . '</script>';
++
++            if ($this->_msgs) {
++                global $notification;
++                foreach ($this->_msgs[$id] as $msg) {
++                    $notification->push($msg[1], 'horde.' . $msg[0]);
++                }
++            }
++        }
++
+         $html .= '<h2 class="header">' . $desc . '</h2>';
+ 
+         if ($this->_msgs) {
+@@ -796,16 +826,30 @@ class IMP_MIME_Viewer_itip extends MIME_Viewer {
+             $html .= '</tbody></table>';
+         }
+ 
+-        if ($_SESSION['imp']['viewmode'] != 'imp') {
+-            return $html;
+-        }
+-
+         if ($options) {
+-            $html .= '<h2 class="smallheader">' . _("Actions") . '</h2>' .
+-                '<label for="action_' . $id . '" class="hidden">' . _("Actions") . '</label>' .
+-                '<select id="action_' . $id . '" name="action[' . $id . ']">' .
+-                implode("\n", $options) .
+-                '</select> <input type="submit" class="button" value="' . _("Go") . '" />';
++
++            if ($_SESSION['imp']['viewmode'] == 'imp') {
++
++                $html .= '<h2 class="smallheader">' . _("Actions") . '</h2>' .
++                    '<label for="action_' . $id . '" class="hidden">' . _("Actions") . '</label>' .
++                    '<select id="action_' . $id . '" name="action[' . $id . ']">';
++
++                foreach ($options as $key => $description) {
++                    $html .= '<option value="' . $key .'">' . $description . "</option>\n";
++                }
++
++                $html .= '</select> <input type="submit" class="button" value="' . _("Go") . '" />';
++
++            } else if ($_SESSION['imp']['viewmode'] == 'dimp') {
++
++                $html .= '<div class="context" id="ctx_itippopdown">';
++
++                foreach ($options as $key => $description) {
++                    $html .= '<div>' . _createMEntry($description, 'kronolith.png', 'ctx_itippopdown_' . $key, '', true, 'kronolith') . '</div>';
++                }
++
++                $html .= '</div>';
++            }
+         }
+ 
+         return $html;
+
+diff --git a/lib/MIME/Viewer/itip.php b/lib/MIME/Viewer/itip.php
+index 3227519..48769a2 100644
+--- a/lib/MIME/Viewer/itip.php
++++ b/lib/MIME/Viewer/itip.php
+@@ -752,8 +752,6 @@ class IMP_MIME_Viewer_itip extends MIME_Viewer {
+             }
+ 
+             $script = 'if (DIMP.baseWindow) {var B = DIMP.baseWindow.DimpBase;} else {B = DimpBase;};DimpCore.addMouseEvents({ id: \'button_invitation_cont\', type: \'itippopdown\', offset: \'button_invitation_cont\', left: true});';
+-	    $script .= '[ \'acceptimport\', \'import\', \'accept\', \'tentative\', \'deny\', \'update\', \'send\' ].each(function(a) {var d = $(\'ctx_itippopdown_\' + a); if (d) { DimpCore.clickObserveHandler({ d: d, f: function(a) { B.itip(a, DIMP.conf.msg_index, DIMP.conf.msg_folder, ' . $id . '); window.close(); }.curry(a) })}})';
+-
+             $html .= '<div><span id="button_invitation_cont">' . _createMEntry(_("Invitation"), 'kronolith.png', 'button_invitation', 'hasmenu', true, 'kronolith') . Horde::img('popdown.png', '', array(), $GLOBALS['registry']->getImageDir('dimp')) . '</span></div><p/><script type="text/javascript">' . $script . '</script>';
+ 
+             if ($this->_msgs) {
+@@ -866,14 +864,30 @@ class IMP_MIME_Viewer_itip extends MIME_Viewer {
+                 $html .= '</select> <input type="submit" class="button" value="' . _("Go") . '" />';
+ 
+             } else if ($_SESSION['imp']['viewmode'] == 'dimp') {
++                // the div of the context menu
++                $script = "var itipContextMenu = document.createElement('div');\n";
++                $script .= "itipContextMenu.setAttribute('class', 'context');\n";
++                $script .= "itipContextMenu.setAttribute('id', 'ctx_itippopdown');\n";
++                $script .= "itipContextMenu.setAttribute('style', 'display:none');\n";
+ 
+-                $html .= '<div class="context" id="ctx_itippopdown">';
+-
++                // all the context menu items
+                 foreach ($options as $key => $description) {
+-                    $html .= '<div>' . _createMEntry($description, 'kronolith.png', 'ctx_itippopdown_' . $key, '', true, 'kronolith') . '</div>';
++                    $script .= "var itipContextMenuItem = document.createElement('a');\n";
++                    $script .= "itipContextMenuItem.setAttribute('id', 'ctx_itippopdown" . $key . "');\n";
++                    $script .= "var linkText = document.createTextNode('" . $description . "');\n";
++                    $script .= "itipContextMenuItem.appendChild(linkText);\n";
++                    $script .= "itipContextMenu.appendChild(itipContextMenuItem);\n";
++                    $script .= "var d = $(itipContextMenuItem);\n";
++                    $script .= "DimpCore.clickObserveHandler({ d: d,\n";
++                    $script .= "                               f: function(a) {\n";
++                    $script .= "                                      B.itip(a, DIMP.conf.msg_index, DIMP.conf.msg_folder, '" . $id . "');\n";
++                    $script .= "                                      window.close();\n";
++                    $script .= "                                  }.curry('" . $key . "'),\n";
++                    $script .= "                               ns: true,\n";
++                    $script .= "                             });\n";
+                 }
+-
+-                $html .= '</div>';
++                $script .= "document.getElementById('dimpPage').appendChild(itipContextMenu);\n";
++                $html .= '<script type="text/javascript">' . $script . '</script>';
+             }
+         }
+ 
+--- a/lib/Auth/imp.php.orig	2010-02-26 20:20:36.000000000 +0100
++++ b/lib/Auth/imp.php	2010-02-26 20:20:40.000000000 +0100
+@@ -134,7 +134,7 @@ class Auth_imp extends Auth {
+ 
+         /* Open an IMAP stream. */
+         require_once IMP_BASE . '/lib/IMAP.php';
+-        $imp_imap = &IMP_IMAP::singleton($_SESSION['imp']['user'], $credentials['password']);
++        $imp_imap = &IMP_IMAP::singleton($_SESSION['imp']['uniquser'], $credentials['password']);
+         if (!$imp_imap->changeMbox(null, IMP_IMAP_PEEK)) {
+             Horde::logMessage(IMP::loginLogMessage('failed'), __FILE__, __LINE__, PEAR_LOG_ERR);
+ 
+--- a/lib/Session.php	2010-02-26 19:26:11.000000000 +0100
++++ b/lib/Session.php	2010-02-26 19:26:26.000000000 +0100
+@@ -275,7 +275,7 @@ class IMP_Session {
+                     }
+                 } else {
+                     /* Auto-detect namespace parameters from IMAP server. */
+-                    $res = $imapclient->login($_SESSION['imp']['user'], $password);
++                    $res = $imapclient->login($_SESSION['imp']['uniquser'], $password);
+                     if (is_a($res, 'PEAR_Error')) {
+                         $auth_imp->IMPsetAuthErrorMsg($res->getMessage());
+                         unset($_SESSION['imp']);
+From: Gunnar Wrobel <p at rdus.de>
+Subject: [PATCH] t/imp/H/GW/SystemFolderPrefsDoubleEncoding
+
+Fixes a double encoding issue for the folder names set in the
+imp/config/prefs.php file.
+
+kolab/issue4690 (Umlaut problems in system folders)
+https://issues.kolab.org/issue4690
+
+[#9503] Double UTF7-IMAP encoding for system folders
+http://bugs.horde.org/ticket/9503
+
+Signed-off-by: Gunnar Wrobel <p at rdus.de>
+
+---
+
+--- a/po/de_DE.po	25 Oct 2010 12:50:13 -0000	1.56.2.58
++++ b/po/de_DE.po	11 Jan 2011 20:28:00 -0000	1.56.2.59
+@@ -13,7 +13,7 @@
+ "Project-Id-Version: IMP 4.2-cvs\n"
+ "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
+ "POT-Creation-Date: 2010-10-25 14:49+0200\n"
+-"PO-Revision-Date: 2009-11-20 14:49+0100\n"
++"PO-Revision-Date: 2011-01-11 21:25+0100\n"
+ "Last-Translator: Jan Schneider <jan at horde.org>\n"
+ "Language-Team: German <dev at lists.horde.org>\n"
+ "Language: de\n"
+@@ -1591,7 +1591,7 @@
+
+ #: config/prefs.php.dist:304
+ msgid "Drafts"
+-msgstr "Entw&APw-rfe"
++msgstr "Entwürfe"
+
+ #: templates/prefs/folderselect.inc:19
+ msgid "Drafts folder:"
+
+--- a/config/prefs.php.dist	2010/03/19 17:16:34	1.216.4.38
++++ b/config/prefs.php.dist	2011/01/19 13:13:42	1.216.4.39
+@@ -261,7 +261,7 @@
+ $_prefs['sent_mail_folder'] = array(
+     // The mailbox value must be encoded in the UTF7-IMAP charset (see RFC
+     // 3501 [5.1.3]).
+-    'value' => String::convertCharset(_("Sent"), null, 'UTF7-IMAP'),
++    'value' => String::convertCharset(_("Sent"), NLS::getCharset(), 'UTF7-IMAP'),
+     // For Exchange, uncomment the entry below.
+     // 'value' => 'Sent Items',
+     'locked' => false,
+@@ -301,7 +301,7 @@
+ $_prefs['drafts_folder'] = array(
+     // The mailbox value must be encoded in the UTF7-IMAP charset (see RFC
+     // 3501 [5.1.3]).
+-    'value' => String::convertCharset(_("Drafts"), null, 'UTF7-IMAP'),
++    'value' => String::convertCharset(_("Drafts"), NLS::getCharset(), 'UTF7-IMAP'),
+     'locked' => false,
+     'shared' => false,
+     'type' => 'implicit');
+@@ -314,7 +314,7 @@
+ $_prefs['trash_folder'] = array(
+     // The mailbox value must be encoded in the UTF7-IMAP charset (see RFC
+     // 3501 [5.1.3]).
+-    'value' => String::convertCharset(_("Trash"), null, 'UTF7-IMAP'),
++    'value' => String::convertCharset(_("Trash"), NLS::getCharset(), 'UTF7-IMAP'),
+     // For Exchange, uncomment the entry below.
+     // 'value' => 'Deleted Items',
+     'locked' => false,
+@@ -329,7 +329,7 @@
+ $_prefs['spam_folder'] = array(
+     // The mailbox value must be encoded in the UTF7-IMAP charset (see RFC
+     // 3501 [5.1.3]).
+-    'value' => String::convertCharset(_("Spam"), null, 'UTF7-IMAP'),
++    'value' => String::convertCharset(_("Spam"), NLS::getCharset(), 'UTF7-IMAP'),
+     'locked' => false,
+     'shared' => false,
+     'type' => 'implicit');
diff --git a/release-notes.txt b/release-notes.txt
index e308b9c..09c4be3 100644
--- a/release-notes.txt
+++ b/release-notes.txt
@@ -11,6 +11,7 @@ the 1st.README file in the package directory.
     - horde-3.3.11-20110824
 
 	kolab/issue4739 (Webmail problems with attachments in kolab-2.3.1)
+	kolab/issue4745 (Horde preferences woes in Kolab 2.3.x)
 
     - imp-4.3.9-20110111
 





More information about the commits mailing list