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

/sources/controllers/Suggest.controller.php

https://github.com/Arantor/Elkarte
PHP | 165 lines | 108 code | 19 blank | 38 comment | 8 complexity | 56036def10f98f386c4e6dab140a8e03 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-3.0
  1. <?php
  2. /**
  3. * @name ElkArte Forum
  4. * @copyright ElkArte Forum contributors
  5. * @license BSD http://opensource.org/licenses/BSD-3-Clause
  6. *
  7. * This software is a derived product, based on:
  8. *
  9. * Simple Machines Forum (SMF)
  10. * copyright: 2011 Simple Machines (http://www.simplemachines.org)
  11. * license: BSD, See included LICENSE.TXT for terms and conditions.
  12. *
  13. * @version 1.0 Alpha
  14. *
  15. * This file contains those functions specific to the editing box and is
  16. * generally used for WYSIWYG type functionality.
  17. *
  18. */
  19. if (!defined('ELKARTE'))
  20. die('No access...');
  21. /**
  22. * This keeps track of all registered handling functions for auto suggest
  23. * functionality and passes execution to them.
  24. * Accessed by action=suggest.
  25. *
  26. * @param bool $checkRegistered = null
  27. */
  28. function action_suggest($checkRegistered = null)
  29. {
  30. global $context;
  31. // These are all registered types.
  32. $searchTypes = array(
  33. 'member' => 'member',
  34. 'versions' => 'versions',
  35. );
  36. call_integration_hook('integrate_autosuggest', array($searchTypes));
  37. // If we're just checking the callback function is registered return true or false.
  38. if ($checkRegistered != null)
  39. return isset($searchTypes[$checkRegistered]) && function_exists('action_suggest_' . $checkRegistered);
  40. checkSession('get');
  41. loadTemplate('Xml');
  42. // Any parameters?
  43. $context['search_param'] = isset($_REQUEST['search_param']) ? unserialize(base64_decode($_REQUEST['search_param'])) : array();
  44. if (isset($_REQUEST['suggest_type'], $_REQUEST['search']) && isset($searchTypes[$_REQUEST['suggest_type']]))
  45. {
  46. $function = 'action_suggest_' . $searchTypes[$_REQUEST['suggest_type']];
  47. $context['sub_template'] = 'generic_xml';
  48. $context['xml_data'] = $function();
  49. }
  50. }
  51. /**
  52. * Search for a member - by real_name or member_name by default.
  53. *
  54. * @return string
  55. */
  56. function action_suggest_member()
  57. {
  58. global $user_info, $txt, $smcFunc, $context;
  59. $_REQUEST['search'] = trim($smcFunc['strtolower']($_REQUEST['search'])) . '*';
  60. $_REQUEST['search'] = strtr($_REQUEST['search'], array('%' => '\%', '_' => '\_', '*' => '%', '?' => '_', '&#038;' => '&amp;'));
  61. // Find the member.
  62. $request = $smcFunc['db_query']('', '
  63. SELECT id_member, real_name
  64. FROM {db_prefix}members
  65. WHERE real_name LIKE {string:search}' . (!empty($context['search_param']['buddies']) ? '
  66. AND id_member IN ({array_int:buddy_list})' : '') . '
  67. AND is_activated IN (1, 11)
  68. LIMIT ' . ($smcFunc['strlen']($_REQUEST['search']) <= 2 ? '100' : '800'),
  69. array(
  70. 'buddy_list' => $user_info['buddies'],
  71. 'search' => $_REQUEST['search'],
  72. )
  73. );
  74. $xml_data = array(
  75. 'items' => array(
  76. 'identifier' => 'item',
  77. 'children' => array(),
  78. ),
  79. );
  80. while ($row = $smcFunc['db_fetch_assoc']($request))
  81. {
  82. $row['real_name'] = strtr($row['real_name'], array('&amp;' => '&#038;', '&lt;' => '&#060;', '&gt;' => '&#062;', '&quot;' => '&#034;'));
  83. $xml_data['items']['children'][] = array(
  84. 'attributes' => array(
  85. 'id' => $row['id_member'],
  86. ),
  87. 'value' => $row['real_name'],
  88. );
  89. }
  90. $smcFunc['db_free_result']($request);
  91. return $xml_data;
  92. }
  93. /**
  94. * Provides a list of possible SMF versions to use in emulation
  95. *
  96. * @return string
  97. */
  98. function action_suggest_versions()
  99. {
  100. $xml_data = array(
  101. 'items' => array(
  102. 'identifier' => 'item',
  103. 'children' => array(),
  104. ),
  105. );
  106. $versions = array(
  107. 'SMF 1.1',
  108. 'SMF 1.1.1',
  109. 'SMF 1.1.2',
  110. 'SMF 1.1.3',
  111. 'SMF 1.1.4',
  112. 'SMF 1.1.5',
  113. 'SMF 1.1.6',
  114. 'SMF 1.1.7',
  115. 'SMF 1.1.8',
  116. 'SMF 1.1.9',
  117. 'SMF 1.1.10',
  118. 'SMF 1.1.11',
  119. 'SMF 1.1.12',
  120. 'SMF 1.1.13',
  121. 'SMF 1.1.14',
  122. 'SMF 1.1.15',
  123. 'SMF 1.1.16',
  124. 'SMF 2.0 beta 1',
  125. 'SMF 2.0 beta 1.2',
  126. 'SMF 2.0 beta 2',
  127. 'SMF 2.0 beta 3',
  128. 'SMF 2.0 RC 1',
  129. 'SMF 2.0 RC 1.2',
  130. 'SMF 2.0 RC 2',
  131. 'SMF 2.0 RC 3',
  132. 'SMF 2.0',
  133. 'SMF 2.0.1',
  134. 'SMF 2.0.2',
  135. 'ELKARTE 1.0',
  136. );
  137. foreach ($versions as $id => $version)
  138. if (strpos($version, strtoupper($_REQUEST['search'])) !== false)
  139. $xml_data['items']['children'][] = array(
  140. 'attributes' => array(
  141. 'id' => $id,
  142. ),
  143. 'value' => $version,
  144. );
  145. return $xml_data;
  146. }