浏览代码

[Web] optimizing update_sogo_static_view function

FreddleSpl0it 2 年之前
父节点
当前提交
4121509ceb
共有 1 个文件被更改,包括 34 次插入67 次删除
  1. 34 67
      data/web/inc/functions.inc.php

+ 34 - 67
data/web/inc/functions.inc.php

@@ -1021,74 +1021,41 @@ function update_sogo_static_view($mailbox = null) {
   }
   global $pdo;
   global $lang;
-  $stmt = $pdo->query("SELECT 'OK' FROM INFORMATION_SCHEMA.TABLES
-    WHERE TABLE_NAME = 'sogo_view'");
-  $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
-  if ($num_results != 0) {
-    if ($mailbox == null){
-      $stmt = $pdo->query("REPLACE INTO _sogo_static_view (`c_uid`, `domain`, `c_name`, `c_password`, `c_cn`, `mail`, `aliases`, `ad_aliases`, `ext_acl`, `kind`, `multiple_bookings`)
-        SELECT
-          mailbox.username,
-          mailbox.domain,
-          mailbox.username,
-          IF(JSON_UNQUOTE(JSON_VALUE(attributes, '$.force_pw_update')) = '0', IF(JSON_UNQUOTE(JSON_VALUE(attributes, '$.sogo_access')) = 1, password, '{SSHA256}A123A123A321A321A321B321B321B123B123B321B432F123E321123123321321'), '{SSHA256}A123A123A321A321A321B321B321B123B123B321B432F123E321123123321321'),
-          mailbox.name,
-          mailbox.username,
-          IFNULL(GROUP_CONCAT(ga.aliases ORDER BY ga.aliases SEPARATOR ' '), ''),
-          IFNULL(gda.ad_alias, ''),
-          IFNULL(external_acl.send_as_acl, ''),
-          mailbox.kind,
-          mailbox.multiple_bookings
-        FROM
-          mailbox
-          LEFT OUTER JOIN
-              grouped_mail_aliases ga
-              ON ga.username REGEXP CONCAT('(^|,)', mailbox.username, '($|,)')
-          LEFT OUTER JOIN
-              grouped_domain_alias_address gda
-              ON gda.username = mailbox.username
-          LEFT OUTER JOIN
-              grouped_sender_acl_external external_acl
-              ON external_acl.username = mailbox.username
-        WHERE
-          mailbox.active = '1'
-        GROUP BY
-          mailbox.username;");
-    } else {
-      $stmt = $pdo->prepare("REPLACE INTO _sogo_static_view (`c_uid`, `domain`, `c_name`, `c_password`, `c_cn`, `mail`, `aliases`, `ad_aliases`, `ext_acl`, `kind`, `multiple_bookings`)
-        SELECT `c_uid`, `domain`, `c_name`, `c_password`, `c_cn`, `mail`, `aliases`, `ad_aliases`, `ext_acl`, `kind`, `multiple_bookings` from sogo_view where `c_uid` = :mailbox
-        SELECT
-          mailbox.username,
-          mailbox.domain,
-          mailbox.username,
-          IF(JSON_UNQUOTE(JSON_VALUE(attributes, '$.force_pw_update')) = '0', IF(JSON_UNQUOTE(JSON_VALUE(attributes, '$.sogo_access')) = 1, password, '{SSHA256}A123A123A321A321A321B321B321B123B123B321B432F123E321123123321321'), '{SSHA256}A123A123A321A321A321B321B321B123B123B321B432F123E321123123321321'),
-          mailbox.name,
-          mailbox.username,
-          IFNULL(GROUP_CONCAT(ga.aliases ORDER BY ga.aliases SEPARATOR ' '), ''),
-          IFNULL(gda.ad_alias, ''),
-          IFNULL(external_acl.send_as_acl, ''),
-          mailbox.kind,
-          mailbox.multiple_bookings
-        FROM
-          mailbox
-          LEFT OUTER JOIN
-              grouped_mail_aliases ga
-              ON ga.username REGEXP CONCAT('(^|,)', mailbox.username, '($|,)')
-          LEFT OUTER JOIN
-              grouped_domain_alias_address gda
-              ON gda.username = mailbox.username
-          LEFT OUTER JOIN
-              grouped_sender_acl_external external_acl
-              ON external_acl.username = mailbox.username
-        WHERE
-          mailbox.active = '1' AND
-          mailbox.username = :mailbox
-        GROUP BY
-          mailbox.username;");
-      $stmt->execute(array(':mailbox' => $mailbox));
-    }
-    $stmt = $pdo->query("DELETE FROM _sogo_static_view WHERE `c_uid` NOT IN (SELECT `username` FROM `mailbox` WHERE `active` = '1');");
+  
+  $query = "REPLACE INTO _sogo_static_view (`c_uid`, `domain`, `c_name`, `c_password`, `c_cn`, `mail`, `aliases`, `ad_aliases`, `ext_acl`, `kind`, `multiple_bookings`)
+            SELECT
+              mailbox.username,
+              mailbox.domain,
+              mailbox.username,
+              IF(JSON_UNQUOTE(JSON_VALUE(attributes, '$.force_pw_update')) = '0',
+                 IF(JSON_UNQUOTE(JSON_VALUE(attributes, '$.sogo_access')) = 1, password, '{SSHA256}A123A123A321A321A321B321B321B123B123B321B432F123E321123123321321'),
+                 '{SSHA256}A123A123A321A321A321B321B321B123B123B321B432F123E321123123321321'),
+              mailbox.name,
+              mailbox.username,
+              IFNULL(GROUP_CONCAT(ga.aliases ORDER BY ga.aliases SEPARATOR ' '), ''),
+              IFNULL(gda.ad_alias, ''),
+              IFNULL(external_acl.send_as_acl, ''),
+              mailbox.kind,
+              mailbox.multiple_bookings
+            FROM
+              mailbox
+              LEFT OUTER JOIN grouped_mail_aliases ga ON ga.username REGEXP CONCAT('(^|,)', mailbox.username, '($|,)')
+              LEFT OUTER JOIN grouped_domain_alias_address gda ON gda.username = mailbox.username
+              LEFT OUTER JOIN grouped_sender_acl_external external_acl ON external_acl.username = mailbox.username
+            WHERE
+              mailbox.active = '1'";
+  
+  if ($mailbox !== null) {
+    $query .= " AND mailbox.username = :mailbox";
+    $stmt = $pdo->prepare($query);
+    $stmt->execute(array(':mailbox' => $mailbox));
+  } else {
+    $query .= " GROUP BY mailbox.username";
+    $stmt = $pdo->query($query);
   }
+  
+  $stmt = $pdo->query("DELETE FROM _sogo_static_view WHERE `c_uid` NOT IN (SELECT `username` FROM `mailbox` WHERE `active` = '1');");
+  
   flush_memcached();
 }
 function edit_user_account($_data) {