Comment installer un client nextcloud sur Ubuntu

Rédigé par chris - - Aucun commentaire

Nextcloud est un logiciel de synchronisation du style dropbox mais libre qu'on peut installer librement et gratuitement sur notre propre serveur. On peut synchroniser nos fichiers mais aussi installer plein d'applications de collaboration.

Ici, on va voir comment installer un client de synchronisation sur Ubuntu.

Comme nextcloud n'est pas encore présent dans les dépôts officiels, il faudra taper quelques lignes de commandes.
sudo add-apt-repository ppa:nextcloud-devs/client
sudo apt-get update
apt-get install nextcloud-client


Comment ajouter reCaptcha à Prestatshop en 3 étapes

Rédigé par chris - - Aucun commentaire

Prestashop est un des logiciel ecommerce les plus utilisé mais le formulaire de contact ne contient pas de protection contre le spam. Vous pouvez bien sûr ajouter un plugin souvent payant. Mais ici je vais vous donner une façon de faire gratuite en 3 étapes et 30 minutes maximum. Ce tuto a été fait avec prestashop 1.6 si vous avez une version 1.7 j'aimerais avoir vos retours sur ce qui change.


1 Créer votre compte reCAPTCHA si vous n'en avez pas

https://www.google.com/recaptcha/intro/index.html

J'ai choisis reCaptcha2 Notez bien la clé et ajouter votre domaine voir aussi votre domaine de test

2  Changer le formulaire contact-form.tpl

C'est le formulaire de contact. Il devrait se trouver dans le thème.

Cherchez la fin du formulaire le code suivant (c'est le bouton principal)
 <div class="submit"> 
<button type="submit" name="submitMessage" id="submitMessage" class="button"><span>
{l s='Send'}
<i class="icon-chevron-right right"></i></span>
</button>
</div>
</form>
Juste avant copier les lignes suivantes et changer le mot key par votre clé
 <script src='https://www.google.com/recaptcha/api.js'></script>
<div class="g-recaptcha" data-sitekey="key"></div>
Cela devrait ressembler à cela
<div> <script src='https://www.google.com/recaptcha/api.js'></script>
 <div class="g-recaptcha" data-sitekey="key"></div>
</div>
 <div class="submit">
 <button type="submit" name="submitMessage" id="submitMessage" class="button"><span>
{l s='Send'}<i class="icon-chevron-right right"></i></span>
</button>
 </div>
</form>

3 Modifier le controleur ContactControler.php

Ce source devrait se trouver dans \override\controllers\front si ce n'est pas le cas copier le depuis \controllers\front.
Cherchez la deuxième fonction  postProcess() et ajoutez les lignes suivante. C'est le test si le captcha est bon ou non

  if (Tools::isSubmit('submitMessage')) {
 $extension = array('.txt', '.rtf', '.doc', '.docx', '.pdf', '.zip', '.png', '.jpeg', '.gif', '.jpg');
$file_attachment = Tools::fileAttachment('fileUpload');
$message = Tools::getValue('message');
// Html entities is not usefull, iscleanHtml check there is no bad html tags.
$id_order = (int)$this->getOrder();
if (!($from = trim(Tools::getValue('from'))) || !Validate::isEmail($from)) {
$this->errors[] = Tools::displayError('Invalid email address.');
// ajoutez ces deux lignes qui sont en gras 
} elseif (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) {
$this->errors[] = Tools::displayError('Captcha error');
// jusqu'ici

Voila c'est fait. Vous testez et envoyez vos sources

Autres tutos

Mot de passe mysql perdu

Rédigé par chris - - Aucun commentaire

Comment faire quand on a perdu son mot de passe root de mysql ? Voici un tuto pour vous sortir d'affaire à condition que d'avoir un accés en ligne de commande.

Il faut donc avoir un accés root. Si vous êtes sous ubunto ajouter sudo devant les commandes

/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
mysql -u root

mysql> use mysql;
mysql> update user set password=PASSWORD(”votrenouveaumotdepasse”) where user=’root’;
mysql> flush privileges;
mysql> quit
voila, vous pouvez encore éventuellement arrêter et relancer mysql
/etc/init.d/mysql stop
/etc/init.d/mysql start
Autres tutos

Grocery crud et codeigniter

Rédigé par chris - - Aucun commentaire

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);    
}

Fil RSS des articles de cette catégorie