Subversion Repositories oidplus

Compare Revisions

Regard whitespace Rev 448 → Rev 449

/trunk/TODO
5,11 → 5,9
- Publish RFC!
 
DESIGN / THEME PLUGINS:
- Add manifests and PHP main classes for the design plugin type
- Create a "Theme" plugin that combines "Colors" and "Design".
- Make a feature-interface to manipulate the CSS URL?
Attention: JS function test_color_theme() has an hardcoded set of parameters and does not follow the arguments set in index.php!
- Add design plugins to the "Plugins" admin section
 
IDEAS FOR NEW FUNCTIONALITIES
- Admin plugin "Attachments" with following functionalities:
/trunk/doc/developer_notes/class_diagram.drawio
1,0 → 0,0
<mxfile host="app.diagrams.net" modified="2020-08-10T12:26:35.422Z" agent="5.0 (Windows)" etag="H36YEA37N4JvvKWIpkvJ" version="13.6.2" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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</diagram></mxfile>
<mxfile host="app.diagrams.net" modified="2020-10-25T17:44:25.573Z" agent="5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36" etag="BlhaEuQ-DI6HhLZqJfEc" version="13.8.2" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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</diagram></mxfile>
/trunk/doc/developer_notes/class_diagram.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/includes/classes/OIDplus.class.php
27,6 → 27,7
private static /*OIDplusDatabasePlugin[]*/ $dbPlugins = array();
private static /*OIDplusSqlSlangPlugin[]*/ $sqlSlangPlugins = array();
private static /*OIDplusLanguagePlugin[]*/ $languagePlugins = array();
private static /*OIDplusDesignPlugin[]*/ $designPlugins = array();
 
protected static $html = true;
 
260,6 → 261,11
$name = $plugin::id();
if ($name === false) return false;
 
if (isset(self::$sqlSlangPlugins[$name])) {
$plugintype_hf = _L('SQL-Slang');
throw new OIDplusException('Multiple %1 plugins use the ID %2', $plugintype_hf, $name);
}
 
self::$sqlSlangPlugins[$name] = $plugin;
 
return true;
283,6 → 289,11
$name = $plugin::id();
if ($name === false) return false;
 
if (isset(self::$dbPlugins[$name])) {
$plugintype_hf = _L('Database');
throw new OIDplusException('Multiple %1 plugins use the ID %2', $plugintype_hf, $name);
}
 
self::$dbPlugins[$name] = $plugin;
 
return true;
355,6 → 366,17
return self::$languagePlugins;
}
 
# --- Design plugin
 
private static function registerDesignPlugin(OIDplusDesignPlugin $plugin) {
self::$designPlugins[] = $plugin;
return true;
}
 
public static function getDesignPlugins() {
return self::$designPlugins;
}
 
# --- Logger plugin
 
private static function registerLoggerPlugin(OIDplusLoggerPlugin $plugin) {
489,6 → 511,7
$res = array_merge($res, self::$dbPlugins);
$res = array_merge($res, self::$sqlSlangPlugins);
$res = array_merge($res, self::$languagePlugins);
$res = array_merge($res, self::$designPlugins);
return $res;
}
 
649,6 → 672,7
self::$dbPlugins = array();
self::$sqlSlangPlugins = array();
self::$languagePlugins = array();
self::$designPlugins = array();
self::$system_id_cache = null;
self::$sslAvailableCache = null;
 
692,6 → 716,7
self::registerAllPlugins('logger', 'OIDplusLoggerPlugin', array('OIDplus','registerLoggerPlugin'));
self::registerAllPlugins('objectTypes', 'OIDplusObjectTypePlugin', array('OIDplus','registerObjectTypePlugin'));
self::registerAllPlugins('language', 'OIDplusLanguagePlugin', array('OIDplus','registerLanguagePlugin'));
self::registerAllPlugins('design', 'OIDplusDesignPlugin', array('OIDplus','registerDesignPlugin'));
 
// Initialize non-DB plugins
 
710,6 → 735,9
foreach (OIDplus::getLanguagePlugins() as $plugin) {
$plugin->init($html);
}
foreach (OIDplus::getDesignPlugins() as $plugin) {
$plugin->init($html);
}
 
// Initialize other stuff (i.e. things which require the logger!)
 
/trunk/includes/classes/OIDplusDesignPlugin.class.php
0,0 → 1,22
<?php
 
