PageRenderTime 27ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/administrator/components/com_acesef/library/metadata.php

https://github.com/Shigaru/shigaru
PHP | 361 lines | 279 code | 52 blank | 30 comment | 103 complexity | 5cc46924489f506c826674e1ef567b6a MD5 | raw file
  1. <?php
  2. /**
  3. * @version 1.5.0
  4. * @package AceSEF Library
  5. * @subpackage Metadata
  6. * @copyright 2009-2012 JoomAce LLC, www.joomace.net
  7. * @license GNU/GPL http://www.gnu.org/copyleft/gpl.html
  8. */
  9. // No Permission
  10. defined('_JEXEC') or die('Restricted Access');
  11. // Metadata class
  12. class AcesefMetadata {
  13. function __construct() {
  14. // Get config object
  15. $this->AcesefConfig = AcesefFactory::getConfig();
  16. }
  17. function autoMetadata($sef_url, $meta) {
  18. $no_auto_meta = (empty($meta['title']) && empty($meta['description']) && empty($meta['keywords']));
  19. if ($no_auto_meta) {
  20. return;
  21. }
  22. static $checked = array();
  23. if (!isset($checked[$sef_url])) {
  24. $m = AcesefCache::checkMetadata($sef_url);
  25. $checked[$sef_url] = "checked";
  26. }
  27. if ($checked[$sef_url] != "saved" && isset($m) && !is_object($m)) {
  28. $meta['description'] = ltrim($meta['description']);
  29. $values = "(".AceDatabase::quote($sef_url).", '{$meta['title']}', '{$meta['description']}', '{$meta['keywords']}')";
  30. AceDatabase::query("INSERT IGNORE INTO #__acesef_metadata (url_sef, title, description, keywords) VALUES {$values}");
  31. $checked[$sef_url] = "saved";
  32. }
  33. }
  34. // Clean metadata
  35. function clean($where = "", $fields) {
  36. // Get records
  37. $records = AceDatabase::loadObjectList("SELECT id FROM #__acesef_metadata {$where}");
  38. if (!empty($records)) {
  39. foreach ($records as $i => $record) {
  40. $id = $record->id;
  41. $metadata = "";
  42. if(is_array($fields) && count($fields) > 0) {
  43. foreach($fields as $index => $field) {
  44. $metadata .= "{$field} = '', ";
  45. }
  46. if (!empty($metadata)) {
  47. $metadata = rtrim($metadata, ', ');
  48. AceDatabase::query("UPDATE #__acesef_metadata SET {$metadata} WHERE id = {$id}");
  49. }
  50. }
  51. }
  52. return true;
  53. } else {
  54. return false;
  55. }
  56. }
  57. // Delete metadata
  58. function delete($where = "", $fields) {
  59. $metadata = "";
  60. if (is_array($fields) && count($fields) > 0) {
  61. foreach($fields as $index => $field) {
  62. $metadata .= "{$field} != '' AND ";
  63. }
  64. if (!empty($metadata)) {
  65. if ($where == "") {
  66. $where = " WHERE ";
  67. }
  68. $metadata = rtrim($metadata, 'AND ');
  69. AceDatabase::query("DELETE FROM #__acesef_metadata {$where}{$metadata}");
  70. }
  71. return true;
  72. }
  73. else {
  74. return false;
  75. }
  76. }
  77. // Update meta
  78. function update($where = "", $fields) {
  79. // Get records
  80. $urls = AceDatabase::loadObjectList("SELECT m.id, m.url_sef, u.url_real FROM #__acesef_metadata AS m, #__acesef_urls AS u WHERE m.url_sef = u.url_sef {$where}");
  81. if (!empty($urls)) {
  82. $ret = "";
  83. foreach ($urls as $i => $record) {
  84. $id = $record->id;
  85. $sef_url = $record->url_sef;
  86. $real_url = $record->url_real;
  87. if (!strpos($real_url, "option=")) {
  88. continue;
  89. }
  90. $component = AcesefUtility::getOptionFromRealURL($real_url);
  91. if (file_exists(JPATH_ACESEF_ADMIN.DS.'extensions'.DS.$component.'.php')) {
  92. $acesef_ext = AcesefFactory::getExtension($component);
  93. $uri = AcesefURI::_createURI($real_url);
  94. $acesef_ext->beforeBuild($uri);
  95. $segments = array();
  96. $do_sef = true;
  97. $meta = null;
  98. $item_limitstart = false;
  99. $acesef_ext->build($uri->_vars, $segments, $do_sef, $meta, $item_limitstart);
  100. if (is_array($meta) && count($meta) > 0 && !empty($fields) && is_array($fields)) {
  101. $metadata = "";
  102. foreach ($fields as $index => $field) {
  103. if (!empty($meta[$field])) {
  104. $metadata .= "{$field} = '{$meta[$field]}', ";
  105. }
  106. }
  107. if (!empty($metadata)) {
  108. $metadata = rtrim($metadata, ', ');
  109. AceDatabase::query("UPDATE #__acesef_metadata SET {$metadata} WHERE id = {$id}");
  110. $ret .= $sef_url.' ===> '.JText::_('ACESEF_METADATA_UPDATED_OK').'<br/>';
  111. } else {
  112. $ret .= $sef_url.' ===> '.JText::_('ACESEF_METADATA_UPDATED_CANT').'<br/>';
  113. }
  114. } else {
  115. $ret .= JText::_('ACESEF_METADATA_UPDATED_NO');
  116. }
  117. } else {
  118. $ret .= $sef_url.' ===> '.JText::_('ACESEF_METADATA_UPDATED_NO_EXTENSION').'<br/>';
  119. }
  120. }
  121. return $ret;
  122. } else {
  123. return JText::_('ACESEF_METADATA_UPDATED_NO');
  124. }
  125. }
  126. function plugin($document) {
  127. $mainframe =& JFactory::getApplication();
  128. // Meta
  129. $url_id = $mainframe->get('acesef.url.id');
  130. $url_sef = $mainframe->get('acesef.url.sef');
  131. $auto_desc = AcesefUtility::replaceSpecialChars($mainframe->get('acesef.meta.autodesc'), true);
  132. $auto_key = AcesefUtility::replaceSpecialChars($mainframe->get('acesef.meta.autokey'), true);
  133. $meta_title = AcesefUtility::replaceSpecialChars($mainframe->get('acesef.meta.title'), true);
  134. $meta_desc = AcesefUtility::replaceSpecialChars($mainframe->get('acesef.meta.desc'), true);
  135. $meta_key = AcesefUtility::replaceSpecialChars($mainframe->get('acesef.meta.key'), true);
  136. $meta_lang = $mainframe->get('acesef.meta.lang');
  137. $meta_robots = $mainframe->get('acesef.meta.robots');
  138. $meta_google = $mainframe->get('acesef.meta.google');
  139. $link_canonical = $mainframe->get('acesef.link.canonical');
  140. $generator = $this->AcesefConfig->meta_generator;
  141. $abstract = $this->AcesefConfig->meta_abstract;
  142. $revisit = $this->AcesefConfig->meta_revisit;
  143. $direction = $this->AcesefConfig->meta_direction;
  144. $google_key = $this->AcesefConfig->meta_googlekey;
  145. $live_key = $this->AcesefConfig->meta_livekey;
  146. $yahoo_key = $this->AcesefConfig->meta_yahookey;
  147. $alexa_key = $this->AcesefConfig->meta_alexa;
  148. $name_1 = $this->AcesefConfig->meta_name_1;
  149. $name_2 = $this->AcesefConfig->meta_name_2;
  150. $name_3 = $this->AcesefConfig->meta_name_3;
  151. $con_1 = $this->AcesefConfig->meta_con_1;
  152. $con_2 = $this->AcesefConfig->meta_con_2;
  153. $con_3 = $this->AcesefConfig->meta_con_3;
  154. // Core tags
  155. if ($this->AcesefConfig->meta_core == 1) {
  156. // Get original title, desc and keys
  157. $org_title = $document->getTitle();
  158. $org_desc = $document->getDescription();
  159. $org_key = $document->getMetaData('keywords');
  160. // Meta that need to be updated
  161. $update_meta = array();
  162. // Title
  163. $title = self::_pluginTitle($org_title, $meta_title);
  164. if (!empty($title)) {
  165. $document->setTitle($title);
  166. if (empty($meta_title) && $this->AcesefConfig->meta_title == '1') {
  167. $update_meta['title'] = $title;
  168. }
  169. if ($this->AcesefConfig->meta_title_tag == 1) {
  170. $title_t = str_replace('"', '', $title);
  171. $document->setMetaData('title', $title_t);
  172. }
  173. }
  174. // Description
  175. $description = self::_pluginDescKey($org_desc, $meta_desc, $auto_desc, 'desc');
  176. if (!empty($description)) {
  177. $description = str_replace('"', '', $description);
  178. $document->setDescription($description);
  179. if (empty($meta_desc) && ($this->AcesefConfig->meta_desc == '1' || $this->AcesefConfig->meta_desc == '3')) {
  180. $update_meta['description'] = ltrim($description);
  181. }
  182. }
  183. // Keywords
  184. $keywords = self::_pluginDescKey($org_key, $meta_key, $auto_key, 'key');
  185. if (!empty($keywords)) {
  186. $keywords = str_replace('"', '', $keywords);
  187. $document->setMetaData('keywords', $keywords);
  188. if (empty($meta_key) && ($this->AcesefConfig->meta_key == '1' || $this->AcesefConfig->meta_key == '3')) {
  189. $update_meta['keywords'] = $keywords;
  190. }
  191. }
  192. // Update meta
  193. $uri = JFactory::getURI();
  194. if (!empty($update_meta) && !AcesefURI::_isHomePage($uri)) {
  195. $meta_list = AcesefCache::checkMetadata($url_sef);
  196. if (is_array($meta_list) && !empty($meta_list)) {
  197. $metadata = "";
  198. foreach ($update_meta as $field => $value) {
  199. $val = AcesefUtility::cleanText($value);
  200. $metadata .= "{$field} = '{$val}', ";
  201. }
  202. $metadata = rtrim($metadata, ', ');
  203. AceDatabase::query("UPDATE #__acesef_metadata SET {$metadata} WHERE url_sef = '{$url_sef}'");
  204. }
  205. }
  206. }
  207. // Extra tags
  208. if (!empty($meta_robots)) $document->setMetaData('robots', $meta_robots);
  209. if (!empty($meta_lang)) $document->setMetaData('language', $meta_lang);
  210. if (!empty($meta_google)) $document->setMetaData('googlebot', $meta_google);
  211. if (!empty($link_canonical) && $document->getType() == 'html') $document->addHeadLink($link_canonical, 'canonical');
  212. if (!empty($generator)) $document->setGenerator($generator);
  213. if (!empty($abstract)) $document->setMetaData('abstract', $abstract);
  214. if (!empty($revisit)) $document->setMetaData('revisit', $revisit);
  215. if (!empty($direction)) $document->setDirection($direction);
  216. if (!empty($google_key)) $document->setMetaData('google-site-verification', $google_key);
  217. if (!empty($live_key)) $document->setMetaData('msvalidate.01', $live_key);
  218. if (!empty($yahoo_key)) $document->setMetaData('y_key', $yahoo_key);
  219. if (!empty($alexa_key)) $document->setMetaData('alexaVerifyID', $alexa_key);
  220. if (!empty($name_1)) $document->setMetaData($name_1, $con_1);
  221. if (!empty($name_2)) $document->setMetaData($name_2, $con_2);
  222. if (!empty($name_3)) $document->setMetaData($name_3, $con_3);
  223. }
  224. // Title
  225. function _pluginTitle($org_title, $db_title) {
  226. if (!empty($db_title)) {
  227. return $db_title;
  228. }
  229. // Modify original title
  230. $modified_title = $org_title;
  231. if (!empty($modified_title)) {
  232. $JoomlaConfig = &JFactory::getConfig();
  233. $sitename = $JoomlaConfig->getValue('sitename');
  234. $component = JRequest::getVar('option');
  235. if (file_exists(JPATH_ACESEF_ADMIN.DS.'extensions'.DS.$component.'.xml')) {
  236. $ext_params = AcesefCache::getExtensionParams($component);
  237. $separator = $ext_params->get('separator', '-');
  238. $custom_sitename = $ext_params->get('custom_sitename', '');
  239. $use_sitename = $ext_params->get('use_sitename', '2');
  240. $title_prefix = $ext_params->get('title_prefix', '');
  241. $title_suffix = $ext_params->get('title_suffix', '');
  242. } else {
  243. $separator = $this->AcesefConfig->meta_t_seperator;
  244. $custom_sitename = $this->AcesefConfig->meta_t_sitename;
  245. $use_sitename = $this->AcesefConfig->meta_t_usesitename;
  246. $title_prefix = $this->AcesefConfig->meta_t_prefix;
  247. $title_suffix = $this->AcesefConfig->meta_t_suffix;
  248. }
  249. if (!empty($custom_sitename)) {
  250. $sitename = $custom_sitename;
  251. }
  252. if ($use_sitename == 1) {
  253. $modified_title = $sitename." ".$separator." ".$modified_title;
  254. } elseif ($use_sitename == 2) {
  255. $modified_title = $modified_title." ".$separator." ".$sitename;
  256. }
  257. if (!empty($title_prefix)) {
  258. $modified_title = $title_prefix." ".$separator." ".$modified_title;
  259. }
  260. if (!empty($title_suffix)) {
  261. $modified_title = $modified_title." ".$separator." ".$title_suffix;
  262. }
  263. }
  264. return $modified_title;
  265. }
  266. // Description & Keywords
  267. function _pluginDescKey($org_val, $db_val, $auto_val, $type) {
  268. if ($type == 'desc') {
  269. $AConfig = 'meta_desc';
  270. $JConfig = 'MetaDesc';
  271. } elseif ($type == 'key') {
  272. $AConfig = 'meta_key';
  273. $JConfig = 'MetaKeys';
  274. }
  275. // Let's play
  276. if ($this->AcesefConfig->$AConfig == '1' || $this->AcesefConfig->$AConfig == '3') {
  277. // Get global description
  278. $JoomlaConfig = & JFactory::getConfig();
  279. $global_val = $JoomlaConfig->getValue($JConfig);
  280. // Clean out original description if it's the global one
  281. if ($org_val == $global_val) {
  282. $org_val = '';
  283. }
  284. $val1 = $val2 = '';
  285. if ($this->AcesefConfig->$AConfig == '1') {
  286. $val1 = $auto_val;
  287. $val2 = $org_val;
  288. } else {
  289. $val1 = $org_val;
  290. $val2 = $auto_val;
  291. }
  292. if (empty($db_val)) {
  293. if (empty($val1)) {
  294. return $val2;
  295. } else {
  296. return $val1;
  297. }
  298. } else {
  299. return $db_val;
  300. }
  301. } else {
  302. if (empty($db_val)) {
  303. return $org_val;
  304. } else {
  305. return $db_val;
  306. }
  307. }
  308. }
  309. }