openmediavault 4.1.3 插件开发

2018-10-17 admin
  1. 参考网址:https://forum.openmediavault…

  2. 创建应用GUI 创建应用目录:/var/www/openmediavault/js/omv/module/admin/service/example 创建菜单节点: Node.js

    // require("js/omv/WorkspaceManager.js")
    OMV.WorkspaceManager.registerNode({
        id: 'example',
        path: '/service',
        text: _('Example'),
        icon16: 'images/example.png',
        iconSvg: 'images/example.svg'
    });
    

    设置菜单节点图标 var/www/openmediavault/images 内创建对应Node.js内的2张图片

    创建设置面板: Settings.js

    // require("js/omv/WorkspaceManager.js")
    // require("js/omv/workspace/form/Panel.js")
    Ext.define('OMV.module.admin.service.example.Settings', {
        extend: 'OMV.workspace.form.Panel',
    
        rpcService: 'Example',
        rpcGetMethod: 'getSettings',
        rpcSetMethod: 'setSettings',
    
        getFormItems: function() {
            return [{
                xtype: 'fieldset',
                title: _('General'),
                fieldDefaults: {
                    labelSeparator: ''
                },
                items: [{
                    xtype: 'checkbox',
                    name: 'enable',
                    fieldLabel: _('Enable'),
                    checked: false
                },
                {
                    xtype: 'numberfield',
                    name: 'max_value',
                    fieldLabel: _('Max value'),
                    minValue: 0,
                    maxValue: 100,
                    allowDecimals: false,
                    allowBlank: true
                }]
            }];
        }
    });
    
    OMV.WorkspaceManager.registerPanel({
        id: 'settings',
        path: '/service/example',
        text: _('Settings'),
        position: 10,
        className: 'OMV.module.admin.service.example.Settings'
    });
    

    刷新js缓存:

    source /usr/share/openmediavault/scripts/helper-functions && omv_purge_internal_cache
    
  3. 创建shell脚本 生成配置信息的脚本postinst 命令执行:/bin/sh postinst configure

    #!/bin/sh
    
    set -e
    
    . /etc/default/openmediavault
    . /usr/share/openmediavault/scripts/helper-functions
    
    case "$1" in
        configure)
            SERVICE_XPATH_NAME="example"
            SERVICE_XPATH="/config/services/${SERVICE_XPATH_NAME}"
    
            # 添加默认配置
            if ! omv_config_exists "${SERVICE_XPATH}"; then
                omv_config_add_element "/config/services" "${SERVICE_XPATH_NAME}"
                omv_config_add_element "${SERVICE_XPATH}" "enable" "0"
                omv_config_add_element "${SERVICE_XPATH}" "max_value" "0"
            fi
    
            # 以下2条命令用于安装包安装  直接执行可注释掉
            dpkg-trigger update-fixperms
            dpkg-trigger update-locale
        ;;
    
        abort-upgrade|abort-remove|abort-deconfigure)
        ;;
    
        *)
            echo "postinst called with unknown argument" >&2
            exit 1
        ;;
    esac
    
    #DEBHELPER#
    
    exit 0 
    

    创建删除配置信息的shell脚本 postrm 执行命令:/bin/sh postrm purge

    #!/bin/sh
    
    set -e
    
    . /etc/default/openmediavault
    . /usr/share/openmediavault/scripts/helper-functions
    
    SERVICE_XPATH_NAME="example"
    SERVICE_XPATH="/config/services/${SERVICE_XPATH_NAME}"
    
    case "$1" in
        purge)
            if omv_config_exists ${SERVICE_XPATH}; then
                omv_config_delete ${SERVICE_XPATH}
            fi
        ;;
    
        remove)
        ;;
    
        upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
        ;;
    
        *)
            echo "postrm called with unknown argument \\`$1'" >&2
            exit 1
        ;;
    esac
    
    #DEBHELPER#
    
    exit 0
    
  4. 创建rpc 在目录/usr/share/openmediavault/engined/rpc创建example.inc

    <?php
    class OMVRpcServiceExample extends \OMV\Rpc\ServiceAbstract {
    
        public function getName() {
            return "EXAMPLE";
        }
    
        public function initialize() {
            $this->registerMethod("getSettings");
            $this->registerMethod("setSettings");
        }
    
        public function getSettings($params, $context) {
            // Validate the RPC caller context.
            $this->validateMethodContext($context, [
                "role" => OMV_ROLE_ADMINISTRATOR
            ]);
            // Get the configuration object.
            $db = \\OMV\\Config\\Database::getInstance();
            $object = $db->get("conf.service.example");
            // Remove useless properties from the object.
            return $object->getAssoc();
        }
    
        public function setSettings($params, $context) {
            // Validate the RPC caller context.
            $this->validateMethodContext($context, [
                "role" => OMV_ROLE_ADMINISTRATOR
            ]);
            // Validate the parameters of the RPC service method.
            $this->validateMethodParams($params, "rpc.example.setsettings");
            // Get the existing configuration object.
            $db = \\OMV\\Config\\Database::getInstance();
            $object = $db->get("conf.service.example");
            $object->setAssoc($params);
            $db->set($object);
            // Return the configuration object.
            return $object->getAssoc();
        }
    }
    

    创建对应的配置文件 在usr\share\openmediavault\datamodels创建conf.service.example.json

    {
        "type": "config",
        "id": "conf.service.example",
        "title": "EXAMPLE",
        "queryinfo": {
            "xpath": "//services/example",
            "iterable": false
        },
        "properties": {
            "enable": {
                "type": "boolean",
                "default": false
            },
            "max_value": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100,
                "default": 0
            }
        }
    }
    

    在usr\share\openmediavault\datamodels创建rpc.example.json

    [{
        "type": "rpc",
        "id": "rpc.example.setsettings",
        "params": {
            "type": "object",
            "properties": {
                "enable": {
                    "type": "boolean",
                    "required": true
                },
                "max_value": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "required": true
                }
            }
        }
    }]
    

    运行命令重启omv服务:service openmediavault-engined restart

  5. 创建shell脚本获取配置信息 创建执行脚本 example 执行命令:omv-mkconf example

    #!/bin/sh
    
    set -e
    
    . /etc/default/openmediavault
    . /usr/share/openmediavault/scripts/helper-functions
    
    OMV_EXAMPLE_XPATH="/config/services/example"
    OMV_EXAMPLE_CONF="/tmp/example.conf"
    
    cat <<EOF > ${OMV_EXAMPLE_CONF}
    enable    = $(omv_config_get "${OMV_EXAMPLE_XPATH}/enable")
    max_value = $(omv_config_get "${OMV_EXAMPLE_XPATH}/max_value")
    EOF
    
    exit 0
    

    为了监听触发执行脚本,将脚本放在/usr/share/openmediavault/mkconf目录下 脚本权限改为 chmod 755 example

  6. 配置保存事件监听

    /usr/share/openmediavault/engined/module创建监听的example.inc

    <?php
    class OMVModuleExample extends \OMV\Engine\Module\ServiceAbstract
      implements \OMV\Engine\Notify\IListener {
        public function getName() {
            return "EXAMPLE";
        }
    
        public function applyConfig() {
            // 触发对应执行脚本
            $cmd = new \\OMV\\System\\Process("omv-mkconf", "example");
            $cmd->setRedirect2to1();
            $cmd->execute();
        }
    
        function bindListeners(\\OMV\\Engine\\Notify\\Dispatcher $dispatcher) {
            $dispatcher->addListener(OMV_NOTIFY_MODIFY,
                "org.openmediavault.conf.service.example",  // 和rpc内的配置文件一致conf.service.example
                [ $this, "setDirty" ]);
        }
    }
    

    运行命令重启omv服务:service openmediavault-engined restart

  7. 创建deb包 https://blog.csdn.net/gatieme…

