Просмотр исходного кода

Ticket #4602 - Add domain validation in Link Auto Attachment feature: in Text based.

AntonLV 2 лет назад
Родитель
Сommit
ba21b8866b

+ 12 - 12
modules/base/text/classes/BxBaseModTextDb.php

@@ -340,9 +340,9 @@ class BxBaseModTextDb extends BxBaseModGeneralDb
     {
         $CNF = &$this->_oConfig->CNF;
         
-    	$aBindings = array(
-    		'profile_id' => $iUserId
-    	);
+    	$aBindings = [
+            'profile_id' => $iUserId
+    	];
 
         $sWhereAddon = '';
         if(!empty($iLinkId)) {
@@ -351,7 +351,7 @@ class BxBaseModTextDb extends BxBaseModGeneralDb
             $sWhereAddon = " AND `id`=:id";
         }
 
-        return $this->query("DELETE FROM `" . $CNF['TABLE_LINKS'] . "` WHERE `profile_id`=:profile_id" . $sWhereAddon, $aBindings);
+        return $this->query("DELETE FROM `tl`, `tlc` USING `" . $CNF['TABLE_LINKS'] . "` AS `tl` LEFT JOIN `" . $CNF['TABLE_LINKS2CONTENT'] . "` AS `tlc` ON `tl`.`id`=`tlc`.`link_id` WHERE `tl`.`profile_id`=:profile_id AND ISNULL(`tlc`.`content_id`)" . $sWhereAddon, $aBindings);
     }
 
     public function saveLink($iContentId, $iLinkId)
@@ -373,8 +373,8 @@ class BxBaseModTextDb extends BxBaseModGeneralDb
     public function deleteLink($iId)
     {
         $CNF = &$this->_oConfig->CNF;
-        
-        return (int)$this->query("DELETE FROM `tl`, `tle` USING `" . $CNF['TABLE_LINKS'] . "` AS `tl` LEFT JOIN `" . $CNF['TABLE_LINKS2CONTENT'] . "` AS `tle` ON `tl`.`id`=`tle`.`link_id` WHERE `tl`.`id` = :id", array(
+
+        return (int)$this->query("DELETE FROM `tl`, `tlc` USING `" . $CNF['TABLE_LINKS'] . "` AS `tl` LEFT JOIN `" . $CNF['TABLE_LINKS2CONTENT'] . "` AS `tlc` ON `tl`.`id`=`tlc`.`link_id` WHERE `tl`.`id` = :id", array(
             'id' => $iId
         )) > 0;
     }
@@ -382,8 +382,8 @@ class BxBaseModTextDb extends BxBaseModGeneralDb
     public function deleteLinks($iContentId)
     {
         $CNF = &$this->_oConfig->CNF;
-        
-        return (int)$this->query("DELETE FROM `tl`, `tle` USING `" . $CNF['TABLE_LINKS'] . "` AS `tl` LEFT JOIN `" . $CNF['TABLE_LINKS2CONTENT'] . "` AS `tle` ON `tl`.`id`=`tle`.`link_id` WHERE `tle`.`content_id` = :content_id", array(
+
+        return (int)$this->query("DELETE FROM `tl`, `tlc` USING `" . $CNF['TABLE_LINKS'] . "` AS `tl` LEFT JOIN `" . $CNF['TABLE_LINKS2CONTENT'] . "` AS `tlc` ON `tl`.`id`=`tlc`.`link_id` WHERE `tlc`.`content_id` = :content_id", array(
             'content_id' => $iContentId
         )) > 0;
     }
@@ -431,8 +431,8 @@ class BxBaseModTextDb extends BxBaseModGeneralDb
                     'content_id' => $aParams['content_id']
                 );
 
-                $sJoinClause = "LEFT JOIN `" . $CNF['TABLE_LINKS2CONTENT'] . "` AS `tle` ON `tl`.`id`=`tle`.`link_id`";
-                $sWhereClause = " AND `tle`.`content_id`=:content_id";
+                $sJoinClause = "LEFT JOIN `" . $CNF['TABLE_LINKS2CONTENT'] . "` AS `tlc` ON `tl`.`id`=`tlc`.`link_id`";
+                $sWhereClause = " AND `tlc`.`content_id`=:content_id";
                 break;
 
             case 'unused':
@@ -449,8 +449,8 @@ class BxBaseModTextDb extends BxBaseModGeneralDb
                 else
                     $aMethod['params'][1] = $aBindings;
 
-                $sJoinClause = "LEFT JOIN `" . $CNF['TABLE_LINKS2CONTENT'] . "` AS `tle` ON `tl`.`id`=`tle`.`link_id`";
-                $sWhereClause = " AND `tl`.`profile_id`=:profile_id AND ISNULL(`tle`.`content_id`)";
+                $sJoinClause = "LEFT JOIN `" . $CNF['TABLE_LINKS2CONTENT'] . "` AS `tlc` ON `tl`.`id`=`tlc`.`link_id`";
+                $sWhereClause = " AND `tl`.`profile_id`=:profile_id AND ISNULL(`tlc`.`content_id`)";
                 $sOrderClause = "`tl`.`added` DESC";
                 break;
         }

+ 7 - 3
modules/base/text/classes/BxBaseModTextFormEntry.php

@@ -76,9 +76,6 @@ class BxBaseModTextFormEntry extends BxBaseModGeneralFormEntry
 
             $this->aInputs[$CNF['FIELD_VIDEO']]['ghost_template'] = $this->_oModule->_oTemplate->parseHtmlByName($this->_sGhostTemplateVideo, $this->_getVideoGhostTmplVars($aContentInfo));
         }
-
-        if(isset($CNF['FIELD_LINK']) && isset($this->aInputs[$CNF['FIELD_LINK']]))
-            $this->aInputs[$CNF['FIELD_LINK']]['content'] = $this->_oModule->_oTemplate->getAttachLinkField($iUserId, $iValueId);
         
         if (isset($CNF['FIELD_SOUND']) && isset($this->aInputs[$CNF['FIELD_SOUND']])) {
             if ($bValues)
@@ -100,6 +97,13 @@ class BxBaseModTextFormEntry extends BxBaseModGeneralFormEntry
         }
         
         parent::initChecker ($aValues, $aSpecificValues);
+
+        if(isset($CNF['FIELD_LINK']) && isset($this->aInputs[$CNF['FIELD_LINK']])) {
+            if(!$iValueId && !$this->isSubmitted())
+                $this->_oModule->deleteAttachLinksUnused($iUserId);
+
+            $this->aInputs[$CNF['FIELD_LINK']]['content'] = $this->_oModule->_oTemplate->getAttachLinkField($iUserId, $iValueId);
+        }
     }
 
     function update ($iContentId, $aValsToAdd = array(), &$aTrackTextFieldsChanges = null)

