Example #1
0
function ext_module_manifest_parse($xml)
{
    $dom = new DOMDocument();
    $dom->loadXML($xml);
    if ($dom->schemaValidateSource(ext_module_manifest_validate())) {
        $root = $dom->getElementsByTagName('manifest')->item(0);
        $vcode = explode(',', $root->getAttribute('versionCode'));
        $manifest['versions'] = array();
        if (is_array($vcode)) {
            foreach ($vcode as $v) {
                $v = trim($v);
                if (!empty($v)) {
                    $manifest['versions'][] = $v;
                }
            }
            $manifest['versions'][] = '0.52';
            $manifest['versions'][] = '0.6';
            $manifest['versions'] = array_unique($manifest['versions']);
        }
        $manifest['install'] = $root->getElementsByTagName('install')->item(0)->textContent;
        $manifest['uninstall'] = $root->getElementsByTagName('uninstall')->item(0)->textContent;
        $manifest['upgrade'] = $root->getElementsByTagName('upgrade')->item(0)->textContent;
        $application = $root->getElementsByTagName('application')->item(0);
        $manifest['application'] = array('name' => trim($application->getElementsByTagName('name')->item(0)->textContent), 'identifie' => trim($application->getElementsByTagName('identifie')->item(0)->textContent), 'version' => trim($application->getElementsByTagName('version')->item(0)->textContent), 'type' => trim($application->getElementsByTagName('type')->item(0)->textContent), 'ability' => trim($application->getElementsByTagName('ability')->item(0)->textContent), 'description' => trim($application->getElementsByTagName('description')->item(0)->textContent), 'author' => trim($application->getElementsByTagName('author')->item(0)->textContent), 'url' => trim($application->getElementsByTagName('url')->item(0)->textContent), 'setting' => trim($application->getAttribute('setting')) == 'true');
        $platform = $root->getElementsByTagName('platform')->item(0);
        if (!empty($platform)) {
            $manifest['platform'] = array('subscribes' => array(), 'handles' => array(), 'isrulefields' => false);
            $subscribes = $platform->getElementsByTagName('subscribes')->item(0);
            if (!empty($subscribes)) {
                $messages = $subscribes->getElementsByTagName('message');
                for ($i = 0; $i < $messages->length; $i++) {
                    $t = $messages->item($i)->getAttribute('type');
                    if (!empty($t)) {
                        $manifest['platform']['subscribes'][] = $t;
                    }
                }
            }
            $handles = $platform->getElementsByTagName('handles')->item(0);
            if (!empty($handles)) {
                $messages = $handles->getElementsByTagName('message');
                for ($i = 0; $i < $messages->length; $i++) {
                    $t = $messages->item($i)->getAttribute('type');
                    if (!empty($t)) {
                        $manifest['platform']['handles'][] = $t;
                    }
                }
            }
            $rule = $platform->getElementsByTagName('rule')->item(0);
            if (!empty($rule) && $rule->getAttribute('embed') == 'true') {
                $manifest['platform']['isrulefields'] = true;
            }
        }
        $bindings = $root->getElementsByTagName('bindings')->item(0);
        if (!empty($bindings)) {
            global $points;
            if (!empty($points)) {
                $ps = array_keys($points);
                $manifest['bindings'] = array();
                foreach ($ps as $p) {
                    $define = $bindings->getElementsByTagName($p)->item(0);
                    $manifest['bindings'][$p] = _ext_module_manifest_entries($define);
                }
            }
        }
    } else {
        $err = error_get_last();
        if ($err['type'] == 2) {
            return $err['message'];
        }
    }
    return $manifest;
}
Example #2
0
function ext_module_manifest_parse($xml)
{
    if (!strexists($xml, '<manifest')) {
        $xml = base64_decode($xml);
    }
    if (empty($xml)) {
        return array();
    }
    $dom = new DOMDocument();
    $dom->loadXML($xml);
    $root = $dom->getElementsByTagName('manifest')->item(0);
    if (empty($root)) {
        return array();
    }
    $vcode = explode(',', $root->getAttribute('versionCode'));
    $manifest['versions'] = array();
    if (is_array($vcode)) {
        foreach ($vcode as $v) {
            $v = trim($v);
            if (!empty($v)) {
                $manifest['versions'][] = $v;
            }
        }
        $manifest['versions'][] = '0.52';
        $manifest['versions'][] = '0.6';
        $manifest['versions'] = array_unique($manifest['versions']);
    }
    $manifest['install'] = $root->getElementsByTagName('install')->item(0)->textContent;
    $manifest['uninstall'] = $root->getElementsByTagName('uninstall')->item(0)->textContent;
    $manifest['upgrade'] = $root->getElementsByTagName('upgrade')->item(0)->textContent;
    $application = $root->getElementsByTagName('application')->item(0);
    $manifest['application'] = array('name' => trim($application->getElementsByTagName('name')->item(0)->textContent), 'identifie' => trim($application->getElementsByTagName('identifie')->item(0)->textContent), 'version' => trim($application->getElementsByTagName('version')->item(0)->textContent), 'type' => trim($application->getElementsByTagName('type')->item(0)->textContent), 'ability' => trim($application->getElementsByTagName('ability')->item(0)->textContent), 'description' => trim($application->getElementsByTagName('description')->item(0)->textContent), 'author' => trim($application->getElementsByTagName('author')->item(0)->textContent), 'url' => trim($application->getElementsByTagName('url')->item(0)->textContent), 'setting' => trim($application->getAttribute('setting')) == 'true');
    $platform = $root->getElementsByTagName('platform')->item(0);
    if (!empty($platform)) {
        $manifest['platform'] = array('subscribes' => array(), 'handles' => array(), 'isrulefields' => false, 'iscard' => false);
        $subscribes = $platform->getElementsByTagName('subscribes')->item(0);
        if (!empty($subscribes)) {
            $messages = $subscribes->getElementsByTagName('message');
            for ($i = 0; $i < $messages->length; $i++) {
                $t = $messages->item($i)->getAttribute('type');
                if (!empty($t)) {
                    $manifest['platform']['subscribes'][] = $t;
                }
            }
        }
        $handles = $platform->getElementsByTagName('handles')->item(0);
        if (!empty($handles)) {
            $messages = $handles->getElementsByTagName('message');
            for ($i = 0; $i < $messages->length; $i++) {
                $t = $messages->item($i)->getAttribute('type');
                if (!empty($t)) {
                    $manifest['platform']['handles'][] = $t;
                }
            }
        }
        $rule = $platform->getElementsByTagName('rule')->item(0);
        if (!empty($rule) && $rule->getAttribute('embed') == 'true') {
            $manifest['platform']['isrulefields'] = true;
        }
        $card = $platform->getElementsByTagName('card')->item(0);
        if (!empty($card) && $card->getAttribute('embed') == 'true') {
            $manifest['platform']['iscard'] = true;
        }
    }
    $bindings = $root->getElementsByTagName('bindings')->item(0);
    if (!empty($bindings)) {
        global $points;
        if (!empty($points)) {
            $ps = array_keys($points);
            $manifest['bindings'] = array();
            foreach ($ps as $p) {
                $define = $bindings->getElementsByTagName($p)->item(0);
                $manifest['bindings'][$p] = _ext_module_manifest_entries($define);
            }
        }
    }
    $permissions = $root->getElementsByTagName('permissions')->item(0);
    if (!empty($permissions)) {
        $manifest['permissions'] = array();
        $items = $permissions->getElementsByTagName('entry');
        for ($i = 0; $i < $items->length; $i++) {
            $item = $items->item($i);
            $row = array('title' => $item->getAttribute('title'), 'permission' => $item->getAttribute('do'));
            if (!empty($row['title']) && !empty($row['permission'])) {
                $manifest['permissions'][] = $row;
            }
        }
    }
    return $manifest;
}