Exemples d'utilisation en PHP
  • 06 Nov 2023
  • 11 Minutes à lire
  • Sombre
    Clair

Exemples d'utilisation en PHP

  • Sombre
    Clair

Résumé de l’article

Découvrez des exemples concrets d'utilisation en PHP pour établir des fonctions couramment utilisées.


Exemple 1 : Une fonction permettant d'envoyer un e-mail à une liste d'utilisateurs

Dans cette exemple, vous trouverez un ensemble de fonctions vous permettant de vous connecter au serveur, d'obtenir votre token d'identification à partir de vos identifiants, et d'envoyer un mail à chacun de vos utilisateurs.

D'abord, voilà le fichier de configuration à intégrer dans le même dossier que les fichiers PHP

config.json

{
    "your_email": "youremail@example.com",
    "email_report_error": "youremail@domain.com",
    "debug": true,
    "kizeo_addr": "https://forms.kizeo.com/",
    "tmp_dir": "/tmp/",
    "log_dir": "/log/",
    "export_dir": "/export/",
    "rest_link": "rest/v3/",
    "token": "YOUR_TOKEN"
}

Ensuite, voilà le fichier qui lance simplement le programme

main.php


<?php

use \KizeoWS\Main as KizeoForms;

header('Content-Type: text/plain');
require_once __DIR__ . '/Main.class.php';
if (KizeoForms::generateSettings()) {
    KizeoForms::mainProcess();
} else {
    echo "Process aborted\n";
    print_r(KizeoForms::getReport());
}

Enfin, dans ce fichier sont définies les fonctions de cet exemple de mailer

Main.class.php


<?php
namespace KizeoWS;
/**
* Main Class KizeoWS
*/

abstract class Main
{
    // Tableau représentant les paramètres de configuration
    private static $settings;
    private static $reportingArray = array(
        'history' => array(),
        'issues' => array(),
        'done' => array(),
    );
    private static $token = false;              // Variable stockant le token d'identification
    private static $tempToDelete = array();
    private static $usersList = array();        // Variable stockant la liste des utilisateurs
    private static $userMails = array();        // Variable stockant la liste des adresses mail des utilisateurs


    // Fonction d'écritures des tableaux du suivi du programme
    private static function addHistory($string, $alwaysDisplay = false) {
        if (!isset(static::$settings['debug']) || static::$settings['debug'] || $alwaysDisplay) {
            echo $string . "\n";
        }
        static::$reportingArray['history'][] = $string;
    }
    private static function addIssue($string) {
        static::addHistory($string);
        static::$reportingArray['issues'][] = $string;
    }
    private static function addDone($string) {
        if (!isset(static::$settings['debug']) || static::$settings['debug']) {
            echo $string . "\n";
        }
        static::$reportingArray['done'][] = $string;
    }
    private static function addTempToDelete($path) {
        static::$tempToDelete[] = $path;
    }

    // Fonction d'ouverture du fichier de configuration et de stockage dans le tableau de paramètres
    public static function generateSettings() {
        $file_content = file_get_contents(__DIR__ . '/config.json');
        static::addHistory('Opening config file');
        if ($file_content !== false) {
            $decodedJSON = json_decode($file_content, true);
            if ($decodedJSON != null) {
                static::addHistory('Config file read');
                static::$settings = $decodedJSON;
                if (static::checkSettings()) {
                    return true;
                } else {
                    static::addIssue('Fatal issue in config');
                    return false;
                }
            } else {
                static::addIssue('Can\'t read config file');
                return false;
            }
        } else {
            static::addIssue('Can\'t find config file');
            return false;
        }
    }
    public static function removeTemp() {
        foreach (static::$tempToDelete as $key => &$value) {
            if (file_exists($value) && !is_dir($value)) {
                unlink($value);
                unset(static::$tempToDelete[$key]);
            }
        }
    }

