PageRenderTime 43ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/core/model/modx/mysql/modcontext.class.php

http://github.com/modxcms/revolution
PHP | 111 lines | 102 code | 1 blank | 8 comment | 0 complexity | 22cefe0f7be13123d9c9385f16cabd3b MD5 | raw file
Possible License(s): GPL-2.0, Apache-2.0, BSD-3-Clause, LGPL-2.1
  1. <?php
  2. /*
  3. * This file is part of MODX Revolution.
  4. *
  5. * Copyright (c) MODX, LLC. All Rights Reserved.
  6. *
  7. * For complete copyright and license information, see the COPYRIGHT and LICENSE
  8. * files found in the top-level directory of this distribution.
  9. */
  10. include_once (strtr(realpath(dirname(__FILE__)), '\\', '/') . '/../modcontext.class.php');
  11. /**
  12. * @package modx
  13. * @subpackage mysql
  14. */
  15. class modContext_mysql extends modContext {
  16. public static function getResourceCacheMapStmt(&$context) {
  17. $stmt = false;
  18. if ($context instanceof modContext) {
  19. $time=microtime(true);
  20. $cache_alias_map = $context->getOption('cache_alias_map');
  21. $use_context_resource_table = $context->getOption('use_context_resource_table',null,1);
  22. $tblResource= $context->xpdo->getTableName('modResource');
  23. $tblContextResource= $context->xpdo->getTableName('modContextResource');
  24. $resourceFields= array('id','parent','uri');
  25. // we do not need to select uri if cache_alias_map is set to false
  26. if ($cache_alias_map == 0) {
  27. $resourceFields = array('id','parent');
  28. }
  29. $resourceCols= $context->xpdo->getSelectColumns('modResource', 'r', '', $resourceFields);
  30. $contextKey = $context->get('key');
  31. $bindings = array();
  32. $sql = "SELECT {$resourceCols} FROM {$tblResource} `r` ";
  33. if ($use_context_resource_table) {
  34. $bindings = array($contextKey, $contextKey);
  35. $sql .= "FORCE INDEX (`cache_refresh_idx`) ";
  36. $sql .= "LEFT JOIN {$tblContextResource} `cr` ON `cr`.`context_key` = ? AND `r`.`id` = `cr`.`resource` ";
  37. }
  38. $sql .= "WHERE `r`.`deleted` = 0 "; //"AND `r`.`id` != `r`.`parent`";
  39. if ($use_context_resource_table) {
  40. $sql .= "AND (`r`.`context_key` = ? OR `cr`.`context_key` IS NOT NULL) ";
  41. $sql .= "GROUP BY `r`.`parent`, `r`.`menuindex`, `r`.`id`, `r`.`uri` ";
  42. } else {
  43. $bindings = array($contextKey);
  44. $sql .= " AND `r`.`context_key` = ?";
  45. }
  46. $criteria = new xPDOCriteria($context->xpdo, $sql, $bindings, false);
  47. if ($criteria && $criteria->stmt && $criteria->stmt->execute()) {
  48. $stmt =& $criteria->stmt;
  49. }
  50. // output warning if query is too slow
  51. $time = ((microtime(true)-$time));
  52. if ($time >= 1.0 && $use_context_resource_table==1) {
  53. $context->xpdo->log(modX::LOG_LEVEL_WARN,"[modContext_mysql] Slow query detected. Consider to set 'use_context_resource_table' to false.");
  54. }
  55. }
  56. return $stmt;
  57. }
  58. public static function getWebLinkCacheMapStmt(&$context) {
  59. $stmt = false;
  60. if ($context instanceof modContext) {
  61. $time=microtime(true);
  62. $use_context_resource_table = $context->getOption('use_context_resource_table',null,1);
  63. $tblResource = $context->xpdo->getTableName('modResource');
  64. $tblContextResource = $context->xpdo->getTableName('modContextResource');
  65. $resourceFields= array('id','content');
  66. $resourceCols= $context->xpdo->getSelectColumns('modResource', 'r', '', $resourceFields);
  67. $contextKey = $context->get('key');
  68. $bindings = array();
  69. $sql = "SELECT {$resourceCols} ";
  70. $sql .= "FROM {$tblResource} `r` ";
  71. if ($use_context_resource_table) {
  72. $bindings = array($contextKey, $contextKey);
  73. $sql .= "LEFT JOIN {$tblContextResource} `cr` ";
  74. $sql .= "ON `cr`.`context_key` = ? AND `r`.`id` = `cr`.`resource` ";
  75. }
  76. $sql .= "WHERE `r`.`deleted` = 0 "; //"`r`.`id` != `r`.`parent` ";
  77. $sql .= "AND `r`.`class_key` = 'modWebLink' ";
  78. if ($use_context_resource_table) {
  79. $sql .= "AND (`r`.`context_key` = ? OR `cr`.`context_key` IS NOT NULL) ";
  80. $sql .= "GROUP BY `r`.`id`";
  81. } else {
  82. $bindings = array($contextKey);
  83. $sql .= " AND `r`.`context_key` = ?";
  84. }
  85. $criteria = new xPDOCriteria($context->xpdo, $sql, $bindings, false);
  86. if ($criteria && $criteria->stmt && $criteria->stmt->execute()) {
  87. $stmt =& $criteria->stmt;
  88. }
  89. $time = ((microtime(true)-$time));
  90. if ($time >= 1.0 && $use_context_resource_table==1) {
  91. $context->xpdo->log(modX::LOG_LEVEL_WARN,"[modContext_mysql] Slow query detected. Consider to set 'use_context_resource_table' to false.");
  92. }
  93. }
  94. return $stmt;
  95. }
  96. }