vendredi 24 mai 2013

Forbidden dans la page d'accueil

Si vous avez un joli

Forbidden


A la place de la page d'accueil.
C'est normal! Dans la nouvelle version, le site n'est pas accessible aux personnes non enregistrées.
Certes le message pourrait être confondu avec une erreur d'Apache mais il s'agit d'une erreur généré
dans /modules/core/classes/request.php (l274)

https://github.com/parsimony/parsimony_cms/blob/master/modules/core/classes/request.php#L274

Pour régler ce problème, allez dans Accounts --> Permissions --> Anonymous
Et dans le module blog cochez la case "Enable The Blog Module for Anonymous Role"

mardi 5 mars 2013

Modifier la barre du haut

S'il vous prend l'envie de modifier la barre du haut de Parsimony voilà quelques informations utiles:

Avant de modifier l'interface de Parsimony, gardez bien à l'esprit quand cas de mise à jour ces modifications seront perdues. Elles sont donc déconseillés.

La vue de la barre du haut se trouve ici:
/modules/admin/block/menu/view.php

Elle est divisé en 4 parties:
<ul class="menu">
--> L’icône de Parsimony / [Domaines] (pour les multi-sites) / Comptes
<ul class="modesSwitcher">
--> Preview / Edit / Creation
<ul class="menu">
--> Desktop/Max/Portrait/Landscape
<div class="rightpart">
Version/Langue/Login/Logout

Rajouter des icônes

Comment afficher un icône (voir le lien)

Comment mettre un tooltip

Pour rajouter une bulle avec la description de l’icône il faut mettre la classe : tooltip
<a class="tooltip"></a>

Puis préciser le texte dans le tooltip

Soit directement:






<a class="tooltip" data-tooltip="<?php echo t('Voici la description',false); ?>"</a>

Soit avec une description dans une div, par exemple avec la div #description
<span class="tooltip" data-tooltip="#description"></span>
<div id="description">
<div><h1>Ceci est une description</h1>
En HTML</div>
</div>

Il ne faut pas oublier de rajouter dans modules/admin/style.css
#description{display:none;}
Afin que le texte de la div description ne soit affiché que lorsque la souris passe au dessus de l'icône.

Afficher un menu

Afin de mieux comprendre ce que nous allons faire, voici un schéma explicatif

Nous allons créer un lien hypertexte (notre icône) qui va déclencher une fonction dans le contrôleur qui va ouvrir une boite de dialogue.

Il va donc nous falloir 
--modifier la vue de la barre
--rajouter une fonction dans le contrôleur
--créer la vue de la boite de dialogue

Pour créer une boite de dialogue, lorsque l'on clique sur l'icône
il faut rajouter la classe action et nommer l'action.

<a href="#" class="action" rel="getViewNomdumenu">

Puis dans le contrôleur/modules/admin/module.php à la ligne 828 (par exemple)
Rajouter cette fonction
/**
* Get the the view of Nom du Menu
* @return string
*/
    protected function getViewNomdumenuAction() {
return $this->getView('nomdumenu','desktop');
    }
Puis créer un fichier pour la vue de la boite de dialogue
Dans /modules/admin/views/desktop/nomdumenu.php
Tout ce qui sera présent dans nomdumenu.php sera affiché dans la boite de dialogue.

Les icônes de parsimony

La liste des icônes utilisés dans parsimony se trouve ici:
/modules/admin/style.css à la ligne 931

Elles sont constituées des icônes présents dans ces trois fichiers
admin/img/defaultsprite.png
admin/img/icons_white.png
admin/img/icons.png

icons_white

Voici la liste des icônes ui-icons white (icônes blanc sur fond noir)
http://jquery-ui.googlecode.com/svn/tags/1.6rc5/tests/static/icons.html
(Cliquer sur toggle text pour avoir le nom à coté des icônes)

Pour utiliser un icône icons-white il vous suffit de mettre ui-icon-white et le nom de l'icone dans la classe d'un SPAN
Par exemple ceci:
<span class="ui-icon-white ui-icon-arrow-4"</span>
Donnera cela:



icons

(En cours de rédaction)

defaultsprite

(En cours de rédaction)



samedi 9 février 2013

Container Tab

(Uniquement dans la version 2.5)

