CORE-POS/IS4C

View on GitHub
pos/is4c-nf/install/plugins.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
use COREPOS\pos\install\conf\Conf;
use COREPOS\pos\install\conf\FormFactory;
use COREPOS\pos\install\InstallUtilities;
use COREPOS\pos\lib\CoreState;
use COREPOS\pos\lib\MiscLib;
use COREPOS\pos\plugins\Plugin;
include(realpath(dirname(__FILE__).'/../lib/AutoLoader.php'));
AutoLoader::loadMap();
CoreState::loadParams();
$form = new FormFactory(InstallUtilities::dbOrFail(CoreLocal::get('pDatabase')));
?>
<html>
<head>
<title>IT CORE Lane Installation: Plugins</title>
<style type="text/css">
body {
    line-height: 1.5em;
}
</style>
<link rel="stylesheet" href="../css/toggle-switch.css" type="text/css" />
<script type="text/javascript" src="../js/<?php echo MiscLib::jqueryFile(); ?>"></script>
</head>
<body>
<?php include('tabs.php'); ?>
<div id="wrapper">
<h2><?php echo _('IT CORE Lane Installation: Plugins'); ?></h2>

<div class="alert"><?php Conf::checkWritable('../ini.json', False, 'JSON'); ?></div>
<div class="alert"><?php Conf::checkWritable('../ini.php', False, 'PHP'); ?></div>

<table id="install" border=0 cellspacing=0 cellpadding=4>

<form action=plugins.php method=post>
<b><?php echo _('Available plugins'); ?></b>:<br />
<?php
if (isset($_REQUEST['PLUGINLIST']) || isset($_REQUEST['psubmit'])){
    $oldset = CoreLocal::get('PluginList');
    if (!is_array($oldset)) $oldset = array();
    $newset = isset($_REQUEST['PLUGINLIST']) ? $_REQUEST['PLUGINLIST'] : array();
    foreach($newset as $plugin_class){
        if (!Plugin::isEnabled($plugin_class) && class_exists($plugin_class)){
            $obj = new $plugin_class();
            $obj->pluginEnable();
        }
    }
    foreach($oldset as $plugin_class){
        if (!in_array($plugin_class,$newset) && class_exists($plugin_class)){
            $obj = new $plugin_class();
            $obj->pluginDisable();
        }
    }
    CoreLocal::set('PluginList',$_REQUEST['PLUGINLIST'], true);
}
$type_check = CoreLocal::get('PluginList');
if (!is_array($type_check)) CoreLocal::set('PluginList',array(), true);

$mods = AutoLoader::listModules('COREPOS\\pos\\plugins\\Plugin');
sort($mods);

foreach($mods as $m){
    $enabled = False;
    $instance = new $m();
    foreach(CoreLocal::get("PluginList") as $r){
        if ($r == $m){
            $enabled = True;
            break;
        }
    }
    echo '<tr><td colspan="2" style="height:1px;"><hr /></td></tr>';
    echo '<tr><td style="width:10em;"></td>
        <td style="width:25em;">'."\n";
    echo '<fieldset class="toggle">'."\n";
    printf('<input name="PLUGINLIST[]" id="plugin_%s" type="checkbox" %s
        value="%s" /><label onclick="" for="plugin_%s">%s</label>',
        $m, ($enabled?'checked':''),$m, $m, $m);
    echo "\n".'<span class="toggle-button"></span></fieldset>'."\n";
    printf('<span class="noteTxt" style="width:200px;">%s</span>',$instance->plugin_description);
    echo '</td></tr>'."\n";

    if ($enabled && empty($instance->plugin_settings)) {
        echo '<tr><td colspan="2"><i>No settings required</i></td></tr>';    
    } else if ($enabled){
        foreach ($instance->plugin_settings as $field => $info) {
            echo '<tr><td colspan="2" style="margin-bottom: 0px; height:auto;">';
            $default = isset($info['default']) ? $info['default'] : '';
            echo '<b>'.(isset($info['label'])?$info['label']:$field).'</b>: ';
            if (isset($info['options']) && is_array($info['options'])) {
                // plugin select fields are defined backwards. swap keys for values.
                $invert = array();
                foreach ($info['options'] as $label => $value) {
                    $invert[$value] = $label;
                }
                $attributes = array();
                if (is_array($default)) {
                    $attributes['multiple'] = 'multiple';
                    $attributes['size'] = 5;
                }
                echo $form->selectField($field, $invert, $default, Conf::EITHER_SETTING, true, $attributes); 
            } else {
                echo $form->textField($field, $default);
            }
            if (isset($info['description'])) 
                echo '<span class="noteTxt" style="width:200px;">'.$info['description'].'</span>';
            InstallUtilities::paramSave($field,CoreLocal::get($field));
        echo '</td></tr>';
        }
        $instance->settingChange();
    }

}
echo '</table>';

InstallUtilities::paramSave('PluginList',CoreLocal::get('PluginList'));
?>
<hr />
<input type=submit name=psubmit value="<?php echo _('Save Changes'); ?>" />
</form>
</div> <!--    wrapper -->
</body>
</html>