    // Fonctions donnant les chemins vers les fichiers de log/export/temporaire
    private static function getTempDir() {
        return __DIR__ . '/' . static::$settings['tmp_dir'];
    }
    private static function getExportDir() {
        return __DIR__ . '/' . static::$settings['export_dir'];
    }
    public static function getLogDir() {
        return __DIR__ . '/' . static::$settings['log_dir'];
    }
    public static function getReport() {
        return static::$reportingArray;
    }
    /**
    * Fonction permettant de vérifier si les configurations sont correctes et correctement chargées
    */
    private static function checkSettings() {
        if (!isset(static::$settings['kizeo_addr'])) {
            static::$settings['kizeo_addr'] = "https://forms.kizeo.com/";
            static::addHistory('Missing kizeo_addr in config, use https://forms.kizeo.com/ as default');
        }
        if (!isset(static::$settings['debug'])) {
            static::$settings['debug'] = false;
            static::addHistory('Missing debug in config, use false as default');
        }
        if (!isset(static::$settings['rest_link'])) {
            static::$settings['rest_link'] = "rest/v3/";
            static::addHistory('Missing rest_link in config, use rest/v3/ as default');
        }
        if (!isset(static::$settings['tmp_dir'])) {
            static::$settings['tmp_dir'] = "../tmp/";
            static::addHistory('Missing tmp_dir in config, use ../tmp/ as default');
        }
        if (!isset(static::$settings['export_dir'])) {
            static::$settings['export_dir'] = "../export";
            static::addHistory('Missing export_dir in config, use ../export as default');
        }
        if (!isset(static::$settings['log_dir'])) {
            static::$settings['export_dir'] = "../log";
            static::addHistory('Missing export_dir in config, use ../log as default');
        }

        if (is_dir(static::getTempDir()) && is_dir(static::getExportDir())) {
            return true;
        } else if (!is_dir(static::getTempDir())) {
            static::addIssue('Temp dir ' . static::getTempDir() . ' invalid');
            return false;
        } else if (!is_dir(static::getExportDir())) {
            static::addIssue('Export dir ' . static::getExportDir() . ' invalid');
            return false;
        } else {
            static::addIssue('Impossible case');
            return false;
        }
    }

    /**
    * Processus principal utilisant les fonctions pour réaliser le résultat voulu
    */
    public static function mainProcess() {
        static::addHistory('--- Main process started ---', true);

        if (static::doLogin()) {
            static::addHistory('Login done');
        } else {
            static::addIssue('Can\'t connect to Kizeo');
            static::addHistory('Process aborted');
            return false;
        }

        if (static::getUsersList()) {
            static::addHistory('Users list charged');
        } else {
            static::addIssue('Can\'t get users list');
            static::addHistory('Process aborted');
        }

        static::getMails();
        static::sendMails();

        static::addHistory('--- Main process finished ---', true);
        return true;
    }

    /**
    * Fonction effectuant le login et stockant le token
    */
    private static function doLogin()
    {
        if (isset(static::$settings['token'])) {
            static::$token = $settings['token'];
            static::addHistory('Login success - token : ' . static::$token);
            return true;
        } else {
            static::addIssue('Missing login settings');
            return false;
        }
    }

    // Fonction permettant la récupération de la liste des utilisateurs
    private static function getUsersList() {
        if (static::$token != false) {
            $usersListData = static::callApi('GET', static::getApiRoot() . 'users', array());
            if (isset($usersListData['status']) && strtolower($usersListData['status']) == 'ok') {
                if (isset($usersListData['data'])) {
                    static::$usersList = $usersListData['data'];
                    return true;
                }
            }
        }
        else {
            return false;
        }
    }


    // Fonction pour extraire les adresses emails des utilisateurs à partir de la liste

    private static function getMails() {
        foreach(static::$usersList['users'] as $user){
            static::$userMails[] = $user['email'];
        }
        if (count(static::$userMails) != 0) {
            static::addHistory('Users mails list :');
            static::addHistory(json_encode(static::$userMails));
        }
        return true;
    }

    // Fonction d'envoi de mail collectif
    private static function sendMails() {
        $subject = 'Subject of your mail';
        $message = 'Enter your message here';
        $mailHeaders = 'From: <' . static::$settings['your_email'] . '>';

        foreach(static::$userMails as $mailToSend) {
            if($mailToSend != null){
                if(mail($mailToSend, $subject, $message, $mailHeaders)) {
                    static::addHistory('Mail sent to ' . $mailToSend);
                }
                else {
                    static::addIssue('Failed to send your mail');
                }
            }
        }
    }