Vous pouvez maintenant classer vos blocs dans des onglets.

A l'aide du nouveau container Tab.






Un exemple avec un simple bloc Wysiwyg

mardi 5 février 2013

Animation Ajax

Dans Parsimony, vous pouvez charger les pages avec Ajax.

Pour cela il vous faut activer Configuration -> Ajax -> Ajax Navigation

Maintenant, lorsque l'on change de page on a une animation (la partie centrale tournent)

Si vous voulez changer l'animation, il vous suffit de changer le fichier /modules/core/css/ajaxNav.css

Voici une liste d'animation CSS : http://www.w3schools.com/cssref/css3_pr_transform.asp

A savoir:
from{ --> Etat au début
to{ --> Etat final

lundi 4 février 2013

Impossible d'accéder à connect


Vous venez d'installer Parsimony et vous avez:

Not Found

The requested URL /connect was not found on this server.


  • Vérifier que vous avez installer mod_rewrite : a2enmod rewrite
  • Vérifier que vous avez bien le .htaccess de copier dans /var/www
  • Dans le configuration de votre VirtualHost (/etc/apache2/sites-available)
    Il faut AllowOverride All
  • Redémarrer apache2 (service apache2 restart)

jeudi 31 janvier 2013

Effacer un module

Vous voulez effacer un module ? personnellement, je n'ai pas encore trouvé comment faire ça depuis l'interface d'administration voila la technique manuelle:

- Effacer votre module dans
/modules
/profiles/www/modules/
/profiles/www/backup/modules/

Puis dans config.php
Effacez à la dernière ligne
$config['activeModules']['NOMDUMODULE'] = '1';

Normalement si vous avez bien fait cela, vous devriez ne plus voir votre module (et pas un vilain écran blanc aussi).

Créer un nouveau bloc (chapitre 1)

Nous allons apprendre à créer un nouveau bloc en nous concentrant (pour le moment) sur le côté graphique.

Certaines parties du code où la licence présente la mention OSL (open source licence) en entête ne peuvent être modifiées sans en redistribuer le code sauf si vous acceptez de payer une licence commerciale.

Je tiens aussi à rappeler que ce blog fait office de carnet de notes, toutes les informations contenues ici ne sont pas vérifiées. N'hésitez pas à rapporter la moindre erreur dans les commentaires (aucune inscription demandée)

Pour ce tutoriel, nous allons essayer de concevoir un bloc permettant de créer un formulaire de contact.

Copie du bloc Form Add

Nous allons reprendre le bloc formadd qui correspond à peu de choses près à ce que nous voulons créer.

Pour cela, nous copions le dossier /modules/core/blocks/formadd/ vers /modules/core/blocks/contactform

Un bloc contient plusieurs fichiers:
block.php : Contient la partie fonctionnelle
icon.png : l'icône qui s'affichera dans le menu
view.php : Affichage du bloc dans les pages
adminView.php: (optionnel) Contient la page de configuration du bloc
script.js: (optionnel) Décrit les parties accessible dans Design
default.css: (optionnel) CSS par défaut

Renommage du bloc Form Add

Modifions le fichier block.php
 * @title Contact Form
 * @description displays an contact form
 * @block_category database
(inutile de modifier la catégorie)

Bien qu'ils s'agissent de commentaires cette partie à une influence sur l'interface d'administration.


Il faut aussi modifier le nom de la classe:
class contactform extends \block {


Ainsi que le fichier script.js
function block_contactform() {
this.name = "contactform";

Voilà nous avons un nouveau bloc fonctionnel

Si le back-office se met à charger indéfiniment, vérifier votre console Javascript et les logs d'erreur d'apache.

Évidemment, nous allons aussi créer une nouvelle icône de la taille par défaut: 42x42







Voilà nous avons notre nouveau bloc, il fonctionne comme Form Add.

Modifier l'apparence de notre bloc

Modification du CSS

Commençons par modifier l'apparence de notre bloc afin d'obtenir un design de formulaire de contact de base visuellement acceptable.

Afin de pouvoir le faire, il nous faut créer un fichier default.css dans /modules/core/blocks/contactform
Pour savoir quelle partie nous pouvons modifier, allons chercher l'information dans script.js

this.stylableElements = {
"form":"form",
"form parts":"form div",
"labels":"label",
"inputs":"input",
"textareas":"textarea",
"selects":"select",
"submit button":".submit",
"notification":".notify",
"positive notification":".positive",
"negative notification":".negative"
    }

Ici, nous pouvons voir tous les champs modifiables dans l'interface d'administration.
















Il nous suffit de récupérer la partie droite dans notre fichier default.css

form{}
form div {}
label {}
input {}
textarea {}
select {}
.submit {}
.notify {}
.positive {}
.negative {}

Tout ce que nous changerons dans ce fichier sera appliqué par défaut lorsque l'on créera un nouveau bloc.

Après modification de nos balises CSS voilà ce que donne notre formulaire de contact.
default.css

















Nous pouvez très bien élaborer le design directement dans l'interface d'administration de Parsimony et ensuite récupérer le code CSS


Modification de l'HTML


Pour commencer, nous allons changer le texte qui est affiché par défaut lors de l'envoi d'un formulaire

Dans block.php, la fonction public function init() {} définit la configuration par défaut de notre bloc

Modifions les messages par défaut de succès et d'échec lors de l'envoi du formulaire de contact.
$this->setConfig('success', 'Your message has been submitted');
$this->setConfig('fail', 'Error: Try to resend the message');


Puis nous allons changer le texte du bouton d'envoi par défaut

Dans block.php, la fonction public function generateViewAction($module,$entity) {} génère le code par défaut de la vue.

$html .= "\t".'<input type="submit" value="<?php echo t(\'Send your mail\', FALSE); ?>" name="add" class="submit">'.PHP_EOL;

Nous changeons le texte par défaut du bouton submit afin qu'il affiche "Send your email" (envoyer votre email)
À savoir: t('') est une fonction qui affiche une traduction si elle existe dans /modules/core/locale

Nous pouvons très bien remodifier ces informations depuis l'interface d'administration, il ne s'agit que du texte par défaut.

Et voilà, nous avons un bloc qui nous permet de générer des formulaires de contacts rapidement.

Dans le prochain chapitre, nous allons rajouter des fonctionnalités à notre bloc: la possibilité d'envoyer des emails.


Créer un nouveau bloc (chapitre 2)

Nous avons appris précédemment (chapitre 1) comment créer un nouveau bloc et en changer l'apparence.
Nous allons , maintenant , découvrir comment y ajouter des fonctionnalités.

Revenons à notre exemple de formulaire de contact.
Ce serait pratique de recevoir un email lorsqu'on répond au formulaire.

Pour cela, nous allons rajouter un champ dans la configuration pour renseigner l'email qui va nous servir à recevoir ces notifications.

Modification de l'interface d'administration.

Revenons au fichier block.php  (/modules/core/blocks/contactform/block.php si vous suivez bien)

Nous allons rajouter un paramètre à notre configuration.

D'abord à la création du bloc, nous donnons une valeur par défaut à notre nouveau paramètre:
Pour cela dans
public function init() {}
Nous rajoutons ceci
$this->setConfig('notifyemail', 'exemple@exemple.com');

Où 'notifyemail' est le nom du paramètre et 'exemple@exemple.com' la valeur par défaut.

Puis à la sauvegarde de la configuration, nous lui précisons de sauvegarder ce paramètre.

Dans 
public function saveConfigs(){}
Rajouter
$this->setConfig('notifyemail', $_POST['notifyemail']);

Et voilà, notre paramètre est crée!

Il nous faut toutefois concevoir le champ dans l'interface d'administration pour pouvoir le modifier.

Ajout d'un champ dans l'interface d'administration

L'interface d'administration se modifie dans adminView.php

Rajouter avant
<div class="placeholder">
    <label><?php echo t('Success Message', FALSE); ?></label>

Ceci
<div class="placeholder">
    <label><?php echo t('Email to notify', FALSE); ?></label>
    <input type="text" name="notifyemail" value="<?php echo $this->getConfig('notifyemail'); ?>">
</div>

Voilà l’apparence de ce code:

Quelques précisions.
name= doit être identique à la valeur $_POST[''] dans block.php
$this->getConfig('notifyemail')  : Récupère la configuration du paramètre notifyemail (créé précédemment)

Vous pouvez tester dans l'interface d'administration les valeurs sont bien sauvegardés.

Modification l'action de l'envoi du formulaire

Nous n'avons toujours pas jeté un coup d'oeil à view.php 
C'est ici que nous allons dire à notre bloc d'envoyer l'email.

Étudions un peu son fonctionnement.

if($this->getConfig('module'))
Vérifie que le module est bien configuré sinon il affiche Please Configure this block

if(isset($_POST['add']))
Tout ce qui est encapsulé dans cet if est exécuté lorsque le formulaire est répondu.

 include(PROFILE_PATH .$this->getConfig('pathOfView'));
Cette ligne récupère la vue crée dans l'interface d'administration (et présent dans le dossier /profiles)

Ce code est régénéré par generateViewAction dans block.php si l'option régénérer la vue est actif
(Ne vous laissez pas avoir par le  if($entity->insertInto($_POST)) en plus de vérifier si la requête SQL s'est bien déroulée, ils rajoutent les valeurs rentrées dans la base de données)

Nous allons faire simple (pour commencer),  lorsque le formulaire est rempli, un email vide est envoyé.
Afin de faire ceci, nous allons utiliser la fonction: 

Elle fonctionne comme ceci
sendMail($to, $from, $replyTo, $subject, $body)

Pour l'email nous allons simplement mettre dans $to,$from,$replyTo celui configurerait dans notre paramètre notifyemail.

tools::sendMail($this->getConfig('notifyemail'),$this->getConfig('notifyemail'), $this->getConfig('notifyemail'),$subject,$body);

Pour le sujet ($subject) nous allons mettre le nom du bloc pour cela il nous faut le récupérer comme ceci
$form_name = $this->getName();
Puis rajouter un peu de texte (traduisible)
$subject = $form_name.' '.t('Responded');

Au final, voilà le code:
if(isset($_POST['add'])){
        if($entity->insertInto($_POST)){
            echo '<div class="notify positive">'.t($this->getConfig('success')).'</div>';
        }else{
            echo '<div class="notify negative">'.t($this->getConfig('fail')).'</div>';
        }
$form_name = $this->getName();
$subject = $form_name.' '.t('Responded');
tools::sendMail($this->getConfig('notifyemail'),$this->getConfig('notifyemail'), $this->getConfig('notifyemail'),$subject,$body);
    }

Si vous avez bien paramétré votre serveur mail, et mis la bonne adresse dans l'interface d'administration, vous devriez recevoir un email avec comme sujet NOM_DU_BLOC responded.

Voilà pour ce chapitre ! Pour le prochain, nous allons rajouter les valeurs du formulaire dans le corps de notre email.



mercredi 30 janvier 2013

Ayez plus rien ne marche

Problème de bloc

Si vous vous retrouvez avec un bloc qui vous empêche d'utiliser l'interface d'administration,
il vous suffit de le chercher dans modules/core/views/desktop/NOMDUBLOC.php et de corriger ce qui pose problème.

Récupérer son mot de passe après réinitialisation accidentelle

Si vous avez réinitialisé votre mot de passe alors que vous n'avez pas paramétré votre serveur mail vous avez encore la solution de la dernière chance:

Dans /modules/core/classes/user.php

L152
Rajouter 
echo $newPass;
Après
 \app::getModule('core')->getEntity('user')->where('mail = :mail')->update(array('pass' => $newPass, 'mail' => $userMail));

Votre mot de passe apparaitra dans une boite de dialogue javascript (<trollface> ça serait trop facile sinon </trollface>) 


N'oubliez pas d'enlever la ligne après !!

mardi 29 janvier 2013

Vos questions

Vos questions

Si vous avez des questions, n'hésitez pas à les poser ici, les commentaires sont sans demande d'inscription (mais soumis à vérification)

Gestion de l'envoi d'email

Si vous voulez tester l'envoi d'email sur un serveur de test.

Allez dans Configuration -> Mailing 

Et changer Send Type par SMTP et mettez le serveur SMTP de votre FAI.


Designer les emails

Vous voulez changer les emails par défaut ? Vous pouvez évidemment les modifier à la main en allant dans : modules\admin\views\mail\ mais il y a une solution plus simple !

Présentation des emails

Tout d'abord, regardons un peu les emails disponibles dans modules\admin\views\mail\

remp.php : Email de renvoi de mot de passe

















registration.php : Email de création de comptes

































Il y en a un troisième parsimailing.php pour autant il ne semble pas être utilisé.

Maintenant pour le modifier directement voilà la procédure :

Créer une page temporaire

Modules -> Ajouter une page
Donnez-lui le nom que vous voulez

Puis créer un bloc Code dans Content







Cliquez sur le bloc -> Configure
Récupérez le code de l'email que vous voulez modifier et copiez-le. (modules\admin\views\mail\)










Sauvegardez et voilà le résultat:

Vous pouvez modifier le code dans Configure, et pour finir, une fois que vous êtes satisfait de l'apparence, recopier le code dans les fichiers PHP respectifs.

J'ai testé assez rapidement avec le bloc wysiwyg, cependant cela ne semble pas marcher.

Alternative

Vous pouvez aussi accéder aux emails en mettant ces URL:
/modules/admin/views/mail/remp.php
/modules/admin/views/mail/registration.php








Générer un tableau de données

Ajouter un formadd







Choisissez un ou des tables












Choissisez les champs que vous voulez afficher
Puis dans View ajouter au début du code

<table border="1">
  <tr>
    <th><strong>ID</strong></th>
    <th><strong>NOM</strong></th>
    etc...
  </tr>
...
<tr> <div class="itemscope">
<td><div class="itemprop id_test"><?php echo $line->id_test; ?></div></td> <td><div class="itemprop nom"><?php echo $line->nom->display($line); ?></div></td> etc...
</div>
</tr>
...
<table>


Et voilà vous avez un tableau de données.







dimanche 27 janvier 2013

Les fichiers et dossiers

Voici une description brève et incomplète des différents fichiers et dossiers du CMS Parsimony.

Je rajouterais au fur et à mesure mes découvertes.

/
config.php
Ce fichier contient la configuration de parsimony

install.php
Ce fichier contient l'installateur de parsimony (il n'est plus accessible après installation)

index.php

.htaccess
Gère le module rewrite du serveur web afin d'utiliser la réécriture d'url (indispensable au fonctionnement de parsimony)

/cache
Contient les fichiers en cache (images,scripts,traductions de l'interface d'administrations)

/lib
Contient les différentes bibliothèques utilisées par le back et le front office

codemirror         : CodeMirror (editeur de code)
colorpicker        : DHTML Color Picker (Sélectionneur de couleurs)
csspie                : CSS3 Pie(Compatibilité CSS3 sur IE9)
dnd                   : (Drag'n'drop Jquery)
fancybox           : Fancy Box (LightBox)
html5slider        :  HTML5 Slider (Implémentation de input type=range pour Firefox 4 et +)
fracs                 :  Jquery.fracs (Détermine les parties visibles des éléments HTML dans l'espace)
glyphish            :  Glyphish (Icônes)
html5editor       :  Editeur wysiwyg
jquery              : Jquery (Bibliothéque javascript aux nombreux usages)
jqueryui           : Jquery UI (La version pour créer des interfaces utilisateur)
jsPlumb           : Js Plumb (Système pour lier des objets utilisés dans l'éditeur de base de données)
nestedSortable : Nested Sortable (Système pour améliorer les listes triables de Jquery)
phpmailer         : PHP Mailer (Envoi de mail en PHP)
simplehtmldom : Simple HTML DOM  Parseur de DOM afin de facilement manipuler du HTML
tooltips              : Système pour gérer les tooltips (Jquery)
upload               : Système de gestion des uploads (Jquery)

/modules
Contient les modules de Parsimony

admin : Back Office de Parsimony
admin/core/classes/entity.php : Formulaire pour modifier un enregistrement n
admin/views/mail : Structure des Email 
core   : Le module de base de Parsimony contient les blocs et fonctionnalités de bases
core/blocks : Les blocs sont présents ici
La création d'un module créera un nouveau dossier avec un fichier module.php

/profiles
Contient les profils de Parsimony

Ce dossier contient les données "modifiés" des modules, des fichiers de configurations  ainsi que les backups des différents fichiers.
En effet parsimony génère des fichiers php ici , les fichiers dans modules ne sont que les squelettes des objets.

Ils n'y a aucun intêret de modifier ces fichiers directement.