Newer
Older
/* ---------------------------------------------------------------
Copyright 2020 Le Filament
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
------------------------------------------------------------------*/
odoo.define("cgscop_alfresco.form_widgets", function (require) {
"use strict";
var form_widgets = require("cmis_web.form_widgets");
var lf_form_widgets = require("lefilament_alfodoo.form_widgets");
var session = require("web.session");
form_widgets.CmisObjectWrapper.include({
* Surcharge les fonction parse_object (téléchargement)
* et get_content_url (preview) pour passer le ticket
* l'url appelée
*/
parse_object: function (cmis_object) {
this._super.apply(this, arguments);
if (this.cmis_session.alf_ticket) {
this.url = this.cmis_session.getContentStreamURL(
this.objectId,
"attachment",
{alf_ticket: this.cmis_session.alf_ticket}
);
}
},
get_content_url: function () {
var options = {};
if (this.cmis_session.alf_ticket) {
options = {alf_ticket: this.cmis_session.alf_ticket};
return this.cmis_session.getContentStreamURL(
this.objectId,
"inline",
options
);
form_widgets.FieldCmisFolder.include({
/**
* Surcharge la fonction d'initialisation de la session CMIS pour
* passer le token de l'utilisateur
*/
init_cmis_session: function () {
var self = this;
$.when(this.cmis_config_loaded).done(function () {
self.cmis_session = cmis.createSession(self.cmis_location);
self.cmis_session.setGlobalHandlers(
self.on_cmis_error,
self.on_cmis_error
);
// CGSCOP : appel vers la fonction custom
self._rpc({
route: "/web/alfresco/session",
params: {
username: session.username,
},
}).then(function (result) {
self.cmis_session.alf_ticket = result;
self.cmis_session.setCredentials("ROLE_TICKET", result);
});
self.cmis_session_initialized.resolve();
self.cmis_session.setCharacterSet(document.characterSet);
});
load_cmis_repositories: function () {
/**
* Surcharge la fonction de chargement des repositories après initialisation
* du dossier initial pour recharger correctement la page
*/
var dfd = $.Deferred();
var self = this;
if (this.cmis_session.repositories) {
return dfd.resolve();
}
if (self.cmis_session.alf_ticket) {
self.cmis_session
.loadRepositories()
.ok(function (data) {
dfd.resolve();
})
.notOk(function (error) {
self.on_cmis_error(error);
dfd.reject(error);
});
} else {
// CGSCOP : appel vers la fonction custom
self._rpc({
route: "/web/alfresco/session",
params: {
username: session.username,
},
}).then(function (result) {
self.cmis_session.alf_ticket = result;
self.cmis_session.setCredentials("ROLE_TICKET", result);
self.cmis_session
.loadRepositories()
.ok(function (data) {
dfd.resolve();
})
.notOk(function (error) {
self.on_cmis_error(error);
dfd.reject(error);
});
return dfd.promise();
},
});
lf_form_widgets.CmisMetadataDialog.include({
/*
* Surcharge la fonction on_click_metadata
* pour la gestion des erreurs spécifique à la CG Scop
*/
on_click_metadata: function () {
var self = this;
this.metadata = {"cmis:name": Date.now().toString() + "_" + this.file.name};
_.each(this.parent_metadata, function (meta) {
if (meta.value) {
self.metadata[meta.name] = meta.value;
} else if (meta.field_value) {
self.metadata[meta.name] = self.record[meta.field_value];
} else {
self.metadata[meta.name] = self.$el.find(
"#" + meta.name.replace(":", "-")
)[0].value;
}
});
this.cmis_session
.createDocument(
this.parent_cmisobject.objectId,
this.file,
this.metadata,
this.file.mimeType
)
.ok(function (new_cmisobject) {
self.getParent().trigger("cmis_node_created", [new_cmisobject]);
self.$el.parents(".modal").modal("hide");
})
.notOk(function (error) {
console.log(error);
if (error) {
console.error(error.text);
var jerror = JSON.parse(error.text);
if (jerror.exception === "objectNotFound") {
self.getParent().refresh_datatable();
self.$el.parents(".modal").modal("hide");
return;
}
});
},
});