Skip to content
This repository has been archived by the owner on Nov 25, 2020. It is now read-only.

Commit

Permalink
Selection cart and save search advanced.
Browse files Browse the repository at this point in the history
  • Loading branch information
cdujeu committed Oct 3, 2013
1 parent 44c3688 commit 990ec99
Show file tree
Hide file tree
Showing 9 changed files with 182 additions and 17 deletions.
4 changes: 3 additions & 1 deletion core/src/plugins/access.fs/class.fsAccessDriver.php
Expand Up @@ -302,7 +302,9 @@ public function switchAction($action, $httpVars, $fileVars)
$localName = (basename($dir)==""?"Files":basename($dir)).".zip";
}
$file = AJXP_Utils::getAjxpTmpDir()."/".($loggedUser?$loggedUser->getId():"shared")."_".time()."tmpCompression.zip";
$zipFile = $this->makeZip($selection->getFiles(), $file, $dir);
if(isSet($httpVars["compress_flat"])) $baseDir = "__AJXP_ZIP_FLAT__/";
else $baseDir = $dir;
$zipFile = $this->makeZip($selection->getFiles(), $file, $baseDir);
if(!$zipFile) throw new AJXP_Exception("Error while compressing file $localName");
register_shutdown_function("unlink", $file);
$tmpFNAME = $this->urlBase.$dir."/".str_replace(".zip", ".tmp", $localName);
Expand Down
49 changes: 48 additions & 1 deletion core/src/plugins/action.cart/class.CartManager.js
Expand Up @@ -21,15 +21,17 @@
Class.create("CartManager", FetchedResultPane, {

__maxChildren: 100,
__label:MessageHash["action.cart.9"],

initialize: function($super, element, options){

options = Object.extend({
displayMode: 'detail',
selectable: false
selectable: true
}, options);
$super(element, options);

if(options.label) this.__label = options.label;
element.ajxpNode = this._rootNode;
element.applyDragMove = this.applyDragMove.bind(this);
AjxpDroppables.add(element, this._rootNode);
Expand All @@ -41,11 +43,18 @@ Class.create("CartManager", FetchedResultPane, {
}
}.bind(this));

this.updateTitle();

},

updateTitle: function(){
this.htmlElement.fire("widget:updateTitle", this.__label+' ('+this._rootNode.getChildren().size()+')');
},

downloadContent: function(){
var h = this.getLocalSelectionForPosting();
if(h.size() == 0) return;

if(!$("download_form")) return;

var form = $('download_form');
Expand All @@ -65,6 +74,40 @@ Class.create("CartManager", FetchedResultPane, {
}
},

compressContentAndShare: function(){

var h = this.getLocalSelectionForPosting();
if(h.size() == 0) return;
if((zipEnabled && multipleFilesDownloadEnabled))
{

var zipName = window.prompt(MessageHash['action.cart.14'], this.__label);
var index=1;
var buff = zipName;
while(ajaxplorer.getContextHolder().fileNameExists(zipName + ".zip", true, ajaxplorer.getContextHolder().getRootNode())){
zipName = buff + "-" + index; index ++ ;
}
h.set('get_action', 'compress');
h.set('compress_flat', 'true');
h.set('dir', '/');
h.set('archive_name', zipName + ".zip");
var conn = new Connexion();
conn.setMethod("POST");
conn.setParameters(h);
conn.onComplete = function(transport){
var success = ajaxplorer.actionBar.parseXmlMessage(transport.responseXML);
if(success){
ajaxplorer.goTo('/'+zipName+'.zip');
window.setTimeout(function(){
ajaxplorer.actionBar.fireAction('share');
}, 500);
}
}.bind(this);
conn.sendAsync();
}

},

addCurrentSelection: function(){

ajaxplorer.getContextHolder().getSelectedNodes().each(function(n){
Expand All @@ -73,6 +116,7 @@ Class.create("CartManager", FetchedResultPane, {
}else{
this.recurseLeafs(n);
}
this.updateTitle();
}.bind(this));

},
Expand Down Expand Up @@ -130,6 +174,7 @@ Class.create("CartManager", FetchedResultPane, {
recurseLeafs: function(node){

if(this._rootNode.getChildren().length > this.__maxChildren) {
this.updateTitle();
ajaxplorer.displayMessage('ERROR', 'Stopping recursion: please do not select more than ' + this.__maxChildren + ' at once!');
throw $break;
}
Expand All @@ -149,6 +194,8 @@ Class.create("CartManager", FetchedResultPane, {
node.load();
}

this.updateTitle();

}

});
5 changes: 4 additions & 1 deletion core/src/plugins/action.cart/i18n/en.php
Expand Up @@ -12,5 +12,8 @@
"8" => "Download whole cart at once",
"9" => "Default cart",
"10"=> "Carts",

"11"=> "Compress and Share",
"12"=> "Create archive from selection and share this archive",
"13"=> "Provide a label for this selection cart",
"14"=> "This will create an archive with all files and share it. Please select enter a name for this archive:"
);
96 changes: 92 additions & 4 deletions core/src/plugins/action.cart/manifest.xml
Expand Up @@ -20,7 +20,7 @@
tabInfo='{"id":"cart-manager","iconClass":"icon-suitcase","element":"ajxp-cart-manager","closeable":false,"label":"action.cart.10","dontFocus":true}'
paneInfo='{"type":"widget"}'><![CDATA[
<div id="ajxp-cart-manager" ajxpClass="AjxpPane" ajxpOptions='{"fit":"height"}'>
<div id="cart-manager-header" class="innerTabulator" ajxpClass="AjxpTabulator" ajxpOptions='{"fit":"height", "fitParent":"browser","defaultTabId": "default-cart","tabInfos": [{"id":"default-cart","label":"action.cart.9","iconClass":"icon-suitcase", "element":"default-cart"}], "headerToolbarOptions":{"submenuClassName":"panelHeaderMenu","submenuPosition":"bottom right","submenuOffsetTop":12,"toolbarsList":["ajxp-cart-manager"],"skipBubbling":true, "skipCarousel":true,"submenuOffsetTop":2}}'>
<div id="cart-manager-header" class="innerTabulator" ajxpClass="AjxpTabulator" ajxpOptions='{"fit":"height", "fitParent":"browser","defaultTabId": "default-cart","tabInfos": [{"id":"default-cart","label":"action.cart.9","iconClass":"icon-suitcase", "element":"default-cart"}], "headerToolbarOptions":{"submenuClassName":"panelHeaderMenu","submenuPosition":"bottom right","submenuOffsetTop":12,"toolbarsList":["ajxp-cart-manager", "ajxp-cart-actions"],"skipBubbling":true, "skipCarousel":true,"submenuOffsetTop":2}}'>
<div id="default-cart" ajxpClass="CartManager" ajxpOptions='{"nodeProviderProperties":{}}'></div>
</div>
</div>
Expand All @@ -36,14 +36,30 @@
<clientCallback><![CDATA[
var tabulator = $('cart-manager-header').ajxpPaneObject;
if(tabulator){
var newLabel = window.prompt('Provide a label for this selection cart');
var newLabel = window.prompt(MessageHash['action.cart.13']);
if(newLabel){
tabulator.addTab({"id":"new-cart","label":newLabel,"iconClass":"icon-suitcase", closeable:true, dontFocus:true}, {type:"widget", widgetClass:CartManager, widgetOptions:{}});
tabulator.addTab({"id":"new-cart-"+new Date().getTime(),"label":newLabel,"iconClass":"icon-suitcase", closeable:true, dontFocus:true}, {type:"widget", widgetClass:CartManager, widgetOptions:{label:newLabel}});
}
}
]]></clientCallback>
</processing>
</action>
<action name="create-cart-from-search">
<gui src="" iconClass="icon-save" text="action.cart.5" title="action.cart.6">
<context dir="true" recycle="true" selection="false" actionBar="true" actionBarGroup="ajxp-search-result-bar"/>
</gui>
<processing>
<clientCallback><![CDATA[
var tabulator = $('cart-manager-header').ajxpPaneObject;
var value = $('search_txt').getValue();
if(tabulator && value){
var newLabel = "Search '"+value+"'";
tabulator.addTab({"id":"new-cart-"+new Date().getTime(),"label":newLabel,"iconClass":"icon-search", closeable:true, dontFocus:false},
{type:"widget", widgetClass:FetchedResultPane, widgetOptions:{label:newLabel,"nodeProviderProperties":{"get_action":"search", "query":value},"reloadOnServerMessage":"tree/reload_bookmarks"}});
}
]]></clientCallback>
</processing>
</action>
<action name="send-selection-to-cart">
<gui src="" text="action.cart.1" title="action.cart.2" iconClass="icon-suitcase">
<context dir="true" recycle="true" selection="true" actionBar="false" contextMenu="true" actionBarGroup="change"/>
Expand All @@ -57,6 +73,15 @@
object.addCurrentSelection();
}
]]></clientCallback>
<activeCondition><![CDATA[
if($('cart-manager-header') && $('cart-manager-header').ajxpPaneObject){
var object = $('cart-manager-header').ajxpPaneObject.getAndSetAjxpObject( $('cart-manager-header').ajxpPaneObject.selectedTabInfo );
if(!object || !object.getRootNode){
return false;
}
}
return true;
]]></activeCondition>
</processing>
</action>
<action name="current-cart-empty">
Expand All @@ -68,13 +93,23 @@
var object = $('cart-manager-header').ajxpPaneObject.getAndSetAjxpObject( $('cart-manager-header').ajxpPaneObject.selectedTabInfo );
if(object){
object.getRootNode().clear();
object.updateTitle();
}
]]></clientCallback>
<activeCondition><![CDATA[
if($('cart-manager-header') && $('cart-manager-header').ajxpPaneObject){
var object = $('cart-manager-header').ajxpPaneObject.getAndSetAjxpObject( $('cart-manager-header').ajxpPaneObject.selectedTabInfo );
if(!object || !object.getRootNode || object.getRootNode().getChildren().size() == 0){
return false;
}
}
return true;
]]></activeCondition>
</processing>
</action>
<action name="current-cart-download">
<gui src="" iconClass="icon-download-alt" text="action.cart.7" title="action.cart.8">
<context dir="true" recycle="true" selection="false" actionBar="true" actionBarGroup="ajxp-cart-manager"/>
<context dir="true" recycle="true" selection="false" actionBar="true" actionBarGroup="ajxp-cart-actions"/>
</gui>
<processing>
<clientCallback><![CDATA[
Expand All @@ -83,6 +118,59 @@
object.downloadContent();
}
]]></clientCallback>
<activeCondition><![CDATA[
if($('cart-manager-header') && $('cart-manager-header').ajxpPaneObject){
var object = $('cart-manager-header').ajxpPaneObject.getAndSetAjxpObject( $('cart-manager-header').ajxpPaneObject.selectedTabInfo );
if(!object || !object.downloadContent){
return false;
}
}
return ajaxplorer.actionBar.actions.get('download') != null;
]]></activeCondition>
</processing>
</action>
<action name="current-cart-share">
<gui src="" iconClass="icon-share" text="action.cart.10" title="action.cart.11">
<context dir="true" recycle="true" selection="false" actionBar="true" actionBarGroup="ajxp-cart-actions"/>
</gui>
<processing>
<clientCallback><![CDATA[
var object = $('cart-manager-header').ajxpPaneObject.getAndSetAjxpObject( $('cart-manager-header').ajxpPaneObject.selectedTabInfo );
if(object && $('download_form')){
object.compressContentAndShare();
}
]]></clientCallback>
<activeCondition><![CDATA[
if($('cart-manager-header') && $('cart-manager-header').ajxpPaneObject){
var object = $('cart-manager-header').ajxpPaneObject.getAndSetAjxpObject( $('cart-manager-header').ajxpPaneObject.selectedTabInfo );
if(!object || !object.compressContentAndShare){
return false;
}
}
return ajaxplorer.actionBar.actions.get('compress') != null && ajaxplorer.actionBar.actions.get('share') != null;
]]></activeCondition>
</processing>
</action>
<action name="current-cart-refresh-search">
<gui src="" iconClass="icon-refresh" text="action.cart.10" title="action.cart.11">
<context dir="true" recycle="true" selection="false" actionBar="true" actionBarGroup="ajxp-cart-actions"/>
</gui>
<processing>
<clientCallback><![CDATA[
var object = $('cart-manager-header').ajxpPaneObject.getAndSetAjxpObject( $('cart-manager-header').ajxpPaneObject.selectedTabInfo );
if(object && object.__className == 'FetchedResultPane'){
object._dataModel.requireContextChange(object._rootNode, true);
}
]]></clientCallback>
<activeCondition><![CDATA[
if($('cart-manager-header') && $('cart-manager-header').ajxpPaneObject){
var object = $('cart-manager-header').ajxpPaneObject.getAndSetAjxpObject( $('cart-manager-header').ajxpPaneObject.selectedTabInfo );
if(!object || object.__className != 'FetchedResultPane'){
return false;
}
}
return true;
]]></activeCondition>
</processing>
</action>
</actions>
Expand Down
2 changes: 1 addition & 1 deletion core/src/plugins/gui.ajax/res/js/ajaxplorer.js