/*
* OIDplus 2.0
* Copyright 2019 Daniel Marschall, ViaThinkSoft
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
 
abstract class OIDplusDesignPlugin extends OIDplusPlugin {
 
}
/trunk/plugins/adminPages/800_plugins/OIDplusPageAdminPlugins.class.php
60,10 → 60,11
if (get_parent_class($classname) == 'OIDplusAuthPlugin') $back_link = 'oidplus:system_plugins.auth';
if (get_parent_class($classname) == 'OIDplusLoggerPlugin') $back_link = 'oidplus:system_plugins.logger';
if (get_parent_class($classname) == 'OIDplusLanguagePlugin') $back_link = 'oidplus:system_plugins.language';
if (get_parent_class($classname) == 'OIDplusDesignPlugin') $back_link = 'oidplus:system_plugins.design';
$out['text'] = '<p><a '.OIDplus::gui()->link($back_link).'><img src="img/arrow_back.png" width="16" alt="'._L('Go back').'"> '._L('Go back').'</a></p>';
 
$out['text'] .= '<div><label class="padding_label">'._L('Class name').'</label><b>'.htmlentities($classname).'</b></div>'.
'<div><label class="padding_label">'._L('Location').'</label><b>'.htmlentities(dirname($plugin->getPluginDirectory())).'</b></div>'.
'<div><label class="padding_label">'._L('Location').'</label><b>'.htmlentities($plugin->getPluginDirectory()).'</b></div>'.
'<div><label class="padding_label">'._L('Plugin type').'</label><b>'.htmlentities(get_parent_class($classname)).'</b></div>'.
'<div><label class="padding_label">'._L('Plugin name').'</label><b>'.htmlentities(empty($plugin->getManifest()->getName()) ? _L('n/a') : $plugin->getManifest()->getName()).'</b></div>'.
'<div><label class="padding_label">'._L('Plugin author').'</label><b>'.htmlentities(empty($plugin->getManifest()->getAuthor()) ? _L('n/a') : $plugin->getManifest()->getAuthor()).'</b></div>'.
84,6 → 85,8
$show_auth = false;
$show_logger = false;
$show_language = false;
$show_design_active = false;
$show_design_inactive = false;
 
if ($parts[1] == '') {
$out['title'] = _L('Installed plugins');
100,6 → 103,8
$show_auth = true;
$show_logger = true;
$show_language = true;
$show_design_active = true;
$show_design_inactive = true;
} else if ($parts[1] == 'pages') {
$out['title'] = _L('Page plugins');
$out['icon'] = file_exists(__DIR__.'/icon_big.png') ? OIDplus::webpath(__DIR__).'icon_big.png' : '';
185,6 → 190,12
$out['icon'] = file_exists(__DIR__.'/icon_big.png') ? OIDplus::webpath(__DIR__).'icon_big.png' : '';
$out['text'] = '<p><a '.OIDplus::gui()->link('oidplus:system_plugins').'><img src="img/arrow_back.png" width="16" alt="'._L('Go back').'"> '._L('Go back').'</a></p>';
$show_language = true;
} else if ($parts[1] == 'design') {
$out['title'] = _L('Designs');
$out['icon'] = file_exists(__DIR__.'/icon_big.png') ? OIDplus::webpath(__DIR__).'icon_big.png' : '';
$out['text'] = '<p><a '.OIDplus::gui()->link('oidplus:system_plugins').'><img src="img/arrow_back.png" width="16" alt="'._L('Go back').'"> '._L('Go back').'</a></p>';
$show_design_active = true;
$show_design_inactive = true;
} else {
$out['title'] = _L('Error');
$out['icon'] = 'img/error_big.png';
453,8 → 464,40
$out['text'] .= '</div></div>';
}
}
 
if ($show_design_active || $show_design_inactive) {
if (count($plugins = OIDplus::getDesignPlugins()) > 0) {
$out['text'] .= '<h2>'._L('Designs').'</h2>';
$out['text'] .= '<div class="container box"><div id="suboid_table" class="table-responsive">';
$out['text'] .= '<table class="table table-bordered table-striped">';
$out['text'] .= ' <tr>';
$out['text'] .= ' <th width="25%">'._L('Class name').'</th>';
$out['text'] .= ' <th width="25%">'._L('Plugin name').'</th>';
$out['text'] .= ' <th width="25%">'._L('Plugin version').'</th>';
$out['text'] .= ' <th width="25%">'._L('Plugin author').'</th>';
$out['text'] .= ' </tr>';
foreach ($plugins as $plugin) {
$active = OIDplus::config()->getValue('design') === basename($plugin->getPluginDirectory());
if ($active && !$show_design_active) continue;
if (!$active && !$show_design_inactive) continue;
 
$out['text'] .= ' <tr>';
if ($active) {
$out['text'] .= '<td><a '.OIDplus::gui()->link('oidplus:system_plugins$'.get_class($plugin)).'><b>'.htmlentities(get_class($plugin)).'</b> '._L('(active)').'</a></td>';
} else {
$out['text'] .= '<td><a '.OIDplus::gui()->link('oidplus:system_plugins$'.get_class($plugin)).'>'.htmlentities(get_class($plugin)).'</a></td>';
}
$out['text'] .= '<td>' . htmlentities(empty($plugin->getManifest()->getName()) ? _L('n/a') : $plugin->getManifest()->getName()) . '</td>';
$out['text'] .= '<td>' . htmlentities(empty($plugin->getManifest()->getVersion()) ? _L('n/a') : $plugin->getManifest()->getVersion()) . '</td>';
$out['text'] .= '<td>' . htmlentities(empty($plugin->getManifest()->getAuthor()) ? _L('n/a') : $plugin->getManifest()->getAuthor()) . '</td>';
$out['text'] .= ' </tr>';
}
$out['text'] .= '</table>';
$out['text'] .= '</div></div>';
}
}
}
}
 
public function tree(&$json, $ra_email=null, $nonjs=false, $req_goto='') {
if (!OIDplus::authUtils()::isAdminLoggedIn()) return false;
478,6 → 521,8
$tree_icon_auth = $tree_icon; // TODO
$tree_icon_logger = $tree_icon; // TODO
$tree_icon_language = $tree_icon; // TODO
$tree_icon_design_active = $tree_icon; // TODO
$tree_icon_design_inactive = $tree_icon; // TODO
 
$pp_public = array();
$pp_ra = array();
614,6 → 659,25
'text' => $txt,
);
}
$design_plugins = array();
foreach (OIDplus::getDesignPlugins() as $plugin) {
$txt = (empty($plugin->getManifest()->getName())) ? get_class($plugin) : $plugin->getManifest()->getName();
 
$active = OIDplus::config()->getValue('design') === basename($plugin->getPluginDirectory());
if ($active) {
$design_plugins[] = array(
'id' => 'oidplus:system_plugins$'.get_class($plugin),
'icon' => $tree_icon_design_active,
'text' => $txt,
);
} else {
$design_plugins[] = array(
'id' => 'oidplus:system_plugins$'.get_class($plugin),
'icon' => $tree_icon_design_inactive,
'text' => '<font color="gray">'.$txt.'</font>',
);
}
}
$json[] = array(
'id' => 'oidplus:system_plugins',
'icon' => $tree_icon,
679,6 → 743,12
'icon' => $tree_icon,
'text' => _L('Languages'),
'children' => $language_plugins
),
array(
'id' => 'oidplus:system_plugins.design',
'icon' => $tree_icon,
'text' => _L('Designs'),
'children' => $design_plugins
)
)
);
/trunk/plugins/design/default/OIDplusDesignPluginDefault.class.php
0,0 → 1,22
<?php
 
/*
* OIDplus 2.0
* Copyright 2020 Daniel Marschall, ViaThinkSoft
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
 
class OIDplusDesignPluginDefault extends OIDplusDesignPlugin {
 
}
/trunk/plugins/design/default/manifest.xml
0,0 → 1,21
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<manifest
xmlns="urn:oid:1.3.6.1.4.1.37476.2.5.2.5.5.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:oid:1.3.6.1.4.1.37476.2.5.2.5.5.1 https://oidplus.viathinksoft.com/oidplus/plugins/manifest_plugin_other.xsd">
 
<type>OIDplusDesignPlugin</type>
 
<info>
<name>OIDplus Default Design</name>
<author>ViaThinkSoft</author>
<version />
<descriptionHTML />
<oid>1.3.6.1.4.1.37476.2.5.2.4.10.1</oid>
</info>
 
<php>
<mainclass>OIDplusDesignPluginDefault</mainclass>
</php>
</manifest>
/trunk/plugins/design/ironbase/OIDplusDesignPluginIronBase.class.php
0,0 → 1,22
<?php
 
/*
* OIDplus 2.0
* Copyright 2020 Daniel Marschall, ViaThinkSoft
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
 
class OIDplusDesignPluginIronBase extends OIDplusDesignPlugin {
 
}
/trunk/plugins/design/ironbase/manifest.xml
0,0 → 1,21
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<manifest
xmlns="urn:oid:1.3.6.1.4.1.37476.2.5.2.5.5.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:oid:1.3.6.1.4.1.37476.2.5.2.5.5.1 https://oidplus.viathinksoft.com/oidplus/plugins/manifest_plugin_other.xsd">
 
<type>OIDplusDesignPlugin</type>
 
<info>
<name>IronBASE-Like Design</name>
<author>ViaThinkSoft</author>
<version />
<descriptionHTML />
<oid>1.3.6.1.4.1.37476.2.5.2.4.10.2</oid>
</info>
 
<php>
<mainclass>OIDplusDesignPluginIronBase</mainclass>
</php>
</manifest>