Re: little start

From: Date: Thu, 15 Jan 2004 01:43:35 +0000
Subject: Re: little start
References: 1  Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-25069@lists.php.net to get a copy of this message
Hi Pierre, If this patch also fixes #537, then it must be included. I think #537 probably needs to be fixed prior to release, I have not had a chance to look at it yet, but the symptoms resemble those of the pear search bug. I would absolutely love to see a roadmap (I'm talking 5-10 text lines) of what pearweb2 will have that pearweb1 lacks. This will give me a big boost on designing channels. I've been doing my research with things like red-carpet and I'm ready to go :) Greg Pierre-Alain Joye wrote:
Hello, Please try the attached patch. It solves bug #534. the 2nd patch is against PEAR/Command/Remote.php It's a backport of my work on the new pearweb (aka pearweb2). I'm just wondering if we want to fix that in 1.3 or just release ;). About pearweb, I'm setting a new dev server (php5 ...). Once I'm done we can start to use it for tests/devs purposes. pierre ------------------------------------------------------------------------ --- pear-database.php 2004-01-13 15:11:14.000000000 +0100 +++ /home/paj/web/pear/include/pear-database.php 2004-01-14 12:09:49.000000000 +0100 @@ -1583,7 +1583,7 @@ END;
         $to   = '"PEAR general list" <pear-general@lists.php.net>';
         $from = '"PEAR Announce" <pear-dev@lists.php.net>';
         $subject = "[ANNOUNCEMENT] $release Released.";
-        mail($to, $subject, $txtanounce, "From: $from", "-f pear-sys@php.net");
+/*        mail($to, $subject, $txtanounce, "From: $from", "-f pear-sys@php.net");*/
     }
      // }}}
@@ -1657,9 +1657,95 @@ END;
         return $dbh->getAll($query, array($package, $version), DB_FETCHMODE_ASSOC);
     }
+
     // }}}
-}
+    // {{{ proto array release::search(array , struct)
+
+    /**
+     * Search releases for given options
+     * @param array package name and description query string
+     * @param options Only preferred_state is implemented for now
+     * @TODO add options for dependencies (php version), field set
+     *       move/alter this function as a generic function and use it
+     *       for RPC getXXX as well as search, and for pe(ar|cl) search
+     */
+    function search($query, $options)
+    {
+        global $dbh;
+
+        if (is_array($query)) {
+            $names = isset($query[0]) ? explode(',', $query[0]) : array();
+            $descs = isset($query[1]) ? explode(',', $query[1]) : array();
+        }
+
+        $likenames = '';
+        $cnt = sizeof($names)-1;
+        if ($cnt==0) {
+            $likenames .= " (packages.name LIKE '%" . $names[0] ."%') ";
+        } elseif ($cnt) {
+            $likenames .= '(';
+            for ($i=$cnt; $i>=0; $i--) {
+                    $like .= "packages.name LIKE '%" . $names[$i] . "%'";
+                    if ($i) {
+                            $likenames .= ' OR ';
+                    }
+            }
+            $likenames .= ')';
+        }
+
+        $cnt = sizeof($descs)-1;
+        $likedescs = '';
+        if ($cnt==0) {
+            $likedescs .= " (packages.description LIKE '%" . $descs[0] ."%') ";
+        } elseif ($cnt>0) {
+            $likedescs .= '(';
+            for ($i=$cnt; $i>=0; $i--) {
+                    $likedescs .= "packages.description LIKE '%" . $descs[$i] . "%'";
+                    if ($i) {
+                            $likedescs .= ' OR ';
+                    }
+            }
+            $likedescs .= ')';
+        }
 +        if (!empty($likenames) || !empty($likedescs)) {
+            $like = ' AND (' . $likenames . (empty($likedescs) ? '' : ' OR ' . $likedescs) . ')';
+        } else {
+            $like = '';
+        }
+
+        $where_state = '';
+        if (isset($options['preferred_state']) && release::isValidState($options['preferred_state'])) {
+            $better = release::betterStates($options['preferred_state']);
+            $where_state .= " AND (releases.state = '" . $options['preferred_state'] . "'";
+            $i = 0;
+            if (is_array($better)) {
+                foreach ($better as $b) {
+                    $where_state .= " OR releases.state = '$b'";
+                }
+            }
+            $where_state .= ")";
+        }
+
+        //$t = array_merge($query, $options);
+        $options = implode("/",$options);
+        $query = "SELECT packages.name, releases.version, releases.state, packages.summary "
+                . " FROM packages, releases WHERE packages.id=releases.package "
+                . " $like " . $where_state . ' ORDER BY packages.name, releases.releasedate DESC';
+        $t = $dbh->getAll($query,DB_FETCHMODE_ASSOC);
+        $prev = '';
+        $res = array();
+        for ($i=0; $i<sizeof($t); $i++) {
+            if ($prev!=$t[$i]['name']) {
+                $res[] = $t[$i];
+            }
+            $prev = $t[$i]['name'];
+        }
+        return $res;
+    }
+
+    // }}}
+} /** * Class to handle notes @@ -2210,4 +2296,4 @@ if (!function_exists("md5_file")) {
     }
} -?> +?> \ No newline at end of file ------------------------------------------------------------------------ --- /usr/local/lib/php/PEAR/Command/Remote.php 2004-01-14 12:14:37.000000000 +0100 +++ /home/paj/cvs/php5/pear/PEAR/Command/Remote.php 2004-01-09 13:10:42.000000000 +0100 @@ -1,9 +1,9 @@ <?php // /* vim: set expandtab tabstop=4 shiftwidth=4: */ // +----------------------------------------------------------------------+
-// | PHP Version 4                                                        |
+// | PHP Version 5                                                        |
// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 The PHP Group                                |
+// | Copyright (c) 1997-2004 The PHP Group                                |
// +----------------------------------------------------------------------+
 // | This source file is subject to version 3.0 of the PHP license,       |
 // | that is bundled with this package in the file LICENSE, and is        |
