svn: /web/doc-editor/trunk/ index.php php/RepositoryFetcher.php

[email protected] (Yannick Torres)
Newsgroups php.doc.web
Message-ID <[email protected]>
yannick                                  Thu, 30 Dec 2010 00:10:09 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=306838

Log:
Better support for the permlink. Don't allow blank & 'function' ID. Start by searching a page with this exact ID and fallback to a page containing this ID

Changed paths:
    U   web/doc-editor/trunk/index.php
    U   web/doc-editor/trunk/php/RepositoryFetcher.php

Modified: web/doc-editor/trunk/index.php
===================================================================
--- web/doc-editor/trunk/index.php	2010-12-29 20:58:46 UTC (rev 306837)
+++ web/doc-editor/trunk/index.php	2010-12-30 00:10:09 UTC (rev 306838)
@@ -9,26 +9,33 @@
 // Perm link management
 if (isset($_REQUEST['perm'])) {

-    require_once dirname(__FILE__) . '/php/ProjectManager.php';
-    require_once dirname(__FILE__) . '/php/RepositoryFetcher.php';
+    $perm = trim($_REQUEST['perm'], '/ ');
+
+    if( substr($perm, -4) == '.php' )
+    {
+        require_once dirname(__FILE__) . '/php/ProjectManager.php';
+        require_once dirname(__FILE__) . '/php/RepositoryFetcher.php';

-    $_project = $_REQUEST['project'];
+        $_project = $_REQUEST['project'];

-    // Set the project
-    ProjectManager::getInstance()->setProject($_project);
+        // Set the project
+        ProjectManager::getInstance()->setProject($_project);

-    $_p    = explode('/', trim($_REQUEST['perm'], '/'));
-    $_lang = array_shift($_p);
-    $_file = array_pop($_p);
+        $_p    = explode('/', $perm);
+        $_lang = array_shift($_p);
+        $_file = array_pop($_p);

-    $_id   = explode('.', $_file);
-    array_pop($_id);
-    $xmlid = implode('.', $_id);
+        $_id   = explode('.', $_file);
+        array_pop($_id);
+        $xmlid = implode('.', $_id);

-    $r = RepositoryFetcher::getInstance()->getFileByXmlID($_lang, $xmlid);
+        $r = RepositoryFetcher::getInstance()->getFileByXmlID($_lang, $xmlid);

-    if (false == is_null($r)) {
-        $jsVar = 'var directAccess = {"lang":"'.$r->lang.'", "path":"'.$r->path.'", "name":"'.$r->name.'", "project":"'.$_project.'"};';
+        if ( $r ) {
+            $jsVar = 'var directAccess = {"lang":"'.$r->lang.'", "path":"'.$r->path.'", "name":"'.$r->name.'", "project":"'.$_project.'"};';
+        } else {
+            $jsVar = 'var directAccess = false;';
+        }
     } else {
         $jsVar = 'var directAccess = false;';
     }

Modified: web/doc-editor/trunk/php/RepositoryFetcher.php
===================================================================
--- web/doc-editor/trunk/php/RepositoryFetcher.php	2010-12-29 20:58:46 UTC (rev 306837)
+++ web/doc-editor/trunk/php/RepositoryFetcher.php	2010-12-30 00:10:09 UTC (rev 306838)
@@ -1033,12 +1033,60 @@
      */
     public function getFileByXmlID($lang, $id)
     {
+        $db = DBConnection::getInstance();
         $project = AccountManager::getInstance()->project;

-        $s = "SELECT `lang`, `path`, `name` FROM `files`
-              WHERE `project`='$project' AND `lang` = '$lang' AND `xmlid` LIKE '%$id%'";
-        $r = DBConnection::getInstance()->query($s);
-        return $r->fetch_object();
+        // If user forget ".php" at this end of the permlink, this is "function" how is search into DB.
+        // We don't allow it, neither blank ID
+        if( $id == 'function' || empty($id) ) {
+            return false;
+        }
+
+        // We start by searching file witch only this ID
+        $s = sprintf(
+            'SELECT
+                `lang`, `path`, `name`
+             FROM
+                 `files`
+             WHERE
+                 `project`="%s" AND
+                 `lang` = "%s" AND
+                 `xmlid` = "%s"',
+            $project,
+            $lang,
+            $id
+        );
+        $r = $db->query($s);
+        $nb = $r->num_rows;
+
+        if( $nb >= 1 ) {
+            return $r->fetch_object();
+        } else {
+
+            // We now search file which contain this ID
+            $s = sprintf(
+                'SELECT
+                    `lang`, `path`, `name`
+                FROM
+                    `files`
+                WHERE
+                    `project`="%s" AND
+                    `lang` = "%s" AND
+                    `xmlid` LIKE "%%%s%%"',
+                $project,
+                $lang,
+                $id
+            );
+            $r = $db->query($s);
+            $nb = $r->num_rows;
+
+            if( $nb == 0 ) {
+                return false;
+            } else {
+                return $r->fetch_object();
+            }
+
+        }
     }

     /**
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.