    /**
    * Fonctions utiles pour encapsuler les requêtes HTTP
    */
    private static function getApiRoot() {
        return static::$settings['kizeo_addr'] . static::$settings['rest_link'];
    }
    private static function callApi($method, $url, $additionalSettings = array()) {
        $curl = curl_init();

        if (!isset($additionalSettings['data'])) {
            $additionalSettings['data'] = false;
        }
        if (!isset($additionalSettings['json_output'])) {
            $additionalSettings['json_output'] = true;
        }
        if (!isset($additionalSettings['authentified'])) {
            $additionalSettings['authentified'] = true;
        }

        $data = ($additionalSettings['data']) ? json_encode($additionalSettings['data']) : false;

        $httpHeader = array();
        if ($additionalSettings['authentified']) {
            $httpHeader[] = 'Authorization: '. static::$token;
        }
        if ($additionalSettings['json_output']) {
            $httpHeader[] = 'Content-Type: application/json';
        }

        switch ($method) {
            case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);

            if ($data) {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
                $httpHeader[] = 'Content-Length: '.strlen($data);
            }
            break;
            case "GET":
            break;
            case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
            default:
        }
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $httpHeader);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

        $result = curl_exec($curl);
        print_r(curl_error($curl));
        curl_close($curl);
        if ($additionalSettings['json_output']) {
            return json_decode($result, true);
        } else {
            return $result;
        }
    }
}

Exemple 2 : Une fonction permettant de voir quels formulaires, listes et données ont été modifiés

Dans cet exemple, vous trouverez un ensemble de fonctions vous permettant de vous connecter au serveur, d'obtenir votre token d'identification à partir de vos identifiants, et d'obtenir le nombre et la liste des formulaires, données et listes qui ont été modifiés.

D'abord, le fichier de configuration à intégrer dans le même dossier que les fichiers PHP

config.json

{
    "your_email": "youremail@example.com",
    "email_report_error": "youremail@domain.com",
    "debug": true,
    "kizeo_addr": "https://forms.kizeo.com/",
    "tmp_dir": "/tmp/",
    "log_dir": "/log/",
    "export_dir": "/export/",
    "rest_link": "rest/v3/",
    "token": "YOUR_TOKEN"
}

Ensuite, voilà le fichier qui lance simplement le programme

main.php


<?php

use \KizeoWS\Main as KizeoForms;

header('Content-Type: text/plain');
require_once __DIR__ . '/Main.class.php';
if (KizeoForms::generateSettings()) {
    KizeoForms::mainProcess();
} else {
    echo "Process aborted\n";
    print_r(KizeoForms::getReport());
}

Enfin, dans ce fichier sont définies les fonctions de cet exemple de récapitulatif de journée

Main.class.php


<?php
namespace KizeoWS;
/**
* Main Class KizeoWS
*/

abstract class Main
{
    // Tableau représentant les paramètres de configuration
    private static $settings;
    private static $reportingArray = array(
        'history' => array(),
        'issues' => array(),
        'done' => array(),
    );
    private static $token = false;              // Variable stockant le token d'identification
    private static $tempToDelete = array();


    // Fonction d'écritures des tableaux du suivi du programme
    private static function addHistory($string, $alwaysDisplay = false) {
        if (!isset(static::$settings['debug']) || static::$settings['debug'] || $alwaysDisplay) {
            echo $string . "\n";
        }
        static::$reportingArray['history'][] = $string;
    }
    private static function addIssue($string) {
        static::addHistory($string);
        static::$reportingArray['issues'][] = $string;
    }
    private static function addDone($string) {
        if (!isset(static::$settings['debug']) || static::$settings['debug']) {
            echo $string . "\n";
        }
        static::$reportingArray['done'][] = $string;
    }
    private static function addTempToDelete($path) {
        static::$tempToDelete[] = $path;
    }

    // Fonction d'ouverture du fichier de configuration et de stockage dans le tableau de paramètres
    public static function generateSettings() {
        $file_content = file_get_contents(__DIR__ . '/config.json');
        static::addHistory('Opening config file');
        if ($file_content !== false) {
            $decodedJSON = json_decode($file_content, true);
            if ($decodedJSON != null) {
                static::addHistory('Config file read');
                static::$settings = $decodedJSON;
                if (static::checkSettings()) {
                    return true;
                } else {
                    static::addIssue('Fatal issue in config');
                    return false;
                }
            } else {
                static::addIssue('Can\'t read config file');
                return false;
            }
        } else {
            static::addIssue('Can\'t find config file');
            return false;
        }
    }
    public static function removeTemp() {
        foreach (static::$tempToDelete as $key => &$value) {
            if (file_exists($value) && !is_dir($value)) {
                unlink($value);
                unset(static::$tempToDelete[$key]);
            }
        }
    }

