当前位置: 首页>>代码示例>>PHP>>正文


PHP ModUtil::apifunc方法代码示例

本文整理汇总了PHP中ModUtil::apifunc方法的典型用法代码示例。如果您正苦于以下问题:PHP ModUtil::apifunc方法的具体用法?PHP ModUtil::apifunc怎么用?PHP ModUtil::apifunc使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ModUtil的用法示例。


在下文中一共展示了ModUtil::apifunc方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: getPrioritat

    /**
     * Retorna la informació d'una prioritat sol·licitada.
     * 
     * @param array $args Array amb els paràmetres de la funció
     *
     * ### Paràmetres de l'array $args:
     * * integer **priId** Identificador de prioritat
     * 
     * @return array Conté la informació de la prioritat sol·licitada
     */
    public function getPrioritat($args) {
        if (!SecurityUtil::checkPermission('Cataleg::', "::", ACCESS_READ)) {
            return false;
        }

        $priId = isset($args['priId']) ? $args['priId'] : null;
        //Comprovem que el paràmetre hagi arribat correctament
        $registre = array();
        if (isset($priId) && is_numeric($priId)) {
            $registre = DBUtil::selectObject('cataleg_prioritats', 'priId=' . $priId);
            $eix = ModUtil::apifunc('Cataleg', 'user', 'getEix', array('eixId' => $registre['eixId']));
            $registre['eix'] = $eix;
            $cataleg = ModUtil::apifunc('Cataleg', 'user', 'getCataleg', array('catId' => $eix['catId']));
            $registre['cataleg'] = $cataleg;
        }
        //Retormem una matriu amb la informació del cataleg, l'eix i la prioritat
        return $registre;
    }
开发者ID:projectesIF,项目名称:Sirius,代码行数:28,代码来源:User.php

示例2: referenced

    public function referenced($args) {
        // Security check
        if (!SecurityUtil::checkPermission('IWtimeframes::', "::", ACCESS_ADMIN)) {
            return LogUtil::registerError($this->__('Not authorized to manage timeFrames.'), 403);
        }
        if (ModUtil::apifunc('IWtimeframes', 'admin', 'installed', 'IWbookings')) {
            $mdid = FormUtil::getPassedValue('mdid', isset($args['mdid']) ? $args['mdid'] : null, 'POST');
            $tablename = 'IWbookings_spaces';
            $where = 'mdid = ' . $mdid;
            return (DBUtil::selectObjectCount($tablename, $where) > 0);
            //$n = DBUtil::selectObjectCount($tablename, $where);
        } else {
            return false;
            //$n = 0;
        }
        /* $modid = ModUtil::getIdFromName('IWbookings');
        $modinfo = ModUtil::getInfo($modid);

        if ($modinfo['state'] > 1) {
            $mdid = FormUtil::getPassedValue('mdid', isset($args['mdid']) ? $args['mdid'] : null, 'POST');
            $tablename = 'IWbookings_spaces';
            $where = 'mdid = ' . $mdid;
            return (DBUtil::selectObjectCount($tablename, $where) > 0);
        } else {
            return false;
        }
         * 
         */
    }
开发者ID:projectesIF,项目名称:Sirius,代码行数:29,代码来源:Admin.php

示例3: save