原文链接:https://segmentfault.com/a/1190000016716780

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-42954.html

文章标题:openmediavault 4.1.3 插件开发

相关文章
Node.js v0.11.16 开发版发布
Node.js v0.11.16 开发版发布了,改进记录包括: openssl: Upgrade to 1.0.1l npm: Upgrade to 2.3.0 url: revert support of path for url.fo...
2015-11-12
梳理前端开发使用eslint-prettier检查和格式化代码
问题痛点 在团队的项目开发过程中,代码维护所占的时间比重往往大于新功能的开发。因此编写符合团队编码规范的代码是至关重要的,这样做不仅可以很大程度地避免基本语法错误,也保证了代码的可读性。 对于代码版本管理系统(svn 和 git或者其他)...
2018-05-07
JavaScript开发工具
常用的有sublime,webstorm,notepad++等 ...
2015-11-12
bootstrapValidator.min.js表单验证插件
本文实例为大家分享了bootstrapValidator.min.js表单验证的具体代码,供大家参考,具体内容如下 注意:下载后全选复制并粘贴到新建js文件名为bootstrapValidator.min.js下即可。 测试代码: &lt;...
2017-03-17
Webpack(含 4)配置详解——从 0 配置一套开发模板
前言 源代码 熟悉 webpack 与 webpack4 配置。 webpack4 相对于 3 的最主要的区别是所谓的零配置,但是为了满足我们的项目需求还是要自己进行配置,不过我们可以使用一些 webpack 的预设值。同时 webpack...
2018-05-02
JS实现的通用表单验证插件完整实例
本文实例讲述了JS实现的通用表单验证插件。分享给大家供大家参考。具体如下: 这里演示一个通用的JS表单验证插件代码。使用方法:第一步:需设定表单项数据类型,第二步:实例表单验证,验证错误提示说明(程序有自带相关错误提示,可自定义每项验证错误...
2017-03-29
JavaScript库开发者们的规则
保持无侵入性 我的HTML标记不想知道你的JavaScript代码。 严禁修改和扩展Object.prototype! 这条很重要,因此需要一条完全针对它的规则。对象是JavaScript功能的基本构建模块,不要搞乱它们。 不要...
2015-11-11
Vue 短信验证码组件开发详解
Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此...
2017-03-17
五个值得尝试的前端开发工具
在过去的几年时间里,出现了许多全新的网页应用程序,不过,由于应用程序的功能越来越丰富,也导致了前端开发的复杂度大幅增加。 现在也有不少前端开发工具,比如Backbone和EmberJS框架都能提供稳定的App开发解决方案。同时,Javasc...
2015-12-23
使用AngularJS开发我们下一款Web应用的七个理由
在当下这个电子商务时代,每一家企业都热衷于通过网络拓展自身业务。而这也使Web开发人员市场呈现出前所未有的红火态势。根据最近发布的一份调查报告,全球网站总数已经超过8.76亿个,而且这一数字还在不断上升当中。市场上用于Web开发的平台亦多种...
2015-12-25
回到顶部