<?php
require_once('plugins.class.php');
/**
 * WIP
 * base class for all plugin types to read available plugins
 * and its metadata
 * 
 * @example
 *        $CI_plugins=new ciplugins();
 *        print_r($CI_plugins->getPluginTypes());
 * 
 *        // $CI_plugins->setType('build');
 *        // print_r($CI_plugins->getPlugins());
 *        print_r($CI_plugins->getPlugins('build'));
 * 
 *        $CI_plugins->setPlugin('tgz', 'build'); // plugin name + type
 *
 * 
 * @author axel
 */
class plugin_renderer extends ciplugins {
    
    // ---------------------------------------------------------------
    // 
    // BELOW ARE METHODS FOR A SET SPECIFIC PLUGIN AND TYPE
    // 
    // ---------------------------------------------------------------


    // ---------------------------------------------------------------
    // LANGUAGE TEXTS (needed in ui only)
    // ---------------------------------------------------------------
    
    /**
     * get a translated text from lang_XX.json in plugin dir;
     * If the key is missed it returns "[KEY :: LANG]"
     * 
     * @see setLang()
     * @param string $sKey  key to find in lang file
     * @return string
     */
    protected function _t($sKey){
        return (isset($this->_aLang[$sKey]) && $this->_aLang[$sKey])
                ? $this->_aLang[$sKey]
                : "[ $sKey :: $this->_sLang ]"
        ;
    }

    /**
     * set language for output of formdata and other texts.
     * This method loads the language file into a hash. The output of 
     * translated texts can be done with $this->_t("your_key")
     * 
     * @see _t()
     * @param string   $sLang  language code, i.e. "de"
     * @return boolean
     */
    public function setLang($sLang=false){
        $this->_sLang=$sLang ? $sLang : $this->_sLang;
        
        $oReflection=new ReflectionClass($this);
        $sFile=dirname($oReflection->getFileName()) . '/lang_'.$this->_sLang.'.json';
        $this->_aLang=(file_exists($sFile)) ? json_decode(file_get_contents($sFile), 1) : $this->_aLang;
        return true;
    }
    // ---------------------------------------------------------------
    // SETTER
    // ---------------------------------------------------------------


    // ---------------------------------------------------------------
    // prepare html code
    // ---------------------------------------------------------------

    /**
     * for shellcmd plugins: get html code to load javascript file
     * The file must exist in the plugin directory
     * @params  string  $sFile  (basename of) filename, eg. render.js
     */
    public function getHtmlLoadScript($sFile){
        return (file_exists($this->_sSelfdir.'/'.$sFile))
            ? '<script src="'.$this->_sSelfurl.'/'.$sFile.'"></script>'."\n"
            : ''
        ;
    }

    /**
     * get id for an output div
     * @return string
     */
    public function getHtmlOutId(){
        return $this->_sPluginname ? 'divPlugin'.$this->_sType.''.$this->_sPluginname : false;
    }
    /**
     * get id for the wrapper div of an output div
     * @return string
     */
    public function getHtmlOutIdWrapper(){
        return $this->getHtmlOutId().'Wrapper';
    }
    public function getHtmlOutwindow(){
        $aConfig=$this->getPluginConfig();
        return '<div id="'.$this->getHtmlOutIdWrapper().'" class="cmdoutbox">'
        .'<div id="'.$this->getHtmlOutId().'" '
        .'class="out'
            .(isset($aConfig['window-cols'])  && $aConfig['window-cols']  ? ' cmd-cols-'.$aConfig['window-cols'] : ''   )
            .(isset($aConfig['window-lines']) && $aConfig['window-lines'] ? ' cmd-lines-'.$aConfig['window-lines'] : '' )
            .'"></div>'
        .'</div>';
    }

    // ---------------------------------------------------------------
    // access plugin php class
    // ---------------------------------------------------------------


}