@@ -17,7 +17,7 @@
 // |                                                                      |
// +----------------------------------------------------------------------+ // -// $Id: Remote.php,v 1.36 2003/11/17 09:15:28 mj Exp $ +// $Id: Remote.php,v 1.37 2004/01/08 17:33:13 sniper Exp $ require_once 'PEAR/Command/Common.php'; require_once 'PEAR/Common.php'; @@ -189,7 +189,7 @@ parameter.
             'headline' => array('Package', 'Latest', 'Local'),
             );
         $local_pkgs = $reg->listPackages();
-
+                 foreach ($available as $name => $info) {
             $installed = $reg->packageInfo($name);
             $desc = $info['summary'];
@@ -221,11 +221,11 @@ parameter.
                 @$info['deps'],
                 );
         }
-
+                 foreach ($local_pkgs as $name) {
             $info = $reg->packageInfo($name);
             $data['data']['Local'][] = array(
-                $info['package'],
+                $info['package'],                  '',
                 $info['version'],
                 $info['summary'],
@@ -251,29 +251,36 @@ parameter.
         $r = new PEAR_Remote($this->config);
         $reg = new PEAR_Registry($this->config->get('php_dir'));
         $available = $r->call('package.listAll', true);
-        $soptions = array();
-        $soptions['preferred_state'] = $this->config->get('preferred_state');
-        $t = $r->call('release.search',$params, $soptions);
-        if (PEAR::isError($t)) {
-            return $this->raiseError($t);
+        if (PEAR::isError($available)) {
+            return $this->raiseError($available);
         }
         $data = array(
             'caption' => 'Matched packages:',
             'border' => true,
             'headline' => array('Package', 'Latest', 'Local'),
-            'info' => array()
             );
 -        foreach ($t as $pkg) {
-            $installed = $reg->packageInfo($pkg['name']);
-            $data['data']['info'][]= array(
-                    $pkg['name'],
-                    $pkg['version'],
-                    $installed['version'],
-                    $pkg['summary']
+        foreach ($available as $name => $info) {
+            $found = (!empty($params[0]) && stristr($name, $params[0]) !== false);
+            if (!$found && !(isset($params[1]) && !empty($params[1])
+                && (stristr($info['summary'], $params[1]) !== false
+                    || stristr($info['description'], $params[1]) !== false)))
+            {
+                continue;
+            };
+
+            $installed = $reg->packageInfo($name);
+            $desc = $info['summary'];
+            if (isset($params[$name]))
+                $desc .= "\n\n".$info['description'];
+
+            $data['data'][$info['category']][] = array(
+                $name,
+                $info['stable'],
+                $installed['version'],
+                $desc,
                 );
         }
-
         if (!isset($data['data'])) {
             return $this->raiseError('no packages found');
         };


« previous php.pear.dev (#25069) next »