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

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

roman.lesnikov@gmail.com 4 лет назад
Родитель
Сommit
a47c127f28
23 измененных файлов с 173 добавлено и 59 удалено
  1. 19 2
      inc/utils.inc.php
  2. 1 0
      install/sql/system.sql
  3. 1 1
      modules/base/groups/template/unit.html
  4. 1 1
      modules/base/profile/template/unit.html
  5. 1 1
      modules/base/profile/template/unit_with_cover.html
  6. 1 1
      modules/boonex/artificer/data/template/bx_notifications/event.html
  7. 1 1
      modules/boonex/artificer/data/template/bx_timeline/item_timeline.html
  8. 1 1
      modules/boonex/artificer/data/template/bx_timeline/menu_custom_item_bx_timeline_menu_view.html
  9. 1 1
      modules/boonex/artificer/data/template/mod_groups/cover.html
  10. 1 1
      modules/boonex/artificer/data/template/mod_profile/cover.html
  11. 3 1
      modules/boonex/artificer/data/template/system/css/general.css
  12. 6 2
      modules/boonex/artificer/data/template/system/css/menu.css
  13. 1 1
      modules/boonex/artificer/data/template/system/menu_custom_item_sys_create_post.html
  14. 1 1
      modules/boonex/artificer/data/template/system/menu_sidebar_site.html
  15. 1 1
      modules/boonex/artificer/data/template/system/sidebar_account.html
  16. 1 0
      modules/boonex/english/data/langs/system/en.xml
  17. 80 25
      modules/boonex/notifications/classes/BxNtfsDb.php
  18. 1 0
      modules/boonex/russian/data/langs/system/ru.xml
  19. 10 0
      modules/boonex/stream/classes/BxStrmModule.php
  20. 36 13
      plugins_public/tailwind/css/tailwind.css
  21. 0 0
      plugins_public/tailwind/css/tailwind.min.css
  22. 1 1
      plugins_public/tailwind/js/tailwind.config.js
  23. 4 4
      template/menu_apps.html

+ 19 - 2
inc/utils.inc.php

@@ -2153,8 +2153,25 @@ function bx_setcookie($sName, $sValue = "", $oExpiresOrOptions = 0, $sPath = 'au
 
     if ('auto' === $bSecure)
         $bSecure = 0 === strcasecmp('https', $aUrl['scheme']);
-    
-    return setcookie($sName, $sValue, $oExpiresOrOptions, $sPath, $sDomain, $bSecure, $bHttpOnly);
+
+    if (PHP_VERSION_ID < 70300) {
+        if ('memberPassword' == $sName || 'memberSession' == $sName)
+            $sPath .= '; SameSite=' . getParam('sys_samesite_cookies');
+        return setcookie($sName, $sValue, $oExpiresOrOptions, $sPath, $sDomain, $bSecure, $bHttpOnly);
+    } 
+    else {
+        $aOptions = is_array($oExpiresOrOptions) ? $oExpiresOrOptions : [
+            'expires' => $oExpiresOrOptions, 
+            'path' => $sPath, 
+            'domain' => $sDomain, 
+            'secure' => $bSecure, 
+            'httponly' => $bHttpOnly,
+        ];
+        if (!isset($aOptions['samesite']) && ('memberPassword' == $sName || 'memberSession' == $sName))
+            $aOptions['samesite'] = getParam('sys_samesite_cookies');
+
+        return setcookie($sName, $sValue, $aOptions);
+    }
 }
 
 function is_private_ip ($sIp)

+ 1 - 0
install/sql/system.sql