    // Fonctions donnant les chemins vers les fichiers de log/export/temporaire
    private static function getTempDir() {
        return __DIR__ . '/' . static::$settings['tmp_dir'];
    }
    private static function getExportDir() {
        return __DIR__ . '/' . static::$settings['export_dir'];
    }
    public static function getLogDir() {
        return __DIR__ . '/' . static::$settings['log_dir'];
    }
    public static function getReport() {
        return static::$reportingArray;
    }
    /**
    * Fonction permettant de vérifier si les configurations sont correctes et correctement chargées
    */
    private static function checkSettings() {
        if (!isset(static::$settings['kizeo_addr'])) {
            static::$settings['kizeo_addr'] = "https://forms.kizeo.com/";
            static::addHistory('Missing kizeo_addr in config, use https://forms.kizeo.com/ as default');
        }
        if (!isset(static::$settings['debug'])) {
            static::$settings['debug'] = false;
            static::addHistory('Missing debug in config, use false as default');
        }
        if (!isset(static::$settings['rest_link'])) {
            static::$settings['rest_link'] = "rest/v3/";
            static::addHistory('Missing rest_link in config, use rest/v3/ as default');
        }
        if (!isset(static::$settings['tmp_dir'])) {
            static::$settings['tmp_dir'] = "../tmp/";
            static::addHistory('Missing tmp_dir in config, use ../tmp/ as default');
        }
        if (!isset(static::$settings['export_dir'])) {
            static::$settings['export_dir'] = "../export";
            static::addHistory('Missing export_dir in config, use ../export as default');
        }
        if (!isset(static::$settings['log_dir'])) {
            static::$settings['export_dir'] = "../log";
            static::addHistory('Missing export_dir in config, use ../log as default');
        }

        if (is_dir(static::getTempDir()) && is_dir(static::getExportDir())) {
            return true;
        } else if (!is_dir(static::getTempDir())) {
            static::addIssue('Temp dir ' . static::getTempDir() . ' invalid');
            return false;
        } else if (!is_dir(static::getExportDir())) {
            static::addIssue('Export dir ' . static::getExportDir() . ' invalid');
            return false;
        } else {
            static::addIssue('Impossible case');
            return false;
        }
    }

    /**
    * Processus principal utilisant les fonctions pour réaliser le résultat voulu
    */
    public static function mainProcess() {
        static::addHistory('--- Main process started ---', true);

        if (static::doLogin()) {
            static::addHistory('Login done');
        } else {
            static::addIssue('Can\'t connect to Kizeo');
            static::addHistory('Process aborted');
            return false;
        }

        static::getTodayUpdatedFormsandData();
        static::getTodayUpdatedLists();

        static::addHistory('--- Main process finished ---', true);
        return true;
    }

    /**
    * Fonction effectuant le login et stockant le token
    */
    private static function doLogin()
    {
        if (isset(static::$settings['token'])) {
            static::$token = $settings['token'];
            static::addHistory('Login success - token : ' . static::$token);
            return true;
        } else {
            static::addIssue('Missing login settings');
            return false;
        }
    }

    /**
    *  Fonctions liées au récapitulatif de la journée
    **/


