02-03-2023 03:36 AM
I don't understand why alfresco choose aikau instead of going ahead with spring.... any small modification you try to make is a nightmare....
I just want to add my own entry/action in the dropdown Toolbar of site-wide operations....
To simplify the example let's leave out all the alfresco server-side stuff and focus on the Share interface-side stuff
Here a image to understand where i put my action:
Here the code is use:
1) A spring surf extension (project-share/src/main/resources/alfresco/web-extension/site-data/extensions/service-site-extension.xml)
<extension>
<modules>
<module>
<id>service-site-extension</id>
<version>1.0</version>
<auto-deploy>false</auto-deploy>
<evaluator type="default.extensibility.evaluator"/>
<customizations>
<customization>
<targetPackageRoot>org.alfresco.share.header</targetPackageRoot>
<sourcePackageRoot>XXX.YYY.ZZZ.share.header</sourcePackageRoot>
</customization>
</customizations>
<configurations>
<config evaluator="string-compare" condition="DocLibCustom">
<dependencies>
<js src="/XXX/modules/close-acdat.js"/>
<css src="/XXX/modules/close-acdat.css"/>
</dependencies>
</config>
</configurations>
</module>
</modules>
</extension>2) The customization of the "share-header.get.js" (/project-share/src/main/resources/alfresco/web-extension/site-webscripts/XXX/YYY/ZZZ/share/header/share-header.get.js)
<import resource="classpath:/alfresco/site-webscripts/org/alfresco/share/imports/share-header.lib.js">
// CLOSE SITE CONFIGURATION OPTION
if(page.url.templateArgs.site) {
var siteData = getSiteData();
if(siteData) {
var isInAdminGroup = user.isAdmin; /
var isInManagerGroup = siteData != null && siteData.userIsSiteManager;
var sitePreset = siteData.profile.sitePreset;
if((isInAdminGroup || isInManagerGroup)) {
var siteConfig = widgetUtils.findObject(model.jsonModel, "id", "HEADER_SITE_CONFIGURATION_DROPDOWN");
if (siteConfig != null) {
var widgets = siteConfig.config.widgets;
// Add Close Site options only if is adimn or manager member of the site
widgets.push({
id: "HEADER_SERVICE_ACDAT_CLOSE_SITE",
name: "alfresco/menus/AlfMenuItem",
config: {
id: "HEADER_SERVICE_ACDAT_CLOSE_SITE",
label: "service-acdat-close_site.label",
title: "service-acdat-close_site.label",
iconAltText: "service-acdat-close_site.label",
iconClass: "alf-delete-20-icon",
publishTopic: "ALF_CLOSE_ACDAT", // HOW THE HELL I CALL MY JAVASCRIPT FROM THIS ????
//publishTopic: "ALF_DELETE_SITE", /// THIS IS WORK....
publishPayload: {
shortName: page.url.templateArgs.site,
redirect: {
url: "user/" + encodeURIComponent(user.name) + "/dashboard",
type: "PAGE_RELATIVE",
target: "CURRENT"
}
}
}
});
}
}
}
}3) The javascript i want to call.... with the ALF_CLOSE_ACDAT
/**
* CloseSite module.
*
* Displays a dialog with cofirmation to close a site.
*
* @namespace Alfresco.module
* @class Alfresco.module.ServiceAcdatCloseSite
*/
(function()
{
/**
* CloseSite constructor.
*
* CloseSite is considered a singleton so constructor should be treated as private,
* please use Alfresco.module.getServiceAcdatCloseSiteInstance() instead.
*
* @param {string} htmlId The HTML id of the parent element
* @return {Alfresco.module.CloseSite} The new CloseSite instance
* @constructor
* @private
*/
Alfresco.module.ServiceAcdatCloseSite = function(containerId)
{
var instance = Alfresco.util.ComponentManager.get(containerId);
if (instance !== null)
{
throw new Error("An instance of Alfresco.module.ServiceAcdatCloseSite already exists.");
}
Alfresco.module.ServiceAcdatCloseSite.superclass.constructor.call(this, "Alfresco.module.ServiceAcdatCloseSite", containerId, ["button", "container", "connection", "selector", "json"]);
// Set prototype properties
this.closePromptActive = false;
return this;
};
YAHOO.extend(Alfresco.module.ServiceAcdatCloseSite, Alfresco.component.Base,
{
/**
* Will become true when the template (that sets the i18n messages)
* to this module has been loaded.
*/
localized: false,
/**
* Makes sure the dialog isn't displayed twice at the same time
*/
closePromptActive: false,
/**
* Shows the dialog
* in different ways depending on the config parameter.
*
* @method show
* @param config {object} describes how the upload dialog should be displayed
* The config object is in the form of:
* {
* site:
* {
* shortName: {string}, // shortName of site to close
* title: {string} // Name of site to close
* }
* }
*/
show: function CloseSite_show(config)
{
var c = config;
if (this.localized)
{
this._showDialog(c);
}
else
{
Alfresco.util.Ajax.request(
{
url: Alfresco.constants.URL_SERVICECONTEXT + "modules/service-acdat/close-site",
dataObj:{ htmlid: this.id },
successCallback:
{
fn: function()
{
this.onMessagesLoaded(c);
},
scope: this
},
execScripts: true,
failureMessage: "Could not load close site messages"
});
}
},
/**
* Called when the CloseSite messages has been returned from the server.
* Shows the dialog.
*
* @method onMessagesLoaded
* @param config {object} The config for the dialog
*/
onMessagesLoaded: function CloseSite_onMessagesLoaded(config)
{
this.localized = true;
this._showDialog(config);
},
/**
* Shows the dialog.
*
* @method _showDialog
* @param config {object} The config for the dialog
* @private
*/
_showDialog: function CloseSite__showDialog(config)
{
if (!this.closePromptActive)
{
this.closePromptActive = true;
var me = this,
c = config;
Alfresco.util.PopupManager.displayPrompt(
{
title: Alfresco.util.message("title.closeSite", this.name),
text: Alfresco.util.message("label.closeSite", this.name,
{
"0": Alfresco.util.encodeHTML(c.site.title)
}),
noEscape: true,
buttons: [
{
text: Alfresco.util.message("button.close", this.name),
handler: function CloseSite__sD_close()
{
this.destroy();
me._onCloseClick.call(me, c);
}
},
{
text: Alfresco.util.message("button.cancel", this.name),
handler: function CloseSite__sD_cancel()
{
me.closePromptActive = false;
this.destroy();
},
isDefault: true
}]
});
var Dom = YAHOO.util.Dom;
var elements = Dom.getElementsByClassName('yui-button', 'span', 'prompt');
Dom.addClass(elements[0], 'alf-primary-button');
}
},
/**
* Handles close click event.
*
* @method _onCloseClick
* @param config {object} The config for the dialog
* @private
*/
_onCloseClick: function CloseSite__onCloseClick(config)
{
var me = this,
c = config;
Alfresco.util.PopupManager.displayPrompt(
{
title: Alfresco.util.message("title.closeSite", this.name),
text: Alfresco.util.message("label.confirmCloseSite", this.name),
noEscape: true,
buttons: [
{
text: Alfresco.util.message("button.yes", this.name),
handler: function CloseSite__oDC_close()
{
this.destroy();
me._onConfirmedCloseClick.call(me, c);
}
},
{
text: Alfresco.util.message("button.no", this.name),
handler: function CloseSite__oDC_cancel()
{
me.closePromptActive = false;
this.destroy();
},
isDefault: true
}]
});
},
/**
* Handles confirmed close click event.
*
* @method _onConfirmedCloseClick
* @param config {object} The config for the dialog
* @private
*/
_onConfirmedCloseClick: function CloseSite__onConfirmedCloseClick(config)
{
var me = this,
c = config;
var feedbackMessage = Alfresco.util.PopupManager.displayMessage(
{
text: Alfresco.util.message("message.closingSite", this.name),
spanClass: "wait",
displayTime: 0
});
// user has confirmed, perform the actual close
Alfresco.util.Ajax.jsonPost(
{
url: Alfresco.constants.URL_SERVICECONTEXT + "modules/service-acdat/close-site",
dataObj:
{
shortName: config.site.shortName
},
successCallback:
{
fn: function(response)
{
me.closePromptActive = false;
feedbackMessage.destroy();
if (response.json && response.json.success)
{
Alfresco.util.PopupManager.displayMessage(
{
text: Alfresco.util.message("message.siteClosed", this.name)
});
// Tell other components that the site has been closed
YAHOO.Bubbling.fire("siteClosed",
{
site: c.site
});
}
else
{
Alfresco.util.PopupManager.displayMessage(
{
text: Alfresco.util.message("message.closeFailed", this.name)
});
}
},
scope: this
},
failureCallback:
{
fn: function(response)
{
me.closePromptActive = false;
feedbackMessage.destroy();
Alfresco.util.PopupManager.displayMessage(
{
text: Alfresco.util.message("message.closeFailed", this.name)
});
},
scope: this
}
});
}
});
})();
Alfresco.module.getServiceAcdatCloseSiteInstance = function()
{
var instanceId = "alfresco-service-acdat-closesite-instance";
return Alfresco.util.ComponentManager.get(instanceId) || new Alfresco.module.ServiceAcdatCloseSite(instanceId);
};now I don't understand how I have to add my ALF_CLOSE_ACDAT to make a simple confirmation dialog appear and then launch an action on Alfresco, but clearly I can't make the confirmation dialog appear...
If I enter ALF_DELETE_SITE the button works and brings up the confirmation dialog as it should....
At the github source code level I cannot see where the string ALF_DELETE_SITE is used to invoke the javascript code "delete-site.js"
SO IN BRIEF MY QUESTION IS HOW THE HELL DO I CONNECT "ALF_CLOSE_ACDAT " TO THE JAVASCRIPT FILE "close-acdat.js" to make the confirmation dialog appear exactly as ALD_DELETE_SITE does ?
Explore our Alfresco products with the links below. Use labels to filter content by product module.