<?php 
 
/** 
 * Plugin.php - Adapter for the Bootstrap library. 
 * 
 * @package jaxon-dialogs 
 * @author Thierry Feuzeu <[email protected]> 
 * @copyright 2016 Thierry Feuzeu <[email protected]> 
 * @license https://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License 
 * @link https://github.com/jaxon-php/jaxon-dialogs 
 */ 
 
namespace Jaxon\Dialogs\Libraries\Bootstrap; 
 
use Jaxon\Dialogs\Libraries\Library; 
use Jaxon\Dialogs\Interfaces\Modal; 
use Jaxon\Request\Interfaces\Alert; 
use Jaxon\Request\Interfaces\Confirm; 
 
class Plugin extends Library implements Modal, Alert, Confirm 
{ 
    use \Jaxon\Request\Traits\Alert; 
 
    /** 
     * The constructor 
     */ 
    public function __construct() 
    { 
        parent::__construct('bootstrap-dialog', '1.35.3'); 
    } 
     
    /** 
     * Get the javascript header code and file includes 
     * 
     * It is a function of the Jaxon\Dialogs\Interfaces\Plugin interface. 
     * 
     * @return string 
     */ 
    public function getJs() 
    { 
        return $this->getJsCode('bootstrap-dialog.min.js'); 
    } 
 
    /** 
     * Get the CSS header code and file includes 
     * 
     * It is a function of the Jaxon\Dialogs\Interfaces\Plugin interface. 
     * 
     * @return string 
     */ 
    public function getCss() 
    { 
        return $this->getCssCode('bootstrap-dialog.min.css'); 
    } 
 
    /** 
     * Get the javascript code to be printed into the page 
     * 
     * It is a function of the Jaxon\Dialogs\Interfaces\Plugin interface. 
     * 
     * @return string 
     */ 
    public function getScript() 
    { 
        return $this->render('bootstrap/alert.js'); 
    } 
 
    /** 
     * Show a modal dialog. 
     * 
     * It is a function of the Jaxon\Dialogs\Interfaces\Modal interface. 
     * 
     * @param string            $title                  The title of the dialog 
     * @param string            $content                The content of the dialog 
     * @param array             $buttons                The buttons of the dialog 
     * @param array             $options                The options of the dialog 
     * 
     * @return void 
     */ 
    public function show($title, $content, array $buttons, array $options = array()) 
    { 
        // Fill the options array with the parameters 
        $options['title'] = (string)$title; 
        $options['message'] = (string)$content; 
        $options['buttons'] = array(); 
        foreach($buttons as $button) 
        { 
            $_button = [ 
                'label' => $button['title'], 
                'cssClass' => $button['class'], 
                'action' => $button['click'], 
            ]; 
            // Optional attributes 
            foreach($button as $attr => $value) 
            { 
                if(!in_array($attr, ['title', 'class', 'click'])) 
                { 
                    $_button[$attr] = $value; 
                } 
            } 
            $options['buttons'][] = $_button; 
        } 
        // Turn the value of the nl2br option to false, because it alters form rendering. 
        if(!array_key_exists('nl2br', $options)) 
        { 
            $options['nl2br'] = false; 
        } 
        // Show the modal dialog 
        $this->addCommand(array('cmd' => 'bootstrap.show'), $options); 
    } 
 
    /** 
     * Hide the modal dialog. 
     * 
     * It is a function of the Jaxon\Dialogs\Interfaces\Modal interface. 
     * 
     * @return void 
     */ 
    public function hide() 
    { 
        // Hide the modal dialog 
        $this->addCommand(array('cmd' => 'bootstrap.hide'), array()); 
    } 
 
    /** 
     * Print an alert message. 
     * 
     * @param string              $message              The text of the message 
     * @param string              $title                The title of the message 
     * @param string              $type                 The type of the message 
     * 
     * @return void 
     */ 
    protected function alert($message, $title, $type) 
    { 
        if($this->getReturn()) 
        { 
            $aDataTypes = [ 
                'success' => 'BootstrapDialog.TYPE_SUCCESS', 
                'info' => 'BootstrapDialog.TYPE_INFO', 
                'warning' => 'BootstrapDialog.TYPE_WARNING', 
                'danger' => 'BootstrapDialog.TYPE_DANGER', 
            ]; 
            $type = $aDataTypes[$type]; 
            if(($title)) 
            { 
                return "BootstrapDialog.alert({message:" . $message . ", title:'" . $title . "', type:" . $type . "})"; 
            } 
            else 
            { 
                return "BootstrapDialog.alert({message:" . $message . ", type:" . $type . "})"; 
            } 
        } 
        $options = array('message' => $message, 'type' => $type); 
        if(($title)) 
        { 
            $options['title'] = $title; 
        } 
        // Show the alert 
        $this->addCommand(array('cmd' => 'bootstrap.alert'), $options); 
    } 
 
    /** 
     * Print a success message. 
     * 
     * It is a function of the Jaxon\Request\Interfaces\Alert interface. 
     * 
     * @param string              $message              The text of the message 
     * @param string|null         $title                The title of the message 
     * 
     * @return void 
     */ 
    public function success($message, $title = null) 
    { 
        return $this->alert($message, $title, 'success'); 
    } 
 
    /** 
     * Print an information message. 
     * 
     * It is a function of the Jaxon\Request\Interfaces\Alert interface. 
     * 
     * @param string              $message              The text of the message 
     * @param string|null         $title                The title of the message 
     * 
     * @return void 
     */ 
    public function info($message, $title = null) 
    { 
        return $this->alert($message, $title, 'info'); 
    } 
 
    /** 
     * Print a warning message. 
     * 
     * It is a function of the Jaxon\Request\Interfaces\Alert interface. 
     * 
     * @param string              $message              The text of the message 
     * @param string|null         $title                The title of the message 
     * 
     * @return void 
     */ 
    public function warning($message, $title = null) 
    { 
        return $this->alert($message, $title, 'warning'); 
    } 
 
    /** 
     * Print an error message. 
     * 
     * It is a function of the Jaxon\Request\Interfaces\Alert interface. 
     * 
     * @param string              $message              The text of the message 
     * @param string|null         $title                The title of the message 
     * 
     * @return void 
     */ 
    public function error($message, $title = null) 
    { 
        return $this->alert($message, $title, 'danger'); 
    } 
 
    /** 
     * Get the script which makes a call only if the user answers yes to the given question. 
     * 
     * It is a function of the Jaxon\Request\Interfaces\Confirm interface. 
     * 
     * @return string 
     */ 
    public function confirm($question, $yesScript, $noScript) 
    { 
        $title = $this->getConfirmTitle(); 
        if(!$noScript) 
        { 
            return "jaxon.dialogs.bootstrap.confirm(" . $question . ",'" . $title . "',function(){" . $yesScript . ";})"; 
        } 
        else 
        { 
            return "jaxon.dialogs.bootstrap.confirm(" . $question . ",'" . $title . "',function(){" . $yesScript . ";},function(){" . $noScript . ";})"; 
        } 
    } 
} 
 
 |