//.........这里部分代码省略.........
        if ($haveAccess && !is_null($item['priId'])) {
            // DESTINATARIS DE LA FORMACIÓ
            $d = FormUtil::getPassedValue('dest', null, 'POST');
            // Si $show = true retornarem a la vista d'activitat
            $show = FormUtil::getPassedValue('show', FALSE, 'GET');
            $item['destinataris'] = serialize($d);
            // OBJECTIUS
            $o = FormUtil::getPassedValue('obj', null, 'POST');
            $item['objectius'] = serialize($o);
            // CONTINGUTS
            $c = FormUtil::getPassedValue('con', null, 'POST');
            $item['continguts'] = serialize($c);
            // INFO SOBRE DIFERENTS ASPECTES DE GESTIÓ
            $g = FormUtil::getPassedValue('gestio', null, 'POST');
            $item['gestio'] = serialize($g);
            // CENTRES QUE PROBABLEMENT REALITZARAN AQUESTA ACTIVITAT        
            $hihacentres = FormUtil::getPassedValue('hihacentres', null, 'POST');
            if ($hihacentres) {
                $centres = FormUtil::getPassedValue('lcentres', null, 'POST');
                if ($centres > " ") {
                    // Eliminar els codis de centre erronis
                    $filtered = ModUtil::apiFunc($this->name, 'user', 'checkCentres', array('centres' => $centres));
                    $ncentres = $filtered['codis'];
                    $item['llocs'] = explode(",", $ncentres);
                }
                $item['centres'] = FormUtil::getPassedValue('obslloc', null, 'POST');
            }
            $item['sprId'] = FormUtil::getPassedValue('subprioritat', null, 'POST');
            $item['prioritaria'] = FormUtil::getPassedValue('prioritzada', null, 'POST');
            $item['tGTAF'] = FormUtil::getPassedValue('tGTAF', null, 'POST');
            $item['titol'] = FormUtil::getPassedValue('titol', null, 'POST');
            $item['observacions'] = FormUtil::getPassedValue('obs', null, 'POST');
            $item['curs'] = FormUtil::getPassedValue('tcurs', null, 'POST');
            $item['presencialitat'] = FormUtil::getPassedValue('tpres', null, 'POST');
            $item['abast'] = FormUtil::getPassedValue('tabast', null, 'POST');
            $item['hores'] = FormUtil::getPassedValue('nhores', null, 'POST');
            $item['obs_editor'] = FormUtil::getPassedValue('obs_editor', null, 'POST');
            $item['obs_validador'] = FormUtil::getPassedValue('obs_validador', null, 'POST');
            $item['actsPerZona'] = FormUtil::getPassedValue('az', null, 'POST');
            $item['contactes'] = FormUtil::getPassedValue('contacte', null, 'POST');
            $item['info'] = FormUtil::getPassedValue('info', null, 'POST');
            $estat = FormUtil::getPassedValue('estat1', null, 'POST');
            if (!is_null($estat))
                $item['estat'] = $estat; // Si no s'indica estat és manté el que tenia
            $item['activa'] = FormUtil::getPassedValue('activa', 1, 'POST');
            $item['ordre'] = 127;

            /* Estats de la fitxa: 
             * Esborrany 0 
             * Enviada 1
             * Per revisar 2 
             * validada 3 
             * modificada 4 
             * anul·lada 5
             */
            if ($item['estat'] == Cataleg_Constant::VALIDADA) { // Validar
                // si no ha estat mai validada es guarda la informació
                if (!(ModUtil::apiFunc($this->name, 'user', 'isValidated', $item['actId']))) {
                    // Establir data de validació i uid del validador
                    $item['validador'] = UserUtil::getVar('uid');
                    $item['dataVal'] = date('Y-m-d H:i:s');
                }
            }
            // S'ha marcat l'activitata modificadaa per a ser mostrada al bloc de novetats
            $novetat = FormUtil::getPassedValue('novetat', null, 'POST');

            if ($novetat) {
                // Escriure dataModif;  
                $item['dataModif'] = date('Y-m-d H:i:s');
            }

            // S'ha marcat per deixar de mostrar l'activitat modificada al bloc de novetats
            $eraseDataMod = FormUtil::getPassedValue('eraseMod', false, 'POST');
            if ($eraseDataMod)
                $item['dataModif'] = null; //Esborrem la data de modificació a efectes de visualització en el bloc novetats

            if ($item['actId']) {
                // Estem editant. L'activitat ja existeix
                $r = ModUtil::apifunc('Cataleg', 'user', 'updateActivitat', $item);
            } else {
                // S'ha de crear nova
                $r = ModUtil::apifunc('Cataleg', 'user', 'addActivitat', $item);
            }
            if ($r)
                LogUtil::registerStatus($this->__('Les dades s\'han desat correctament.'));
            else
                LogUtil::registerError($this->__('No s\'han pogut desar totes les dades de l\'activitat.'));
            if ($show) {
                return system::redirect(ModUtil::url('Cataleg', 'user', 'show', array('back' => $back, 'actId' => $item['actId'])));
            } else {
                return system::redirect(ModUtil::url('Cataleg', 'user', 'view', array('catId' => $item['catId'])));
            }
        } else {
            // No hi ha accés a crear o modificar
            $view = Zikula_View::getInstance('Cataleg', false);
            $view->assign('icon', 'error.png');
            $view->assign('msg', $this->$this->__('No teniu permís per actualitzar o crear activitats en aquest catàleg.'));
            return $view->fetch('user/Cataleg_user_msg.tpl');
        }
    }
