Grocery crud et codeigniter


Voila longtemps que je ne me suis pas remis à la programmation php. Ce langage de programmation avait l'avantage d'être trés accessible à tous. Mais il était trop permissif et présentait des failles de sécurités. Des framework sont apparus pour faciliter la tâches de programmeurs. Je m'étais initié à CodeIgniter qui il y a quelques années (2010 déjà). J'avais choisis ce framework car il était accessible, bien documenté et avait une bonne communauté. De plus il permettait de s'installer sur des serveurs mutualisés. Il suivait la conception MVC Modèle Vue Controleur pour bien séparer l'affichage du moteur.

Ce framework a eu une période de flotement et a un peu perdu de sa popularité car la société qui l'éditait (EllisLab) a arrété son développement. Et certains on douté sur la pérénité de ce framework. En 2014 CodeIgniter a trouvé un repreneur :  British Columbia Institute of Technology. Sa maintenance et son développement continuent.

La version stable actuelle de CodeIgniter et la version 3.1.4 Cette version reçoit actuellement uniquement des corrections. Une nouvelle version est en développement pour être plus en phase avec ce qu'il se pratique aujourd'hui. Son développement avance bien mais n'est pas encore prête pour une mise en production. Pour suivre son développement voir la page.

Travailler avec un framework est soit disant plus rapide mais c'est sans compter sur son apprentissage. Je me pose la question sur l'avantage de la rapidité même une fois. L'avantage est ailleur. Le code est plus propre est plus sûr. Mais le but de cet article n'est pas de parler d'un framework ni de CodeIgniter mais de Grocery Crud.

Create a full stable CRUD in 30 seconds!


L'idée de Grocery Crud est d'utiliser CodeIgniter et de nous aider pour créer des gestions de tables (création, modification et suppression). Créer une gestion de table en 30 secondes. Et là on gagne du temps.
 J'ai testé et oui ça marche.

Voici le lien sur la documentation si vous voulez aller plus loin

Installation

On considère que vous avez déjà installé CodeIgniter. L'installation est très simple. Vous devez juste copier tous les fichiers dans votre projet et vous serez prêt pour utiliser Grocery CRUD.

Configuration

Si vous ne l'avez pas déjà fait, allez dans le fichier application/config/database.php et compléter les informations pour la base de donnée
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '1234'; //Pretty secure don't you think?
$db['default']['database'] = 'my_new_cms';

Exemple

Voici maintenant un exemple tout simple de gestion de client

