$imptree = IMP_Imap_Tree::singleton();
$imptree->eltDiffStart();
- $imp_folder = IMP_Folder::singleton();
- $result = $imp_folder->delete(array($mbox));
+ if ($imp_search->isEditableVFolder($mbox)) {
+ $notification->push(sprintf(_("Deleted Virtual Folder \"%s\"."), $imp_search->getLabel($mbox)), 'horde.success');
+ $imp_search->deleteSearchQuery($mbox);
+ $result = true;
+ } else {
+ $imp_folder = IMP_Folder::singleton();
+ $result = $imp_folder->delete(array($mbox));
+ }
+
if ($result) {
$result = IMP_Dimp::getFolderResponse($imptree);
}
case 'delete_search_query':
$queryid = Horde_Util::getFormData('queryid');
if (!empty($queryid)) {
+ $notification->push(sprintf(_("Deleted Virtual Folder \"%s\"."), $imp_search->getLabel($queryid)), 'horde.success');
$imp_search->deleteSearchQuery($queryid);
}
break;
switch (loc) {
case 'search':
+ // data: 'edit_query' = folder to edit; otherwise, loads search
+ // screen with current mailbox as default search mailbox
+ if (!data) {
+ data = { search_mailbox: f };
+ }
this.highlightSidebar();
DimpCore.setTitle(DIMP.text.search);
- this.iframeContent(loc, DimpCore.addURLParam(DIMP.conf.URI_SEARCH, { search_mailbox: f }));
+ this.iframeContent(loc, DimpCore.addURLParam(DIMP.conf.URI_SEARCH, data));
break;
case 'portal':
break;
case 'ctx_folder_empty':
- mbox = baseelt.up('LI').retrieve('mbox');
- if (window.confirm(DIMP.text.empty_folder.replace(/%s/, mbox))) {
- DimpCore.doAction('EmptyFolder', { view: mbox }, null, this._emptyFolderCallback.bind(this));
+ tmp = baseelt.up('LI');
+ if (window.confirm(DIMP.text.empty_folder.replace(/%s/, tmp.readAttribute('title')))) {
+ DimpCore.doAction('EmptyFolder', { view: tmp.retrieve('mbox') }, null, this._emptyFolderCallback.bind(this));
}
break;
case 'ctx_folder_delete':
- mbox = baseelt.up('LI').readAttribute('title');
- if (window.confirm(DIMP.text.delete_folder.replace(/%s/, mbox))) {
- DimpCore.doAction('DeleteFolder', { view: mbox }, null, this.bcache.get('folderC') || this.bcache.set('folderC', this._folderCallback.bind(this)));
+ case 'ctx_vfolder_delete':
+ tmp = baseelt.up('LI');
+ if (window.confirm(DIMP.text.delete_folder.replace(/%s/, tmp.readAttribute('title')))) {
+ DimpCore.doAction('DeleteFolder', { view: tmp.retrieve('mbox') }, null, this.bcache.get('folderC') || this.bcache.set('folderC', this._folderCallback.bind(this)));
}
break;
new Ajax.Request(DIMP.conf.URI_SEARCH_BASIC, { parameters: DimpCore.addRequestParams($H({ search_mailbox: this.folder })), onComplete: function(r) { RedBox.showHtml(r.responseText); } });
break;
+ case 'ctx_vfolder_edit':
+ tmp = { edit_query: baseelt.up('LI').retrieve('mbox') };
+ // Fall through
+
case 'ctx_qsearchopts_advanced':
- this.go('search');
+ this.go('search', tmp);
break;
case 'ctx_qsearchopts_all':
new Drag(li, this._folderDragConfig);
this._addMouseEvents({ id: fid, type: ftype });
break;
+
+ case 'scontainer':
+ case 'virtual':
+ this._addMouseEvents({ id: fid, type: (ob.v == 2) ? 'vfolder' : 'noactions' });
+ break;
}
},
});
},
+ updateSavedSearches: function(label, type)
+ {
+ $('search_label').setValue(label);
+ // TODO: type
+ },
+
resetCriteria: function()
{
$('search_criteria_table').childElements().invoke('remove');
}
if (!empty($changes['d'])) {
- $result['d'] = array_map('rawurlencode', array_reverse($changes['d']));
+ $result['d'] = array_reverse($changes['d']);
}
return $result;
* 'u' (unseen) = The number of unseen messages. [integer]
* 'un' (unsubscribed) = Is this folder unsubscribed? [boolean]
* [DEFAULT: no]
- * 'v' (virtual) = Is this a virtual folder? [boolean] [DEFAULT: no]
+ * 'v' (virtual) = Virtual folder? 0 = not vfolder, 1 = system vfolder,
+ * 2 = user vfolder [integer] [DEFAULT: 0]
* </pre>
*/
static private function _createFolderElt($elt)
$ob->po = 1;
}
if ($elt['vfolder']) {
- $ob->v = 1;
+ $ob->v = $GLOBALS['imp_search']->isEditableVFolder($elt['value']) ? 2 : 1;
}
if (!$elt['sub']) {
$ob->un = 1;
Horde::sendHTTPResponse($folders, 'json');
}
-$on_domload = array(
+$js_load = array(
'ImpSearch.updateFolderList(' . Horde_Serialize::serialize($folders, Horde_Serialize::JSON, $charset) . ')'
);
'v' => $key
);
}
- $on_domload[] = 'ImpSearch.updateSavedSearches(' . Horde_Serialize::serialize($ss, Horde_Serialize::JSON, $charset) . ')';
+ $js_load[] = 'ImpSearch.updateSavedSearches(' . Horde_Serialize::serialize($ss, Horde_Serialize::JSON, $charset) . ')';
}
/* Preselect mailboxes. */
-$on_domload[] = 'ImpSearch.updateSelectedFolders(' . Horde_Serialize::serialize(array($search_mailbox), Horde_Serialize::JSON, $charset) . ')';
+$js_load[] = 'ImpSearch.updateSelectedFolders(' . Horde_Serialize::serialize(array($search_mailbox), Horde_Serialize::JSON, $charset) . ')';
/* Prepare the search template. */
$t = new Horde_Template();
}
$t->set('edit_query_vfolder', htmlspecialchars($edit_query));
}
- $on_domload[] = 'ImpSearch.updateSearchCriteria(' . Horde_Serialize::serialize($imp_search->getCriteria($edit_query), Horde_Serialize::JSON, $charset) . ')';
+ $js_load[] = 'ImpSearch.updateSearchCriteria(' . Horde_Serialize::serialize($imp_search->getCriteria($edit_query), Horde_Serialize::JSON, $charset) . ')';
+ $js_load[] = 'ImpSearch.updateSavedSearches(' . Horde_Serialize::serialize($imp_search->getLabel($edit_query), Horde_Serialize::JSON, $charset) . ')';
}
$f_fields = $s_fields = $types = array();
'ImpSearch.data = ' . Horde_Serialize::serialize($js_data, Horde_Serialize::JSON, $charset),
'ImpSearch.text = ' . Horde_Serialize::serialize($gettext_strings, Horde_Serialize::JSON, $charset)
));
-Horde::addInlineScript($on_domload, 'dom');
+Horde::addInlineScript($js_load, 'dom');
$title = _("Search");
Horde::addScriptFile('horde.js', 'horde', true);
</div>
<?php endif; ?>
+<div class="context" id="ctx_noactions" style="display:none">
+ <span>No actions available</span>
+</div>
+
+<div class="context" id="ctx_vfolder" style="display:none">
+ <a id="ctx_vfolder_edit"><span class="contextImg"></span><?php echo _("Edit Virtual Folder") ?></a>
+ <a id="ctx_vfolder_delete"><span class="contextImg"></span><?php echo _("Delete Virtual Folder") ?></a>
+</div>
+
<div class="context" id="ctx_message" style="display:none">
<a id="ctx_message_reply"><span class="contextImg"></span><?php echo _("Reply") ?></a>
<a id="ctx_message_forward" class="sep"><span class="contextImg"></span><?php echo _("Forward") ?></a>
#ctx_folder_create span.contextImg, #ctx_container_create span.contextImg, #ctx_folderopts_new span.contextImg {
background-image: url("graphics/folders/create.png");
}
-#ctx_folder_rename span.contextImg, #ctx_container_rename span.contextImg {
+#ctx_folder_rename span.contextImg, #ctx_container_rename span.contextImg, #ctx_vfolder_edit span.contextImg {
background-image: url("graphics/folders/edit.png");
}
-#ctx_folder_delete span.contextImg {
+#ctx_folder_delete span.contextImg, #ctx_vfolder_delete span.contextImg {
background-image: url("graphics/folders/delete.png");
}
#ctx_message_spam span.contextImg {