1
0
Эх сурвалжийг харах

#1091 User friendly URLs: delete records upon content deletion

Alex Trofimov 4 жил өмнө
parent
commit
a0c09e4b9f

+ 26 - 1
inc/classes/BxDolPage.php

@@ -242,6 +242,29 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         return true;
     }
 
+	/**
+     * Delete SEO link
+     * @param $sModule module name
+     * @param $sContentInfoObject content info object
+     * @param $sId content id
+     * @return number of affected rows
+     */
+    static public function deleteSeoLink ($sModule, $sContentInfoObject, $sId)
+    {
+        return BxDolPageQuery::deleteSeoLink($sModule, $sContentInfoObject, $sId);
+    }
+
+	/**
+     * Delete SEO link by param
+     * @param $sParamName GET param name
+     * @param $sId content id
+     * @return number of affected rows
+     */
+    static public function deleteSeoLinkByParam ($sParamName, $sId)
+    {
+        return BxDolPageQuery::deleteSeoLinkByParam($sParamName, $sId);
+    }
+
 	/**
      * Process SEO links. It takes request part from SEO link and process it 
      * to make it work as regular page link
@@ -382,7 +405,9 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         if (!empty($aUris[1])) {
             $aPage = BxDolPageQuery::getPageObject($sPageName);
             if ($aPage) {
-                $r = BxDolPageQuery::getSeoLink($aPage['module'], $aUris[0], ['uri' => $aUris[1]]);
+                $r = BxDolPageQuery::getSeoLink($aPage['module'], $aUris[0], ['uri' => urldecode($aUris[1])]);     
+                if (!$r)
+                    return false;
                 $s .= '&' . $r['param_name'] . '=' .  $r['param_value'];
             }
         }

+ 17 - 0
inc/classes/BxDolPageQuery.php

@@ -134,6 +134,23 @@ class BxDolPageQuery extends BxDolDb
             'ts' => time(),
         ]);
     }
+
+    static public function deleteSeoLink($sModule, $sContentInfoObject, $sId)
+    {
+        return BxDolDb::getInstance()->query("DELETE FROM `sys_seo_links` WHERE `module` = :module AND `page_uri` IN (SELECT `uri` FROM `sys_objects_page` WHERE `module` = :content_info OR `content_info` = :content_info) AND `param_value` = :param_value", [
+            'module' => $sModule,
+            'content_info' => $sContentInfoObject,
+            'param_value' => $sId,
+        ]);
+    }
+
+    static public function deleteSeoLinkByParam($sParamName, $sId)
+    {
+        return BxDolDb::getInstance()->query("DELETE FROM `sys_seo_links` WHERE `param_name` = :param_name AND `param_value` = :param_value", [
+            'param_name' => $sParamName,
+            'param_value' => $sId,
+        ]);
+    }
 }
 
 /** @} */

+ 3 - 0
inc/classes/BxDolProfile.php

@@ -454,6 +454,9 @@ class BxDolProfile extends BxDolFactory implements iBxDolProfile
         // delete profile's acl levels
         BxDolAcl::getInstance()->onProfileDelete($ID);
 
+        // delete SEO links
+        BxDolPage::deleteSeoLinkByParam ('profile_id', $ID);
+
         // delete profile
         if (!$this->_oQuery->delete($ID))
             return false;

+ 4 - 0
modules/base/general/classes/BxBaseModGeneralFormEntry.php

@@ -566,6 +566,10 @@ class BxBaseModGeneralFormEntry extends BxTemplFormView
             if ($o) $o->onDeleteContent($iContentId);
         }
 
+        // delete SEO links
+
+        BxDolPage::deleteSeoLink ($this->_oModule->getName(), $this->_oModule->getName(), $iContentId);
+
         // delete db record
         
         BxDolFormQuery::removeFormField($this->id, $iContentId);

+ 2 - 0
modules/boonex/albums/classes/BxAlbumsModule.php

@@ -152,6 +152,8 @@ class BxAlbumsModule extends BxBaseModTextModule
             $oMetatags->onDeleteContent($aMediaInfo['id']);
         }
 
+        BxDolPage::deleteSeoLink ($this->getName(), 'bx_albums_media', $aMediaInfo['id']);
+
         return true;
     }