ソースを参照

Merge branch 'master' of https://github.com/unaio/una

AntonLV 1 年間 前
親
コミット
f6b6a9027f

+ 24 - 0
inc/classes/BxDolConnection.php

@@ -589,6 +589,18 @@ class BxDolConnection extends BxDolFactory implements iBxDolFactoryObject
         return $this->_oQuery->getConnectedContentByType($iInitiator, $mixedType, $isMutual, $iStart, $iLimit, $iOrder);
     }
 
+    /**
+     * Get connected content IDs for specified type
+     * @param $iInitiator initiator of the connection
+     * @param $iDate get connections appeared since this date 
+     * @param $isMutual get mutual connections only
+     * @return array of available connections
+     */
+    public function getConnectedContentSince ($iInitiator, $iDate, $isMutual = false, $iStart = 0, $iLimit = BX_CONNECTIONS_LIST_LIMIT, $iOrder = BX_CONNECTIONS_ORDER_NONE)
+    {
+        return $this->_oQuery->getConnectedContentSince($iInitiator, $iDate, $isMutual, $iStart, $iLimit, $iOrder);
+    }
+
     /**
      * Get connected initiators IDs
      * @param $iContent content of the connection
@@ -612,6 +624,18 @@ class BxDolConnection extends BxDolFactory implements iBxDolFactoryObject
         return $this->_oQuery->getConnectedInitiatorsByType($iContent, $mixedType, $isMutual, $iStart, $iLimit, $iOrder);
     }
 
+    /**
+     * Get connected initiators IDs
+     * @param $iContent content of the connection
+     * @param $iDate get connections appeared since this date 
+     * @param $isMutual get mutual connections only
+     * @return array of available connections
+     */
+    public function getConnectedInitiatorsSince ($iContent, $iDate, $isMutual = false, $iStart = 0, $iLimit = BX_CONNECTIONS_LIST_LIMIT, $iOrder = BX_CONNECTIONS_ORDER_NONE)
+    {
+        return $this->_oQuery->getConnectedInitiatorsSince($iContent, $iDate, $isMutual, $iStart, $iLimit, $iOrder);
+    }
+
     /**
      * Similar to getConnectionsAsArray, but for getCommonContentAsSQLParts, getConnectedContentAsSQLParts or getConnectedInitiatorsAsSQLParts methods
      * @see getConnectionsAsArray

+ 28 - 0
inc/classes/BxDolConnectionQuery.php

@@ -193,6 +193,20 @@ class BxDolConnectionQuery extends BxDolDb
             'initiator' => $iInitiator,
         ));
     }
+    
+    public function getConnectedContentSince ($iInitiator, $iDate, $isMutual = false, $iStart = 0, $iLimit = BX_CONNECTIONS_LIST_LIMIT, $iOrder = BX_CONNECTIONS_ORDER_NONE)
+    {
+        $sWhere = " AND `c`.`initiator` = :initiator AND `c`.`added` >= :date";
+
+        $sJoin = $this->_aObject['profile_content'] ? 'INNER JOIN `sys_profiles` `p` ON `p`.`id` = `c`.`content` AND `p`.`status` = \'active\'' : '';
+
+        $sQuery = $this->_getConnectionsQuery($sWhere, $sJoin, '`c`.`content`', $isMutual, $iStart, $iLimit, $iOrder);
+
+        return $this->getColumn($sQuery, [
+            'initiator' => $iInitiator,
+            'date' => $iDate
+        ]);
+    }
 
     public function getConnectedInitiators ($iContent, $isMutual = false, $iStart = 0, $iLimit = BX_CONNECTIONS_LIST_LIMIT, $iOrder = BX_CONNECTIONS_ORDER_NONE)
     {
@@ -222,6 +236,20 @@ class BxDolConnectionQuery extends BxDolDb
         ));
     }
 
+    public function getConnectedInitiatorsSince ($iContent, $iDate, $isMutual = false, $iStart = 0, $iLimit = BX_CONNECTIONS_LIST_LIMIT, $iOrder = BX_CONNECTIONS_ORDER_NONE)
+    {
+        $sWhere = " AND `c`.`content` = :content AND `c`.`added` >= :date";
+
+        $sJoin = $this->_aObject['profile_initiator'] ? 'INNER JOIN `sys_profiles` `p` ON `p`.`id` = `c`.`initiator` AND `p`.`status` = \'active\'' : ''; 
+
+        $sQuery = $this->_getConnectionsQuery($sWhere, $sJoin, '`c`.`initiator`', $isMutual, $iStart, $iLimit, $iOrder);
+
+        return $this->getColumn($sQuery, [
+            'content' => $iContent,
+            'date' => $iDate
+        ]);
+    }
+
     protected function _getConnectionsQuery ($sWhere, $sJoin = '', $sFields = '*', $isMutual = false, $iStart = 0, $iLimit = BX_CONNECTIONS_LIST_LIMIT, $iOrder = BX_CONNECTIONS_ORDER_NONE)
     {
         $sOrder = $this->_getOrderClause($iOrder, '`c`');

+ 3 - 0
inc/classes/BxDolGridConnections.php

@@ -15,6 +15,7 @@ class BxDolGridConnections extends BxTemplGrid
     protected $_bOwner = false;
     protected $_sObjectConnections = 'sys_profiles_friends';
     protected $_oProfile;
+    protected $_sProfileTrackAction = 'view_friend_requests';
     protected $_oConnection;
 
     public function __construct ($aOptions, $oTemplate = false)
@@ -65,6 +66,8 @@ class BxDolGridConnections extends BxTemplGrid
         if(!$this->_bInit)
             return '';
 
+        BxDolProfileQuery::getInstance()->updateProfileTrack($this->_oProfile->id(), $this->_sProfileTrackAction);
+
         return parent::getCode($isDisplayHeader);        
     }
 

+ 17 - 0
inc/classes/BxDolProfileQuery.php

@@ -505,6 +505,23 @@ class BxDolProfileQuery extends BxDolDb implements iBxDolSingleton
 
         return $bResult;
     }
+    
+    public function updateProfileTrack($iProfileId, $sAction)
+    {
+        return $this->query("INSERT INTO `sys_profiles_track` SET `profile_id`=:profile_id, `action`=:action, `date`=:now ON DUPLICATE KEY UPDATE `date`=:now", [
+            'profile_id' => $iProfileId,
+            'action' => $sAction,
+            'now' => time()
+        ]);
+    }
+
+    public function getProfileTrack($iProfileId, $sAction)
+    {
+        return (int)$this->getOne("SELECT `date` FROM `sys_profiles_track` WHERE `profile_id`=:profile_id AND `action`=:action LIMIT 1", [
+            'profile_id' => $iProfileId,
+            'action' => $sAction
+        ]);
+    }
 }
 
 /** @} */