Nous allons créé manuellement la table pour en faire la saisie. Vous pourrez ensuite changer avec votre table.


 
CREATE TABLE IF NOT EXISTS `employees` (
  `employeeNumber` int(11) NOT NULL AUTO_INCREMENT,
  `lastName` varchar(50) NOT NULL,
  `firstName` varchar(50) NOT NULL,
  `extension` varchar(10) NOT NULL,
  `email` varchar(100) NOT NULL,
  `officeCode` varchar(10) NOT NULL,
  `file_url` varchar(250) CHARACTER SET utf8 NOT NULL,
  `jobTitle` varchar(50) NOT NULL,
  PRIMARY KEY (`employeeNumber`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1703 ;
 
 
INSERT INTO `employees` (`employeeNumber`, `lastName`, `firstName`, `extension`, `email`, `officeCode`, `file_url`, `jobTitle`) VALUES
(1002, 'Murphy', 'Diane', 'x5800', 'dmurphy@classicmodelcars.com', '1', '', 'President'),
(1056, 'Patterson', 'Mary', 'x4611', 'mpatterso@classicmodelcars.com', '1', '', 'VP Sales'),
(1076, 'Firrelli', 'Jeff', 'x9273', 'jfirrelli@classicmodelcars.com', '1', '', 'VP Marketing'),
(1088, 'Patterson', 'William', 'x4871', 'wpatterson@classicmodelcars.com', '6', '', 'Sales Manager (APAC)'),
(1102, 'Bondur', 'Gerard', 'x5408', 'gbondur@classicmodelcars.com', '4', 'pdftest.pdf', 'Sale Manager (EMEA)'),
(1143, 'Bow', 'Anthony', 'x5428', 'abow@classicmodelcars.com', '1', '', 'Sales Manager (NA)'),
(1165, 'Jennings', 'Leslie', 'x3291', 'ljennings@classicmodelcars.com', '1', '', 'Sales Rep'));

On va maintenant créer deux sources. Si vous avez quelque notion de CodeIgniter cela aide.

Le controleur : (application/controlleurs/Main.php)
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Main extends CI_Controller {
 
function __construct()
{
        parent::__construct();
 
/* Standard Libraries of codeigniter are required */
$this->load->database();
$this->load->helper('url');
/* ------------------ */ 
 
$this->load->library('grocery_CRUD');
 
}
 
public function index()
{
echo "<h1>affichage par défaut</h1>";//Just an example to ensure that we get into the function
die();
}
 
public function employees()
{
$crud = new grocery_CRUD();
$crud->set_table('employees');
$output = $crud->render();
 
$this->_example_output($output);        
}
 
function _example_output($output = null)
 
{
$this->load->view('template.php',$output);    
}
}
 
/* End of file Main.php */
/* Location: ./application/controllers/Main.php */


Et le source vue (application/views/template.php)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
 
<?php 
foreach($css_files as $file): ?>
    <link type="text/css" rel="stylesheet" href="<?php echo $file; ?>" />
 
<?php endforeach; ?>
<?php foreach($js_files as $file): ?>
 
    <script src="<?php echo $file; ?>"></script>
<?php endforeach; ?>
 
<style type='text/css'>
body
{
    font-family: Arial;
    font-size: 14px;
}
a {
    color: blue;
    text-decoration: none;
    font-size: 14px;
}
a:hover
{
    text-decoration: underline;
}
</style>
</head>
<body>
<!-- Beginning header -->

<!-- End of header-->
    <div style='height:20px;'></div>  
    <div>
<?php echo $output; ?>
 
    </div>
<!-- Beginning footer -->
<div>Footer</div>
<!-- End of Footer -->
</body>
</html>

Si tout est bon on devrait voir sur la page

http://domaine/projet/index.php/main/employes

En résumé avec quelques lignes de codes on peut gérer une table.

public function employees()
{
$crud = new grocery_CRUD();
$crud->set_table('employees');
$output = $crud->render();
 
$this->_example_output($output);        
}
 
function _example_output($output = null)
 
{
$this->load->view('template.php',$output);    
}

Comment activer le mode UserDir sous Apache

Le mode UserDir est une fonctionnalité bien pratique car elle permet de donner la possibilité pour chaque utilisateur de placer ses sources dans un répertoire public_html pour développer un site web et de tester sur l'adresse
http://localhost/~user

Voici un tuto valable pour Ubuntu 16.04 pour les autres versions cela ne devrait pas être trés différent.

1 : Avoir un serveur php qui tourne en local. Plus de détail sur cela dans l'articleInstallation d'un serveur php

2 : Activer le mode userdir avec la commande suivante

sudo a2enmod userdir

3 : Modifier le fichier de configuration de php
/etc/apache2/mods-available/php7.0.conf (pour php 5 il doit avoir un autre fichier pour cela)

Commenter les lignes vers la fin du fichier comme l'exemple ci-dessous


# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
##<IfModule mod_userdir.c>
##    <Directory /home/*/public_html>
##        php_admin_flag engine Off
##    </Directory>
##</IfModule>
4 : Relancer apache
sudo service apache2 restart
Voilà Si vous mettez un fichier php avec par exemple le code suivant
<?php
   phpinfo();
?>

Dans un répertoire public_html de votre home, vous pouvez tester facilement si ça marche.

Un grand merci à 1f0r de m'avoir aidé.

Installation d'un serveur php sur Ubuntu 16.04

Une mise à jour de Ubuntu 14.04 vers 16.04 s'est bien passée sauf que le serveur php ne fonctionne pas comme avant. Voici une procédure pour tout réinstaller depuis le début.
Donc la première étape a été de tout désinstaller les paquet apache php et mysql.

Puis on lance la ligne de commande
sudo apt-get install apache2 php mysql-server libapache2-mod-php php-mysql
A ce stage on test avec un navigateur avec l'adresse localhost
Maintenant pour tester php on va faire un petit fichier texte avec ce code

<?php
   phpinfo();
?>
on va enregistrer dans le répertoire /var/www/html avec le nom phpinfo.php
et on lance un navigateur
http://localhost/phpinfo.php
On devrait voir l'écran phpinfo donnant des information sur la verison php si  c'est le cas tout va bien.
 
Une petite configuration pour permettre à un utilisateur de mettre les sources dans son propre répertoire
sudo a2enmod userdir
sudo service apache2 restart
Quand on va sur l'adresse http://localhost/~user
On voit bien les fichiers présents dans le répertoire public_html mais le fichier phpinfo.php affiche une page blanche.

Conclusion, il doit avoir un problème avec le module apache userdir et php. Si quelqu'un a une solution je suis preneur d'une piste. L'idée était de mettre ses fichiers php dans le home et non dans /var/www/public_html

Cela fonctionnait trés bien jusqu'à présent. On va essayer de faire un serveur virtuel.

Finalement je m'en suis sortis avec un lien symbolique

cd /var/www/public_html
sudo ln -s /home/user/public_html user


et en faisant localhost/user j'arrive bien à avoir les sources php qui s'executent.

Aprés quelques temps j'ai fini par trouver la solution. Elle est décrite dans l'article suivant Comment activer le mode userdir