@@ -345,6 +345,7 @@ INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `ex
 (@iCategoryId, 'sys_curl_ssl_allow_untrusted', '_adm_stg_cpt_option_sys_ssl_allow_untrusted', '', 'checkbox', '', '', '', '', 145),
 
 (@iCategoryId, 'sys_csp_frame_ancestors', '_adm_stg_cpt_option_sys_csp_frame_ancestors', '*', 'digit', '', '', '', '', 150),
+(@iCategoryId, 'sys_samesite_cookies', '_adm_stg_cpt_option_sys_samesite_cookies', 'Lax', 'select', 'None,Lax,Strict', '', '', '', 150),
 
 (@iCategoryId, 'sys_notify_to_approve_by_role', '_adm_stg_cpt_option_sys_notify_to_approve_by_role', '', 'checkbox', '', '', '', '', 160),
 

+ 1 - 1
modules/base/groups/template/unit.html

@@ -1,7 +1,7 @@
 <div class="__class__ p-2 box-border">
     <div class="bx-base-pofile-unit-cnt bx-def-box bx-def-box-round-corners bx-def-color-bg-box relative h-full overflow-hidden">
         <div class="absolute z-0 w-full h-40 bg-gradient-to-b from-green-400 to-green-500"></div>
-        <a class="bx-base-pofile-unit-cover relative flex items-center justify-start w-full h-40 bg-no-repeat bg-center bg-cover" style="background-image:url(__cover_url__);" href="__content_url__" onclick="__content_click__">
+        <a class="bx-base-pofile-unit-cover relative flex items-center justify-start w-full h-40 bg-no-repeat bg-center bg-cover hover:no-underline" style="background-image:url(__cover_url__);" href="__content_url__" onclick="__content_click__">
             <bx_if:show_thumbnail>
                 <div class="bx-def-unit-img bx-def-__size__-size __class_size__ relative ml-5">
                     <bx_if:show_thumb_image>

+ 1 - 1
modules/base/profile/template/unit.html

@@ -1,6 +1,6 @@
 <div class="__class__ bx-def-unit flex items-center w-46 mb-4 mr-2">
     <div class="bx-def-unit-img bx-def-__size__ bx-def-__size__-size __class_size__ relative flex-none">
-        <a class="text-center" href="__content_url__" onclick="__content_click__">
+        <a class="text-center hover:no-underline" href="__content_url__" onclick="__content_click__">
             <bx_if:show_thumb_image>
                 <img class="bx-base-pofile-unit-thumb bx-def-__size__ bx-def-__size__-size __class_size__ rounded-full box-border" src="__thumb_url__" />
             </bx_if:show_thumb_image>

+ 1 - 1
modules/base/profile/template/unit_with_cover.html

@@ -1,7 +1,7 @@
 <div class="__class__ p-2 box-border">
     <div class="bx-base-pofile-unit-cnt bx-def-box bx-def-box-round-corners bx-def-color-bg-box relative h-full overflow-hidden">
         <div class="absolute z-0 w-full h-40 bg-gradient-to-b from-blue-400 to-blue-500"></div>
-        <a class="bx-base-pofile-unit-cover relative flex items-center justify-center w-full h-40 bg-no-repeat bg-center bg-cover" style="background-image:url(__cover_url__);" href="__content_url__" onclick="__content_click__">
+        <a class="bx-base-pofile-unit-cover relative flex items-center justify-center w-full h-40 bg-no-repeat bg-center bg-cover hover:no-underline" style="background-image:url(__cover_url__);" href="__content_url__" onclick="__content_click__">
             <bx_if:show_thumbnail>
                 <div class="bx-def-unit-img bx-def-__size__-size __class_size__ relative">
                     <bx_if:show_thumb_image>

+ 1 - 1
modules/boonex/artificer/data/template/bx_notifications/event.html

@@ -1,5 +1,5 @@
 <div id="__html_id__" class="__style_prefix__-event bx-def-box bx-def-box-round-corners bx-def-color-bg-box bx-def-color-bg-box-hover relative mb-2 __class__">
-    <a class="__style_prefix__-event-link" href="__link__">
+    <a class="__style_prefix__-event-link hover:no-underline" href="__link__">
         <div class="__style_prefix__-event-gap p-4">
             <div class="__style_prefix__-event-cnt flex items-center">
                 <div class="__style_prefix__-owner-avatar bx-def-thumb-size">__author_unit__</div>

+ 1 - 1
modules/boonex/artificer/data/template/bx_timeline/item_timeline.html

@@ -80,7 +80,7 @@
             </bx_if:show_menu_item_actions>
             <bx_if:show_manage>
                 <div class="__style_prefix__-item-manage">
-                    <a class="group flex items-center p-1 px-2 border border-transparent rounded-md space-x-1 text-gray-500 hover:text-gray-700 dark:text-gray-500 dark:hover:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700" href="javascript:void(0)" onclick="__onclick__">
+                    <a class="group bx-stl-mil" href="javascript:void(0)" onclick="__onclick__">
                         <span class="bx-menu-item-icon bx-def-align-center leading-5"><i class="sys-icon ellipsis-h"></i></span>
                     </a>
                 </div>

+ 1 - 1
modules/boonex/artificer/data/template/bx_timeline/menu_custom_item_bx_timeline_menu_view.html

@@ -3,7 +3,7 @@
         <bx_if:icon><div class="bx-menu-item-icon bx-stl-mii-sm mr-0 group-hover:text-gray-700 dark:group-hover:text-gray-300"><i class="sys-icon __icon__"></i></div></bx_if:icon>
         <bx_if:image><div class="bx-menu-item-icon bx-stl-mii-sm mr-0"><img style="background-image:url(__icon_url__)" src="<bx_icon_url:spacer.gif />" /></div></bx_if:image>
         <bx_if:icon-html><div class="bx-menu-item-icon bx-stl-mii-sm mr-0 group-hover:text-gray-700 dark:group-hover:text-gray-300">__icon__</div></bx_if:icon-html>
-        <bx_if:title><div class="bx-menu-item-title bx-stl-mit ml-1 first:ml-0">__title__</div></bx_if:title>
+        <bx_if:title><div class="bx-menu-item-title bx-stl-mit">__title__</div></bx_if:title>
     </a>
     <bx_if:addon>__addon__</bx_if:addon>
 </div>

+ 1 - 1
modules/boonex/artificer/data/template/mod_groups/cover.html

@@ -18,7 +18,7 @@
                 <div class="bx-base-pofile-ci-cnt relative flex flex-col -mt-24 lg:-mt-16 lg:flex-row lg:items-center">
                     <bx_if:show_avatar>
                         <div class="bx-base-pofile-cover-thumb relative lg:absolute flex justify-center lg:flex-none z-10 __add_class__">
-                            <a class="bx-base-pofile-cover-thumb" href="__picture_href__" onclick="$('#__picture_popup_id__').dolPopupImage('__picture_url__', $(this).parent()); event.stopPropagation();">
+                            <a class="bx-base-pofile-cover-thumb hover:no-underline" href="__picture_href__" onclick="$('#__picture_popup_id__').dolPopupImage('__picture_url__', $(this).parent()); event.stopPropagation();">
                                 <img class="bx-base-pofile-unit-thumb bx-def-ava-big bx-def-ava-big-size rounded-full ring-4 mx-auto ring-white dark:ring-gray-900 h-48 w-48 __img_class__" src="__ava_url__"  <bx_if:show_ava_letter> style="display:none" </bx_if:show_ava_letter> />
                                 <p class="bx-base-pofile-unit-thumb bx-def-ava-big bx-def-ava-big-size flex items-center justify-center box-border m-0 rounded-full ring-4 mx-auto ring-white dark:ring-gray-900 h-48 w-48 text-white font-bold text-5xl __img_class__-placeholder" style="background-color:rgba(__color__);<bx_if:show_ava_image>display:none</bx_if:show_ava_image>" >__letter__</p>
                             </a>

+ 1 - 1
modules/boonex/artificer/data/template/mod_profile/cover.html

@@ -18,7 +18,7 @@
                 <div class="bx-base-pofile-ci-cnt relative flex flex-col -mt-24 lg:-mt-16 lg:flex-row lg:items-center">
                     <bx_if:show_avatar>
                         <div class="bx-base-pofile-cover-thumb bx-def-ava-big-size relative lg:absolute flex self-center lg:flex-none z-10 __add_class__">
-                            <a class="bx-base-pofile-cover-thumb" href="__picture_href__" onclick="$('#__picture_popup_id__').dolPopupImage('__picture_url__', $(this).parent()); event.stopPropagation();">
+                            <a class="bx-base-pofile-cover-thumb hover:no-underline" href="__picture_href__" onclick="$('#__picture_popup_id__').dolPopupImage('__picture_url__', $(this).parent()); event.stopPropagation();">
                                 <img class="bx-base-pofile-unit-thumb bx-def-ava-big bx-def-ava-big-size rounded-full ring-4 mx-auto ring-white dark:ring-gray-900 h-48 w-48 __img_class__" src="__ava_url__"  <bx_if:show_ava_letter> style="display:none" </bx_if:show_ava_letter> />
                                 <p class="bx-base-pofile-unit-thumb bx-def-ava-big bx-def-ava-big-size flex items-center justify-center box-border m-0 rounded-full ring-4 mx-auto ring-white dark:ring-gray-900 h-48 w-48 text-white font-bold text-5xl __img_class__-placeholder" style="background-color:rgba(__color__);<bx_if:show_ava_image>display:none</bx_if:show_ava_image>" >__letter__</p>
                             </a>

+ 3 - 1
modules/boonex/artificer/data/template/system/css/general.css

@@ -20,7 +20,9 @@ import url(../../../../../../../template/css/general.css);
     -ms-transform: translateY(-100%);
     transform: translateY(-100%)
 }
-
+.bx-toolbar-item.bx-ti-logo a:hover {
+    text-decoration: none;
+}
 .bx-toolbar-item.bx-ti-search .bx-tis-button-hidden {
     display: none;
 }

+ 6 - 2
modules/boonex/artificer/data/template/system/css/menu.css

@@ -141,13 +141,17 @@ div.bx-popup-menu-main.sys-add-content ul {
     -webkit-justify-content: center;
     justify-content: center;
 
-    padding: 0;
+    padding-left: 0;
+    padding-right: 0;
 }
 .bx-mc-narrowed .bx-menu-panel li .bx-stl-mii {
     width: 100%;
-    margin: 0;
     text-align: center;
 }
+.bx-mc-narrowed .bx-menu-panel li .bx-stl-mii,
+.bx-mc-narrowed .bx-menu-panel li .bx-stl-mii > * {
+    margin: 0;
+}
 .bx-mc-narrowed .bx-menu-panel .bx-def-thumb-size {
     width: 2rem;
     height: 2rem;

+ 1 - 1
modules/boonex/artificer/data/template/system/menu_custom_item_sys_create_post.html

@@ -3,7 +3,7 @@
         <bx_if:icon><span class="bx-mi-icon bx-stl-mii-sm mr-0  group-hover:text-gray-700 dark:group-hover:text-gray-300"><i class="sys-icon __icon__"></i></span></bx_if:icon>
         <bx_if:image><span class="bx-mi-icon bx-stl-mii-sm mr-0 "><img style="background-image:url(__icon_url__)" src="<bx_icon_url:spacer.gif />" /></span></bx_if:image>
         <bx_if:icon-html><span class="bx-mi-icon bx-stl-mii-sm mr-0 group-hover:text-gray-700 dark:group-hover:text-gray-300">__icon__</span></bx_if:icon-html>
-        <bx_if:title><span class="bx-mi-title bx-stl-mit ml-1 first:ml-0">__title__</span></bx_if:title>
+        <bx_if:title><span class="bx-mi-title bx-stl-mit">__title__</span></bx_if:title>
     </a>
     <bx_if:addon>__addon__</bx_if:addon>
 </div>

+ 1 - 1
modules/boonex/artificer/data/template/system/menu_sidebar_site.html

@@ -12,7 +12,7 @@
         <bx_if:show_submenu>
             <ul class="bx-sidebar-dropdown-content space-y-1 hidden">
                 <bx_repeat:submenu_items>
-                    <li class="bx-stl-mil-hover group flex items-center w-full pl-11 pr-2 py-2 text-gray-600 dark:text-gray-300 text-sm font-medium rounded-md">
+                    <li class="bx-stl-mil-hover group flex items-center w-full pl-12 pr-2 py-2 text-gray-600 dark:text-gray-300 text-sm font-medium rounded-md">
                         <a href="__link__" onclick="__onclick__"__attrs__>__title__</a>
                     </li>
                 </bx_repeat:submenu_items>

+ 1 - 1
modules/boonex/artificer/data/template/system/sidebar_account.html

@@ -12,7 +12,7 @@
         </div>
         <div class="bx-sb-profile flex-shrink-0 px-4 pb-4 flex justify-between items-center">__active_profile__
             <div class="bx-sb-theme-switcher">
-                <a href="javascript:" onclick="bx_artificer_set_color_scheme()"><i class="sys-icon"></i></a>
+                <a class="hover:no-underline" href="javascript:" onclick="bx_artificer_set_color_scheme()"><i class="sys-icon"></i></a>
             </div>
         </div>
         <hr class="bx-def-hr" />

+ 1 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -1651,6 +1651,7 @@
 	<string name="_adm_stg_cpt_option_sys_default_curl_timeout"><![CDATA[cURL - default timeout]]></string>
     <string name="_adm_stg_cpt_option_sys_ssl_allow_untrusted"><![CDATA[cURL - trust unsigned certificates or not verified hosts]]></string>
     <string name="_adm_stg_cpt_option_sys_csp_frame_ancestors"><![CDATA['Content-Security-Policy: frame-ancestors' header value]]></string>
+    <string name="_adm_stg_cpt_option_sys_samesite_cookies"><![CDATA[SameSite value for sensitive cookies]]></string>
     <string name="_adm_stg_cpt_option_sys_notify_to_approve_by_role"><![CDATA[Notify context member with necessary role to approve content in the context]]></string>
 	<string name="_adm_stg_cpt_option_sys_fixed_header"><![CDATA[Fixed header]]></string>
     <string name="_adm_stg_cpt_option_template"><![CDATA[Default Template]]></string>

+ 80 - 25
modules/boonex/notifications/classes/BxNtfsDb.php

@@ -60,6 +60,10 @@ class BxNtfsDb extends BxBaseModNotificationsDb
 
     public function getEvents($aParams, $bReturnCount = false)
     {
+        bx_alert($this->_oConfig->getName(), 'get_events_before', 0, 0, [
+            'params' => &$aParams,
+        ]);
+
         if($aParams['browse'] != 'list' || $aParams['type'] != BX_NTFS_TYPE_OBJECT_OWNER_AND_CONNECTIONS)
             return parent::getEvents($aParams);
 
@@ -69,21 +73,21 @@ class BxNtfsDb extends BxBaseModNotificationsDb
         $sLimitClause = isset($aParams['per_page']) ? "LIMIT 0, " . ($aParams['start'] + $aParams['per_page']) : "";
 
         $aParams['type'] = BX_BASE_MOD_NTFS_TYPE_OBJECT_OWNER;
-        list($sMethod, $sSelectClause, $sJoinClause, $sWhereClause, $sOrderClause) = $this->_getSqlPartsEvents($aParams);
+        list($sMethod, $sSelectClause, $sJoinClausePo, $sWhereClausePo, $sOrderClausePo) = $this->_getSqlPartsEvents($aParams);
 
         $sQueryOwner = "SELECT {select}
             FROM `{$this->_sTable}`
-            LEFT JOIN `{$this->_sTableHandlers}` ON `{$this->_sTable}`.`type`=`{$this->_sTableHandlers}`.`alert_unit` AND `{$this->_sTable}`.`action`=`{$this->_sTableHandlers}`.`alert_action` " . $sJoinClause . "
-            WHERE 1 " . $sWhereClause . (!$bCountOnly ? " " . $sOrderClause . " " . $sLimitClause : "");
+            LEFT JOIN `{$this->_sTableHandlers}` ON `{$this->_sTable}`.`type`=`{$this->_sTableHandlers}`.`alert_unit` AND `{$this->_sTable}`.`action`=`{$this->_sTableHandlers}`.`alert_action` " . $sJoinClausePo . "
+            WHERE 1 " . $sWhereClausePo . (!$bCountOnly ? " " . $sOrderClausePo . " " . $sLimitClause : "");
 
         //--- Get query for 'Connections based' notifications
         $aParams['type'] = BX_BASE_MOD_NTFS_TYPE_CONNECTIONS;
-        list($sMethod, $sSelectClause, $sJoinClause, $sWhereClause, $sOrderClause) = $this->_getSqlPartsEvents($aParams);
+        list($sMethod, $sSelectClause, $sJoinClausePc, $sWhereClausePc, $sOrderClausePc) = $this->_getSqlPartsEvents($aParams);
 
         $sQueryConnections = "SELECT {select}
             FROM `{$this->_sTable}`
-            LEFT JOIN `{$this->_sTableHandlers}` ON `{$this->_sTable}`.`type`=`{$this->_sTableHandlers}`.`alert_unit` AND `{$this->_sTable}`.`action`=`{$this->_sTableHandlers}`.`alert_action` " . $sJoinClause . "
-            WHERE 1 " . $sWhereClause . (!$bCountOnly ? " " . $sOrderClause . " " . $sLimitClause : "");
+            LEFT JOIN `{$this->_sTableHandlers}` ON `{$this->_sTable}`.`type`=`{$this->_sTableHandlers}`.`alert_unit` AND `{$this->_sTable}`.`action`=`{$this->_sTableHandlers}`.`alert_action` " . $sJoinClausePc . "
+            WHERE 1 " . $sWhereClausePc . (!$bCountOnly ? " " . $sOrderClausePc . " " . $sLimitClause : "");
 
         //--- Combine both queries in one
         $sUnionMethod = 'getColumn';
@@ -93,9 +97,35 @@ class BxNtfsDb extends BxBaseModNotificationsDb
             $sUnionOrderClause = "ORDER BY `date` DESC, `id` DESC";
             $sUnionLimitClause = isset($aParams['per_page']) ? "LIMIT " . $aParams['start'] . ", " . $aParams['per_page'] : "";
         }
-        
+
+        $aAlertParams = $aParams;
+        unset($aAlertParams['browse']);
+
+        /**
+         * Parts: 
+         * PO - notifications related to Owner's content
+         * PC - notifications related to Connections' content
+         */
+        bx_alert($this->_oConfig->getName(), 'get_events', 0, 0, [
+            'browse' => $aParams['browse'],
+            'params' => $aAlertParams,
+            'table' => $this->_sTable,
+            'method' => &$sUnionMethod,
+            'select_clause' => &$sSelectClause,
+            'join_clause_po' => &$sJoinClausePo,
+            'join_clause_pc' => &$sJoinClausePc,
+            'where_clause_po' => &$sWhereClausePo,
+            'where_clause_pc' => &$sWhereClausePc,
+            'order_clause_po' => &$sOrderClausePo,
+            'order_clause_pc' => &$sOrderClausePc,
+            'order_clause' => &$sUnionOrderClause,
+            'limit_clause' => &$sUnionLimitClause,
+            'query_po' => &$sQueryOwner,
+            'query_pc' => &$sQueryConnections,
+        ]);
+
         $sQuery = "(" . $sQueryOwner . ") UNION (" . $sQueryConnections . ") {order} {limit}";
-        $sQuery = str_replace(array('{select}', '{order}', '{limit}'), array($sSelectClause, $sUnionOrderClause, $sUnionLimitClause), $sQuery);
+        $sQuery = str_replace(['{select}', '{order}', '{limit}'], [$sSelectClause, $sUnionOrderClause, $sUnionLimitClause], $sQuery);
         $aEntries = $this->$sUnionMethod($sQuery);
 
         if($bCountOnly)
@@ -127,34 +157,35 @@ class BxNtfsDb extends BxBaseModNotificationsDb
     {
         $sJoinClause = $sWhereClause = "";
 
+        //--- Apply status filter
+        $sWhereClauseStatus = '';
         if(isset($aParams['active']))
-            $sWhereClause .= $this->prepareAsString("AND `{$this->_sTable}`.`active`=? ", (int)$aParams['active']);
+            $sWhereClauseStatus = $this->prepareAsString("AND `{$this->_sTable}`.`active`=? ", (int)$aParams['active']);
 
         //--- Apply modules or handlers filter
-        $sWhereModuleFilter = '';
+        $sWhereClauseModules = '';
         if(!empty($aParams['modules']) && is_array($aParams['modules']))
-            $sWhereModuleFilter = "AND `" . $this->_sTable . "`.`type` IN (" . $this->implode_escape($aParams['modules']) . ") ";
+            $sWhereClauseModules = "AND `" . $this->_sTable . "`.`type` IN (" . $this->implode_escape($aParams['modules']) . ") ";
 
-        if($sWhereModuleFilter == '') {
+        if($sWhereClauseModules == '') {
             $aHidden = $this->_oConfig->getHandlersHidden();
-            $sWhereModuleFilter = !empty($aHidden) && is_array($aHidden) ? "AND `" . $this->_sTableHandlers . "`.`id` NOT IN (" . $this->implode_escape($aHidden) . ") " : "";
+            $sWhereClauseModules = !empty($aHidden) && is_array($aHidden) ? "AND `" . $this->_sTableHandlers . "`.`id` NOT IN (" . $this->implode_escape($aHidden) . ") " : "";
         }
 
-        if($sWhereModuleFilter != '')
-            $sWhereClause .= $sWhereModuleFilter;
-
         //--- Check flag 'New'
+        $sWhereClauseNew = '';
         if(!empty($aParams['new']) && !empty($aParams['owner_id']))
-            $sWhereClause .= $this->prepareAsString("AND `{$this->_sTable}`.`id`>? ", $this->getLastRead((int)$aParams['owner_id']));
+            $sWhereClauseNew = $this->prepareAsString("AND `{$this->_sTable}`.`id`>? ", $this->getLastRead((int)$aParams['owner_id']));
 
         //--- Check type
+        $sWhereClauseSettings = $sWhereClauseType = '';
         if(!empty($aParams['owner_id']))
             switch($aParams['type']) {
                 /*
                  * Note. It isn't used for now and outdated.
                  */
                 case BX_BASE_MOD_NTFS_TYPE_OWNER:
-                    $sWhereClause .= $this->prepareAsString("AND `{$this->_sTable}`.`owner_id`=? ", $aParams['owner_id']);
+                    $sWhereClauseType = $this->prepareAsString("AND `{$this->_sTable}`.`owner_id`=? ", $aParams['owner_id']);
                     break;
 
                 case BX_BASE_MOD_NTFS_TYPE_OBJECT_OWNER:
@@ -165,9 +196,9 @@ class BxNtfsDb extends BxBaseModNotificationsDb
                         $sJoinClauseS2U .= $this->prepareAsString("AND `{$this->_sTableSettings2Users}`.`user_id`=? ", $aParams['owner_id']);
 
                     $sJoinClause .= $sJoinClauseS2U;
-                    $sWhereClause .= "AND ((ISNULL(`{$this->_sTableSettings2Users}`.`active`) AND `{$this->_sTableSettings}`.`value`='1') OR (NOT ISNULL(`{$this->_sTableSettings2Users}`.`active`) AND `{$this->_sTableSettings2Users}`.`active`='1')) ";
+                    $sWhereClauseSettings = "AND ((ISNULL(`{$this->_sTableSettings2Users}`.`active`) AND `{$this->_sTableSettings}`.`value`='1') OR (NOT ISNULL(`{$this->_sTableSettings2Users}`.`active`) AND `{$this->_sTableSettings2Users}`.`active`='1')) ";
 
-                    $sWhereClause .= $this->prepareAsString("AND `{$this->_sTable}`.`owner_id`<>`{$this->_sTable}`.`object_owner_id` AND ((`{$this->_sTable}`.`owner_id`=? AND `{$this->_sTable}`.`object_privacy_view`<0 AND `{$this->_sTable}`.`owner_id`=ABS(`{$this->_sTable}`.`object_privacy_view`)) OR `{$this->_sTable}`.`object_owner_id`=?) ", $aParams['owner_id'], $aParams['owner_id']);
+                    $sWhereClauseType = $this->prepareAsString("AND `{$this->_sTable}`.`owner_id`<>`{$this->_sTable}`.`object_owner_id` AND ((`{$this->_sTable}`.`owner_id`=? AND `{$this->_sTable}`.`object_privacy_view`<0 AND `{$this->_sTable}`.`owner_id`=ABS(`{$this->_sTable}`.`object_privacy_view`)) OR `{$this->_sTable}`.`object_owner_id`=?) ", $aParams['owner_id'], $aParams['owner_id']);
                     break;
 
                 case BX_BASE_MOD_NTFS_TYPE_CONNECTIONS:
@@ -178,8 +209,9 @@ class BxNtfsDb extends BxBaseModNotificationsDb
 
                     $sJoinClause .= " LEFT JOIN `sys_profiles` AS `tsp` ON `{$this->_sTable}`.`owner_id`=`tsp`.`id` " . $aQueryParts['join'];
 
+                    $sWhereClauseType = '';
                     if(!empty($aQueryParts['fields']['added']))
-                        $sWhereClause .= "AND `{$this->_sTable}`.`date` > " . $aQueryParts['fields']['added'];
+                        $sWhereClauseType = "AND `{$this->_sTable}`.`date` > " . $aQueryParts['fields']['added'];
 
                     list($aModulesProfiles, $aModulesContexts) = $this->_oConfig->getProfileBasedModules();
                     $sJoinClause .= $this->prepareAsString(" INNER JOIN `{$this->_sTableSettings}` ON `{$this->_sTableHandlers}`.`id`=`{$this->_sTableSettings}`.`handler_id` AND `{$this->_sTableSettings}`.`delivery`='" . BX_BASE_MOD_NTFS_DTYPE_SITE . "' AND `{$this->_sTableSettings}`.`active`='1' AND ((`{$this->_sTableSettings}`.`type`=? AND `tsp`.`type` IN (" . $this->implode_escape($aModulesProfiles) . ")) || (`{$this->_sTableSettings}`.`type`=? AND `tsp`.`type` IN (" . $this->implode_escape($aModulesContexts) . ")))", BX_NTFS_STYPE_FOLLOW_MEMBER, BX_NTFS_STYPE_FOLLOW_CONTEXT);
@@ -189,7 +221,7 @@ class BxNtfsDb extends BxBaseModNotificationsDb
                         $sJoinClauseS2U .= $this->prepareAsString("AND `{$this->_sTableSettings2Users}`.`user_id`=? ", $aParams['owner_id']);
 
                     $sJoinClause .= $sJoinClauseS2U;
-                    $sWhereClause .= "AND ((ISNULL(`{$this->_sTableSettings2Users}`.`active`) AND `{$this->_sTableSettings}`.`value`='1') OR (NOT ISNULL(`{$this->_sTableSettings2Users}`.`active`) AND `{$this->_sTableSettings2Users}`.`active`='1')) ";
+                    $sWhereClauseSettings = "AND ((ISNULL(`{$this->_sTableSettings2Users}`.`active`) AND `{$this->_sTableSettings}`.`value`='1') OR (NOT ISNULL(`{$this->_sTableSettings2Users}`.`active`) AND `{$this->_sTableSettings2Users}`.`active`='1')) ";
                     break;
 
                 case BX_NTFS_TYPE_OBJECT_OWNER_AND_CONNECTIONS:
@@ -226,13 +258,36 @@ class BxNtfsDb extends BxBaseModNotificationsDb
                         $sJoinClauseS2U .= $this->prepareAsString("AND `{$this->_sTableSettings2Users}`.`user_id`=? ", $aParams['owner_id']);
 
                     $sJoinClause .= $sJoinClauseS2U;
-                    $sWhereClause .= "AND ((ISNULL(`{$this->_sTableSettings2Users}`.`active`) AND `{$this->_sTableSettings}`.`value`='1') OR (NOT ISNULL(`{$this->_sTableSettings2Users}`.`active`) AND `{$this->_sTableSettings2Users}`.`active`='1')) ";
+                    $sWhereClauseSettings = "AND ((ISNULL(`{$this->_sTableSettings2Users}`.`active`) AND `{$this->_sTableSettings}`.`value`='1') OR (NOT ISNULL(`{$this->_sTableSettings2Users}`.`active`) AND `{$this->_sTableSettings2Users}`.`active`='1')) ";
 
-                    $sWhereClause .= "AND ((" . $sWhereClauseObjectOwner . ") || (" . $sWhereClauseConnections . ")) ";
+                    $sWhereClauseType = "AND ((" . $sWhereClauseObjectOwner . ") OR (" . $sWhereClauseConnections . ")) ";
                     break;
             }
 
-        return array($sJoinClause, $sWhereClause);
+        $aAlertParams = $aParams;
+        unset($aAlertParams['type'], $aAlertParams['owner_id']);
+
+        bx_alert($this->_oConfig->getName(), 'get_list_by_type', 0, 0, [
+            'type' => $aParams['type'],
+            'owner_id' => $aParams['owner_id'],
+            'params' => $aAlertParams,
+            'table' => $this->_sTable,
+            'join_clause' => &$sJoinClause,
+            'where_clause' => &$sWhereClause,
+            'where_clause_status' => &$sWhereClauseStatus,
+            'where_clause_modules' => &$sWhereClauseModules,
+            'where_clause_new' => &$sWhereClauseNew,
+            'where_clause_settings' => &$sWhereClauseSettings,
+            'where_clause_type' => &$sWhereClauseType
+        ]);
+
+        $sWhereClause .= $sWhereClauseStatus;
+        $sWhereClause .= $sWhereClauseModules;
+        $sWhereClause .= $sWhereClauseNew;
+        $sWhereClause .= $sWhereClauseSettings;
+        $sWhereClause .= $sWhereClauseType;
+
+        return [$sJoinClause, $sWhereClause];
     }
 
     public function getEventsToProcess($iLimit = 0)

+ 1 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -1638,6 +1638,7 @@
 	<string name="_adm_stg_cpt_option_sys_default_curl_timeout"><![CDATA[cURL - Таймаут по умолчанию]]></string>
     <string name="_adm_stg_cpt_option_sys_ssl_allow_untrusted"><![CDATA[cURL - доверять неподписанным сертификатам или неподтвержденным хостам]]></string>
     <string name="_adm_stg_cpt_option_sys_csp_frame_ancestors"><![CDATA[Значение заголовка 'Content-Security-Policy: frame-ancestors']]></string>
+    <string name="_adm_stg_cpt_option_sys_samesite_cookies"><![CDATA[Значение "SameSite" для конфиденциальных Cookie]]></string>
     <string name="_adm_stg_cpt_option_sys_notify_to_approve_by_role"><![CDATA[Оповещать участников контекста с определенной ролью о необходимости одобрять контент в контексте]]></string>
 	<string name="_adm_stg_cpt_option_sys_fixed_header"><![CDATA[Статический заголовок]]></string>
     <string name="_adm_stg_cpt_option_template"><![CDATA[Основная тема]]></string>

+ 10 - 0
modules/boonex/stream/classes/BxStrmModule.php

@@ -346,6 +346,16 @@ class BxStrmModule extends BxBaseModTextModule
             return $aCheck[CHECK_ACTION_MESSAGE];
         return CHECK_ACTION_RESULT_ALLOWED;
     }
+
+    protected function _getImagesForTimelinePost($aEvent, $aContentInfo, $sUrl, $aBrowseParams = [])
+    {
+        $aImages = parent::_getImagesForTimelinePost($aEvent, $aContentInfo, $sUrl, $aBrowseParams);
+        if(!empty($aImages) && is_array($aImages))
+            foreach($aImages as $iIndex => $aImage)
+                $aImages[$iIndex]['onclick'] = '';
+
+        return $aImages;
+    }
 }
 
 /** @} */

+ 36 - 13
plugins_public/tailwind/css/tailwind.css

@@ -14,6 +14,10 @@
 
 @layer components {
     /* Global: HTML tags */
+    a {
+        @apply hover:underline;
+    }
+
     ol, ul {
         @apply pl-10 list-outside;
     }
@@ -427,18 +431,26 @@
     }
 
     .bx-def-font-author {
-        @apply text-sm text-gray-700 dark:text-gray-200 font-semibold;
+        @apply text-sm text-gray-800 hover:text-black dark:text-gray-300 dark:hover:text-white font-semibold;
     }
 
     .bx-def-font-meta {
         @apply text-sm font-normal;
     }
     .bx-def-font-meta:not(a) {
-        @apply text-gray-700 dark:text-gray-500 text-opacity-60;
+        @apply text-gray-700 dark:text-gray-400 text-opacity-60;
     }
 
     .bx-artificer .bx-def-a-colored {
-        @apply no-underline text-blue-600 hover:text-blue-700 dark:text-blue-500 dark:hover:text-blue-600;
+        @apply text-blue-600 hover:text-blue-700 dark:text-blue-500 dark:hover:text-blue-600;
+    }
+
+    .bx-artificer a.bx-def-font-meta,
+    .bx-artificer a.bx-def-font-meta.bx-def-a-colored {
+        @apply text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-50;
+    }
+    .bx-artificer .bx-def-font-meta:not(a) {
+        @apply text-opacity-100;
     }
 
     .bx-artificer .bx-def-font-small {
@@ -547,6 +559,7 @@
         @apply hover:bg-white dark:hover:bg-gray-600;
         @apply hover:border-gray-300 dark:hover:border-gray-500;
         @apply hover:text-gray-800 dark:hover:text-white;
+        @apply hover:no-underline;
         @apply hover:-translate-y-px;
     }
     .bx-btn-active {
@@ -628,7 +641,8 @@
         @apply font-normal text-blue-600 hover:text-blue-700 dark:text-blue-500 dark:hover:text-blue-600;
     }
 
-    .bx-artificer .bx-form-caption {
+    .bx-artificer .bx-form-caption,
+    .bx-artificer .bx-form-row-view-caption {
         @apply text-gray-700 dark:text-gray-300 text-sm font-medium;
     }
 
@@ -785,14 +799,25 @@
     }
 
 
-    /* Common elements: Menus */
+    /* Common elements: Menus */   
     .bx-artificer .bx-stl-mil,
     .bx-artificer .bx-stl-mil-sm,
     .bx-artificer .bx-stl-mil-wo-bg,
     .bx-artificer .bx-stl-mil-wo-bg-gaps {
         @apply leading-6 text-sm text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 font-medium;
     }
-    
+
+    .bx-artificer .bx-menu-toolbar-item a,
+    .bx-artificer .bx-menu-item a:not(.bx-def-font-meta),
+    .bx-artificer a.bx-stl-mil:not(.bx-def-font-meta),
+    .bx-artificer a.bx-stl-mil-wo-bg:not(.bx-def-font-meta),
+    .bx-artificer a.bx-stl-mil-wo-bg-gaps:not(.bx-def-font-meta),
+    .bx-artificer .bx-stl-mil a:not(.bx-def-font-meta),
+    .bx-artificer .bx-stl-mil-wo-bg a:not(.bx-def-font-meta),
+    .bx-artificer .bx-stl-mil-wo-bg-gaps a:not(.bx-def-font-meta) {
+        @apply hover:no-underline;
+    }
+
     .bx-artificer .bx-stl-mil,
     .bx-artificer .bx-stl-mil-sm,
     .bx-artificer .bx-stl-mil-wo-bg {
@@ -847,14 +872,14 @@
     .bx-artificer .bx-stl-mil .sys-action-do-icon ~ .sys-action-do-text {
         @apply ml-0; 
     }
-    .bx-artificer .bx-stl-mii-sm {
-        @apply h-4 w-4 mr-1 leading-4 text-sm;
+    .bx-artificer .bx-stl-mii-sm > * {
+        @apply h-4 w-4 mr-1.5 leading-4 text-sm;
     }
     .bx-artificer .bx-stl-mit {
         @apply truncate;
     }
     .bx-artificer .bx-stl-mia {
-        @apply inline-block py-0.5 px-2 bg-gray-200 dark:bg-gray-800 text-gray-600 dark:text-gray-300 text-xs rounded-full;
+        @apply inline-block py-0.5 px-2 bg-gray-200/50 dark:bg-gray-800/50 text-gray-600 dark:text-gray-300 text-xs rounded-full;
     }
 
     /* Horizontal menu */
@@ -921,9 +946,7 @@
     .bx-artificer .bx-informer-msg-error {
         @apply bg-red-50 text-red-700;
     }
-    .bx-artificer .bx-form-row-view-value {
-        @apply truncate;
-    }
+
 
     /* Common elements: All Actions */
     .bx-artificer .sys-action-counter.sys-ac-link,
@@ -959,7 +982,7 @@
 
     .bx-artificer .bx-base-text-unit-title a,
     .bx-artificer .bx-tl-title a {
-        @apply hover:underline hover:text-blue-700 dark:hover:text-blue-600;
+        @apply text-gray-800 hover:text-black dark:text-gray-300 dark:hover:text-white hover:no-underline;
     }
 
     .bx-artificer .bx-base-pofile-unit-online {

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
plugins_public/tailwind/css/tailwind.min.css


+ 1 - 1
plugins_public/tailwind/js/tailwind.config.js

@@ -85,7 +85,7 @@ module.exports = {
 
     'flickity-button',
 	  
-	'ql-editor',
+    'ql-editor',
   ],
   darkMode: 'class', // false or 'media' or 'class'
   theme: {

+ 4 - 4
template/menu_apps.html

@@ -1,9 +1,9 @@
-<div id="__name__" class="bx-popup bx-popup-box z-20 z-50 max-w-sm my-4 hidden overflow-hidden text-base divide-y divide-gray-100 dark:divide-gray-600 bg-white dark:bg-gray-800 rounded-md shadow">
-    <div class="bx-popup-header block px-4 py-2 text-center text-lg lg:text-xl font-semibold text-gray-800 dark:text-gray-100">__title__</div>
-    <div class="bx-popup-content grid grid-cols-3 gap-4 p-4">
+<div id="__name__" class="bx-popup bx-popup-box z-20 z-50 max-w-sm my-4 p-4 hidden overflow-hidden text-base bg-white dark:bg-gray-800 ring-1 ring-gray-300 dark:ring-gray-700 rounded-md shadow">
+    <div class="bx-popup-header block pb-4 leading-8 text-lg lg:text-xl text-gray-800 dark:text-gray-100 font-semibold">__title__</div>
+    <div class="bx-popup-content grid grid-cols-3 gap-4">
         <bx_repeat:menu_items>
             <a class="block p-4 text-center rounded-lg hover:bg-gray-100 dark:hover:bg-gray-600" href="__link__" onclick="__onclick__"__attrs__>
-                <div class="w-7 h-7 mx-auto mb-1 text-gray-500 dark:text-gray-400">
+                <div class="w-8 h-8 mx-auto mb-1 text-gray-500 dark:text-gray-400 text-2xl">
                     <bx_include_auto:menu_icon.html />
                 </div>
                 <div class="text-sm font-medium text-gray-900 dark:text-white">__title__</div>

Некоторые файлы не были показаны из-за большого количества измененных файлов