开发者ID:projectesIF,项目名称:Sirius,代码行数:101,代码来源:User.php

示例4: trySiriusXtecAuth

    /**
     * When Zikula authentication has failed, start SiriusXtecAuth
     * 
     * @return bool true authetication succesful
     */
    public static function trySiriusXtecAuth(Zikula_Event $event)
    {
        $authentication_info = FormUtil::getPassedValue('authentication_info', isset($args['authentication_info']) ? $args['authentication_info'] : null, 'POST');
        // Argument check
        if ($authentication_info['login_id'] == '' || $authentication_info['pass'] == '') {
            LogUtil::registerError(__('Usuari o contrasenya en blanc.'));
            return System::redirect(System::getHomepageUrl());
        }

        $uname = $authentication_info['login_id'];
        $pass = $authentication_info['pass'];

        // check if ldap is active
        if (!ModUtil::getVar('SiriusXtecAuth','ldap_active',false)) return false;
        // checking new users case
        $userid = UserUtil::getIdFromName($uname);
        if (($userid === false) && (ModUtil::getVar('SiriusXtecAuth','users_creation',false) === false)) return false;
        
        // connect to ldap server
        if (!$ldap_ds = ldap_connect(ModUtil::getVar('SiriusXtecAuth', 'ldap_server'))) {
            LogUtil::registerError(__('No ha pogut connectar amb el servidor ldap.'));
            return false;
        }        
        ///////////////////
        // Checking ldap validation
        $ldaprdn = ModUtil::getVar('SiriusXtecAuth', 'ldap_searchattr') . '=' . $uname . ',' . ModUtil::getVar('SiriusXtecAuth', 'ldap_basedn');
        $bind = @ldap_bind($ldap_ds, $ldaprdn, $pass);
        if (!$bind) {
            LogUtil::registerError(__('La informació introduïda no correspon a cap validació manual ni XTEC.'));
            return false;
        }
        LogUtil::getErrorMessages();
        // Case new users
        if ($userid === false) {
            $userLdapFields = array ('cn', 'uid', 'givenname', 'sn', 'mail');
            // search the directory for our user
            if (!$ldap_sr = ldap_search($ldap_ds, ModUtil::getVar('SiriusXtecAuth', 'ldap_basedn'), ModUtil::getVar('SiriusXtecAuth', 'ldap_searchattr') . '=' . DataUtil::formatForStore($uname),$userLdapFields)) {
                LogUtil::registerError(__('Problemes en la creació d\'un nou usuari de Sirus des de la validació XTEC (I).'));
                return false;
            }
            $info = ldap_get_entries($ldap_ds, $ldap_sr);
            if (!$info || $info['count'] == 0) {
                LogUtil::registerError('Problemes en la creació d\'un nou usuari de Sirus des de la validació XTEC (II).');
                return false;
            } else {
                if (!isset($info[0]['dn'])) {
                    LogUtil::registerError('Problemes en la creació d\'un nou usuari de Sirus des de la validació XTEC (III).');
                    return false;
                }
            }
            
            $user['zk']['uname'] =$uname;
            $user['zk']['email'] = $info[0]['mail'][0];
            if (ModUtil::getVar('SiriusXtecAuth','iw_write',false) && ModUtil::available('IWusers')) {
                $user['iw']['nom'] = ucwords(strtolower($info[0]['givenname'][0]));
                $cognom_separator = strpos($info[0]['sn'][0],' ');
                if ($cognom_separator && ModUtil::getVar('SiriusXtecAuth','iw_lastnames',false)) {
                    $user['iw']['cognom1'] = ucwords(strtolower(substr($info[0]['sn'][0],0,$cognom_separator)));
                    $user['iw']['cognom2'] = ucwords(strtolower(substr($info[0]['sn'][0],$cognom_separator+1)));
                } else{
                    $user['iw']['cognom1'] = ucwords(strtolower($info[0]['sn'][0]));
                    $user['iw']['cognom1'] = '';
                }
            }
            if (ModUtil::getVar('SiriusXtecAuth','new_users_activation', false)) {
                $user['zk']['activated'] = 1;
            }else {
                $user['zk']['activated'] = 0;
            }
            $user['gr'] = ModUtil::getVar('SiriusXtecAuth','new_users_groups');
            
            $userid = ModUtil::apifunc('SiriusXtecAuth', 'listeners', 'createUser', $user);
            if (!$userid) {
                LogUtil::registerError(__('No s\'ha pogut crear l\'usuari. Torneu a validar-vos.'));
                return false;
            }
            
        }
        
        @ldap_unbind($ldap_ds);
        UserUtil::setUserByUid($userid);
        
        if (!ModUtil::getVar('SiriusXtecAuth','loginXtecApps',false)) {
            return System::redirect(System::getHomepageUrl());
        } else {
			$pass_e = urlencode(base64_encode($pass));
            return System::redirect(ModUtil::url('SiriusXtecAuth', 'user', 'logingXtecApps',array('uname'=>$uname,'pass'=>$pass_e,'logtype'=>'in')));
        }

    }