Large diffs are not rendered by default.

11 changes: 9 additions & 2 deletions core/src/plugins/gui.ajax/res/js/ajaxplorer/class.Action.js
Expand Up @@ -50,6 +50,7 @@ Class.create("Action", {
callback:Prototype.emptyFunction,
prepareModal:false,
listeners : [],
activeCondition:null,
formId:undefined,
formCode:undefined
}, arguments[0] || { });
Expand Down Expand Up @@ -214,7 +215,7 @@ Class.create("Action", {
if(this.options.listeners["contextChange"]){
window.listenerContext = this;
this.options.listeners["contextChange"].evalScripts();
}
}
var rightsContext = this.rightsContext;
if(!rightsContext.noUser && !usersEnabled){
return this.hideForContext();
Expand Down Expand Up @@ -272,6 +273,10 @@ Class.create("Action", {
window.listenerContext = this;
this.options.listeners["selectionChange"].evalScripts();
}
if(this.options.activeCondition){
if(this.options.activeCondition() === false) return this.disable();
else if(this.options.activeCondition() === true) this.enable();
}
if(this.contextHidden
|| !this.context.selection) {
return;
Expand Down Expand Up @@ -337,7 +342,7 @@ Class.create("Action", {
}
this.show();
this.enable();

},

/**
Expand Down Expand Up @@ -381,6 +386,8 @@ Class.create("Action", {
}
}else if(processNode.nodeName == "clientListener" && processNode.firstChild){
this.options.listeners[processNode.getAttribute('name')] = '<script>'+processNode.firstChild.nodeValue+'</script>';
}else if(processNode.nodeName == "activeCondition" && processNode.firstChild){
this.options.activeCondition = new Function(processNode.firstChild.nodeValue.strip());
}
}
if(clientFormData.formId){
Expand Down
Expand Up @@ -551,7 +551,7 @@ Class.create("AjxpDataModel", {
contextNode = this._contextNode;
}
if(local){
var test = contextNode.getPath() + "/" + newFileName;
var test = (contextNode.getPath()=="/"?"":contextNode.getPath()) + "/" + newFileName;
return contextNode.getChildren().detect(function(c){
return c.getPath() == test;
});
Expand Down
25 changes: 20 additions & 5 deletions core/src/plugins/gui.ajax/res/js/ajaxplorer/class.AjxpTabulator.js
Expand Up @@ -45,16 +45,21 @@ Class.create("AjxpTabulator", AjxpPane, {
if(!tabInfo.label && paneObject){
paneObject.getDomNode().observe("editor:updateTitle", function(event){
tabInfo.headerElement.down(".tab_label").update(event.memo);
}.bind(modal));
});
paneObject.getDomNode().observe("editor:updateIconClass", function(event){
tabInfo.headerElement.down("span").replace(new Element('span',{className:event.memo}));
}.bind(modal));
});
}
if($(tabInfo.element)){
$(tabInfo.element).observe("widget:updateTitle", function(event){
tabInfo.headerElement.down(".tab_label").update(event.memo);
});
}
}.bind(this));
if(this.options.headerToolbarOptions){
var tbD = new Element('div', {id:"display_toolbar"});
div.insert({top:tbD});
var tb = new ActionsToolbar(tbD, this.options.headerToolbarOptions);
this.tb = new ActionsToolbar(tbD, this.options.headerToolbarOptions);
}
if(tabulatorOptions.defaultTabId){
this.switchTabulator(tabulatorOptions.defaultTabId);
Expand Down Expand Up @@ -186,17 +191,20 @@ Class.create("AjxpTabulator", AjxpPane, {
var editor = eval ( 'new '+editorData.editorClass+'(oForm, editorOptions)' );
editor.getDomNode().observe("editor:updateTitle", function(event){
tabInfo.headerElement.down(".tab_label").update(event.memo);
}.bind(modal));
});
editor.getDomNode().observe("editor:updateIconClass", function(event){
tabInfo.headerElement.down("span").replace(new Element('span',{className:event.memo}));
}.bind(modal));
});
editor.open(paneInfo.node);
tabInfo.ajxpObject = editor;
editor.resize();
}
}else if(paneInfo.type == 'widget'){
if(paneInfo.widgetClass && paneInfo.widgetOptions){
new paneInfo.widgetClass($(tabInfo.element), paneInfo.widgetOptions);
$(tabInfo.element).observe("widget:updateTitle", function(event){
tabInfo.headerElement.down(".tab_label").update(event.memo);
});
}
}
this.tabulatorData.push(tabInfo);
Expand Down Expand Up @@ -286,8 +294,12 @@ Class.create("AjxpTabulator", AjxpPane, {
}
toShow.resize();
}
if(this.options.headerToolbarOptions){
ajaxplorer.actionBar.fireSelectionChange();
}
this.resize();
this.notify("switch", tabId);

},

/**
Expand Down Expand Up @@ -354,6 +366,9 @@ Class.create("AjxpTabulator", AjxpPane, {
tabInfo.headerElement.stopObserving("click");
ajxpObject.destroy();
}.bind(this));
if(this.tb){
this.tb.destroy();
}
this.htmlElement.update("");
if(window[this.htmlElement.id]){
try{delete window[this.htmlElement.id];}catch(e){}
Expand Down

0 comments on commit 990ec99

Please sign in to comment.