You are not logged in.
Voici un exemple de script JCR à exécuter dans la console JCR pour supprimer tous les contenus orphelins.
A manipuler avec précaution !
Attention à bien cibler les contenus à supprimer. Dans ce script par exemple je ne cible que le contenu de type Article.
Si vous avez 38000 contenus l'exécution du script va être trop longue, je vous conseille de les supprimer 100 par 100 dans un premier temps et d'éventuellement augmenter le max si ca se passe bien.
Je vous conseille également d'exécuter ce script d'abord en laissant l'instruction "deleteContent" (ligne 36) commentée, puis de la décommenter quand vous serez sûr de supprimer les bons contenus.
var qm = session.getWorkspace().getQueryManager();
function isOrphan(contentId)
{
var query = qm.createQuery("//element(*, ametys:zoneItem)[@ametys-internal:content='" + contentId + "']", javax.jcr.query.Query.XPATH);
var nodes = query.execute().getNodes();
return !nodes.hasNext();
}
function deleteContent (content)
{
if (content.hasProperty("ametys-internal:workflowRef"))
{
var workflowNode = content.getProperty("ametys-internal:workflowRef").getNode();
workflowNode.remove();
}
content.remove();
session.save();
}
// Recherche des Article
var contentType = "org.ametys.web.default.Content.article";
var query = qm.createQuery("//element(*, ametys:content)[@ametys-internal:contentType='" + contentType + "']", javax.jcr.query.Query.XPATH);
var nodes = query.execute().getNodes();
var count = 0;
var max = 100;
while(nodes.hasNext() && count < max)
{
var content = nodes.next();
if (isOrphan(content.getUUID()))
{
var title = content.getProperty('ametys:title').getString();
var lang = content.getProperty('ametys-internal:language').getString();
var site = "no site";
if (content.hasProperty("ametys:site"))
{
site = content.getProperty('ametys:site').getString();
}
println ("Suppression du contenu " + title + "(" + lang + " - " + site + ")");
// A décommenter quand on est sur !
// deleteContent(content);
count++;
}
}
println (count + " contenus supprimés");
Bonjour,
C'est possible mais pas simplement ...
Cela nécessite de créer un plugin dans votre application, d'y définir votre propre outil de recherche (en copiant celui défini par défaut) dans le fichier plugin.xml, de le configurer avec un nombre de résultat par page de 100 (par exemple), de définir ensuite un bouton qui ouvre votre outil de recherche (toujours dans plugin.xml) et enfin de déclarer l'utilisatiion de votre bouton à la place de celui par défaut (fichier WEB-INF/param/cms-ribbon.xml).
Si vous pensez que ca en vaut la peine, je peux détailler.
Oui vous pouvez exécutez ce script dans la console du repository (http://[serveur_cms]/_repository)
Ça devrait réparer tous les sous-programmes et conteneurs
importClass(org.ametys.workspaces.repository.ConsoleHelper);
var qm = session.getWorkspace().getQueryManager();
var query = qm.createQuery("//element(*, ametys:subProgramContent)[@ametys-internal:currentStepId=1]", javax.jcr.query.Query.XPATH);
var nodes = query.execute().getNodes();
var count = 0;
while (nodes.hasNext())
{
var node = nodes.next();
var wRefId = node.getProperty("ametys-internal:workflowRef").getString();
var wRef = session.getNodeByIdentifier(wRefId);
ConsoleHelper.setProperty(wRef.getNode('oswf:currentStep'), 'oswf:stepId', new java.lang.Long(0));
wRef.save();
node.getProperty("ametys-internal:currentStepId").remove();
node.save();
count++;
}
println(count + " subprograms have been fixed");
query = qm.createQuery("//element(*, ametys:container)[@ametys-internal:currentStepId=1]", javax.jcr.query.Query.XPATH);
nodes = query.execute().getNodes();
count = 0;
while (nodes.hasNext())
{
var node = nodes.next();
var wRefId = node.getProperty("ametys-internal:workflowRef").getString();
var wRef = session.getNodeByIdentifier(wRefId);
ConsoleHelper.setProperty(wRef.getNode('oswf:currentStep'), 'oswf:stepId', new java.lang.Long(0));
wRef.save();
node.getProperty("ametys-internal:currentStepId").remove();
node.save();
count++;
}
println(count + " containers have been fixed");
Bonjour,
Oui c'est un bug connu, découvert récemment:
Nous allons le corriger très prochainement.
Cdt.
Bonjour,
Non, il n'existe pas aujourd'hui d'export RNCP pour les parcours mais c'est prévu dans de prochaines évolutions sur le module ODF.
Aujourd'hui, dans l'export RNCP de la formation, vous avez accès seulement aux libellés, code, crédits ECTS et identifiant des parcours
<content id="programContent://xxxxx">
<subprogram title="..." id="subProgramContent://xxxxx" code="FRUAI3182988BPRH6YSRIFL" ects="60"/>
<subprogram title="..." id="subProgramContent://xxxxx" code="FRUAI3182988BPRH6YSRY5Z" ects="60"/>
</content>
Exemple de XML en entrée : [object%20Object]&userLocale=fr&siteName=www&skin=odf&metadataSetName=main
Ensuite, à partir de son identifiant, Ametys fournit un helper XSLT pour récupérer la structure (parcours/années/elp) d'un parcours. Pour récupérer ses infos en XSL:
<xsl:stylesheets xmlns:odf="org.ametys.odf.OdfXSLTHelper" ....>
...
<xsl:variable name="subProgramStruct" select="odf:getSubProgramStructure($subProgramId)"/>
</xsl:stylesheets>
mais vous n'aurez rien d'autre que les identifiants, libellés et crédits ECTS des sous élements ...
Quelles sont les informations des parcours que vous auriez voulu exporter dans la fiche RNCP ?
Le problème a été corrigé pour la version 1.5.0 du plugin flipbook ()
Pour faire un lien vers un PDF en affichant une image correspondant à la première du PDF vous pouvez faire :
<a href="{resolver:resolve(metadata/[metadataPath]/@type, metadata/[metadataPath]/@path, 'true')}" title="{metadata/[metadataPath]/@filename} ({metadata/[metadataPath]/@size})">
<img src="{resolver:resolveBoundedImage(concat(metadata/[metadataPath]/@type, '-flipbook'), metadata/[metadataPath]/@path, 200, 200)}" />
</a>
Bonjour,
Quel version de java utilisez-vous ?
Java 8 n'est pas supporté sur les version 3.7.x, il faut utiliser java 6 ou 7.
Je vous renvoie sur un autre sujet du forum qui ressemble fortement à votre problème :
Les métadonnées Dublin Core sont accessibles dans les service "Contenu d'un répertoire" et "Pièce jointe d'une page" depuis la version 3.7 ()
Elles sont présentes (si non vide) dans les attributs XML des ressources.
La description d'une ressource doit pouvoir être récupérée simplement par
<xsl:value-of select="@dc_description"/>
La XSL utilisée pour la vue "Metadonnée Dublin Core" est celle-ci :
Ca peut sans doute vous aider.
Bonjour,
A quel niveau souhaitez-vous les récupérer ?
Pour une ressource de l'explorateur de ressources, il y a un bouton "Dublin Core" pour visualiser et éditer les métadonnées Dublin Core.
Il existe aussi une url dans Ametys pour exposer les infos Dublin Core au format RDF, mais c'est une URL qui n'est pas exploitée aujourd'hui, qui nécessite de connaitre l'identifiant de la ressource et qui est authentifié (nécessité d'être loggué sur le CMS)
Exemple sur le serveur de démonstration:
(se logguer avec admin/admin par exemple)
Enfin, il existe une vue "Métadonnées Dublin Core" du service "Contenu d'un répertoire" qui permet d'afficher les méta Dublin Core des fichiers d'un répertoire de l'explorateur de ressources.
Bonjour,
Dans la version 2.2 de l'ODF, l'arborescence de l'offre de formation est toujours organisée en diplôme puis domaine de formation.
A partir de la version 2.4 de l'ODF, il possible de choisir sur quels champs (nécessairement énumérés) organiser l'arborescence de l'ODF. Par exemple on peut imaginer d'organiser par domaine puis diplome, ou encore par composante puis domaine, ...
Le service liste des formations n'est donc pas très adapté à ce que vous souhaitez faire, car l'URL de la page de la liste des diplome par domaine dépend du choix d'organisation. Cette page peut par ailleurs ne pas exister si il n'a pas été choisi de construire l'arborescence par diplome puis domaine.
En 2.2, ceci étant figé, cela reste possible mais ce n'est qu'un détournement du service.
Dans Ametys, chaque page possède son propre identifiant et il est possible d'obtenir son URL via cet identifiant.
L'identifiant d'une page "domaine" en 2.2 est sous la force : domain://[degree]/[domain]?rootId=...
Par exemple : domain://XA/ALL?rootId=...
rootId étant l'identifiant de la page racine de l'ODF.
Pour pouvoir faire ce que vous souhaitez, il faudrait donc écrire
<a href="{resolver:resolve('page', 'domain://XA/ALL?rootId=...}">Licence LMD</a>
Reste que je ne suis pas sure qu'en 2.2, il soit possible de facilement récupérer la valeur de rootId ...
Pour savoir ce que fournit le service en entrée de la XSL, le mieux est de faire un <xsl:copy-of select="/"/> dans la XSL.
La valeur du code "degree" et "domain" doit pouvoir être récupérer à partir d'un élément <program>.
Bonjour,
Non ce n'est possible car la sélection du gabarit permet également de définir le type de page. Il existe 3 type de pages:
- page de contenus (avec gabarit)
- page de redirection
- page vierge
Pour les pages personnelles, ce sont des pages créées automatiquement, dont le gabarit est positionné en java.
Dans la version 3.7 du CMS, un assistant de création de page permet de créer plus rapidement une page en sélectionnant le gabarit, un contenu/service dans une seule boite de dialogue.
Bonjour,
Pouvez-vous nous transmettre les paramètres de configuration (driver et url) que vous avez saisi pour l'accès à votre base de donnée ?
Quel driver MySQL (jar) avez vous ajouté ?
Laurence
Bonjour,
Il semblerait que cela soit un bug introduit par la correction d'un autre bug
J'ai réouvert le bug chez nous. Nous allons essayer de le traiter rapidement.
Ok donc au final où se trouve le <xsl:copy-of/> ? Dans le fichier these-main.xsl ? Car le resultat de ce copy-of est vraiment très étonnant ...
Avez-vous essayer de faire :
<xsl:if test="head/meta[@name='tags/ACTU']">...</xsl:if>
plutot que
<xsl:if test="html/head/meta[@name='tags/ACTU']">...</xsl:if>
Il me semble dans votre cas - d'après votre copy-of - que vous êtes déjà au niveau du noeud <html>
En tout cas, les données y sont bien, votre problème semble être seulement un problème de path XSL.
En revanche je suis étonnée du résultat de votre copy-of ... Vous dites que vous êtes dans une XSL de rendu d'un contenu nomducontenu-main.xsl, mais dans une telle XSL, le XML d'entrée devrait plutot être:
<view>
<content id="" title="...">
<metadata>
<title>....</title>
....
</metadata>
<tags>
....
</tags>
</content>
</view>
En effet dans la conversation précédente, la problématique se posait dans une remontée de contenu, et non dans le rendu d'un contenu.
Bonjour,
Oui il vous manque certainement quelque chose .. sans doute des jars. Avez-vous des erreurs dans les logs de l'application (répertoire WEB-INF/logs/) ?
Quelle version avez-vous installé ? La 2.2.0 téléchargeable depuis le site ?
Cdt.
Bonjour,
Le fichier de paramétrage Apogee pour les ELP est le fichier WEB-INF/param/odf/apogee/educationalElements.xml
Par défaut, la requête SQL effectuée par le moteur de recherche d'import des ELP est la suivante:
<select id="searchEducationalElements" parameterClass="java.util.Map" resultMap="educationalElementSearchItem">
SELECT elp.COD_ELP, elp.COD_NEL, elp.LIB_ELP
FROM element_pedagogi elp
WHERE elp.ETA_ELP='O'
AND elp.TEM_SUS_ELP='N'
<isPropertyAvailable prepend="and" property="type">
upper(elp.COD_NEL) LIKE CONCAT(upper(#type#), '%')
</isPropertyAvailable>
<isPropertyAvailable prepend="and" property="code">
upper(elp.COD_ELP) LIKE CONCAT(upper(#code#), '%')
</isPropertyAvailable>
<isPropertyAvailable prepend="and" property="title">
upper(elp.LIB_ELP) LIKE '%' || upper(#title#) || '%'
</isPropertyAvailable>
ORDER BY elp.COD_ELP
</select>
Est-ce celle-ci que vous exécutez dans SQLDevelopper ?
Bonjour,
Avez-vous des erreurs javascripts ?
Bonjour,
Oui c'est comme cela qu'il faut faire. Cette erreur a été remontée dans notre JIRA et corrigée dans les prochaines version d'Ametys ODF :
Bonjour,
Non il n'existe pas de mécanisme d'héritage entre service. Il vous faut donc redéfinir tous les paramètres nécessaires dans la déclaration de votre service.
Cdt.
Bonjour,
Il semble qu'un fichier XML de paramétrage contient une syntaxe XML non valide. La stack trace copiée dans votre message n'étant pas complète je ne sais pas exactement de quel fichier il s'agit. Mais d'après le début du log, je dirais qu'il s'agit du fichier cms-ribbon-default.xml, à la ligne 20.
Pouvez-vous vérifier votre fichier à cette ligne là ?
En y regardant mieux, c'est tout votre test qui n'est pas bon. Vous êtes déjà au niveau du "content", il faut donc faire
<xsl:template match="content">
<xsl:variable name="classitem">item<xsl:if test="position() = 1"> active</xsl:variable>
</xsl:template>
Bonjour,
Oui un nouveau plugin Web Analytics propose l'intégration de piwik. Le plugin n'est pas encore disponible dans une version finale mais vous pouvez dès à présent le tester en télécharger les snapshots (version de développement) et en vous référant à la documentation
Cdt.
Une fois l'application configurée, revenez sur l'écran d'accueil de l'interface d'administration (http://domain:8080/math/cms/_admin/index.html), puis allez sur l'écran de gestion des utilisateurs pour créer un nouvel utilisateur :
Ensuite suivez les étapes décrites par Raphael dans le 2e post pour vous connecter avec l'utilisateur créé sur le back-office à l'adresse http://domain:8080/math/cms/index.html
Si vous souhaitez modifier le mot de passe pour accéder à l'interface d'administration, qui par défaut est "admin", suivez les instructions ici :
Comment as-tu récupéré le composant ContentWorkflowHelper ?
Il s'agit d'un composant il faut donc le récupérer par un lookup (dans la méthode service de AmetysContentFactory par exemple):
private ContentWorkflowHelper _contentWorkflowHelper;
public void service(ServiceManager manager) throws ServiceException {
_contentWorkflowHelper = (ContentWorkflowHelper) manager.lookup(ContentWorkflowHelper.ROLE)
}
Ces erreurs me font penser que tu as plutôt fait:
ContentWorkflowHelper contentWorkflowHelper = new ContentWorkflowHelper()