开发者ID:projectesIF,项目名称:Sirius,代码行数:95,代码来源:Listeners.php

示例5: grups

    public function grups($args) {
        $gid = FormUtil::getPassedValue('gid', isset($args['gid']) ? $args['gid'] : 0, 'GETPOST');
        $gid1 = FormUtil::getPassedValue('gid1', isset($args['gid1']) ? $args['gid1'] : 0, 'GETPOST');
        $action = FormUtil::getPassedValue('action', isset($args['action']) ? $args['action'] : 0, 'GETPOST');
        $uid0 = FormUtil::getPassedValue('uid0', isset($args['uid0']) ? $args['uid0'] : array(), 'GETPOST');
        $uid1 = FormUtil::getPassedValue('uid1', isset($args['uid1']) ? $args['uid1'] : array(), 'GETPOST');
        $confirmation = FormUtil::getPassedValue('confirmation', isset($args['confirmation']) ? $args['confirmation'] : 0, 'POST');

        // Security check
        if (!SecurityUtil::checkPermission('IWgroups::', '::', ACCESS_ADMIN)) {
            throw new Zikula_Exception_Forbidden();
        }

        //Si els dos grup estan buits. Cancelem l'acció
        if (($gid == 0 || $gid == '') && ($gid1 == 0 || $gid1 == '')) {
            LogUtil::registerError($this->__('Incorrect action during the group change'));
            return System::redirect(ModUtil::url('IWgroups', 'admin', 'membres', array('gid' => $gid,
                                'gid1' => $gid1)));
        }

        // Confirm authorisation code
        $this->checkCsrfToken();

        switch ($action) {
            case 1:
                if (empty($uid0)) {
                    LogUtil::registerError($this->__('No user selected'));
                    return System::redirect(ModUtil::url('IWgroups', 'admin', 'membres', array('gid' => $gid,
                                        'gid1' => $gid1)));
                }

                //Si el grup de destí és el buit. Cancel·lem l'acció
                if (($gid1 == 0 || $gid1 == '')) {
                    LogUtil::registerError($this->__('Incorrect action during the group change'));
                    return System::redirect(ModUtil::url('IWgroups', 'admin', 'membres', array('gid' => $gid,
                                        'gid1' => $gid1)));
                }

                //Si l'usuari prové del grup buit no es demana confirmació i simplement s'afegeix al grup de destí
                if ($gid == '' || $gid == 0) {
                    $afegit = ModUtil::apiFunc('IWgroups', 'admin', 'afegeix_membres', array('gid' => $gid1,
                                'uid' => $uid0));
                    return System::redirect(ModUtil::url('IWgroups', 'admin', 'membres', array('gid' => $gid,
                                        'gid1' => $gid1)));
                }

                //Si no cal demanar confirmació segons la configuració posem $comfirmacio=true
                if (ModUtil::getVar('IWgroups', 'confmou') == 0) {
                    $confirmation = 1;
                }

                if ($confirmation == 0) {
                    $group1 = ModUtil::apifunc('IWgroups', 'user', 'get', array('gid' => $gid));
                    $group2 = ModUtil::apifunc('IWgroups', 'user', 'get', array('gid' => $gid1));

                    $usersList = '$$';

                    foreach ($uid0 as $userId) {
                        $usersList .= $userId . '$$';
                    }

                    foreach ($uid1 as $userId) {
                        $usersList .= $userId . '$$';
                    }

                    //get all users information
                    $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue');
                    $usersInfo = ModUtil::func('IWmain', 'user', 'getAllUsersInfo', array('sv' => $sv,
                                'list' => $usersList,
                                'info' => 'ccn'));
                    return $this->view->assign('usersInfo', $usersInfo)
                                    ->assign('group1', $group1)
                                    ->assign('group2', $group2)
                                    ->assign('uid0', $uid0)
                                    ->assign('action', $action)
                                    ->assign('gid', $gid)
                                    ->assign('gid1', $gid1)
                                    ->fetch('IWgroups_admin_grups.tpl');
                }

                if (ModUtil::apifunc('IWgroups', 'admin', 'mou_membres', array('gid' => $gid,
                            'uid' => $uid0,
                            'gid1' => $gid1))) {
                    //El deplaçament dels usuaris ha anat bé
                    LogUtil::registerStatus($this->__('The groups changes have been successfull'));
                }
                break;
            case 2:
                if (empty($uid0)) {
                    LogUtil::registerError($this->__('No user selected'));
                    return System::redirect(ModUtil::url('IWgroups', 'admin', 'membres', array('gid' => $gid,
                                        'gid1' => $gid1)));
                }

                //Si el grup de destí és el buit. Cancel·lem l'acció
                if (($gid1 == 0 || $gid1 == '')) {
                    LogUtil::registerError($this->__('Incorrect action during the group change'));
                    return System::redirect(ModUtil::url('IWgroups', 'admin', 'membres', array('gid' => $gid,
                                        'gid1' => $gid1)));
                }
//.........这里部分代码省略.........
开发者ID:projectesIF,项目名称:Sirius,代码行数:101,代码来源:Admin.php

示例6: addeditAuxElement

    public function addeditAuxElement() { //copiat i pendent d'arranjar
        if (!SecurityUtil::checkPermission('SiriusAdmin::', '::', ACCESS_ADMIN)) {
            return LogUtil::registerPermissionError();
        }
        $item['auxId'] = FormUtil::getPassedValue('auxId', null, 'POST');
        $item['tipus'] = FormUtil::getPassedValue('tipus', null, 'POST');
        $item['ordre'] = FormUtil::getPassedValue('ordre', null, 'POST');
        $item['nom'] = FormUtil::getPassedValue('nom', null, 'POST');
        $item['nomCurt'] = FormUtil::getPassedValue('nomCurt', null, 'POST');
        $item['visible'] = FormUtil::getPassedValue('visible', 0, 'POST');
        $r = ModUtil::apifunc('Cataleg', 'admin', 'saveAuxElement', $item);

        if ($r) {
            if ($r == 'edit') {
                LogUtil::registerStatus($this->__('L\'element s\'ha editat correctament.'));
            } else {
                LogUtil::registerStatus($this->__('L\'elements\'ha creat correctament.'));
            }
        } else {
            LogUtil::registerError($this->__('No s\'ha pogut desar l\'element.'));
        }
        return system::redirect(ModUtil::url('Cataleg', 'admin', 'auxgest'));
    }
开发者ID:projectesIF,项目名称:Sirius,代码行数:23,代码来源:Admin.php

示例7: news


//.........这里部分代码省略.........
                        if ($uid != $realUid) {
                            $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue');
                        }
                        $noves = ModUtil::apiFunc('IWforums', 'user', 'compta_msg', array('fid' => $registre['fid'],
                                    'tots' => true,
                                    'uid' => $uid,
                                    'sv' => $sv));
                        if ($noves['nollegits'] > 0) {
                            $newsArray[] = array('code' => '',
                                'nNotes' => $noves['nollegits'],
                                'url' => ModUtil::getVar('IWmain', 'URLBase') . 'index.php?module=IWforums&func=forum&fid=' . $registre['fid'],
                                'element' => $this->__('Forum'),
                                'title' => $registre['nom_forum']);
                        }
                    }
                }
                $newsArray[] = array('code' => '<!---/fo--->');
            }
        }

        //IWforms
        $modid = ModUtil::getIdFromName('IWforms');
        $modinfo = ModUtil::getInfo($modid);
        if ($modinfo['state'] == 3 && ($where == 'fu' || $where == '')) {
            if (SecurityUtil::checkPermission('IWforms::', "::", ACCESS_READ) || $requestByCron) {
                //get all the active forms
                if ($uid != $realUid) {
                    $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue');
                }
                $forms = ModUtil::apiFunc('IWforms', 'user', 'getAllForms', array('user' => 1,
                            'sv' => $sv));
                //get all the groups of the user
                $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue');
                $userGroups = ModUtil::func('IWmain', 'user', 'getAllUserGroups', array('uid' => $uid,
                            'sv' => $sv));
                foreach ($userGroups as $group) {
                    $userGroupsArray[] = $group['id'];
                }
            }
            foreach ($forms as $form) {
                if ($uid != $realUid) {
                    $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue');
                }
                $access = ModUtil::func('IWforms', 'user', 'access', array('fid' => $form['fid'],
                            'userGroups' => $userGroupsArray,
                            'uid' => $uid,
                            'sv' => $sv));
                $newsArray[] = array('code' => '<!---fu--->');
                if ($access['level'] > 1) {
                    // get not view user news
                    if ($uid != $realUid) {
                        $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue');
                    }
                    $nNotes = ModUtil::apiFunc('IWforms', 'user', 'getNewNotes', array('fid' => $form['fid'],
                                'uid' => $uid,
                                'sv' => $sv));
                    if (count($nNotes) > 0) {
                        // user can read the notes
                        $url = ($access['level'] == 7) ? ModUtil::getVar('IWmain', 'URLBase') . 'index.php?module=IWforms&func=manage&fid=' . $form['fid'] : ModUtil::getVar('IWmain', 'URLBase') . 'index.php?module=IWforms&func=read&fid=' . $form['fid'];
                        $newsArray[] = array('code' => '',
                            'nNotes' => count($nNotes),
                            'url' => $url,
                            'element' => $this->__('Form'),
                            'title' => $form['formName']);
                    }
                }
                $newsArray[] = array('code' => '<!---/fu--->');
            }
        }

        //Change avatar requests
        if (SecurityUtil::checkPermission('IWusers::', '::', ACCESS_ADMIN) && ($where == 'ch' || $where == '')) {
            $avatars = ModUtil::apifunc('IWusers', 'admin', 'getNotValidatedAvatars');
            if (count($avatars) > 0) {
                $newsArray[] = array('code' => '<!---ch--->');
                $newsArray[] = array('code' => '',
                    'nNotes' => count($avatars),
                    'url' => ModUtil::getVar('IWmain', 'URLBase') . 'index.php?module=IWusers&type=admin&func=changeAvatarView',
                    'element' => $this->__('Avatar replacement'),
                    'title' => '');
                $newsArray[] = array('code' => '<!---/ch--->');
            }
        }

        $news = $this->view->assign('newsArray', $newsArray)
                ->fetch('IWmain_block_news.tpl');

        $news = $before . $news . $after;
        $news = str_replace('\'', '&acute;', $news);

        $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue');
        ModUtil::func('IWmain', 'user', 'userSetVar', array('uid' => $uid,
            'name' => 'news',
            'module' => 'IWmain_block_news',
            'sv' => $sv,
            'value' => $news,
            'lifetime' => '700'));

        return true;
    }
开发者ID:projectesIF,项目名称:Sirius,代码行数:101,代码来源:User.php


注:本文中的ModUtil::apifunc方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。