    // Fonction d'extraction et d'affichage des formulaires modifiés aujourd'hui
    private static function getTodayUpdatedFormsandData(){
        // Définition d'une date de comparaison à aujourd'hui minuit pour sélectionner les formulaires modifiés aujourd'hui
        $today = date_create();
        date_time_set($today, 00, 00, 00);

        // Récupération de tous les formulaires
        $forms = static::callApi('GET', static::getApiRoot() . 'forms', array());

        // Tri des formulaires pour garder ceux qui ont été modifiés aujourd'hui
        $todayForms = array();

        foreach($forms['forms'] as $f){
            $formDate = date_create_from_format('Y-m-d H:i:s', $f['update_time']);
            if ($formDate > $today){
                $todayForms[] = array($f['id'], $f['name'], array());
            }
        }
        static::addHistory('Il y a ' . count($todayForms) . ' formulaires modifiés aujourd\'hui.');


        $todayDatas = array();
        // Récupération des données récentes pour les formulaires
        foreach($forms['forms'] as $TF){
            $requestBody = array();
            // Définition des filtres avancés à utiliser
            $requestBody['data'] = '{
  "global_filters": "",
  "filters": [
    {
      "field": "_answer_time",
      "operator": ">",
      "type": "simple",
      "val": "' . $today->format('Y-m-d H:i:s') . '"
    }
  ],
  "order": [
    {
      "col": "",
      "type": ""
    }
  ]
}';
            // Appel du tri avancé sur les données pour obtenir celles postérieures à aujourd'hui minuit
            $datas = static::callApi('POST', static::getApiRoot() . 'forms/' . $TF['id'] . '/data/advanced', $requestBody);
            if (isset($datas['status']) && $datas['status'] != 'ok'){
                echo($datas['message']);
            }
            else {
                $todayDatas[] = $datas;
            }
        }
        // Affichage des formulaires récemment modifiés s'il y en a
        if (count($todayForms) > 0 ){
            foreach($todayForms as $TF){
                static::addHistory('Formulaire d\'id : ' . $TF['0'] . ' et de nom : ' . $TF['1']);
            }
        }
        static::addHistory('');
        static::addHistory('Il y a '. $nbNewDatas = count($todayDatas) . ' données créées ou modifiées aujourd\'hui');

        // Affichage des données récemment créées s'il y en a
        if ($nbNewDatas > 0){
            for ($i = 0 ; $i < $nbNewDatas ; $i++){
                $nbNew = count($todayDatas[$i]['data']);
                for ($j = 0 ; $j < $nbNew ; $j++){
                    static::addHistory('Donnée d\'id : ' . $todayDatas[$i]['data'][$j]['_id'] . ' sur formulaire d\'id : '
                        . $todayDatas[$i]['data'][$j]['_form_id'] . ' par le user n° ' . $todayDatas[$i]['data'][$j]['_user_id'] . '. ' );
                }
            }
            static::addHistory('');
        }
    }

    // Fonction d'extraction et d'affichage des listes modifiées aujourd'hui
    private static function getTodayUpdatedLists(){
        // Définition d'une date de comparaison à aujourd'hui minuit pour sélectionner les listes modifiées aujourd'hui
        $today = date_create();
        date_time_set($today, 00, 00, 00);

        // Récupération de toutes les listes
        $lists = static::callApi('GET', static::getApiRoot() . 'lists', array());

        // Tri des listes pour garder celles qui ont été modifiées aujourd'hui
        $todayLists = array();

        foreach($lists['lists'] as $l){
            $listDate = date_create_from_format('Y-m-d H:i:s', $l['update_time']);
            if ( $listDate > $today){
                $todayLists[] = array($l['id'], $l['name']);
            }
        }

        static::addHistory('Il y a ' . count($todayLists) . ' listes modifiées aujourd\'hui');
        if (count($todayLists) > 0 ){
            foreach($todayLists as $TL){
                static::addHistory('Liste d\'id : ' . $TL['0'] . ' et de nom : ' . $TL['1']);
            }
        }
        static::addHistory('');
    }


    /**
    * Fonctions utiles pour encapsuler les requêtes HTTP
    */
    private static function getApiRoot() {
        return static::$settings['kizeo_addr'] . static::$settings['rest_link'];
    }
    private static function callApi($method, $url, $additionalSettings = array()) {
        $curl = curl_init();

        if (!isset($additionalSettings['data'])) {
            $additionalSettings['data'] = false;
        }
        if (!isset($additionalSettings['json_output'])) {
            $additionalSettings['json_output'] = true;
        }
        if (!isset($additionalSettings['authentified'])) {
            $additionalSettings['authentified'] = true;
        }

        $data = ($additionalSettings['data']) ? json_encode($additionalSettings['data']) : false;

        $httpHeader = array();
        if ($additionalSettings['authentified']) {
            $httpHeader[] = 'Authorization: '. static::$token;
        }
        if ($additionalSettings['json_output']) {
            $httpHeader[] = 'Content-Type: application/json';
        }

        switch ($method) {
            case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);

            if ($data) {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
                $httpHeader[] = 'Content-Length: '.strlen($data);
            }
            break;
            case "GET":
            break;
            case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
            default:
        }
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $httpHeader);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

        $result = curl_exec($curl);
        print_r(curl_error($curl));
        curl_close($curl);
        if ($additionalSettings['json_output']) {
            return json_decode($result, true);
        } else {
            return $result;
        }
    }
}