From c44eb057150670df61268a4c686eae274beb7352 Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 11:17:21 +0200 Subject: Align cells on top --- css/rpmphp.css | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/css/rpmphp.css b/css/rpmphp.css index d98ead4..4d5deed 100644 --- a/css/rpmphp.css +++ b/css/rpmphp.css @@ -44,6 +44,10 @@ a{ text-decoration:none; } +td{ + vertical-align:top; +} + a:hover{ text-decoration:underline; } @@ -174,13 +178,14 @@ p{ display:inline-block; position:absolute; right:1em; + top:0; } #filter fieldset{ padding:.2em; } -#count_found{ +#list-packages tfoot td{ text-align:right; font-size:.9em; font-style:italic; -- cgit From 873662fe815c678f35ec1518d9fc013c993ae710 Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 11:26:48 +0200 Subject: Use of smarty to render rpm page ; apply coding standards, add license ; refs #46,48,47 --- rpm.php | 490 +++++++++++++++++++++------------------- smarty/templates/rpmphp/rpm.tpl | 86 +++++++ 2 files changed, 348 insertions(+), 228 deletions(-) create mode 100644 smarty/templates/rpmphp/rpm.tpl diff --git a/rpm.php b/rpm.php index edad029..6627b04 100644 --- a/rpm.php +++ b/rpm.php @@ -1,256 +1,290 @@ . + * + * @category Main + * @package RPMPHP + * + * @author Remi Collet + * @author Johan Cwiklinski + * @copyright 2010 Remi Collet + * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version + * @version SVN: $Id: ajouter_adherent.php 836 2010-02-27 08:11:44Z trashy $ + * @link http://github.com/remicollet/rpmphp/ + * @since The begining of times. +*/ +require 'main.inc.php'; + +$smarty->assign('ariane', $ariane); + $what=(isset($_GET["what"]) ? $_GET["what"] : "%fedora"); $type=(isset($_GET["type"]) ? $_GET["type"] : "pecl"); -require "config.inc.php"; +$ariane[] = array( + 'url' => '#', + 'text' => strtoupper($type). ' extensions in Fedora' +); +$smarty->assign('ariane', $ariane); + +$smarty->assign('type', $type); +$smarty->assign('what', $what); +$smarty->assign('page_title', strtoupper($type). ' extensions in Fedora'); -function listRepos($db){ - $repos = array(); - $res=$db->query("SELECT * FROM repo WHERE active=1 ORDER BY ID"); - if ($res) while ($repo = $res->fetchObject()) { - $repos[$repo->main][$repo->sub]=$repo; - } - // echo "
"; print_r($repos);echo "
"; - foreach($repos as $repomain) { - foreach ($repomain as $repo) { - /*printf ("%s", $repo->main);*/ - $repos[$repo->main][$repo->sub] = $repo; - break; - } - } - return $repos; +/** +* Get repositories list +* +* @param object $db a reference to the database +* +* @return array +*/ +function listRepos($db) +{ + $repos = array(); + $res=$db->query("SELECT * FROM repo WHERE active=1 ORDER BY ID"); + if ( $res ) { + while ($repo = $res->fetchObject()) { + $repos[$repo->main][$repo->sub]=$repo; + } + } + // echo "
"; print_r($repos);echo "
"; + foreach ( $repos as $repomain ) { + foreach ($repomain as $repo) { + $repos[$repo->main][$repo->sub] = $repo; + break; + } + } + return $repos; } -function Report ($db, $type, $repos) { - global $what; +/** +* Retrieve packages informations +* +* @param Object $db A reference to the database +* @param string $type The current type +* +* @return array +*/ +function report($db, $type) +{ + global $what, $smarty; + $packages = null; + $repos = listRepos($db); + $smarty->assign('repos', $repos); - $i=0; - $resup=$db->query("SELECT * FROM upstream WHERE type='$type' ORDER BY name"); - if ($resup) while ($upstream = $resup->fetchObject()) { - $rpmname = $upstream->name; + $i=0; + $resup=$db->query("SELECT * FROM upstream WHERE type='$type' ORDER BY name"); + if ($resup) { + while ($upstream = $resup->fetchObject()) { + $package = null; + $rpmname = $upstream->name; - $sql2="SELECT DISTINCT owner FROM acls WHERE name = '$rpmname'"; - $res2=$db->query($sql2); - $owners=array(); - if ($res2) while ($owner= $res2->fetchObject()) $owners[] = $owner->owner; + $sql2="SELECT DISTINCT owner FROM acls WHERE name = '$rpmname'"; + $res2=$db->query($sql2); + $owners=array(); + if ( $res2 ) { + while ($owner= $res2->fetchObject()) { + $owners[] = $owner->owner; + } + } - $sql = "SELECT * FROM rpm WHERE name = '$rpmname'"; + $sql = "SELECT * FROM rpm WHERE name = '$rpmname'"; - $res=$db->query($sql); - $rpm = ($res ? $res->fetchObject() : false); + $res=$db->query($sql); + $rpm = ($res ? $res->fetchObject() : false); - switch ($what) { - case '%fedora': - $display = ($rpm !== false); - break; - case '%stable': - $display = !empty($upstream->stable); - break; - case '%all': - $display = true; - break; - default: // owner - $display = (array_search($what, $owners) !== false); - break; - } + switch ($what) { + case '%fedora': + $display = ($rpm !== false); + break; + case '%stable': + $display = !empty($upstream->stable); + break; + case '%all': + $display = true; + break; + default: // owner + $display = (array_search($what, $owners) !== false); + break; + } - if ($display) { - if ($rpm) { - $dispname = "summary) . "\">$rpmname"; - } else { - $dispname = $rpmname; - } - $rpms=array(); - if ($rpm) do { - $rpms[$rpm->repo_main."-".$rpm->repo_sub]=$rpm; - } while ($rpm = $res->fetchObject()); + if ($display) { + if ($rpm) { + $package['name'] = '' . + $rpmname . ''; + } else { + $package['name'] = $rpmname; + } + if ( $upstream->channel != $upstream->type ) { + $package['channel'] = $upstream->channel; + } + $rpms=array(); + if ( $rpm ) { + do { + $rpms[$rpm->repo_main."-".$rpm->repo_sub]=$rpm; + } while ($rpm = $res->fetchObject()); + } - $dispowner=""; - foreach ($owners as $owner) { - if ($dispowner) $dispowner .= "
"; - $dispowner .= sprintf ("%s", $_SERVER["PHP_SELF"], $owner, $owner); - } - printf ("\n\t%s
%s\n\t%s\n\t%s%s\n", - ($i%2 ? "odd" : "even"), $dispname, - ($upstream->channel != $upstream->type ? "channel: " . $upstream->channel : ""), - $dispowner, - ($upstream->stable ? "".$upstream->stable."
" : " "), - ($upstream->unstable && (!$upstream->stable || $upstream->stable!=$upstream->unstable) ? $upstream->unstable." (".$upstream->state.")" : " ")); + $dispowner=""; + $package['owners'] = $owners; + if ( $upstream->stable ) { + $package['upstream_stable'] = $upstream->stable; + } + if ( $upstream->unstable + && (!$upstream->stable + || $upstream->stable!=$upstream->unstable) + ) { + $package['upstream_unstable'] = $upstream->unstable . + ' (' . $upstream->state . ')'; + } - $verup = strtolower($upstream->stable ? $upstream->stable : $upstream->unstable); + $verup = strtolower($upstream->stable ? $upstream->stable : $upstream->unstable); - foreach($repos as $repomain) { - $display=""; - $class=""; - foreach ($repomain as $repo) { - if (isset($rpms[$repo->main."-".$repo->sub])) { - $rpm=$rpms[$repo->main."-".$repo->sub]; + $versions = null; + foreach ( $repos as $repomain ) { + $display=""; + $class=""; + foreach ( $repomain as $k=>$repo ) { + if ( isset($rpms[$repo->main."-".$repo->sub]) ) { + $rpm=$rpms[$repo->main."-".$repo->sub]; - $verpm=$rpm->ver; - if (preg_match("/\.((beta|RC)\d*)\./i", $rpm->rel, $res)) { - $verpm .= strtolower($res[1]); - } + $verpm=$rpm->ver; + if (preg_match("/\.((beta|RC)\d*)\./i", $rpm->rel, $res)) { + $verpm .= strtolower($res[1]); + } - switch ($repo->sub) { - case "base": - if (isset($rpms[$repo->main."-updates"])) { - $display .= sprintf("%s-%s
", $rpm->ver, $rpm->rel); - } else { - $display .= sprintf("%s-%s
", $rpm->ver, $rpm->rel); - } - if ($verup==$verpm) $class="check"; - break; - case "": - $display .= sprintf("%s-%s
", $rpm->ver, $rpm->rel); - if ($verup==$verpm) $class="check"; - break; - case "updates": - $display .= sprintf("%s-%s (updates)
", $rpm->ver, $rpm->rel); - if ($verup==$verpm) $class="check"; - break; - case "testing": - $display .= sprintf("%s-%s (testing)
", $rpm->ver, $rpm->rel); - if ($verup==$verpm) $class="info"; - break; - } - } // RPM exists - } // sub repo - if ($display && empty($class)) $class="attn"; - if ($display) { - printf("\t%s\n", $class, $display); - } else { - echo "\t \n"; - } - } // mainrepo + switch ($repo->sub) { + case "base": + if ( isset($rpms[$repo->main."-updates"]) ) { + $display .= sprintf( + "%s-%s
", + $rpm->ver, + $rpm->rel + ); + } else { + $display .= sprintf( + "%s-%s
", + $rpm->ver, + $rpm->rel + ); + } + if ( $verup==$verpm ) { + $class="check"; + } + break; + case "": + $display .= sprintf( + "%s-%s
", + $rpm->ver, + $rpm->rel + ); + if ( $verup==$verpm ) { + $class="check"; + } + break; + case "updates": + $display .= sprintf( + "%s-%s (updates)
", + $rpm->ver, + $rpm->rel + ); + if ( $verup==$verpm ) { + $class="check"; + } + break; + case "testing": + $display .= sprintf( + "%s-%s (testing)
", + $rpm->ver, + $rpm->rel + ); + if ( $verup==$verpm ) { + $class="info"; + } + break; + } + } // RPM exists + } // sub repo + if ( $display && empty($class) ) { + $class="attn"; + } + $versions[] = array( + 'class' => $class, + 'display' => $display + ); + $package['versions'] = $versions; + } // mainrepo - echo "\n"; - $i++; - } - } // each $unstable - echo "$i packages found\n"; + $i++; + $packages[] = $package; + } + } // each $unstable + } + return $packages; } -?> - - - - <?php echo $type; ?> extensions in Fedora - - - - - - - -
- - -
-
-

You are here:

- -
- -
-
-
- Filter packages - - - - -
-
-
-query($sql); + if ( $res ) { + while ( $owner = $res->fetchObject() ) { + $owners[] = $owner; + } + $smarty->assign('owners', $owners); + } - $sql='SELECT MAX(stamp) AS stamp FROM repo'; - $res=$db->query($sql); - if ($res && $row=$res->fetchObject()) { - printf("

Repositories last updated %s.

", date("r", $row->stamp)); - } + $sql='SELECT MAX(stamp) AS stamp FROM repo'; + $res=$db->query($sql); + if ($res && $row=$res->fetchObject()) { + $smarty->assign('repositories_update', date("r", $row->stamp)); + } -?> -

- - - - - - - - - - - - -assign('packages', report($db, $type)); } catch(PDOException $e) { -?> - - - -assign( + 'error', + sprintf("%s ERREUR : %s\n", date("r"), $e->getMessage()) + ); } -?> - -
PackageOwner(s)Upstream
-getMessage()); -?> -
-
    -
  • Legend:
  • -
  • Upstream: bold if stable.
  • -
  • Repo: bold for latest release.
  • -
  • Lastest released (stable if exists)
  • -
  • Lastest in testing
  • -
  • Lastest not available
  • -
-
- - -
- - +$page_content = $smarty->fetch('rpm.tpl'); +$smarty->assign('page_content', $page_content); +$smarty->display('main.tpl'); +?> \ No newline at end of file diff --git a/smarty/templates/rpmphp/rpm.tpl b/smarty/templates/rpmphp/rpm.tpl new file mode 100644 index 0000000..ffabb4f --- /dev/null +++ b/smarty/templates/rpmphp/rpm.tpl @@ -0,0 +1,86 @@ +

Repositories last updated {$repositories_update}.

+
+
+
+ Filter {$type|upper} packages + + + + +
+
+
+ + + + + + + + +{foreach from=$repos key=k item=v} + +{/foreach} + + + + + + + + +{foreach from=$packages item=p name=plist} + + + + + {foreach from=$p.versions key=k item=version} + + {$version.display} + + {/foreach} + +{/foreach} + +
PackageOwner(s)Upstream{$k}
{$packages|@count} packages found
+ {$p.name} + {if $p.channel} +
channel: {$p.channel} + {/if} +
+ {foreach from=$p.owners item=owner name=ow_it} + {$owner} + {if not $smarty.foreach.ow_it.last} +
+ {/if} + {/foreach} +
+ {if $p.upstream_stable} + {$p.upstream_stable} + {/if} + {if $p.upstream_unstable} +
{$p.upstream_unstable} + {/if} +
+ +
    +
  • Legend:
  • +
  • Upstream: bold if stable.
  • +
  • Repo: bold for latest release.
  • +
  • Lastest released (stable if exists)
  • +
  • Lastest in testing
  • +
  • Lastest not available
  • +
-- cgit From c232552a41bf22f05db4ab1f56d55f8692a1b2ca Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 11:29:36 +0200 Subject: Remove not relevant version ; refs #46 --- index.php | 1 - rpm.php | 1 - zoom.php | 1 - 3 files changed, 3 deletions(-) diff --git a/index.php b/index.php index dc6f25a..341a894 100644 --- a/index.php +++ b/index.php @@ -31,7 +31,6 @@ * @author Johan Cwiklinski * @copyright 2010 Remi Collet * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version - * @version SVN: $Id: ajouter_adherent.php 836 2010-02-27 08:11:44Z trashy $ * @link http://github.com/remicollet/rpmphp/ * @since The begining of times. */ diff --git a/rpm.php b/rpm.php index 6627b04..11b30c2 100644 --- a/rpm.php +++ b/rpm.php @@ -31,7 +31,6 @@ * @author Johan Cwiklinski * @copyright 2010 Remi Collet * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version - * @version SVN: $Id: ajouter_adherent.php 836 2010-02-27 08:11:44Z trashy $ * @link http://github.com/remicollet/rpmphp/ * @since The begining of times. */ diff --git a/zoom.php b/zoom.php index 5a3f6cb..d115fa2 100644 --- a/zoom.php +++ b/zoom.php @@ -31,7 +31,6 @@ * @author Johan Cwiklinski * @copyright 2010 Remi Collet * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version - * @version SVN: $Id: ajouter_adherent.php 836 2010-02-27 08:11:44Z trashy $ * @link http://github.com/remicollet/rpmphp/ * @since The begining of times. */ -- cgit From 8e4c1ce33a46b85457aba69f5aa5ead003f36aa8 Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 11:30:35 +0200 Subject: Add license ; refs #46 --- main.inc.php | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/main.inc.php b/main.inc.php index a160604..e94a62b 100644 --- a/main.inc.php +++ b/main.inc.php @@ -1,4 +1,38 @@ . + * + * @category Main + * @package RPMPHP + * + * @author Johan Cwiklinski + * @copyright 2010 Remi Collet + * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version + * @link http://github.com/remicollet/rpmphp/ + * @since The begining of times. +*/ require 'config.inc.php'; require '/usr/share/php/Smarty/Smarty.class.php'; -- cgit From 094a26031fbd5dddafc5e7d5927af4a8516669e7 Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 11:36:34 +0200 Subject: Add license ; refs #46 --- smarty/templates/rpmphp/index.tpl | 20 ++++++++++++++++++++ smarty/templates/rpmphp/main.tpl | 20 ++++++++++++++++++++ smarty/templates/rpmphp/rpm.tpl | 20 ++++++++++++++++++++ smarty/templates/rpmphp/zoom.tpl | 21 +++++++++++++++++++++ 4 files changed, 81 insertions(+) diff --git a/smarty/templates/rpmphp/index.tpl b/smarty/templates/rpmphp/index.tpl index df6cb52..2aeb00b 100644 --- a/smarty/templates/rpmphp/index.tpl +++ b/smarty/templates/rpmphp/index.tpl @@ -1,3 +1,23 @@ +{* + * Index page template + * + * Copyright © 2010 Remi Collet + * + * This file is part of rpmphp. + * + * rpmphp is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * rpmphp is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with rpmphp. If not, see . +*}

Package reports

  • PECL Extensions in Fedora with upstream information
  • diff --git a/smarty/templates/rpmphp/main.tpl b/smarty/templates/rpmphp/main.tpl index 6f12fdf..ace37c9 100644 --- a/smarty/templates/rpmphp/main.tpl +++ b/smarty/templates/rpmphp/main.tpl @@ -1,3 +1,23 @@ +{* + * Main page template + * + * Copyright © 2010 Remi Collet + * + * This file is part of rpmphp. + * + * rpmphp is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * rpmphp is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with rpmphp. If not, see . +*} diff --git a/smarty/templates/rpmphp/rpm.tpl b/smarty/templates/rpmphp/rpm.tpl index ffabb4f..be277ca 100644 --- a/smarty/templates/rpmphp/rpm.tpl +++ b/smarty/templates/rpmphp/rpm.tpl @@ -1,3 +1,23 @@ +{* + * RPM page template + * + * Copyright © 2010 Remi Collet + * + * This file is part of rpmphp. + * + * rpmphp is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * rpmphp is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with rpmphp. If not, see . +*}

    Repositories last updated {$repositories_update}.

    diff --git a/smarty/templates/rpmphp/zoom.tpl b/smarty/templates/rpmphp/zoom.tpl index e60161c..6031a69 100644 --- a/smarty/templates/rpmphp/zoom.tpl +++ b/smarty/templates/rpmphp/zoom.tpl @@ -1,3 +1,24 @@ +{* + * Zoom page template + * + * Copyright © 2010 Remi Collet + * + * This file is part of rpmphp. + * + * rpmphp is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * rpmphp is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with rpmphp. If not, see . +*} + {if $error} {if $error eq 'missing_name'}

    Missing package name

    -- cgit From fde6c42b980513047096576d149a5ca47e40e87b Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 11:36:52 +0200 Subject: Add LICENSE file ; refs #46 --- LICENSE | 661 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 661 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..dba13ed --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. -- cgit From 0a3383ccd4e1f7525517a7690aac8a09ad6c3d05 Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 11:48:48 +0200 Subject: Add license ; refs #46 --- config.inc.php.dist | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/config.inc.php.dist b/config.inc.php.dist index 7dc69d4..8895cdc 100644 --- a/config.inc.php.dist +++ b/config.inc.php.dist @@ -1,4 +1,39 @@ . + * + * @category Main + * @package RPMPHP + * + * @author Remi Collet + * @author Johan Cwiklinski + * @copyright 2010 Remi Collet + * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version + * @link http://github.com/remicollet/rpmphp/ + * @since The begining of times. +*/ define("MYHOST", "xxx"); define("MYUSER", "yyy"); define("MYPASS", "zzz"); -- cgit From 6fd2b5d30b183d17ff81f2f9b69446c497e78294 Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 12:51:35 +0200 Subject: Apply coding standards, add license (not tested yet) ; refs #46,48 --- refresh.php | 1094 ++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 676 insertions(+), 418 deletions(-) diff --git a/refresh.php b/refresh.php index eb612de..3be354f 100644 --- a/refresh.php +++ b/refresh.php @@ -1,437 +1,695 @@ . + * + * @category Main + * @package RPMPHP + * + * @author Remi Collet + * @author Johan Cwiklinski + * @copyright 2010 Remi Collet + * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version + * @link http://github.com/remicollet/rpmphp/ + * @since The begining of times. +*/ chdir(dirname($_SERVER["SCRIPT_FILENAME"])); if (isset($_SERVER["SERVER_NAME"])) { - echo "
    ";
    -	ini_set("max_execution_time", "0");
    -	ini_set("memory_limit", "-1");
    +    echo "
    ";
    +    ini_set("max_execution_time", "0");
    +    ini_set("memory_limit", "-1");
     
    -	die("This script is launched twice a day, be patient");
    +    die("This script is launched twice a day, be patient");
     }
     require "config.inc.php";
     
    -function addUpstream ($db, $type, $channel, $name, $state, $ver, $statename="") {
    -
    -	$sql1 = "INSERT INTO `upstream` SET type='$type', name='$name'";
    -	$db->exec($sql1);
    -
    -	$sql2 = "UPDATE `upstream` SET channel='$channel', $state='$ver'";
    -	if ($statename) $sql2 .= ", state='$statename'";
    -	$sql2 .= " WHERE type='$type' AND name='$name'";
    -	$nb = $db->exec($sql2);
    -	if ($nb===false) echo date("r : ") . "SQL ERROR($sql2) = " . implode(" ", $db->errorInfo()) . "\n";
    -
    -	return $nb;
    +/**
    +* To document
    +*
    +* @param Object $db        Database reference
    +* @param string $type      type
    +* @param string $channel   channel
    +* @param string $name      name
    +* @param string $state     state
    +* @param string $ver       version
    +* @param string $statename state name
    +*
    +* @return rows updated
    +*/
    +function addUpstream ($db, $type, $channel, $name, $state, $ver, $statename="")
    +{
    +
    +    $sql1 = "INSERT INTO `upstream` SET type='$type', name='$name'";
    +    $db->exec($sql1);
    +
    +    $sql2 = "UPDATE `upstream` SET channel='$channel', $state='$ver'";
    +    if ($statename) {
    +        $sql2 .= ", state='$statename'";
    +    }
    +    $sql2 .= " WHERE type='$type' AND name='$name'";
    +    $nb = $db->exec($sql2);
    +    if ($nb===false) {
    +        echo date("r : ") . "SQL ERROR($sql2) = " .
    +            implode(" ", $db->errorInfo()) . "\n";
    +    }
    +
    +    return $nb;
     }
    +
     if ($_SERVER['argc']>1 && in_array('help', $_SERVER['argv'])) {
    -	echo "Options in: repo owner R pear pecl old\n";
    -	echo "Defaults:   repo owner R pear pecl\n";
    -	die("\n");
    +    echo "Options in: repo owner R pear pecl old\n";
    +    echo "Defaults:   repo owner R pear pecl\n";
    +    die("\n");
     }
     
     try {
    -	$db = new PDO ("mysql:dbname=" . MYBASE . ";host=" . MYHOST, MYUSER, MYPASS);
    -
    -	// -------------------------------------------------------------------
    -	//	Fedora Packages
    -	// -------------------------------------------------------------------
    -	echo date("r : ") . "Refreshing " . MYBASE . " database\n";
    -
    -	if ($_SERVER['argc']==1 || in_array('repo', $_SERVER['argv'])) {
    -	if (in_array('empty', $_SERVER['argv'])) {
    -		$res=$db->query("SELECT * FROM repo WHERE stamp IS NULL");
    -	} else if (in_array('old', $_SERVER['argv'])) {
    -		$res=$db->query("SELECT * FROM repo");
    -	} else {
    -		$res=$db->query("SELECT * FROM repo WHERE active=1");
    -	}
    -	if (!$res) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    -	else while ($row = $res->fetchObject()) {
    -		echo date("r : ") . "REPOSITORY " . $row->main . " " . $row->sub . "\n";
    -		$TimRemote = 0;
    -		$repomd = simplexml_load_file($row->url . "repodata/repomd.xml");
    -		if ($repomd) foreach($repomd->data as $data) if ($data->attributes()=="primary") {
    -			$TimRemote = $data->timestamp;
    -			$UrlRemote = $row->url . $data->location->attributes();
    -		}
    -		if ($TimRemote > $row->stamp) {
    -			echo date("r : ") . "Loading $UrlRemote\n";
    -
    -			//$fic=gzopen("primary.xml.gz", "r");
    -			$fic=gzopen($UrlRemote, "r");
    -			if ($fic) {
    -				$txt="";
    -				while ($buf=gzread($fic,8196))
    -					$txt .= $buf;
    -				echo date("r : ") . "Read " . strlen($txt) . " bytes\n";
    -				gzclose($fic);
    -
    -				$primary = simplexml_load_string($txt);
    -				echo date("r : ") . "Read " . $primary->attributes() . " packages\n";
    -				unset($txt);
    -
    -				$sql = sprintf("DELETE FROM rpm WHERE repo_main='%s' AND repo_sub='%s'",
    -					$row->main, $row->sub);
    -				$nb=$db->exec($sql);
    -				if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    -				else  echo date("r : ") . "Delete $nb packages\n";
    -
    -				$tot=0;
    -				foreach ($primary->package as $package) if ($package->attributes()=='rpm'){
    -					$ver = $package->version->attributes();
    -					$sql = sprintf("INSERT INTO rpm SET repo_main='%s', repo_sub='%s', name='%s', epoch='%s', ver='%s', rel='%s', summary='%s', url='%s'",
    -						$row->main, $row->sub, $package->name, $ver['epoch'], $ver['ver'], $ver['rel'], addslashes($package->summary), $package->url);
    -					$nb=$db->exec($sql);
    -					if ($nb) $tot+=$nb;
    -					else  echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    -				}
    -				echo date("r : ") . "Write $tot packages\n";
    -
    -				$sql=sprintf("UPDATE repo SET stamp=%d WHERE ID=%d", $TimRemote, $row->ID);
    -				$nb=$db->exec($sql);
    -				if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    -
    -				unset($primary);
    -			} else {
    -				echo date("r : ") . "ERROR : can't read $UrlRemote\n";
    -			}
    -		} else {
    -			echo date("r : ") . "no update needed : $TimRemote / " . $row->stamp . "\n";
    -		}
    -	}
    -	} // If ask
    -
    -	// -------------------------------------------------------------------
    -	//	Upstream Version
    -	// -------------------------------------------------------------------
    -	$sql="CREATE TABLE IF NOT EXISTS `upstream` (
    -  		`name` varchar(100) NOT NULL,
    -  		`type` varchar(20) NOT NULL,
    -  		`channel` varchar(20) NOT NULL,
    -  		`stable` varchar(20) DEFAULT NULL,
    -  		`unstable` varchar(20) DEFAULT NULL,
    -		`state` varchar(20) DEFAULT NULL,
    -		PRIMARY KEY (`name`,`type`),
    -  		KEY `name` (`name`),
    -  		KEY `type` (`type`),
    -  		KEY `channel` (`channel`))";
    -
    -	if ($db->exec($sql)!==false)
    -	  	echo date("r : ") . "Check table 'upstream' ok\n";
    -	else  	echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    -
    -	// -------------------------------------------------------------------
    -	if ($_SERVER['argc']==1 || in_array('pecl', $_SERVER['argv'])) {
    -	echo date("r : ") . "PECL listLatestReleases - stable\n";
    -
    -	$request = xmlrpc_encode_request("package.listLatestReleases", "stable");
    -	$context = stream_context_create(array('http' => array(
    -	    'method' => "POST",
    -	    'header' => "Content-Type: text/xml",
    -	    'content' => $request
    -	)));
    -	$file = file_get_contents("http://pecl.php.net/xmlrpc.php", false, $context) or die ("Can't file_get_contents(http://pecl.php.net/xmlrpc.php)");
    -	$stable = xmlrpc_decode($file);
    -	if (xmlrpc_is_fault($stable)) {
    -	 	echo date("r : ") . "ERROR xmlrpc: $stable[faultString] ($stable[faultCode])";
    -	} else {
    -		$sql = sprintf("DELETE FROM upstream WHERE type='pecl' AND channel='pecl'");
    -		$nb=$db->exec($sql);
    -		if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    -		else  echo date("r : ") . "Delete $nb packages\n";
    -
    -		$nb=0;
    -		foreach ($stable as $name => $info) {
    -			$rpmname="php-pecl-".str_replace("_","-",$name);
    -
    -			$nb += addUpstream($db, "pecl", "pecl", $rpmname, "stable", $info["version"]);
    -		}
    -		echo date("r : ") . "Write $nb packages\n";
    -	 	// echo date("r : ") . "saved " . file_put_contents("cache/pecl-stable", serialize($stable)) . " bytes\n";
    -	}
    -
    -	// -------------------------------------------------------------------
    -	echo date("r : ") . "PECL listLatestReleases - unstable\n";
    -
    -	$request = xmlrpc_encode_request("package.listLatestReleases", array());
    -	$context = stream_context_create(array('http' => array(
    -	    'method' => "POST",
    -	    'header' => "Content-Type: text/xml",
    -	    'content' => $request
    -	)));
    -	$file = file_get_contents("http://pecl.php.net/xmlrpc.php", false, $context) or die ("Can't file_get_contents(http://pecl.php.net/xmlrpc.php)");
    -	$unstable = xmlrpc_decode($file);
    -	if (xmlrpc_is_fault($unstable)) {
    -	    echo date("r : ") . "ERROR xmlrpc: $stable[faultString] ($stable[faultCode])";
    -	} else {
    -		$nb=0;
    -		foreach ($unstable as $name => $info) {
    -			$rpmname="php-pecl-".str_replace("_","-",$name);
    -
    -			$nb += addUpstream($db, "pecl", "pecl", $rpmname, "unstable", $info["version"], $info["state"]);
    -		}
    -		echo date("r : ") . "Write $nb packages\n";
    -	 	//echo date("r : ") . "saved " . file_put_contents("cache/pecl-unstable", serialize($unstable)) . " bytes\n";
    -	}
    -	} // if in options
    -
    -	// -------------------------------------------------------------------
    -	if ($_SERVER['argc']==1 || in_array('pear', $_SERVER['argv'])) {
    - 	echo date("r : ") . "PEAR reading channels\n";
    -	$channels=array(
    -		"pear"	    => "pear.php.net"
    -		,"doctrine" => "pear.phpdoctrine.org"
    -		,"ezc"      => "components.ez.no"
    -		,"pdepend"  => "pear.pdepend.org"
    -		,"phing"    => "pear.phing.info"
    -		,"phpdb"    => "pear.phpdb.org"
    -		,"phpmd"    => "pear.phpmd.org"
    -		,"phpunit"  => "pear.phpunit.de"
    -		,"swift"    => "pear.swiftmailer.org"
    -		,"symphony" => "pear.symfony-project.com"
    -		);
    -	try {
    -		$nbtot=0;
    -
    -		foreach ($channels as $channelname => $channelurl) {
    -
    -			$channel = @simplexml_load_file("http://$channelurl/channel.xml");
    -			if (!$channel) throw new Exception("can't read PEAR site (channel of $channelname)");
    -
    -			$rest = $channel->servers->primary->rest->baseurl[0];
    -			echo date("r : ") . "PEAR reading channel=$channelname, baseurl = $rest\n";
    -
    -			$categories = @simplexml_load_file($rest."c/categories.xml");
    -			if (!$categories) throw new Exception("can't read PEAR site (categories)");
    -
    -			$sql = sprintf("DELETE FROM upstream WHERE type='pear' AND channel='$channelname'");
    -			$nb=$db->exec($sql);
    -			if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    -			else  echo date("r : ") . "Delete $nb packages\n";
    -
    -			$nb=0;
    -			if (!isset($categories->c[0])) {
    -				echo date("r : ") . "Reading ALL\n"; // ezc only
    -				$pitxt = @file_get_contents($rest."p/packages.xml");
    -				if (!$pitxt) throw new Exception("can't read PEAR site (".$rest."p/packagesinfo.xml)");
    -				$allpi = @simplexml_load_string($pitxt);
    -				foreach ($allpi->p as $name) {
    -					$pitxt = @file_get_contents($rest."r/".strtolower($name)."/allreleases.xml");
    -					if (!$pitxt) throw new Exception("can't read PEAR site (".$rest."r/".strtolower($name)."/allreleases.xml");
    -					$pi = @simplexml_load_string($pitxt);
    -
    -					$rpmname1="php-".$channelname."-".str_replace("_","-",$name);
    -					$rpmname2="php-".$channelname."-".$name;
    -
    -					//echo $rpmname ."/".(string)$pi->r[0]->v."/". (string)$pi->r[0]->s."\n";
    -					addUpstream($db, "pear", $channelname, $rpmname1, "unstable", (string)$pi->r[0]->v, (string)$pi->r[0]->s);
    -					addUpstream($db, "pear", $channelname, $rpmname2, "unstable", (string)$pi->r[0]->v, (string)$pi->r[0]->s);
    -					foreach($pi->r as $rev) if ($rev->s=='stable') {
    -						//echo $rpmname ."/".(string)$rev->v."/". (string)$rev->s."\n";
    -						addUpstream($db, "pear", $channelname, $rpmname1, "stable", (string)$rev->v);
    -						addUpstream($db, "pear", $channelname, $rpmname2, "stable", (string)$rev->v);
    -						break;
    -					}
    -					$nb++;
    -				}
    -
    -			} else foreach ($categories->c as $cat) {
    -				echo date("r : ") . "Reading $cat\n";
    -
    -				$pitxt = @file_get_contents($rest."c/".urlencode($cat)."/packagesinfo.xml");
    -				if (!$pitxt) throw new Exception("can't read PEAR site (".$rest."c/".urlencode($cat)."/packagesinfo.xml)");
    -				$pitxt = "/U", "", str_replace("\r\n", "\n", substr($pitxt, 2)));
    -
    -				$pi = @simplexml_load_string($pitxt);
    -				if (!$pi) throw new Exception("can't read response ($cat)");
    -				foreach ($pi->pi as $ps) if (isset($ps->p->n) && isset($ps->a->r)) {
    -					$name=(string)$ps->p->n;
    -
    -					if ($channelname=='phing' && $name=='phing') {
    -						$rpmname1="php-pear-phing";
    -					} else if ($channelname=='phpunit' && $name=='PHPUnit') {
    -						$rpmname1="php-pear-PHPUnit";
    -					} else {
    -						$rpmname1="php-".$channelname."-".str_replace("_","-",$name);
    -					}
    -					$rpmname2="php-".$channelname."-".$name;
    -
    -					addUpstream($db, "pear", $channelname, $rpmname1, "unstable", (string)$ps->a->r[0]->v, (string)$ps->a->r[0]->s);
    -					addUpstream($db, "pear", $channelname, $rpmname2, "unstable", (string)$ps->a->r[0]->v, (string)$ps->a->r[0]->s);
    -					foreach($ps->a->r as $rev) if ($rev->s=='stable') {
    -						addUpstream($db, "pear", $channelname, $rpmname1, "stable", (string)$rev->v);
    -						addUpstream($db, "pear", $channelname, $rpmname2, "stable", (string)$rev->v);
    -						break;
    -					}
    -					$nb++;
    -					// echo $ps->p->n."\n";
    -				}
    -			}
    -		 	echo date("r : ") . "read $nb packages in $channelname\n";
    -			$nbtot += $nb;
    -		}
    -	 	echo date("r : ") . "read $nbtot packages in all channels\n";
    -
    -	} catch (Exception $e) {
    -		echo date("r : ") . 'ERROR ' .  $e->getMessage(), "\n";
    -	}
    -	} // if in options
    -	// -------------------------------------------------------------------
    -	if ($_SERVER['argc']==1 || in_array('R', $_SERVER['argv'])) {
    -
    -      $repos = array(
    -         array("name"=>"R",      "state"=>"stable",   "url" => "http://cran.at.r-project.org/src/contrib/PACKAGES"),
    -       //array("name"=>"R-forge","state"=>"unstable", "url" => "http://r-forge.r-project.org/src/contrib/PACKAGES"),
    -         array("name"=>"biocp",  "state"=>"stable",   "url" => "http://www.bioconductor.org/packages/release/bioc/src/contrib/PACKAGES"),
    -         array("name"=>"biocp",  "state"=>"unstable", "url" => "http://www.bioconductor.org/packages/devel/bioc/src/contrib/PACKAGES"),
    -         array("name"=>"bioca",  "state"=>"stable",   "url" => "http://www.bioconductor.org/packages/release/data/annotation/src/contrib/PACKAGES"),
    -         array("name"=>"bioca",  "state"=>"unstable", "url" => "http://www.bioconductor.org/packages/devel/data/annotation/src/contrib/PACKAGES"),
    -         array("name"=>"bioce",  "state"=>"stable",   "url" => "http://www.bioconductor.org/packages/release/data/experiment/src/contrib/PACKAGES"),
    -         array("name"=>"bioce",  "state"=>"unstable", "url" => "http://www.bioconductor.org/packages/devel/data/experiment/src/contrib/PACKAGES")
    -         );
    -      $tottot=0;
    -      foreach ($repos as $repo) {
    -         echo date("r : ") . "Reading " . $repo["name"] . " (" . $repo["state"] . ")\n";
    -         $index = @file_get_contents($repo["url"]);
    -         if (!$index) {
    -            echo date("r : ") . "Can't read [" . $repo["url"] . "], skip this channel\n";
    -            continue;
    -         }
    -         if ($repo["state"]=="stable") {
    -            $sql = sprintf("DELETE FROM upstream WHERE type='R' AND channel='%s'", $repo["name"]);
    +    $db = new PDO ("mysql:dbname=" . MYBASE . ";host=" . MYHOST, MYUSER, MYPASS);
    +
    +    // -------------------------------------------------------------------
    +    //	Fedora Packages
    +    // -------------------------------------------------------------------
    +    echo date("r : ") . "Refreshing " . MYBASE . " database\n";
    +
    +    if ($_SERVER['argc']==1 || in_array('repo', $_SERVER['argv'])) {
    +        if (in_array('empty', $_SERVER['argv'])) {
    +            $res=$db->query("SELECT * FROM repo WHERE stamp IS NULL");
    +        } else if (in_array('old', $_SERVER['argv'])) {
    +            $res=$db->query("SELECT * FROM repo");
    +        } else {
    +            $res=$db->query("SELECT * FROM repo WHERE active=1");
    +        }
    +        if (!$res) {
    +            echo date("r : ") . "SQL ERROR = " .
    +                implode(" ", $db->errorInfo()) . "\n";
    +        } else {
    +            while ($row = $res->fetchObject()) {
    +                echo date("r : ") . "REPOSITORY " . $row->main . " " .
    +                    $row->sub . "\n";
    +                $TimRemote = 0;
    +                $repomd = simplexml_load_file($row->url . "repodata/repomd.xml");
    +                if ($repomd) {
    +                    foreach ($repomd->data as $data) {
    +                        if ($data->attributes()=="primary") {
    +                            $TimRemote = $data->timestamp;
    +                            $UrlRemote = $row->url . $data->location->attributes();
    +                        }
    +                    }
    +                }
    +                if ($TimRemote > $row->stamp) {
    +                    echo date("r : ") . "Loading $UrlRemote\n";
    +
    +                    //$fic=gzopen("primary.xml.gz", "r");
    +                    $fic=gzopen($UrlRemote, "r");
    +                    if ($fic) {
    +                        $txt="";
    +                        while ($buf=gzread($fic, 8196)) {
    +                            $txt .= $buf;
    +                        }
    +                        echo date("r : ") . "Read " . strlen($txt) . " bytes\n";
    +                        gzclose($fic);
    +
    +                        $primary = simplexml_load_string($txt);
    +                        echo date("r : ") . "Read " . $primary->attributes() .
    +                            " packages\n";
    +                        unset($txt);
    +
    +                        $sql = sprintf(
    +                            "DELETE FROM rpm WHERE repo_main='%s' AND repo_sub='%s'",
    +                            $row->main,
    +                            $row->sub
    +                        );
    +                        $nb=$db->exec($sql);
    +                        if ($nb===false) {
    +                            echo date("r : ") . "SQL ERROR = " .
    +                                implode(" ", $db->errorInfo()) . "\n";
    +                        } else {
    +                            echo date("r : ") . "Delete $nb packages\n";
    +                        }
    +
    +                        $tot=0;
    +                        foreach ($primary->package as $package) {
    +                            if ($package->attributes()=='rpm') {
    +                                $ver = $package->version->attributes();
    +                                $sql = sprintf(
    +                                    "INSERT INTO rpm SET repo_main='%s', repo_sub='%s', name='%s', epoch='%s', ver='%s', rel='%s', summary='%s', url='%s'",
    +                                    $row->main,
    +                                    $row->sub,
    +                                    $package->name,
    +                                    $ver['epoch'],
    +                                    $ver['ver'],
    +                                    $ver['rel'],
    +                                    addslashes($package->summary),
    +                                    $package->url
    +                                );
    +                                $nb=$db->exec($sql);
    +                                if ($nb) {
    +                                    $tot+=$nb;
    +                                } else {
    +                                    echo date("r : ") . "SQL ERROR = " .
    +                                        implode(" ", $db->errorInfo()) . "\n";
    +                                }
    +                            }
    +                        }
    +                        echo date("r : ") . "Write $tot packages\n";
    +
    +                        $sql=sprintf(
    +                            "UPDATE repo SET stamp=%d WHERE ID=%d",
    +                            $TimRemote,
    +                            $row->ID
    +                        );
    +                        $nb=$db->exec($sql);
    +                        if ($nb===false) {
    +                            echo date("r : ") . "SQL ERROR = " .
    +                                implode(" ", $db->errorInfo()) . "\n";
    +                        }
    +
    +                        unset($primary);
    +                    } else {
    +                        echo date("r : ") . "ERROR : can't read $UrlRemote\n";
    +                    }
    +                } else {
    +                    echo date("r : ") . "no update needed : $TimRemote / " .
    +                        $row->stamp . "\n";
    +                }
    +            }
    +        }
    +    } // If ask
    +
    +    // -------------------------------------------------------------------
    +    //	Upstream Version
    +    // -------------------------------------------------------------------
    +    $sql="CREATE TABLE IF NOT EXISTS `upstream` (
    +            `name` varchar(100) NOT NULL,
    +            `type` varchar(20) NOT NULL,
    +            `channel` varchar(20) NOT NULL,
    +            `stable` varchar(20) DEFAULT NULL,
    +            `unstable` varchar(20) DEFAULT NULL,
    +            `state` varchar(20) DEFAULT NULL,
    +            PRIMARY KEY (`name`,`type`),
    +            KEY `name` (`name`),
    +            KEY `type` (`type`),
    +            KEY `channel` (`channel`))";
    +
    +    if ($db->exec($sql)!==false) {
    +        echo date("r : ") . "Check table 'upstream' ok\n";
    +    } else {
    +        echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    +    }
    +
    +    // -------------------------------------------------------------------
    +    if ($_SERVER['argc']==1 || in_array('pecl', $_SERVER['argv'])) {
    +        echo date("r : ") . "PECL listLatestReleases - stable\n";
    +
    +        $request = xmlrpc_encode_request("package.listLatestReleases", "stable");
    +        $context = stream_context_create(
    +            array(
    +                'http' => array(
    +                    'method' => "POST",
    +                    'header' => "Content-Type: text/xml",
    +                    'content' => $request
    +                )
    +            )
    +        );
    +        $file = file_get_contents("http://pecl.php.net/xmlrpc.php", false, $context) or die ("Can't file_get_contents(http://pecl.php.net/xmlrpc.php)");
    +        $stable = xmlrpc_decode($file);
    +        if (xmlrpc_is_fault($stable)) {
    +            echo date("r : ") . "ERROR xmlrpc: $stable[faultString] ($stable[faultCode])";
    +        } else {
    +            $sql = sprintf("DELETE FROM upstream WHERE type='pecl' AND channel='pecl'");
                 $nb=$db->exec($sql);
    -            if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    -            else  echo date("r : ") . "Delete $nb packages\n";
    -         }
    -         $results=array();
    -         if (preg_match_all('/Package: *(.*)\nVersion: *(.*)\n/i',$index,$results,PREG_SET_ORDER)) {
    -            $tot=0;
    -            foreach ($results as $result) {
    -               //echo $result[1]." = ".$result[2]."\n";
    -               $rpmname = "R-".$result[1];
    -               $ver = str_replace('-', '.', $result[2]);
    -               if (addUpstream($db, "R", $repo["name"], $rpmname, $repo["state"], $ver, ($repo["state"]=="stable"?"":"devel"))) {
    -                  $tot++;
    -               }
    +            if ($nb===false) {
    +                echo date("r : ") . "SQL ERROR = " .
    +                    implode(" ", $db->errorInfo()) . "\n";
    +            } else {
    +                echo date("r : ") . "Delete $nb packages\n";
                 }
    -            echo date("r : ") . "Write $tot packages in this channel\n";
    -            $tottot += $tot;
    -         } else {
    -            echo date("r : ") . "No package in this channel\n";
    -         }
    -      }
    -      echo date("r : ") . "Write $tottot packages in all channels\n";
    -/*
    - * OLD VERSION parsing the HTML pages
    -	$repos = array(
    -		array("name"=>"R", 	"state"=>"stable", 	"url"	=> "http://cran.r-project.org/web/packages/"),
    -		array("name"=>"biocp", 	"state"=>"stable", 	"url"	=> "http://bioconductor.org/packages/release/bioc/"),
    -		array("name"=>"biocp", 	"state"=>"unstable", 	"url"	=> "http://bioconductor.org/packages/devel/bioc/"),
    -		array("name"=>"bioca", 	"state"=>"stable", 	"url"	=> "http://bioconductor.org/packages/release/data/annotation/"),
    -		array("name"=>"bioca", 	"state"=>"unstable", 	"url"	=> "http://bioconductor.org/packages/devel/data/annotation/"),
    -		array("name"=>"bioce", 	"state"=>"stable", 	"url"	=> "http://bioconductor.org/packages/release/data/experiment/"),
    -		array("name"=>"bioce", 	"state"=>"unstable", 	"url"	=> "http://bioconductor.org/packages/devel/data/experiment/")
    -		);
    -	$tottot=0;
    -	foreach ($repos as $repo) {
    -		echo date("r : ") . "Reading " . $repo["name"] . " (" . $repo["state"] . ")\n";
    -		$index = @file_get_contents($repo["url"]);
    -		if (!$index) {
    -			echo date("r : ") . "Can't read [" . $repo["url"] . "], skip this channel\n";
    -			continue;
    -		}
    -		if ($repo["state"]=="stable") {
    -			$sql = sprintf("DELETE FROM upstream WHERE type='R' AND channel='%s'", $repo["name"]);
    -			$nb=$db->exec($sql);
    -			if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    -			else  echo date("r : ") . "Delete $nb packages\n";
    -		}
    -		if ($repo["name"] == "R") {
    -			$pos = strpos($index, 'ID="available-packages');
    -			$pat1 = '/(.*)<\/A>/iU';
    -		} else {
    -			$pos = 0;
    -			$pat1 = '/(.*)<\/A>/iu';
    -		}
    -		$results=array();
    -		if (preg_match_all($pat1,$index,$results,PREG_SET_ORDER,$pos)) {
    -			$tot=0;
    -			foreach ($results as $result) {
    -				$page = @file_get_contents($repo["url"].$result[1]);
    -				$name = $result[2];
    -				$rpmname = "R-".$result[2];
    -				$ver=array();
    -				if (!$page) {
    -					echo date("r : ") . "Can't read [" . $repo["url"].$result[1] . "], skip this package\n";
    -
    -				} else if (preg_match("/".$name."_((\d|-|\.)*)\.tar.gz/", $page, $ver)) {
    -
    -					$ver = str_replace('-', '.', $ver[1]);
    -					$nb = addUpstream($db, "R", $repo["name"], $rpmname, $repo["state"], $ver, ($repo["state"]=="stable"?"":"devel"));
    -
    -				}
    -
    -				if ($nb) $tot+=$nb;
    -
    -			}
    -			echo date("r : ") . "Write $tot packages in this channel\n";
    -			$tottot += $tot;
    -		} // Each package
    -	} // Each repo
    -	echo date("r : ") . "Write $tottot packages in all channels\n";
    -   */
    -	} // If R in options
    -
    -	// -------------------------------------------------------------------
    -	//	Package Owners from pkgdb (thanks Smootherfrog)
    -	// -------------------------------------------------------------------
    -	if ($_SERVER['argc']==1 || in_array('owner', $_SERVER['argv'])) {
    -
    -	$sql="CREATE TABLE IF NOT EXISTS `acls` (
    -  		`ID` int(11) NOT NULL AUTO_INCREMENT,
    -  		`collection` varchar(100) NOT NULL,
    -  		`name` varchar(100) NOT NULL,
    -  		`summary` varchar(200) NOT NULL,
    -  		`owner` varchar(50) DEFAULT NULL,
    -  		`qa` varchar(50) DEFAULT NULL,
    -  		`cc` varchar(100) DEFAULT NULL,
    -  		PRIMARY KEY (`ID`),
    -  		KEY `name` (`name`),
    -  		KEY `collection` (`collection`),
    -  		KEY `owner` (`owner`)) ENGINE=MyISAM";
    -
    -	if ($db->exec($sql)!==false)
    -	  	echo date("r : ") . "Check table 'acls' ok\n";
    -	else  	echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    -
    -	$fic=fopen("https://admin.fedoraproject.org/pkgdb/lists/bugzilla?tg_format=plain", "r");
    -	if (!$fic) {
    -		echo date("r : ") . "ERROR reading pkgdb\n";
    -	} else {
    -		$sql="TRUNCATE `acls`";
    -		$nb=$db->exec($sql);
    -		if ($nb===false) echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    -		else  echo date("r : ") . "Delete $nb packages\n";
    -
    -		for ($tot=0 ; $line=fgetcsv($fic,1024,'|') ; ) if (count($line)>5 && substr($line[0],0,1)!='#') {
    -			for ($i=0; $i<6; $i++) $line[$i]=trim($line[$i]);
    -			$sql=sprintf("INSERT INTO `acls` SET collection='%s', name='%s', summary='%s'", $line[0], $line[1], addslashes($line[2]));
    -			if (!empty($line[3])) $sql .= sprintf(", owner='%s'", $line[3]);
    -			if (!empty($line[4])) $sql .= sprintf(", qa='%s'", $line[4]);
    -			if (!empty($line[5])) $sql .= sprintf(", cc='%s'", $line[5]);
    -			$nb=$db->exec($sql);
    -			if ($nb) $tot+=$nb;
    -			else  echo date("r : ") . "SQL ERROR = " . implode(" ", $db->errorInfo()) . "\n";
    -		}
    -		fclose($fic);
    -	 	echo date("r : ") . "wrote $tot package's owner\n";
    -	}
    -	} // If in options
     
    -}
    -catch(PDOException $e) {
    -	printf("%s ERREUR : %s\n", date("r"),  $e->getMessage());
    +            $nb=0;
    +            foreach ($stable as $name => $info) {
    +                $rpmname="php-pecl-".str_replace("_", "-", $name);
    +
    +                $nb += addUpstream(
    +                    $db,
    +                    "pecl",
    +                    "pecl",
    +                    $rpmname,
    +                    "stable",
    +                    $info["version"]
    +                );
    +            }
    +            echo date("r : ") . "Write $nb packages\n";
    +            // echo date("r : ") . "saved " . file_put_contents("cache/pecl-stable", serialize($stable)) . " bytes\n";
    +        }
    +
    +        // -------------------------------------------------------------------
    +        echo date("r : ") . "PECL listLatestReleases - unstable\n";
    +
    +        $request = xmlrpc_encode_request("package.listLatestReleases", array());
    +        $context = stream_context_create(
    +            array(
    +                'http' => array(
    +                    'method' => "POST",
    +                    'header' => "Content-Type: text/xml",
    +                    'content' => $request
    +                )
    +            )
    +        );
    +        $file = file_get_contents("http://pecl.php.net/xmlrpc.php", false, $context) or die ("Can't file_get_contents(http://pecl.php.net/xmlrpc.php)");
    +        $unstable = xmlrpc_decode($file);
    +        if (xmlrpc_is_fault($unstable)) {
    +            echo date("r : ") . "ERROR xmlrpc: $stable[faultString] ".
    +                "($stable[faultCode])";
    +        } else {
    +            $nb=0;
    +            foreach ($unstable as $name => $info) {
    +                $rpmname="php-pecl-".str_replace("_", "-", $name);
    +
    +                $nb += addUpstream(
    +                    $db,
    +                    "pecl",
    +                    "pecl",
    +                    $rpmname,
    +                    "unstable",
    +                    $info["version"],
    +                    $info["state"]
    +                );
    +            }
    +            echo date("r : ") . "Write $nb packages\n";
    +            //echo date("r : ") . "saved " .
    +            //   file_put_contents("cache/pecl-unstable", serialize($unstable)) .
    +            //   " bytes\n";
    +        }
    +    } // if in options
    +
    +    // -------------------------------------------------------------------
    +    if ($_SERVER['argc']==1 || in_array('pear', $_SERVER['argv'])) {
    +        echo date("r : ") . "PEAR reading channels\n";
    +        $channels=array(
    +            "pear"	    => "pear.php.net"
    +            ,"doctrine" => "pear.phpdoctrine.org"
    +            ,"ezc"      => "components.ez.no"
    +            ,"pdepend"  => "pear.pdepend.org"
    +            ,"phing"    => "pear.phing.info"
    +            ,"phpdb"    => "pear.phpdb.org"
    +            ,"phpmd"    => "pear.phpmd.org"
    +            ,"phpunit"  => "pear.phpunit.de"
    +            ,"swift"    => "pear.swiftmailer.org"
    +            ,"symphony" => "pear.symfony-project.com"
    +        );
    +        try {
    +            $nbtot=0;
    +
    +            foreach ($channels as $channelname => $channelurl) {
    +                $channel = @simplexml_load_file("http://$channelurl/channel.xml");
    +                if (!$channel) {
    +                    throw new Exception(
    +                        "can't read PEAR site (channel of $channelname)"
    +                    );
    +                }
    +
    +                $rest = $channel->servers->primary->rest->baseurl[0];
    +                echo date("r : ") . "PEAR reading channel=$channelname" .
    +                    ", baseurl = $rest\n";
    +
    +                $categories = @simplexml_load_file($rest."c/categories.xml");
    +                if (!$categories) {
    +                    throw new Exception("can't read PEAR site (categories)");
    +                }
    +
    +                $sql = "DELETE FROM upstream WHERE type='pear' AND channel='".
    +                    $channelname."'";
    +                $nb=$db->exec($sql);
    +                if ($nb===false) {
    +                    echo date("r : ") . "SQL ERROR = " . implode(
    +                        " ",
    +                        $db->errorInfo()
    +                    ) . "\n";
    +                } else {
    +                    echo date("r : ") . "Delete $nb packages\n";
    +                }
    +
    +                $nb=0;
    +                if (!isset($categories->c[0])) {
    +                    echo date("r : ") . "Reading ALL\n"; // ezc only
    +                    $pitxt = @file_get_contents($rest."p/packages.xml");
    +                    if (!$pitxt) {
    +                        throw new Exception(
    +                            "can't read PEAR site (".$rest."p/packagesinfo.xml)"
    +                        );
    +                    }
    +                    $allpi = @simplexml_load_string($pitxt);
    +                    foreach ($allpi->p as $name) {
    +                        $pitxt = @file_get_contents(
    +                            $rest."r/".strtolower($name)."/allreleases.xml"
    +                        );
    +                        if (!$pitxt) {
    +                            throw new Exception(
    +                                "can't read PEAR site (".$rest."r/".
    +                                strtolower($name)."/allreleases.xml"
    +                            );
    +                        }
    +                        $pi = @simplexml_load_string($pitxt);
    +
    +                        $rpmname1="php-".$channelname."-".
    +                            str_replace("_", "-", $name);
    +                        $rpmname2="php-".$channelname."-".$name;
    +
    +                        //echo $rpmname ."/".(string)$pi->r[0]->v."/".
    +                        //  (string)$pi->r[0]->s."\n";
    +                        addUpstream(
    +                            $db,
    +                            "pear",
    +                            $channelname,
    +                            $rpmname1,
    +                            "unstable",
    +                            (string)$pi->r[0]->v,
    +                            (string)$pi->r[0]->s
    +                        );
    +                        addUpstream(
    +                            $db,
    +                            "pear",
    +                            $channelname,
    +                            $rpmname2,
    +                            "unstable",
    +                            (string)$pi->r[0]->v,
    +                            (string)$pi->r[0]->s
    +                        );
    +                        foreach ($pi->r as $rev) {
    +                            if ($rev->s=='stable') {
    +                                //echo $rpmname ."/".(string)$rev->v."/".
    +                                //    (string)$rev->s."\n";
    +                                addUpstream(
    +                                    $db,
    +                                    "pear",
    +                                    $channelname,
    +                                    $rpmname1,
    +                                    "stable",
    +                                    (string)$rev->v
    +                                );
    +                                addUpstream(
    +                                    $db,
    +                                    "pear",
    +                                    $channelname,
    +                                    $rpmname2,
    +                                    "stable",
    +                                    (string)$rev->v
    +                                );
    +                                break;
    +                            }
    +                        }
    +                        $nb++;
    +                    }
    +
    +                } else {
    +                    foreach ($categories->c as $cat) {
    +                        echo date("r : ") . "Reading $cat\n";
    +
    +                        $pitxt = @file_get_contents(
    +                            $rest."c/".urlencode($cat)."/packagesinfo.xml"
    +                        );
    +                        if (!$pitxt) {
    +                            throw new Exception(
    +                                "can't read PEAR site (".$rest."c/".
    +                                urlencode($cat)."/packagesinfo.xml)"
    +                            );
    +                        }
    +                        $pitxt = "/U",
    +                            "",
    +                            str_replace("\r\n", "\n", substr($pitxt, 2))
    +                        );
    +
    +                        $pi = @simplexml_load_string($pitxt);
    +                        if (!$pi) {
    +                            throw new Exception("can't read response ($cat)");
    +                        }
    +                        foreach ($pi->pi as $ps) {
    +                            if (isset($ps->p->n) && isset($ps->a->r)) {
    +                                $name=(string)$ps->p->n;
    +
    +                                if ($channelname=='phing' && $name=='phing') {
    +                                    $rpmname1="php-pear-phing";
    +                                } else if ($channelname=='phpunit'
    +                                    && $name=='PHPUnit'
    +                                ) {
    +                                    $rpmname1="php-pear-PHPUnit";
    +                                } else {
    +                                    $rpmname1="php-".$channelname."-".
    +                                        str_replace("_", "-", $name);
    +                                }
    +                                $rpmname2="php-".$channelname."-".$name;
    +
    +                                addUpstream(
    +                                    $db,
    +                                    "pear",
    +                                    $channelname,
    +                                    $rpmname1,
    +                                    "unstable",
    +                                    (string)$ps->a->r[0]->v,
    +                                    (string)$ps->a->r[0]->s
    +                                );
    +                                addUpstream(
    +                                    $db,
    +                                    "pear",
    +                                    $channelname,
    +                                    $rpmname2,
    +                                    "unstable",
    +                                    (string)$ps->a->r[0]->v,
    +                                    (string)$ps->a->r[0]->s
    +                                );
    +                                foreach ($ps->a->r as $rev) {
    +                                    if ($rev->s=='stable') {
    +                                        addUpstream(
    +                                            $db, "pear",
    +                                            $channelname,
    +                                            $rpmname1,
    +                                            "stable",
    +                                            (string)$rev->v
    +                                        );
    +                                        addUpstream(
    +                                            $db,
    +                                            "pear",
    +                                            $channelname,
    +                                            $rpmname2,
    +                                            "stable",
    +                                            (string)$rev->v
    +                                        );
    +                                        break;
    +                                    }
    +                                }
    +                                $nb++;
    +                                // echo $ps->p->n."\n";
    +                            }
    +                        }
    +                    }
    +                }
    +                echo date("r : ") . "read $nb packages in $channelname\n";
    +                $nbtot += $nb;
    +            }
    +            echo date("r : ") . "read $nbtot packages in all channels\n";
    +
    +        } catch (Exception $e) {
    +            echo date("r : ") . 'ERROR ' .  $e->getMessage(), "\n";
    +        }
    +    } // if in options
    +
    +    // -------------------------------------------------------------------
    +    if ($_SERVER['argc']==1 || in_array('R', $_SERVER['argv'])) {
    +
    +        $repos = array(
    +            array(
    +                "name"  => "R",
    +                "state" => "stable",
    +                "url"   => "http://cran.at.r-project.org/src/contrib/PACKAGES"
    +            ),
    +            //array("name"=>"R-forge","state"=>"unstable", "url" => "http://r-forge.r-project.org/src/contrib/PACKAGES"),
    +            array(
    +                "name"  => "biocp",
    +                "state" => "stable",
    +                "url"   => "http://www.bioconductor.org/packages/release/bioc/src/contrib/PACKAGES"
    +            ),
    +            array(
    +                "name"  => "biocp",
    +                "state" => "unstable",
    +                "url"   => "http://www.bioconductor.org/packages/devel/bioc/src/contrib/PACKAGES"
    +            ),
    +            array(
    +                "name"  => "bioca",
    +                "state" => "stable",
    +                "url"   => "http://www.bioconductor.org/packages/release/data/annotation/src/contrib/PACKAGES"
    +            ),
    +            array(
    +                "name"  => "bioca",
    +                "state" => "unstable",
    +                "url"   => "http://www.bioconductor.org/packages/devel/data/annotation/src/contrib/PACKAGES"
    +            ),
    +            array(
    +                "name"  => "bioce",
    +                "state" => "stable",
    +                "url"   => "http://www.bioconductor.org/packages/release/data/experiment/src/contrib/PACKAGES"
    +            ),
    +            array(
    +                "name"  => "bioce",
    +                "state" => "unstable",
    +                "url"   => "http://www.bioconductor.org/packages/devel/data/experiment/src/contrib/PACKAGES"
    +            )
    +        );
    +        $tottot=0;
    +        foreach ($repos as $repo) {
    +            echo date("r : ") . "Reading " . $repo["name"] . " (" .
    +                $repo["state"] . ")\n";
    +            $index = @file_get_contents($repo["url"]);
    +            if (!$index) {
    +                echo date("r : ") . "Can't read [" . $repo["url"] .
    +                    "], skip this channel\n";
    +                continue;
    +            }
    +            if ($repo["state"]=="stable") {
    +                $sql = sprintf(
    +                    "DELETE FROM upstream WHERE type='R' AND channel='%s'",
    +                    $repo["name"]
    +                );
    +                $nb=$db->exec($sql);
    +                if ($nb===false) {
    +                    echo date("r : ") . "SQL ERROR = " .
    +                        implode(" ", $db->errorInfo()) . "\n";
    +                } else {
    +                    echo date("r : ") . "Delete $nb packages\n";
    +                }
    +            }
    +            $results=array();
    +            if (preg_match_all('/Package: *(.*)\nVersion: *(.*)\n/i', $index, $results, PREG_SET_ORDER)) {
    +                $tot=0;
    +                foreach ($results as $result) {
    +                    //echo $result[1]." = ".$result[2]."\n";
    +                    $rpmname = "R-".$result[1];
    +                    $ver = str_replace('-', '.', $result[2]);
    +                    $add_upstream = addUpstream(
    +                        $db,
    +                        "R",
    +                        $repo["name"],
    +                        $rpmname,
    +                        $repo["state"],
    +                        $ver,
    +                        ($repo["state"]=="stable"?"":"devel")
    +                    );
    +
    +                    if ($add_upstream) {
    +                        $tot++;
    +                    }
    +                }
    +                echo date("r : ") . "Write $tot packages in this channel\n";
    +                $tottot += $tot;
    +            } else {
    +                echo date("r : ") . "No package in this channel\n";
    +            }
    +        }
    +        echo date("r : ") . "Write $tottot packages in all channels\n";
    +
    +    } // If R in options
    +
    +    // -------------------------------------------------------------------
    +    //	Package Owners from pkgdb (thanks Smootherfrog)
    +    // -------------------------------------------------------------------
    +    if ($_SERVER['argc']==1 || in_array('owner', $_SERVER['argv'])) {
    +
    +        $sql="CREATE TABLE IF NOT EXISTS `acls` (
    +            `ID` int(11) NOT NULL AUTO_INCREMENT,
    +            `collection` varchar(100) NOT NULL,
    +            `name` varchar(100) NOT NULL,
    +            `summary` varchar(200) NOT NULL,
    +            `owner` varchar(50) DEFAULT NULL,
    +            `qa` varchar(50) DEFAULT NULL,
    +            `cc` varchar(100) DEFAULT NULL,
    +            PRIMARY KEY (`ID`),
    +            KEY `name` (`name`),
    +            KEY `collection` (`collection`),
    +            KEY `owner` (`owner`)) ENGINE=MyISAM";
    +
    +        if ($db->exec($sql)!==false) {
    +            echo date("r : ") . "Check table 'acls' ok\n";
    +        } else {
    +            echo date("r : ") . "SQL ERROR = " .
    +                implode(" ", $db->errorInfo()) . "\n";
    +        }
    +
    +        $fic=fopen(
    +            "https://admin.fedoraproject.org/pkgdb/lists/bugzilla?tg_format=plain",
    +            "r"
    +        );
    +        if (!$fic) {
    +            echo date("r : ") . "ERROR reading pkgdb\n";
    +        } else {
    +            $sql="TRUNCATE `acls`";
    +            $nb=$db->exec($sql);
    +            if ($nb===false) {
    +                echo date("r : ") . "SQL ERROR = " .
    +                    implode(" ", $db->errorInfo()) . "\n";
    +            } else {
    +                echo date("r : ") . "Delete $nb packages\n";
    +            }
    +
    +            for ($tot=0 ; $line=fgetcsv($fic, 1024, '|'); ) {
    +                if (count($line)>5 && substr($line[0], 0, 1)!='#') {
    +                    for ($i=0; $i<6; $i++) {
    +                        $line[$i]=trim($line[$i]);
    +                    }
    +                    $sql=sprintf(
    +                        "INSERT INTO `acls` SET collection='%s', name='%s', summary='%s'",
    +                        $line[0],
    +                        $line[1],
    +                        addslashes($line[2])
    +                    );
    +                    if (!empty($line[3])) {
    +                        $sql .= sprintf(", owner='%s'", $line[3]);
    +                    }
    +                    if (!empty($line[4])) {
    +                        $sql .= sprintf(", qa='%s'", $line[4]);
    +                    }
    +                    if (!empty($line[5])) {
    +                        $sql .= sprintf(", cc='%s'", $line[5]);
    +                    }
    +                    $nb=$db->exec($sql);
    +                    if ($nb) {
    +                        $tot+=$nb;
    +                    } else {
    +                        echo date("r : ") . "SQL ERROR = " .
    +                            implode(" ", $db->errorInfo()) . "\n";
    +                    }
    +                }
    +            }
    +            fclose($fic);
    +            echo date("r : ") . "wrote $tot package's owner\n";
    +        }
    +    } // If in options
    +
    +} catch(PDOException $e) {
    +    printf("%s ERREUR : %s\n", date("r"), $e->getMessage());
     }
     
    -if (isset($_SERVER["SERVER_NAME"])) echo "
    "; +if (isset($_SERVER["SERVER_NAME"])) { + echo "
    "; +} ?> -- cgit From 816c869c3bd174d78a710f4d384442bf31a24a6d Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 13:20:02 +0200 Subject: rpm.php Smarty variable assigned twice, export reposlist function so it could be used elsewhere --- main.inc.php | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/main.inc.php b/main.inc.php index e94a62b..bbc300c 100644 --- a/main.inc.php +++ b/main.inc.php @@ -47,4 +47,31 @@ $ariane[] = array( 'url' => './', 'text' => 'Reports home' ); + +/** +* Get repositories list +* +* @param object $db a reference to the database +* +* @return array +*/ +function listRepos($db) +{ + $repos = array(); + $res=$db->query("SELECT * FROM repo WHERE active=1 ORDER BY ID"); + if ( $res ) { + while ($repo = $res->fetchObject()) { + $repos[$repo->main][$repo->sub]=$repo; + } + } + // echo "
    "; print_r($repos);echo "
    "; + foreach ( $repos as $repomain ) { + foreach ($repomain as $repo) { + $repos[$repo->main][$repo->sub] = $repo; + break; + } + } + return $repos; +} + ?> \ No newline at end of file -- cgit From b2ae578c977b5920dd387cb6bc6b731c09259c49 Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 18:18:46 +0200 Subject: Smarty variable assigned twice, export reposlist function so it could be used --- rpm.php | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/rpm.php b/rpm.php index 11b30c2..5073f9f 100644 --- a/rpm.php +++ b/rpm.php @@ -36,8 +36,6 @@ */ require 'main.inc.php'; -$smarty->assign('ariane', $ariane); - $what=(isset($_GET["what"]) ? $_GET["what"] : "%fedora"); $type=(isset($_GET["type"]) ? $_GET["type"] : "pecl"); @@ -51,32 +49,6 @@ $smarty->assign('type', $type); $smarty->assign('what', $what); $smarty->assign('page_title', strtoupper($type). ' extensions in Fedora'); -/** -* Get repositories list -* -* @param object $db a reference to the database -* -* @return array -*/ -function listRepos($db) -{ - $repos = array(); - $res=$db->query("SELECT * FROM repo WHERE active=1 ORDER BY ID"); - if ( $res ) { - while ($repo = $res->fetchObject()) { - $repos[$repo->main][$repo->sub]=$repo; - } - } - // echo "
    "; print_r($repos);echo "
    "; - foreach ( $repos as $repomain ) { - foreach ($repomain as $repo) { - $repos[$repo->main][$repo->sub] = $repo; - break; - } - } - return $repos; -} - /** * Retrieve packages informations * -- cgit From 0177ebb23872520ab05fbb2f8dae3ae56fe3672c Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 18:19:33 +0200 Subject: Add link on package owner --- smarty/templates/rpmphp/rpm.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smarty/templates/rpmphp/rpm.tpl b/smarty/templates/rpmphp/rpm.tpl index be277ca..32af685 100644 --- a/smarty/templates/rpmphp/rpm.tpl +++ b/smarty/templates/rpmphp/rpm.tpl @@ -72,7 +72,7 @@ {foreach from=$p.owners item=owner name=ow_it} - {$owner} +
    {$owner} {if not $smarty.foreach.ow_it.last}
    {/if} -- cgit From 2baf2751ee59b6dd6e1b6618aaa57821915122d6 Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 19:23:44 +0200 Subject: Only headers cells have to be aligned on top --- css/rpmphp.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/rpmphp.css b/css/rpmphp.css index 4d5deed..aeb81ea 100644 --- a/css/rpmphp.css +++ b/css/rpmphp.css @@ -44,7 +44,7 @@ a{ text-decoration:none; } -td{ +th{ vertical-align:top; } -- cgit From 4fe73c547050003599021850f0c6099f7c224f07 Mon Sep 17 00:00:00 2001 From: "Johan \"Papa\" Cwiklinski" Date: Sun, 30 May 2010 19:28:36 +0200 Subject: Use of smarty to render all page ; apply coding standards, add license ; refs #46,48,47 --- all.php | 443 ++++++++++++++++++---------------------- smarty/templates/rpmphp/all.tpl | 104 ++++++++++ 2 files changed, 308 insertions(+), 239 deletions(-) create mode 100644 smarty/templates/rpmphp/all.tpl diff --git a/all.php b/all.php index 2b32a5b..32596d3 100644 --- a/all.php +++ b/all.php @@ -1,248 +1,213 @@ . + * + * @category Main + * @package RPMPHP + * + * @author Remi Collet + * @author Johan Cwiklinski + * @copyright 2010 Remi Collet + * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version + * @link http://github.com/remicollet/rpmphp/ + * @since The begining of times. +*/ +require 'main.inc.php'; $what=(isset($_GET["what"]) ? $_GET["what"] : false); -require "config.inc.php"; - -function listRepos($db){ - $repos = array(); - $res=$db->query("SELECT * FROM repo WHERE active=1 ORDER BY ID"); - if ($res) while ($repo = $res->fetchObject()) { - $repos[$repo->main][$repo->sub]=$repo; - } - // echo "
    "; print_r($repos);echo "
    "; - foreach($repos as $repomain) { - foreach ($repomain as $repo) { - /*printf ("%s", $repo->main);*/ - $repos[$repo->main][$repo->sub] = $repo; - break; - } - } - return $repos; +$ariane[] = array( + 'url' => '#', + 'text' => 'Packages in Fedora repositories' +); +$smarty->assign('ariane', $ariane); + +$smarty->assign('what', $what); +$smarty->assign('page_title', 'All packages in Fedora repositories'); + +/** +* Retrieve packages informations +* +* @param Object $db A reference to the database +* +* @return array +*/ +function report ($db) +{ + global $what, $smarty; + $packages = null; + $repos = listRepos($db); + $smarty->assign('repos', $repos); + + + if (substr($what,0,1)=='%') { + $sql=sprintf("SELECT DISTINCT name FROM rpm WHERE SUBSTRING(name,1,1)='%s' ORDER BY name", substr($what,1,1)); + } else { + $sql=sprintf("SELECT DISTINCT name FROM acls WHERE owner='%s' ORDER BY name", $what); + } + //echo "

    SQL=$sql

    "; + + $i=0; + $res=$db->query($sql); + if ($res) { + while ($desc = $res->fetchObject()) { + $package = null; + $rpmname = $desc->name; + + $sql2="SELECT DISTINCT owner FROM acls WHERE name LIKE '$rpmname'"; + $res2=$db->query($sql2); + $dispowner=""; + $owners=array(); + if ( $res2 ) { + while ($owner= $res2->fetchObject()) { + $owners[] = $owner->owner; + } + } + + $sql3 = "SELECT * FROM rpm WHERE name LIKE '$rpmname'"; + $res3=$db->query($sql3); + $rpm = ($res3 ? $res3->fetchObject() : false); + + if ($rpm) { + $url = $rpm->url; + $des = htmlentities($rpm->summary); + + $rpms=array(); + do { + $rpms[$rpm->repo_main."-".$rpm->repo_sub]=$rpm; + } while ($rpm = $res3->fetchObject()); + + $package['name'] = $rpmname; + $package['description'] = $des; + $package['owners'] = $owners; + + $versions = null; + foreach($repos as $repomain) { + $display=""; + $class=""; + foreach ($repomain as $repo) { + if (isset($rpms[$repo->main."-".$repo->sub])) { + $rpm=$rpms[$repo->main."-".$repo->sub]; + + $maxver = (isset($rpms["rawhide-"]) ? $rpms["rawhide-"]->ver : ""); + + switch ($repo->sub) { + case "base": + if (isset($rpms[$repo->main."-updates"])) { + $display .= sprintf( + "%s-%s
    ", + $rpm->ver, + $rpm->rel + ); + } else { + $display .= sprintf( + "%s-%s
    ", + $rpm->ver, + $rpm->rel + ); + $class = ($rpm->ver == $maxver ? "check" : "attn"); + } + break; + case "": + $display .= sprintf( + "%s-%s
    ", + $rpm->ver, + $rpm->rel + ); + break; + case "updates": + $display .= sprintf( + "%s-%s (updates)
    ", + $rpm->ver, + $rpm->rel + ); + $class = ($rpm->ver == $maxver ? "check" : "attn"); + break; + case "testing": + $display .= sprintf( + "%s-%s (testing)
    ", + $rpm->ver, + $rpm->rel + ); + $class = ($rpm->ver == $maxver ? "info" : "attn"); + break; + } + } // RPM exists + } // sub repo + + $versions[] = array( + 'class' => ($class && $maxver) ? $class : '', + 'display' => $display + ); + $package['versions'] = $versions; + } // mainrepo + + $i++; + $packages[] = $package; + } + } // each Line + } + return $packages; } -function Report ($db, $repos) { - global $what; - - /*$repos=array(); - $res=$db->query("SELECT * FROM repo WHERE active=1 ORDER BY ID"); - if ($res) while ($repo = $res->fetchObject()) { - $repos[$repo->main][$repo->sub]=$repo; - }*/ - - if (substr($what,0,1)=='%') { - $sql=sprintf("SELECT DISTINCT name FROM rpm WHERE SUBSTRING(name,1,1)='%s' ORDER BY name", substr($what,1,1)); - } else { - $sql=sprintf("SELECT DISTINCT name FROM acls WHERE owner='%s' ORDER BY name", $what); - } - //echo "

    SQL=$sql

    "; - - /*echo "\n"; - echo ""; - - foreach($repos as $repomain) { - foreach ($repomain as $repo) { - printf ("", $repo->main); - break; - } - } - echo "\n";*/ - - $i=0; - $res=$db->query($sql); - if ($res) while ($desc = $res->fetchObject()) { - $rpmname = $desc->name; - - $sql2="SELECT DISTINCT owner FROM acls WHERE name LIKE '$rpmname'"; - $res2=$db->query($sql2); - $dispowner=""; - if ($res2) while ($owner= $res2->fetchObject()) { - if ($dispowner) $dispowner .= "
    "; - $dispowner .= sprintf ("%s", $_SERVER["PHP_SELF"], $owner->owner, $owner->owner); - } - - $sql3 = "SELECT * FROM rpm WHERE name LIKE '$rpmname'"; - $res3=$db->query($sql3); - $rpm = ($res3 ? $res3->fetchObject() : false); - - if ($rpm) { - $url = $rpm->url; - $des = htmlentities($rpm->summary); - - $rpms=array(); - do { - $rpms[$rpm->repo_main."-".$rpm->repo_sub]=$rpm; - } while ($rpm = $res3->fetchObject()); - - printf ("\n\t\n\t\n", - ($i%2 ? "odd" : "even"), $rpmname, $des, $rpmname, $dispowner); - - - foreach($repos as $repomain) { - $display=""; - $class=""; - foreach ($repomain as $repo) { - if (isset($rpms[$repo->main."-".$repo->sub])) { - $rpm=$rpms[$repo->main."-".$repo->sub]; - - $maxver = (isset($rpms["rawhide-"]) ? $rpms["rawhide-"]->ver : ""); - - switch ($repo->sub) { - case "base": - if (isset($rpms[$repo->main."-updates"])) { - $display .= sprintf("%s-%s
    ", $rpm->ver, $rpm->rel); - } else { - $display .= sprintf("%s-%s
    ", $rpm->ver, $rpm->rel); - $class = ($rpm->ver == $maxver ? "check" : "attn"); - } - break; - case "": - $display .= sprintf("%s-%s
    ", $rpm->ver, $rpm->rel); - break; - case "updates": - $display .= sprintf("%s-%s (updates)
    ", $rpm->ver, $rpm->rel); - $class = ($rpm->ver == $maxver ? "check" : "attn"); - break; - case "testing": - $display .= sprintf("%s-%s (testing)
    ", $rpm->ver, $rpm->rel); - $class = ($rpm->ver == $maxver ? "info" : "attn"); - break; - } - } // RPM exists - } // sub repo - - if ($class && $maxver) { - printf("\t\n", $class, $display); - } else if ($display) { - printf("\t\n", $display); - } else { - echo "\t\n"; - } - } // mainrepo - - echo "\n"; - $i++; - } - } // each Line -} -?> - - - - Packages in Fedora - - - - - - - - -
    - -
    -
    -

    You are here:

    - -
    -
    - -
    - Filter packages - - - -
    - -
    -query($sql); - if ($res && $row=$res->fetchObject()) { - printf("

    Repositories last updated %s.

    ", date("r", $row->stamp)); - } - -?> -

    Packages in Fedora

    -
    PackageOwner(s)%s
    %s%s%s%s 
    - - - - - - - - - - - -"; - //echo "
    "; print_r($rpms); echo "
    "; + $db = new PDO ("mysql:dbname=" . MYBASE . ";host=" . MYHOST, MYUSER, MYPASS); + + $sql="SELECT DISTINCT CONCAT('%',SUBSTRING(name,1,1)) as init FROM rpm ORDER BY init"; + $res=$db->query($sql); + if ( $res ) { + while ( $s = $res->fetchObject() ) { + $starts_with[] = $s; + } + $smarty->assign('starts_with', $starts_with); + } + + $sql="SELECT DISTINCT owner FROM acls ORDER BY owner"; + $res=$db->query($sql); + if ( $res ) { + while ( $owner = $res->fetchObject() ) { + $owners[] = $owner; + } + $smarty->assign('owners', $owners); + } + + $sql='SELECT MAX(stamp) AS stamp FROM repo'; + $res=$db->query($sql); + if ($res && $row=$res->fetchObject()) { + $smarty->assign('repositories_update', date("r", $row->stamp)); + } + + $smarty->assign('packages', report($db)); } catch(PDOException $e) { -?> - - - -assign( + 'error', + sprintf("%s ERREUR : %s\n", date("r"), $e->getMessage()) + ); } -?> - -
    PackageOwner(s)

    Choose a criteria from the filter menu

    -getMessage()); -?> -
    -
      -
    • Legend:
    • -
    • Upstream: bold if stable.
    • -
    • Repo: bold for latest release.
    • -
    • Lastest released (stable if exists)
    • -
    • Lastest in testing
    • -
    • Lastest not available
    • -
    -
    - - - - +$page_content = $smarty->fetch('all.tpl'); +$smarty->assign('page_content', $page_content); +$smarty->display('main.tpl'); + +?> \ No newline at end of file diff --git a/smarty/templates/rpmphp/all.tpl b/smarty/templates/rpmphp/all.tpl new file mode 100644 index 0000000..8d9c20a --- /dev/null +++ b/smarty/templates/rpmphp/all.tpl @@ -0,0 +1,104 @@ +{* + * All page template + * + * Copyright © 2010 Remi Collet + * + * This file is part of rpmphp. + * + * rpmphp is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * rpmphp is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with rpmphp. If not, see . +*} +

    Repositories last updated {$repositories_update}.

    +
    +
    +
    + Filter {$type|upper} packages + + + +
    +
    +
    + +{if $error} +

    Ooops, an error occured:
    {$error}

    +{/if} + + + + + + +{foreach from=$repos key=k item=v} + +{/foreach} + + + + + + + + +{foreach from=$packages item=p name=plist} + + + + {foreach from=$p.versions key=k item=version} + + {$version.display} + + {/foreach} + +{foreachelse} + + + +{/foreach} + +
    PackageOwner(s){$k}
    {$packages|@count} packages found
    + {$p.name} + + {foreach from=$p.owners item=owner name=ow_it} + {$owner} + {if not $smarty.foreach.ow_it.last} +
    + {/if} + {/foreach} +
    +

    Choose a criteria from the filter menu

    +
    + +
      +
    • Legend:
    • +
    • Upstream: bold if stable.
    • +
    • Repo: bold for latest release.
    • +
    • Lastest released (stable if exists)
    • +
    • Lastest in testing
    • +
    • Lastest not available
    • +
    -- cgit