+ 4 - 1
modules/base/text/classes/BxBaseModTextFormsEntryHelper.php

@@ -117,9 +117,12 @@ class BxBaseModTextFormsEntryHelper extends BxBaseModGeneralFormsEntryHelper
         if(!empty($sResult))
             return $sResult;
 
-        $this->_oModule->_oDb->deletePolls(array('content_id' => $iContentId));
         BxDolCategories::getInstance()->delete($this->_oModule->getName(), $iContentId);
 
+        $this->_oModule->_oDb->deletePolls(['content_id' => $iContentId]);
+
+        $this->_oModule->deleteAttachLinks($iContentId);
+
         return '';
     }
 }

+ 34 - 2
modules/base/text/classes/BxBaseModTextModule.php

@@ -689,6 +689,38 @@ class BxBaseModTextModule extends BxBaseModGeneralModule implements iBxDolConten
         return $this->_addLink($oForm);
     }
     
+    public function deleteAttachLinks($iId)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $aLinks = $this->_oDb->getLinks($iId);
+        if(empty($aLinks) || !is_array($aLinks))
+            return;
+
+        $oStorage = BxDolStorage::getObjectInstance($CNF['OBJECT_STORAGE_PHOTOS']);
+        foreach($aLinks as $aLink)
+            if(!empty($aLink['media_id']))
+                $oStorage->deleteFile($aLink['media_id']);
+
+        $this->_oDb->deleteLinks($iId);
+    }
+
+    public function deleteAttachLinksUnused($iProfileId)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $aLinks = $this->_oDb->getUnusedLinks($iProfileId);
+        if(empty($aLinks) || !is_array($aLinks))
+            return;
+
+        $oStorage = BxDolStorage::getObjectInstance($CNF['OBJECT_STORAGE_PHOTOS']);
+        foreach($aLinks as $aLink)
+            if(!empty($aLink['media_id']))
+                $oStorage->deleteFile($aLink['media_id']);
+
+        $this->_oDb->deleteUnusedLinks($iProfileId);
+    }
+
     public function getFormAttachLink($iContentId = 0)
     {
         $CNF = &$this->_oConfig->CNF;
@@ -726,8 +758,8 @@ class BxBaseModTextModule extends BxBaseModGeneralModule implements iBxDolConten
             'OGImage' => array('name_attr' => 'property', 'name' => 'og:image'),
         ));
 
-        $sTitle = !empty($aSiteInfo['title']) ? $aSiteInfo['title'] : _t('_Empty');
-        $sDescription = !empty($aSiteInfo['description']) ? $aSiteInfo['description'] : _t('_Empty');
+        $sTitle = !empty($aSiteInfo['title']) ? $aSiteInfo['title'] : $sHost;
+        $sDescription = !empty($aSiteInfo['description']) ? $aSiteInfo['description'] : '';
 
         $sMediaUrl = '';
         if(!empty($aSiteInfo['thumbnailUrl']))