Преглед изворни кода

Ticket #4817 - Courses improvements.

AntonLV пре 2 година
родитељ
комит
9bf4ead0c5

+ 6 - 1
modules/base/files/classes/BxBaseModFilesFormsEntryHelper.php

@@ -128,7 +128,12 @@ class BxBaseModFilesFormsEntryHelper extends BxBaseModTextFormsEntryHelper
             }
         }
 
-        return 'page.php?i=' . $sUri . '&profile_id=' . (($oProfile = BxDolProfile::getInstance($iProfileId)) !== false ? $oProfile->id() : bx_get_logged_profile_id());
+        $sUrl = 'page.php?i=' . $sUri . '&profile_id=' . (($oProfile = BxDolProfile::getInstance($iProfileId)) !== false ? $oProfile->id() : bx_get_logged_profile_id());
+
+        if(($mixedUrl = $this->_getRedirectFromContext('add', $aContentInfo)) !== false)
+            $sUrl = $mixedUrl;
+
+        return $sUrl;
     }
 }
 

+ 26 - 2
modules/base/general/classes/BxBaseModGeneralFormsEntryHelper.php

@@ -321,14 +321,17 @@ class BxBaseModGeneralFormsEntryHelper extends BxDolProfileForms
         else
             $this->redirectAfterAdd($aContentInfo);
     }
-
+            
     public function redirectAfterAdd($aContentInfo, $sUrl = '')
     {
     	$CNF = &$this->_oModule->_oConfig->CNF;
 
         if ($sUrl == '')
             $sUrl = 'page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $aContentInfo[$CNF['FIELD_ID']];
-        
+
+        if(($mixedUrl = $this->_getRedirectFromContext('add', $aContentInfo)) !== false)
+              $sUrl = $mixedUrl;
+
         /**
          * @hooks
          * @hookdef hook-bx_base_general-redirect_after_add '{module_name}', 'redirect_after_add' - hook to override redirect URL which is used after content creation
@@ -756,6 +759,27 @@ class BxBaseModGeneralFormsEntryHelper extends BxDolProfileForms
 
         $oForm->setAbsoluteActionUrl(bx_absolute_url(BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF[$sKeyUri])));
     }
+
+    protected function _getRedirectFromContext($sAction, $aContentInfo)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $sKey = 'FIELD_ALLOW_VIEW_TO';
+        if(empty($CNF[$sKey]) || !isset($aContentInfo[$CNF[$sKey]]) || (int)$aContentInfo[$CNF[$sKey]] >= 0) 
+            return false;
+
+        $iContextPid = abs($aContentInfo[$CNF[$sKey]]);
+        $oContext = BxDolProfile::getInstance($iContextPid);
+        if(!$oContext)
+            return false;
+
+        $sModuleContext = $oContext->getModule();
+        $sMethodContext = 'on_content_' . $sAction . 'ed_redirect';
+        if(!bx_is_srv($sModuleContext, $sMethodContext))
+            return false;
+
+        return bx_srv($sModuleContext, $sMethodContext, [$this->_oModule->getName(), $aContentInfo[$CNF['FIELD_ID']]]);
+    }
 }
 
 /** @} */

+ 8 - 3
modules/base/general/classes/BxBaseModGeneralModule.php

@@ -1579,6 +1579,13 @@ class BxBaseModGeneralModule extends BxDolModule
      */
     public function serviceEntityCreate ($sParams = false)
     {
+        if($this->_bIsApi && ($aParams = bx_api_get_browse_params($sParams))) {
+            if($aKeys = ['context_pid', 'context_nid', 'context_usage'] && ($aParamsContext = array_intersect_key($aParams, array_flip($aKeys)))) {
+                $_GET = array_merge($_GET, $aParamsContext);
+                $sParams = array_diff_key($aParams, array_flip($aKeys));
+            }
+        }
+
         $bParamsArray = is_array($sParams);
 
         $sDisplay = is_string($sParams) ? $sParams : false;
@@ -1590,10 +1597,8 @@ class BxBaseModGeneralModule extends BxDolModule
             $oFormsHelper->setDynamicMode($sParams['dynamic_mode']);
 
         $mixedResult = $oFormsHelper->addDataForm($sDisplay);
-        
-        if (bx_is_api()){
+        if($this->_bIsApi)
             return $mixedResult;
-        }
         
         if(isset($mixedResult['_dt']) && $mixedResult['_dt'] == 'json') {
             echoJson($mixedResult);

+ 1 - 0
modules/boonex/courses/classes/BxCoursesConfig.php

@@ -75,6 +75,7 @@ class BxCoursesConfig extends BxBaseModGroupsConfig
             'URI_VIEW_ENTRY' => 'view-course-profile',
             'URI_VIEW_ENTRY_NODE' => 'view-course-profile-node',
             'URI_EDIT_ENTRY' => 'edit-course-profile',
+            'URI_EDIT_ENTRY_CONTENT' => 'edit-course-content',
             'URI_JOIN_ENTRY' => 'join-course-profile',
             'URI_JOINED_ENTRIES' => 'joined-courses',
             'URI_MANAGE_COMMON' => 'courses-manage',

+ 1 - 1
modules/boonex/courses/classes/BxCoursesMenuContentAdd.php

@@ -66,7 +66,7 @@ class BxCoursesMenuContentAdd extends BxTemplMenu
                 'class' => '', 
                 'link' => $sUrl, 
                 'onclick' => "$(this).parents('.bx-popup-applied:visible:first').dolPopupHide()",
-                'target' => '_blank', 
+                'target' => '_self', 
                 'title' => _t('_' . $sModule)
             ];
         }

+ 15 - 0
modules/boonex/courses/classes/BxCoursesModule.php

@@ -238,6 +238,21 @@ class BxCoursesModule extends BxBaseModGroupsModule
         $this->_oDb->updateContentNodes(['counters' => json_encode($aCounters)], ['id' => $iContextNodeId]);
     }
 
+    public function serviceOnContentAddedRedirect($sContentType, $iContentId)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $aData = $this->_oDb->getContentData(['sample' => 'content', 'content_type' => $sContentType, 'content_id' => $iContentId]);
+        if(empty($aData) || !is_array($aData))
+            return false;
+
+        $sUrl = BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_EDIT_ENTRY_CONTENT'] . '&id=' . $aData['entry_id'], [
+            'parent_id' => $aData['node_id']
+        ]);
+
+        return $this->_bIsApi ? bx_api_get_relative_url($sUrl) : $sUrl;
+    }
+
     public function serviceOnContentDeleted($sContentType, $iContentId, $iContextId)
     {
         $aData = $this->_oDb->getContentData(['sample' => 'content', 'content_type' => $sContentType, 'content_id' => $iContentId]);