[Web] optimizing update_sogo_static_view function
This commit is contained in:
		| @@ -1015,7 +1015,7 @@ function formatBytes($size, $precision = 2) { | ||||
|   } | ||||
|   return round(pow(1024, $base - floor($base)), $precision) . $suffixes[floor($base)]; | ||||
| } | ||||
| function update_sogo_static_view() { | ||||
| function update_sogo_static_view($mailbox = null) { | ||||
|   if (getenv('SKIP_SOGO') == "y") { | ||||
|     return true; | ||||
|   } | ||||
| @@ -1025,8 +1025,68 @@ function update_sogo_static_view() { | ||||
|     WHERE TABLE_NAME = 'sogo_view'"); | ||||
|   $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC)); | ||||
|   if ($num_results != 0) { | ||||
|     $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 `c_uid`, `domain`, `c_name`, `c_password`, `c_cn`, `mail`, `aliases`, `ad_aliases`, `ext_acl`, `kind`, `multiple_bookings` from sogo_view"); | ||||
|     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');"); | ||||
|   } | ||||
|   flush_memcached(); | ||||
|   | ||||
| @@ -1264,11 +1264,13 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { | ||||
|             )); | ||||
|           } | ||||
|  | ||||
|           update_sogo_static_view($username); | ||||
|           $_SESSION['return'][] = array( | ||||
|             'type' => 'success', | ||||
|             'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), | ||||
|             'msg' => array('mailbox_added', htmlspecialchars($username)) | ||||
|           ); | ||||
|           return true; | ||||
|         break; | ||||
|         case 'resource': | ||||
|           $domain             = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46); | ||||
| @@ -3130,7 +3132,10 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { | ||||
|               'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), | ||||
|               'msg' => array('mailbox_modified', $username) | ||||
|             ); | ||||
|  | ||||
|             update_sogo_static_view($username); | ||||
|           } | ||||
|           return true; | ||||
|         break; | ||||
|         case 'mailbox_templates': | ||||
|           if ($_SESSION['mailcow_cc_role'] != "admin") { | ||||
| @@ -5053,12 +5058,15 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { | ||||
|               ); | ||||
|               continue; | ||||
|             } | ||||
|              | ||||
|             update_sogo_static_view($username); | ||||
|             $_SESSION['return'][] = array( | ||||
|               'type' => 'success', | ||||
|               'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), | ||||
|               'msg' => array('mailbox_removed', htmlspecialchars($username)) | ||||
|             ); | ||||
|           } | ||||
|           return true; | ||||
|         break; | ||||
|         case 'mailbox_templates': | ||||
|           if ($_SESSION['mailcow_cc_role'] != "admin") { | ||||
| @@ -5264,7 +5272,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { | ||||
|       } | ||||
|     break; | ||||
|   } | ||||
|   if ($_action != 'get' && in_array($_type, array('domain', 'alias', 'alias_domain', 'mailbox', 'resource')) && getenv('SKIP_SOGO') != "y") { | ||||
|   if ($_action != 'get' && in_array($_type, array('domain', 'alias', 'alias_domain', 'resource')) && getenv('SKIP_SOGO') != "y") { | ||||
|     update_sogo_static_view(); | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user