seopro.plugin.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. /**
  3. * The base seoPro snippet.
  4. *
  5. * @package seopro
  6. */
  7. $seoPro = $modx->getService('seopro', 'seoPro', $modx->getOption('seopro.core_path', null, $modx->getOption('core_path') . 'components/seopro/') . 'model/seopro/', $scriptProperties);
  8. if (!($seoPro instanceof seoPro)) {
  9. return '';
  10. }
  11. $disabledTemplates = explode(',', $modx->getOption('seopro.disabledtemplates', null, '0'));
  12. switch ($modx->event->name) {
  13. case 'OnMODXInit':
  14. $version = $modx->getVersionData();
  15. $version = (int)($version['version'] . $version['major_version']);
  16. if ($version < 27) {
  17. $modx->loadClass('modResource');
  18. $modx->map['modResource']['fieldMeta']['description'] = array(
  19. 'dbtype' => 'text',
  20. 'phptype' => 'string',
  21. 'index' => 'fulltext',
  22. 'indexgrp' => 'content_ft_idx',
  23. );
  24. }
  25. break;
  26. case 'OnDocFormRender':
  27. $template = (string)$resource->get('template');
  28. $override = false;
  29. if (isset($_REQUEST['template'])) {
  30. $template = (string)$_REQUEST['template'];
  31. $override = true;
  32. }
  33. if (($override && $template === '0') || (!empty($template) && in_array($template, $disabledTemplates))) {
  34. break;
  35. }
  36. $currClassKey = $resource->get('class_key');
  37. $strFields = $modx->getOption('seopro.fields', null, 'pagetitle:70,longtitle:70,description:320,alias:2023,menutitle:2023');
  38. $arrFields = array();
  39. if (is_array(explode(',', $strFields))) {
  40. foreach (explode(',', $strFields) as $field) {
  41. list($fieldName, $fieldCount) = explode(':', $field);
  42. $arrFields[$fieldName] = $fieldCount;
  43. }
  44. } else {
  45. return '';
  46. }
  47. $keywords = '';
  48. $modx->controller->addLexiconTopic('seopro:default');
  49. $ctxKey = !empty($resource) ? $resource->get('context_key') : $modx->getOption('default_context');
  50. $ctx = $modx->getContext($ctxKey);
  51. if ($ctx) {
  52. $url = $ctx->getOption('site_url', '', $modx->getOption('site_url'));
  53. } else {
  54. $url = $modx->getOption('site_url');
  55. }
  56. if ($mode == 'upd') {
  57. if ($ctx) {
  58. if ($resource->get('id') != $ctx->getOption('site_start', '', $modx->getOption('site_start'))) {
  59. $url .= $resource->get('uri');
  60. }
  61. } else {
  62. $url = $modx->makeUrl($resource->get('id'), '', '', 'full');
  63. }
  64. $url = str_replace(
  65. $resource->get('alias'),
  66. '<span id=\"seopro-replace-alias\">' . $resource->get('alias') . '</span>',
  67. $url
  68. );
  69. $seoKeywords = $modx->getObject('seoKeywords', array('resource' => $resource->get('id')));
  70. if ($seoKeywords) {
  71. $keywords = $seoKeywords->get('keywords');
  72. }
  73. }
  74. if ($_REQUEST['id'] == $modx->getOption('site_start')) {
  75. unset($arrFields['alias']);
  76. unset($arrFields['menutitle']);
  77. }
  78. $config = $seoPro->config;
  79. unset($config['resource']);
  80. $modx->regClientStartupHTMLBlock('<script type="text/javascript">
  81. Ext.onReady(function() {
  82. seoPro.config = ' . $modx->toJSON($config) . ';
  83. seoPro.config.record = "' . $keywords . '";
  84. seoPro.config.values = {};
  85. seoPro.config.fields = "' . implode(",", array_keys($arrFields)) . '";
  86. seoPro.config.chars = ' . $modx->toJSON($arrFields) . '
  87. seoPro.config.url = "' . $url . '";
  88. });</script>');
  89. /* include CSS and JS*/
  90. $version = $modx->getVersionData();
  91. if($version['version'] == 2 && $version['major_version'] == 2){
  92. $modx->regClientCSS($seoPro->config['assetsUrl'] . 'css/mgr.css');
  93. }else{
  94. $modx->regClientCSS($seoPro->config['assetsUrl'] . 'css/mgr23.css');
  95. }
  96. $modx->regClientStartupScript($seoPro->config['assetsUrl'] . 'js/mgr/seopro.js??v=' . $modx->getOption('seopro.version', null, 'v1.0.0'));
  97. $modx->regClientStartupScript($seoPro->config['assetsUrl'] . 'js/mgr/resource.js?v=' . $modx->getOption('seopro.version', null, 'v1.0.0'));
  98. break;
  99. case 'OnDocFormSave':
  100. $template = (string)$resource->get('template');
  101. $override = false;
  102. if (isset($_REQUEST['template'])) {
  103. $template = (string)$_REQUEST['template'];
  104. $override = true;
  105. }
  106. if (($override && $template === '0') || (!empty($template) && in_array($template, $disabledTemplates))) {
  107. break;
  108. }
  109. $seoKeywords = $modx->getObject('seoKeywords', array('resource' => $resource->get('id')));
  110. if (!$seoKeywords && isset($resource)) {
  111. $seoKeywords = $modx->newObject('seoKeywords', array('resource' => $resource->get('id')));
  112. }
  113. if($seoKeywords){
  114. if (isset($_POST['keywords'])){
  115. $seoKeywords->set('keywords', trim($_POST['keywords'], ','));
  116. } else {
  117. $seoKeywords->set('keywords', '');
  118. }
  119. $seoKeywords->save();
  120. }
  121. break;
  122. case 'onResourceDuplicate':
  123. $template = (string)$resource->get('template');
  124. $override = false;
  125. if (isset($_REQUEST['template'])) {
  126. $template = (string)$_REQUEST['template'];
  127. $override = true;
  128. }
  129. if (($override && $template === '0') || (!empty($template) && in_array($template, $disabledTemplates))) {
  130. break;
  131. }
  132. $seoKeywords = $modx->getObject('seoKeywords', array('resource' => $resource->get('id')));
  133. if (!$seoKeywords) {
  134. $seoKeywords = $modx->newObject('seoKeywords', array('resource' => $resource->get('id')));
  135. }
  136. $newSeoKeywords = $modx->newObject('seoKeywords');
  137. $newSeoKeywords->fromArray($seoKeywords->toArray());
  138. $newSeoKeywords->set('resource', $newResource->get('id'));
  139. $newSeoKeywords->save();
  140. break;
  141. case 'OnLoadWebDocument':
  142. if ($modx->context->get('key') == "mgr") {
  143. break;
  144. }
  145. $template = ($modx->resource->get('template')) ? (string)$modx->resource->get('template') : '';
  146. if (in_array($template, $disabledTemplates)) {
  147. break;
  148. }
  149. $seoKeywords = $modx->getObject('seoKeywords', array('resource' => $modx->resource->get('id')));
  150. if ($seoKeywords) {
  151. $keyWords = $seoKeywords->get('keywords');
  152. $modx->setPlaceholder('seoPro.keywords', $keyWords);
  153. }
  154. // Render the meta title, based on system settings
  155. $titleFormat = $modx->getOption('seopro.title_format');
  156. if (empty($titleFormat)) {
  157. $siteDelimiter = $modx->getOption('seopro.delimiter', null, '/');
  158. $siteUseSitename = (boolean)$modx->getOption('seopro.usesitename', null, true);
  159. $siteID = $modx->resource->get('id');
  160. $siteName = $modx->getOption('site_name');
  161. $longtitle = $modx->resource->get('longtitle');
  162. $pagetitle = $modx->resource->get('pagetitle');
  163. $seoProTitle = array();
  164. if ($siteID == $modx->getOption('site_start')) {
  165. $seoProTitle['pagetitle'] = !empty($longtitle) ? $longtitle : $siteName;
  166. } else {
  167. $seoProTitle['pagetitle'] = !empty($longtitle) ? $longtitle : $pagetitle;
  168. if ($siteUseSitename) {
  169. $seoProTitle['delimiter'] = $siteDelimiter;
  170. $seoProTitle['sitename'] = $siteName;
  171. }
  172. }
  173. $title = implode(' ', $seoProTitle);
  174. } else {
  175. $title = $modx->getOption('seopro.title_format');
  176. }
  177. $modx->setPlaceholder('seoPro.title', $title);
  178. break;
  179. }