ファイルの差分が大きいため隠しています
+ 0 - 0
install/sql/system.sql


+ 1 - 1
modules/base/profile/classes/BxBaseModProfileUploaderCoverCrop.php

@@ -71,7 +71,7 @@ class BxBaseModProfileUploaderCoverCrop extends BxTemplUploaderHTML5
 
             // for cover image show only unassigned ghosts and currently set covers
             if ($aFile['file_id'] == $aContentInfo[$CNF['FIELD_COVER']] || $aFile['file_id'] != $aContentInfo[$CNF['FIELD_PICTURE']])
-                $aResult[] = $aFile;
+                $aResult[$aFile['file_id']] = $aFile;
 
         }
 

+ 1 - 1
modules/base/profile/classes/BxBaseModProfileUploaderPictureCrop.php

@@ -70,7 +70,7 @@ class BxBaseModProfileUploaderPictureCrop extends BxTemplUploaderCrop
 
             // for profile pictures show only unassigned ghosts and currently set profile pictures
             if (($aFile['file_id'] == $aContentInfo[$CNF['FIELD_PICTURE']] || $aFile['file_id'] != $aContentInfo[$CNF['FIELD_COVER']]))
-                $aResult[] = $aFile;            
+                $aResult[$aFile['file_id']] = $aFile;            
         }
 
         if ('array' == $sFormat) {

+ 1 - 1
modules/boonex/organizations/install/sql/disable.sql

@@ -43,7 +43,7 @@ DELETE FROM `sys_grid_fields` WHERE `object` LIKE 'bx_organizations%';
 DELETE FROM `sys_grid_actions` WHERE `object` LIKE 'bx_organizations%';
 
 -- LIVE UPDATES
-DELETE FROM `sys_objects_live_updates` WHERE `name` = 'bx_organizations_friend_requests';
+DELETE FROM `sys_objects_live_updates` WHERE `name` LIKE 'bx_organizations%';
 
 -- ALERTS
 SET @iHandler := (SELECT `id` FROM `sys_alerts_handlers` WHERE `name` = 'bx_organizations' LIMIT 1);

+ 2 - 1
modules/boonex/organizations/install/sql/enable.sql

@@ -700,7 +700,8 @@ INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon
 
 -- LIVE UPDATES
 INSERT INTO `sys_objects_live_updates`(`name`, `frequency`, `service_call`, `active`) VALUES
-('bx_organizations_friend_requests', 1, 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:40:"get_live_updates_unconfirmed_connections";s:6:"params";a:5:{i:0;s:16:"bx_organizations";i:1;s:20:"sys_profiles_friends";i:2;a:2:{s:11:"menu_object";s:18:"sys_toolbar_member";s:9:"menu_item";s:7:"account";}i:3;a:2:{s:11:"menu_object";s:25:"sys_account_notifications";s:9:"menu_item";s:29:"notifications-friend-requests";}i:4;s:7:"{count}";}s:5:"class";s:23:"TemplServiceConnections";}', 1);
+('bx_organizations_friend_requests', 1, 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:40:"get_live_updates_unconfirmed_connections";s:6:"params";a:5:{i:0;s:16:"bx_organizations";i:1;s:20:"sys_profiles_friends";i:2;a:2:{s:11:"menu_object";s:18:"sys_toolbar_member";s:9:"menu_item";s:7:"account";}i:3;a:2:{s:11:"menu_object";s:25:"sys_account_notifications";s:9:"menu_item";s:29:"notifications-friend-requests";}i:4;s:7:"{count}";}s:5:"class";s:23:"TemplServiceConnections";}', 1),
+('bx_organizations_friend_requests_new', 1, 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:44:"get_live_updates_unconfirmed_connections_new";s:6:"params";a:5:{i:0;s:16:"bx_organizations";i:1;s:20:"sys_profiles_friends";i:2;a:0:{}i:3;a:0:{}i:4;s:7:"{count}";}s:5:"class";s:23:"TemplServiceConnections";}', 1);
 
 
 -- ALERTS

+ 1 - 1
modules/boonex/persons/install/sql/disable.sql

@@ -40,7 +40,7 @@ DELETE FROM `sys_grid_fields` WHERE `object` IN ('bx_persons_administration', 'b
 DELETE FROM `sys_grid_actions` WHERE `object` IN ('bx_persons_administration', 'bx_persons_common');
 
 -- LIVE UPDATES
-DELETE FROM `sys_objects_live_updates` WHERE `name` = 'bx_persons_friend_requests';
+DELETE FROM `sys_objects_live_updates` WHERE `name` LIKE 'bx_persons%';
 
 -- ALERTS
 SET @iHandler := (SELECT `id` FROM `sys_alerts_handlers` WHERE `name` = 'bx_persons' LIMIT 1);

+ 2 - 1
modules/boonex/persons/install/sql/enable.sql

@@ -520,7 +520,8 @@ INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon
 
 -- LIVE UPDATES
 INSERT INTO `sys_objects_live_updates`(`name`, `frequency`, `service_call`, `active`) VALUES
-('bx_persons_friend_requests', 1, 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:40:"get_live_updates_unconfirmed_connections";s:6:"params";a:5:{i:0;s:10:"bx_persons";i:1;s:20:"sys_profiles_friends";i:2;a:2:{s:11:"menu_object";s:18:"sys_toolbar_member";s:9:"menu_item";s:7:"account";}i:3;a:2:{s:11:"menu_object";s:25:"sys_account_notifications";s:9:"menu_item";s:29:"notifications-friend-requests";}i:4;s:7:"{count}";}s:5:"class";s:23:"TemplServiceConnections";}', 1);
+('bx_persons_friend_requests', 1, 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:40:"get_live_updates_unconfirmed_connections";s:6:"params";a:5:{i:0;s:10:"bx_persons";i:1;s:20:"sys_profiles_friends";i:2;a:2:{s:11:"menu_object";s:18:"sys_toolbar_member";s:9:"menu_item";s:7:"account";}i:3;a:2:{s:11:"menu_object";s:25:"sys_account_notifications";s:9:"menu_item";s:29:"notifications-friend-requests";}i:4;s:7:"{count}";}s:5:"class";s:23:"TemplServiceConnections";}', 1),
+('bx_persons_friend_requests_new', 1, 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:44:"get_live_updates_unconfirmed_connections_new";s:6:"params";a:5:{i:0;s:10:"bx_persons";i:1;s:20:"sys_profiles_friends";i:2;a:0:{}i:3;a:0:{}i:4;s:7:"{count}";}s:5:"class";s:23:"TemplServiceConnections";}', 1);
 
 -- ALERTS
 INSERT INTO `sys_alerts_handlers` (`name`, `class`, `file`, `service_call`) VALUES 

+ 5 - 0
template/css/editor.quill.css

@@ -49,3 +49,8 @@
 .dark .ql-picker-options .ql-picker-item{
     color: rgb(209, 213, 219);
 }
+
+.bx-dir-rtl .ql-editor {
+    direction: rtl;
+    text-align: right;
+}

+ 4 - 5
template/scripts/BxBaseCmtsServices.php

@@ -586,12 +586,11 @@ class BxBaseCmtsServices extends BxDol
             $aForm = $oForm['form']->getCodeAPI();
             $aForm['inputs']['cmt_text']['numLines'] = 1;
             $aForm['inputs']['cmt_text']['autoheight'] = true;
-            $aForm['inputs']['cmt_submit'] = $aForm['inputs']['cmt_controls'][0];
-            unset($aForm['inputs']['cmt_controls']);
+            if (isset($aForm['inputs']['cmt_controls'])){
+                $aForm['inputs']['cmt_submit'] = $aForm['inputs']['cmt_controls'][0];
+                unset($aForm['inputs']['cmt_controls']);
+            }
             
-            $aForm['inputs']['cmt_submit']['icon'] = 'contact';
-            $aForm['inputs']['cmt_submit']['variant'] = 'text';
-            $aForm['inputs']['cmt_submit']['icon_only'] = true;
             $aRv['form'] = ['id' => 'cmt_form', 'type' => 'form', 'name' => 'comment', 'data' => $aForm, 'request' => ['immutable' => true]];
             return $aRv;
         }

+ 15 - 0
template/scripts/BxBaseFormView.php

@@ -390,10 +390,25 @@ class BxBaseFormView extends BxDolForm
                     $oStorage = BxDolStorage::getObjectInstance($aInput['storage_object']);
                     $aInput['ext_allow'] = $oStorage->getObjectData()['ext_allow'];
                     $aInput['ext_deny'] = $oStorage->getObjectData()['ext_deny'];
+                    
                     $aInput['ghost_template'] = '';
                     $aInput['value'] = '';
                     $aInput['values'] = '';
                     $aInput['values_src'] = '';
+                    if (!empty($aInput['content_id'])){
+                        $oUploader = BxDolUploader::getObjectInstance($aInput['uploaders'][0], $aInput['storage_object'], genRndPwd(8));
+                        $oData = $oUploader->getGhostsWithOrder((int)bx_get_logged_profile_id(), 'json', $aInput['images_transcoder'], $aInput['content_id']);
+                        if ($oData){
+                            $aData = json_decode($oData, true);
+                            $aInput['values_src'] = array_values($aData['g']);
+                            $aGhostIds = [];
+                            foreach ($aData['g'] as &$aGhost) {
+                                $aGhostIds[] = $aGhost['file_id'];
+                            }
+                            $aInput['value'] = implode(',', $aGhostIds);
+                        }
+                      
+                    }
                 }
                 
                 if (isset($aInput['type']) && 'custom' == $aInput['type']){

+ 43 - 11
template/scripts/BxBaseServiceConnections.php

@@ -143,9 +143,10 @@ class BxBaseServiceConnections extends BxDol
      * get number of received unconfirmed connections (friend requests)
      * @param $sConnectionsObject connections object to get unconfirmed connections from
      * @param $mixedId id to get connections for, if omitted then logged-in profile id is used
+     * @param $bNew return all or only new (appeared since last check) unconfirmed connections
      * @return number
      */
-    public function serviceGetUnconfirmedConnectionsNum ($sConnectionsObject, $mixedId = 0)
+    public function serviceGetUnconfirmedConnectionsNum ($sConnectionsObject, $mixedId = 0, $bNew = false)
     {
         $oConnection = BxDolConnection::getObjectInstance($sConnectionsObject);
         if (!$oConnection)
@@ -154,10 +155,17 @@ class BxBaseServiceConnections extends BxDol
         if (!$mixedId)
             $mixedId = bx_get_logged_profile_id();
 
+        $sMethodName = 'getConnectedInitiators';
+        $aMethodParams = [$mixedId, 0];
+        if($bNew) {
+            $sMethodName .= 'Since';
+            $aMethodParams = [$mixedId, BxDolProfileQuery::getInstance()->getProfileTrack($mixedId, 'view_friend_requests'), 0];
+        }
+
         $i = 0;
-        $a = $oConnection->getConnectedInitiators($mixedId, 0); // get received friend requests
-        foreach ($a as $iId)
-            if (BxDolProfile::getInstance($iId))
+        $a = call_user_func_array([$oConnection, $sMethodName], $aMethodParams); // get received friend requests
+        foreach($a as $iId)
+            if(BxDolProfile::getInstance($iId))
                 ++$i;
 
         return $i;
@@ -172,20 +180,44 @@ class BxBaseServiceConnections extends BxDol
 
         $iCountNew = (int)$this->serviceGetUnconfirmedConnectionsNum($sConnectionsObject, $iProfile);
         if($iCountNew == (int)$iCount)
-			return false;
+            return false;
 
         return array(
-    		'count' => $iCountNew, // required
-    		'method' => 'bx_menu_show_live_update(oData)', // required
-    		'data' => array(
-    			'code' => BxDolTemplate::getInstance()->parseHtmlByTemplateName('menu_item_addon', array(
-    				'content' => '{count}'
+            'count' => $iCountNew, // required
+            'method' => 'bx_menu_show_live_update(oData)', // required
+            'data' => array(
+                'code' => BxDolTemplate::getInstance()->parseHtmlByTemplateName('menu_item_addon', array(
+                    'content' => '{count}'
                 )),
                 'mi_parent' => $aMenuItemParent,
                 'mi_child' => $aMenuItemChild
-    		),  // optional, may have some additional data to be passed in JS method provided using 'method' param above.
+            ),  // optional, may have some additional data to be passed in JS method provided using 'method' param above.
     	);
     }
+    
+    public function serviceGetLiveUpdatesUnconfirmedConnectionsNew($sModule, $sConnectionsObject, $aMenuItemParent, $aMenuItemChild, $iCount = 0)
+    {
+        $iProfile = bx_get_logged_profile_id();
+        $oProfile = BxDolProfile::getInstance($iProfile);
+        if(!$oProfile || $oProfile->getModule() != $sModule)
+            return false;
+
+        $iCountNew = (int)$this->serviceGetUnconfirmedConnectionsNum($sConnectionsObject, $iProfile, true);
+        if($iCountNew == (int)$iCount)
+            return false;
+
+        return [
+            'count' => $iCountNew, // required
+            'method' => 'bx_menu_show_live_update(oData)', // required
+            'data' => [
+                'code' => BxDolTemplate::getInstance()->parseHtmlByTemplateName('menu_item_addon', [
+                    'content' => '{count}'
+                ]),
+                'mi_parent' => $aMenuItemParent,
+                'mi_child' => $aMenuItemChild
+            ],  // optional, may have some additional data to be passed in JS method provided using 'method' param above.
+    	];
+    }
 
     /**
      * get number of initiated connections (like "my subscriptions")

+ 2 - 0
template/scripts/BxBaseServiceProfiles.php

@@ -744,6 +744,8 @@ class BxBaseServiceProfiles extends BxDol
         if(!empty($aParams['params']) && is_array($aParams['params']))
             $aParamsBrowse = array_merge($aParamsBrowse, $aParams['params']);
 
+        BxDolProfileQuery::getInstance()->updateProfileTrack($iProfileId, 'view_friend_requests');
+
         return $this->_serviceBrowseConnections('friend_requests', $aParamsBrowse, $aParams['design_box'], $aParams['empty_message'], $aParams['ajax_paginate']);
     }
 

+ 9 - 4
template/scripts/BxBaseUploaderCrop.php

@@ -82,10 +82,15 @@ class BxBaseUploaderCrop extends BxDolUploader
 
     public function handleUploads ($iProfileId, $mixedFiles, $isMultiple = true, $iContentId = false, $bPrivate = true)
     {
-        ob_start();
-        parent::handleUploads ($iProfileId, $mixedFiles, $isMultiple, $iContentId, $bPrivate);
-        $s = ob_get_clean();
-        echo strip_tags(str_replace('window.parent.', 'window.', $s));
+        if (bx_is_api()){
+             return parent::handleUploads ($iProfileId, $mixedFiles, $isMultiple, $iContentId, $bPrivate);;
+         }
+         else{
+            ob_start();
+            parent::handleUploads ($iProfileId, $mixedFiles, $isMultiple, $iContentId, $bPrivate);
+            $s = ob_get_clean();
+            echo strip_tags(str_replace('window.parent.', 'window.', $s));
+        }
     }
 
 }

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません