Alex Trofimov 6 лет назад
Родитель
Сommit
2a70722509

+ 15 - 1
inc/classes/BxDolWiki.php

@@ -61,12 +61,26 @@ class BxDolWiki extends BxDolFactory implements iBxDolFactoryObject
         $this->_oQuery = new BxDolWikiQuery($aObject);
     }
 
+    /**
+     * Get WIKI object instance by object URI
+     * @param $sObject object name
+     * @return object instance or false on error
+     */
+    static public function getObjectInstanceByUri($sUri, $oTemplate = false)
+    {
+        $aObject = BxDolWikiQuery::getWikiObjectByUri($sUri);
+        if (!$aObject || !is_array($aObject))
+            return false;
+
+        return self::getObjectInstance($aObject['object'], $oTemplate);
+    }
+
     /**
      * Get WIKI object instance by object name
      * @param $sObject object name
      * @return object instance or false on error
      */
-    static public function getObjectInstance($sObject = false, $oTemplate = false)
+    static public function getObjectInstance($sObject, $oTemplate = false)
     {
         if (isset($GLOBALS['bxDolClasses']['BxDolWiki!'.$sObject]))
             return $GLOBALS['bxDolClasses']['BxDolWiki!'.$sObject];

+ 11 - 1
inc/classes/BxDolWikiQuery.php

@@ -21,10 +21,20 @@ class BxDolWikiQuery extends BxDolDb
         $this->_aObject = $aObject;
     }
 
+    static public function getWikiObjectByUri ($sUri)
+    {
+        return self::getWikiObjectByField ('uri', $sUri);
+    }
+
     static public function getWikiObject ($sObject)
+    {
+        return self::getWikiObjectByField ('object', $sObject);
+    }
+
+    static public function getWikiObjectByField ($sField, $sValue)
     {
         $oDb = BxDolDb::getInstance();
-        $sQuery = $oDb->prepare("SELECT * FROM `sys_objects_wiki` WHERE `object` = ?", $sObject);
+        $sQuery = $oDb->prepare("SELECT * FROM `sys_objects_wiki` WHERE `$sField` = ?", $sValue);
         $aObject = $oDb->getRow($sQuery);
         if (!$aObject || !is_array($aObject))
             return false;

+ 10 - 3
install/sql/system.sql

@@ -4830,6 +4830,7 @@ CREATE TABLE IF NOT EXISTS `sys_objects_payments` (
 CREATE TABLE IF NOT EXISTS `sys_objects_wiki` (
   `id` int(11) NOT NULL,
   `object` varchar(64) NOT NULL,
+  `uri` varchar(32) NOT NULL,
   `title` varchar(255) NOT NULL,
   `module` varchar(32) NOT NULL,
   `allow_add_for_levels` int(11) NOT NULL DEFAULT '2147483647',
@@ -4838,7 +4839,10 @@ CREATE TABLE IF NOT EXISTS `sys_objects_wiki` (
   `allow_translate_for_levels` int(11) NOT NULL DEFAULT '2147483647',
   `allow_unsafe_for_levels` int(11) NOT NULL DEFAULT '2147483647',
   `override_class_name` varchar(255) NOT NULL,
-  `override_class_file` varchar(255) NOT NULL
+  `override_class_file` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `object` (`object`),
+  UNIQUE KEY `uri` (`uri`)
 );
 
 CREATE TABLE IF NOT EXISTS `sys_pages_wiki_blocks` (
@@ -4851,7 +4855,9 @@ CREATE TABLE IF NOT EXISTS `sys_pages_wiki_blocks` (
   `content` mediumtext NOT NULL,
   `comment` varchar(255) NOT NULL,
   `added` int(11) NOT NULL,
-  `changed` int(11) NOT NULL
+  `changed` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `block_lang_rev` (`block_id`,`language`,`revision`)
 );
 
 -- --------------------------------------------------------
@@ -4863,7 +4869,8 @@ CREATE TABLE IF NOT EXISTS `sys_rewrite_rules` (
   `id` int(10) UNSIGNED NOT NULL,
   `preg` varchar(255) NOT NULL,
   `service` varchar(255) NOT NULL,
-  `active` tinyint(4) NOT NULL DEFAULT '1'
+  `active` tinyint(4) NOT NULL DEFAULT '1',
+  PRIMARY KEY (`id`)
 );
 
 -- --------------------------------------------------------

+ 2 - 2
modules/boonex/wiki/install/sql/enable.sql

@@ -1,8 +1,8 @@
 
 -- Wiki object
 
-INSERT INTO `sys_objects_wiki` (`object`, `title`, `module`, `allow_add_for_levels`, `allow_edit_for_levels`, `allow_delete_for_levels`, `allow_translate_for_levels`, `allow_unsafe_for_levels`, `override_class_name`, `override_class_file`) VALUES
-('bx_wiki', '_sys_wiki_system_title', 'system', 192, 192, 192, 192, 192, '', '');
+INSERT INTO `sys_objects_wiki` (`object`, `uri`, `title`, `module`, `allow_add_for_levels`, `allow_edit_for_levels`, `allow_delete_for_levels`, `allow_translate_for_levels`, `allow_unsafe_for_levels`, `override_class_name`, `override_class_file`) VALUES
+('bx_wiki', 'wiki', '_sys_wiki_system_title', 'system', 192, 192, 192, 192, 192, '', '');
 
 -- Permalinks
 

+ 3 - 3
template/scripts/BxBaseServiceWiki.php

@@ -30,16 +30,16 @@ class BxBaseServiceWiki extends BxDol
     /** 
      * @ref bx_system_general-wiki_page "wiki_page"
      */
-    public function serviceWikiPage ($sWikiObject, $sUri)
+    public function serviceWikiPage ($sWikiObjectUri, $sUri)
     {
-        $oWiki = BxDolWiki::getObjectInstance($sWikiObject);
+        $oWiki = BxDolWiki::getObjectInstanceByUri($sWikiObjectUri);
         if (!$oWiki) {
             $oTemplate = BxDolTemplate::getInstance();
             $oTemplate->displayPageNotFound();
             return;
         }
 
-        $oPage = BxDolPage::getObjectInstanceByModuleAndURI($sWikiObject, $sUri);
+        $oPage = BxDolPage::getObjectInstanceByModuleAndURI($oWiki->getObjectName(), $sUri);
         if ($oPage) {
 
             $oPage->displayPage();