Ejemplo n.º 1
0
    function saveAllReleasesREST($package)
    {
        require_once 'System.php';
        require_once 'PEAR/PackageFile/Parser/v2.php';
        require_once 'PEAR/Config.php';
        global $dbh;
        $extra = '/rest/';
        $pid = package::info($package, 'id');
        $releases = $dbh->getAll('SELECT * FROM releases WHERE package = ? ORDER BY releasedate DESC', array($pid), DB_FETCHMODE_ASSOC);
        $rdir = $this->_restdir . DIRECTORY_SEPARATOR . 'r';
        if (!is_dir($rdir)) {
            System::mkdir(array('-p', $rdir));
            @chmod($rdir, 0777);
        }
        if (!$releases || !count($releases)) {
            // start from scratch, so that any pulled releases have their REST deleted
            System::rm(array('-r', $rdir . DIRECTORY_SEPARATOR . strtolower($package)));
            return;
        }
        $info = $this->_getAllReleasesRESTProlog($package);
        foreach ($releases as $release) {
            $packagexml = $dbh->getOne('SELECT packagexml FROM files WHERE package = ? AND
                `release` = ?', array($pid, $release['id']));
            $extra = '';
            if (strpos($packagexml, ' version="2.0"')) {
                // little quick hack to determine package.xml version
                $pkg = new PEAR_PackageFile_Parser_v2();
                $config =& PEAR_Config::singleton();
                $pkg->setConfig($config);
                // configuration is unused for this quick parse
                $pf = $pkg->parse($packagexml, '');
                if (PEAR::isError($pf)) {
                    return PEAR::raiseError(sprintf("Parsing the packagexml for release %s failed with error message: %s", $release['id'], $pf->getMessage()));
                }
                if ($compat = $pf->getCompatible()) {
                    if (!isset($compat[0])) {
                        $compat = array($compat);
                    }
                    foreach ($compat as $entry) {
                        $extra .= '<co><c>' . $entry['channel'] . '</c>' . '<p>' . $entry['name'] . '</p>' . '<min>' . $entry['min'] . '</min>' . '<max>' . $entry['max'] . '</max>';
                        if (isset($entry['exclude'])) {
                            if (!is_array($entry['exclude'])) {
                                $entry['exclude'] = array($entry['exclude']);
                            }
                            foreach ($entry['exclude'] as $exclude) {
                                $extra .= '<x>' . $exclude . '</x>';
                            }
                        }
                        $extra .= '</co>
';
                    }
                }
            }
            if (!isset($latest)) {
                $latest = $release['version'];
            }
            if ($release['state'] == 'stable' && !isset($stable)) {
                $stable = $release['version'];
            }
            if ($release['state'] == 'beta' && !isset($beta)) {
                $beta = $release['version'];
            }
            if ($release['state'] == 'alpha' && !isset($alpha)) {
                $alpha = $release['version'];
            }
            $info .= ' <r><v>' . $release['version'] . '</v><s>' . $release['state'] . '</s>' . $extra . '</r>
';
        }
        $info .= '</a>';
        if (!is_dir($rdir . DIRECTORY_SEPARATOR . strtolower($package))) {
            System::mkdir(array('-p', $rdir . DIRECTORY_SEPARATOR . strtolower($package)));
            @chmod($rdir . DIRECTORY_SEPARATOR . strtolower($package), 0777);
        }
        file_put_contents($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'allreleases.xml', $info);
        @chmod($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'allreleases.xml', 0666);
        file_put_contents($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'latest.txt', $latest);
        @chmod($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'latest.txt', 0666);
        // remove .txt in case all releases of this stability were deleted
        @unlink($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'stable.txt');
        @unlink($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'beta.txt');
        @unlink($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'alpha.txt');
        if (isset($stable)) {
            file_put_contents($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'stable.txt', $stable);
            @chmod($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'stable.txt', 0666);
        }
        if (isset($beta)) {
            file_put_contents($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'beta.txt', $beta);
            @chmod($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'beta.txt', 0666);
        }
        if (isset($alpha)) {
            file_put_contents($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'alpha.txt', $alpha);
            @chmod($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'alpha.txt', 0666);
        }
    }
Ejemplo n.º 2
0
    public function saveAllReleasesREST($package)
    {
        require_once 'PEAR/PackageFile/Parser/v2.php';
        require_once 'PEAR/Config.php';
        include_once 'pear-database-package.php';
        $pid = package::info($package, 'id');
        $releases = $this->db->getAll('SELECT * FROM releases WHERE package = ? ORDER BY releasedate DESC', array($pid), DB_FETCHMODE_ASSOC);
        if (PEAR::isError($releases)) {
            return $releases;
        }
        $deps = $this->db->getAssoc('SELECT `release`, `version` FROM deps WHERE package = ? AND type="php" and relation="ge"', false, array($pid));
        if (PEAR::isError($deps)) {
            return $releases;
        }
        $rdir = $this->getReleaseDirectory();
        if (!is_dir($rdir)) {
            if (!mkdir($rdir, 0777, true)) {
                return PEAR::raiseError('Creating directory ' . $rdir . ' failed - Check the permissions');
            }
            @chmod($rdir, 0777);
        }
        if (!$releases || !count($releases)) {
            // start from scratch, so that any pulled releases have their REST deleted
            require_once 'System.php';
            System::rm(array('-r', $rdir . strtolower($package)));
            return;
        }
        $info = $this->_getAllReleasesRESTProlog($package);
        $info2 = $this->_getAllReleases2RESTProlog($package);
        foreach ($releases as $release) {
            $packagexml = $this->db->getOne('SELECT packagexml FROM files WHERE package = ? AND
                `release` = ?', array($pid, $release['id']));
            if (PEAR::isError($packagexml)) {
                return $packagexml;
            }
            $extra = '';
            if (strpos($packagexml, ' version="2.0"')) {
                // little quick hack to determine package.xml version
                $pkg = new PEAR_PackageFile_Parser_v2();
                $config =& PEAR_Config::singleton();
                $pkg->setConfig($config);
                // configuration is unused for this quick parse
                $pf = $pkg->parse($packagexml, '');
                if ($compat = $pf->getCompatible()) {
                    if (!isset($compat[0])) {
                        $compat = array($compat);
                    }
                    foreach ($compat as $entry) {
                        $extra .= '<co><c>' . $entry['channel'] . '</c>' . '<p>' . $entry['name'] . '</p>' . '<min>' . $entry['min'] . '</min>' . '<max>' . $entry['max'] . '</max>';
                        if (isset($entry['exclude'])) {
                            if (!is_array($entry['exclude'])) {
                                $entry['exclude'] = array($entry['exclude']);
                            }
                            foreach ($entry['exclude'] as $exclude) {
                                $extra .= '<x>' . $exclude . '</x>';
                            }
                        }
                        $extra .= '</co>
';
                    }
                }
            }
            if (!isset($latest)) {
                $latest = $release['version'];
            }
            if ($release['state'] == 'stable' && !isset($stable)) {
                $stable = $release['version'];
            }
            if ($release['state'] == 'beta' && !isset($beta)) {
                $beta = $release['version'];
            }
            if ($release['state'] == 'alpha' && !isset($alpha)) {
                $alpha = $release['version'];
            }
            $info .= ' <r><v>' . $release['version'] . '</v><s>' . $release['state'] . '</s>' . $extra . '</r>
';
            $phpdep = isset($deps[$release['id']]) ? $deps[$release['id']] : '4.0.0';
            $info2 .= ' <r><v>' . $release['version'] . '</v><s>' . $release['state'] . '</s>' . '<m>' . $phpdep . '</m>' . $extra . '</r>
';
        }
        $info .= '</a>';
        $info2 .= '</a>';
        $dir = $rdir . strtolower($package) . DIRECTORY_SEPARATOR;
        if (!is_dir($dir)) {
            if (!mkdir($dir, 0777, true)) {
                return PEAR::raiseError('Creating directory ' . $dir . ' failed - Check the permissions');
            }
            @chmod($dir, 0777);
        }
        if (!file_put_contents($dir . 'allreleases.xml', $info)) {
            return PEAR::raiseError('Writing file ' . $dir . 'allreleases.xml failed - Check the permissions');
        }
        @chmod($dir . 'allreleases.xml', 0666);
        if (!file_put_contents($dir . 'allreleases2.xml', $info2)) {
            return PEAR::raiseError('Writing file ' . $dir . 'allreleases2.xml failed - Check the permissions');
        }
        @chmod($dir . 'allreleases2.xml', 0666);
        if (!file_put_contents($dir . 'latest.txt', $latest)) {
            return PEAR::raiseError('Writing file ' . $dir . 'latest.txt failed - Check the permissions');
        }
        @chmod($dir . 'latest.txt', 0666);
        // remove .txt in case all releases of this stability were deleted
        @unlink($dir . 'stable.txt');
        @unlink($dir . 'beta.txt');
        @unlink($dir . 'alpha.txt');
        if (isset($stable)) {
            if (!file_put_contents($dir . 'stable.txt', $stable)) {
                return PEAR::raiseError('Writing file ' . $dir . 'stable.txt failed - Check the permissions');
            }
            @chmod($dir . 'stable.txt', 0666);
        }
        if (isset($beta)) {
            if (!file_put_contents($dir . 'beta.txt', $beta)) {
                return PEAR::raiseError('Writing file ' . $dir . 'beta.txt failed - Check the permissions');
            }
            @chmod($dir . 'beta.txt', 0666);
        }
        if (isset($alpha)) {
            if (!file_put_contents($dir . 'alpha.txt', $alpha)) {
                return PEAR::raiseError('Writing file ' . $dir . 'alpha.txt failed - Check the permissions');
            }
            @chmod($dir . 'alpha.txt', 0666);
        }
    }
Ejemplo n.º 3
0
 /**
  * (non-PHPdoc)
  * @see lib/Faett/Core/Interfaces/Faett_Core_Interfaces_Service#packageFile($package)
  */
 public function packageFile($package)
 {
     // initialize the archive
     $tar = new Archive_Tar($package);
     // try to load the content of the package2.xml file
     $contents = $tar->extractInString($packageFileName = 'package2.xml');
     // if not available, try to load from package.xml file
     if (!$contents) {
         $contents = $tar->extractInString($packageFileName = 'package.xml');
     }
     // initialize the parser for the package file and parse it
     $pkg = new PEAR_PackageFile_Parser_v2();
     $pkg->setConfig($this->getConfig());
     $pf = $pkg->parse($contents, $packageFileName);
     // check if errors occurs and throw an exception if necessary
     if (PEAR::isError($pf)) {
         throw Faett_Core_Exceptions_InvalidPackageFileException::create($pf->getMessage());
     }
     // validate the package
     if (!$pf->validate()) {
         // initialize the string for the errors and warnings
         $errors = '';
         // concatenate the message
         foreach ($pf->getValidationWarnings() as $warning) {
             $errors .= PHP_EOL . ucfirst($warning['level']) . ': ' . $warning['message'];
         }
         // throw an exception with the warnings
         throw Faett_Core_Exceptions_InvalidPackageFileException::create($errors);
     }
     // return the package file
     return $pf;
 }