blob: b7f1d2e1acd1c8cb3312cd6b8cd11e44828688f7 [file] [log] [blame]
Andrey Andreevc5536aa2012-11-01 17:33:58 +02001<?php
Derek Allard2067d1a2008-11-13 22:59:24 +00002/**
3 * CodeIgniter
4 *
Andrey Andreevfe9309d2015-01-09 17:48:58 +02005 * An open source application development framework for PHP
Derek Allard2067d1a2008-11-13 22:59:24 +00006 *
Andrey Andreevbdb96ca2014-10-28 00:13:31 +02007 * This content is released under the MIT License (MIT)
Andrey Andreeve684bda2012-03-26 13:47:29 +03008 *
Andrey Andreevcce6bd12018-01-09 11:32:02 +02009 * Copyright (c) 2014 - 2018, British Columbia Institute of Technology
Andrey Andreeve684bda2012-03-26 13:47:29 +030010 *
Andrey Andreevbdb96ca2014-10-28 00:13:31 +020011 * Permission is hereby granted, free of charge, to any person obtaining a copy
12 * of this software and associated documentation files (the "Software"), to deal
13 * in the Software without restriction, including without limitation the rights
14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 * copies of the Software, and to permit persons to whom the Software is
16 * furnished to do so, subject to the following conditions:
Derek Jonesf4a4bd82011-10-20 12:18:42 -050017 *
Andrey Andreevbdb96ca2014-10-28 00:13:31 +020018 * The above copyright notice and this permission notice shall be included in
19 * all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 * THE SOFTWARE.
28 *
29 * @package CodeIgniter
30 * @author EllisLab Dev Team
Andrey Andreev1924e872016-01-11 12:55:34 +020031 * @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
Andrey Andreevcce6bd12018-01-09 11:32:02 +020032 * @copyright Copyright (c) 2014 - 2018, British Columbia Institute of Technology (http://bcit.ca/)
Andrey Andreevbdb96ca2014-10-28 00:13:31 +020033 * @license http://opensource.org/licenses/MIT MIT License
Andrey Andreevbd202c92016-01-11 12:50:18 +020034 * @link https://codeigniter.com
Andrey Andreevbdb96ca2014-10-28 00:13:31 +020035 * @since Version 1.0.0
Derek Allard2067d1a2008-11-13 22:59:24 +000036 * @filesource
37 */
Andrey Andreevc5536aa2012-11-01 17:33:58 +020038defined('BASEPATH') OR exit('No direct script access allowed');
Derek Allard2067d1a2008-11-13 22:59:24 +000039
Derek Allard2067d1a2008-11-13 22:59:24 +000040/**
41 * CodeIgniter Smiley Helpers
42 *
43 * @package CodeIgniter
44 * @subpackage Helpers
45 * @category Helpers
Derek Jonesf4a4bd82011-10-20 12:18:42 -050046 * @author EllisLab Dev Team
Andrey Andreevbd202c92016-01-11 12:50:18 +020047 * @link https://codeigniter.com/user_guide/helpers/smiley_helper.html
Andrey Andreev21c3c222014-12-04 12:10:00 +020048 * @deprecated 3.0.0 This helper is too specific for CI.
Derek Allard2067d1a2008-11-13 22:59:24 +000049 */
50
51// ------------------------------------------------------------------------
52
Pascal Krietede8f4092009-07-29 13:46:37 +000053if ( ! function_exists('smiley_js'))
Derek Allard2067d1a2008-11-13 22:59:24 +000054{
Timothy Warrenb75faa12012-04-27 12:03:32 -040055 /**
56 * Smiley Javascript
57 *
58 * Returns the javascript required for the smiley insertion. Optionally takes
59 * an array of aliases to loosely couple the smiley array to the view.
60 *
61 * @param mixed alias name or array of alias->field_id pairs
62 * @param string field_id if alias name was passed in
63 * @param bool
64 * @return array
65 */
Greg Aker60e78c72010-04-20 12:45:14 -050066 function smiley_js($alias = '', $field_id = '', $inline = TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +000067 {
Pascal Krietede8f4092009-07-29 13:46:37 +000068 static $do_setup = TRUE;
Pascal Krietede8f4092009-07-29 13:46:37 +000069 $r = '';
Barry Mienydd671972010-10-04 16:33:58 +020070
Alex Bilbie773ccc32012-06-02 11:11:08 +010071 if ($alias !== '' && ! is_array($alias))
Pascal Krietede8f4092009-07-29 13:46:37 +000072 {
73 $alias = array($alias => $field_id);
74 }
75
76 if ($do_setup === TRUE)
77 {
Andrey Andreev4921fed2012-01-07 01:28:07 +020078 $do_setup = FALSE;
79 $m = array();
Barry Mienydd671972010-10-04 16:33:58 +020080
Pascal Krietede8f4092009-07-29 13:46:37 +000081 if (is_array($alias))
82 {
Pascal Kriete45e3cdf2011-02-14 13:26:20 -050083 foreach ($alias as $name => $id)
Pascal Krietede8f4092009-07-29 13:46:37 +000084 {
Andrey Andreev4921fed2012-01-07 01:28:07 +020085 $m[] = '"'.$name.'" : "'.$id.'"';
Pascal Krietede8f4092009-07-29 13:46:37 +000086 }
87 }
Andrey Andreev4921fed2012-01-07 01:28:07 +020088
89 $m = '{'.implode(',', $m).'}';
90
91 $r .= <<<EOF
92 var smiley_map = {$m};
93
94 function insert_smiley(smiley, field_id) {
95 var el = document.getElementById(field_id), newStart;
96
97 if ( ! el && smiley_map[field_id]) {
98 el = document.getElementById(smiley_map[field_id]);
99
100 if ( ! el)
101 return false;
Derek Allard2067d1a2008-11-13 22:59:24 +0000102 }
103
Andrey Andreev4921fed2012-01-07 01:28:07 +0200104 el.focus();
105 smiley = " " + smiley;
Derek Allard2067d1a2008-11-13 22:59:24 +0000106
Andrey Andreev4921fed2012-01-07 01:28:07 +0200107 if ('selectionStart' in el) {
108 newStart = el.selectionStart + smiley.length;
Derek Allard2067d1a2008-11-13 22:59:24 +0000109
Andrey Andreev4921fed2012-01-07 01:28:07 +0200110 el.value = el.value.substr(0, el.selectionStart) +
111 smiley +
112 el.value.substr(el.selectionEnd, el.value.length);
113 el.setSelectionRange(newStart, newStart);
Derek Allard2067d1a2008-11-13 22:59:24 +0000114 }
Andrey Andreev4921fed2012-01-07 01:28:07 +0200115 else if (document.selection) {
116 document.selection.createRange().text = smiley;
117 }
118 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000119EOF;
Pascal Krietede8f4092009-07-29 13:46:37 +0000120 }
Andrey Andreev09375d72012-01-19 14:57:46 +0200121 elseif (is_array($alias))
Pascal Krietede8f4092009-07-29 13:46:37 +0000122 {
Andrey Andreev09375d72012-01-19 14:57:46 +0200123 foreach ($alias as $name => $id)
Pascal Krietede8f4092009-07-29 13:46:37 +0000124 {
Andrey Andreev09375d72012-01-19 14:57:46 +0200125 $r .= 'smiley_map["'.$name.'"] = "'.$id."\";\n";
Pascal Krietede8f4092009-07-29 13:46:37 +0000126 }
127 }
128
Andrey Andreevea41c8a2014-02-26 18:31:02 +0200129 return ($inline)
130 ? '<script type="text/javascript" charset="utf-8">/*<![CDATA[ */'.$r.'// ]]></script>'
131 : $r;
Derek Allard2067d1a2008-11-13 22:59:24 +0000132 }
133}
Pascal Krietede8f4092009-07-29 13:46:37 +0000134
Derek Allard2067d1a2008-11-13 22:59:24 +0000135// ------------------------------------------------------------------------
136
Derek Allard2067d1a2008-11-13 22:59:24 +0000137if ( ! function_exists('get_clickable_smileys'))
138{
Timothy Warrenb75faa12012-04-27 12:03:32 -0400139 /**
140 * Get Clickable Smileys
141 *
142 * Returns an array of image tag links that can be clicked to be inserted
143 * into a form field.
144 *
145 * @param string the URL to the folder containing the smiley images
146 * @param array
Timothy Warrenb75faa12012-04-27 12:03:32 -0400147 * @return array
148 */
Andrey Andreev53b8ef52012-11-08 21:38:53 +0200149 function get_clickable_smileys($image_url, $alias = '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000150 {
Pascal Krietede8f4092009-07-29 13:46:37 +0000151 // For backward compatibility with js_insert_smiley
Pascal Krietede8f4092009-07-29 13:46:37 +0000152 if (is_array($alias))
153 {
154 $smileys = $alias;
155 }
Andrey Andreev09375d72012-01-19 14:57:46 +0200156 elseif (FALSE === ($smileys = _get_smiley_array()))
Derek Allard2067d1a2008-11-13 22:59:24 +0000157 {
Andrey Andreev53b8ef52012-11-08 21:38:53 +0200158 return FALSE;
Derek Allard2067d1a2008-11-13 22:59:24 +0000159 }
160
161 // Add a trailing slash to the file path if needed
Pascal Krietede8f4092009-07-29 13:46:37 +0000162 $image_url = rtrim($image_url, '/').'/';
Barry Mienydd671972010-10-04 16:33:58 +0200163
Derek Allard2067d1a2008-11-13 22:59:24 +0000164 $used = array();
165 foreach ($smileys as $key => $val)
166 {
167 // Keep duplicates from being used, which can happen if the
Andrey Andreev09375d72012-01-19 14:57:46 +0200168 // mapping array contains multiple identical replacements. For example:
Derek Allard2067d1a2008-11-13 22:59:24 +0000169 // :-) and :) might be replaced with the same image so both smileys
170 // will be in the array.
171 if (isset($used[$smileys[$key][0]]))
172 {
173 continue;
174 }
Barry Mienydd671972010-10-04 16:33:58 +0200175
Andrey Andreev09375d72012-01-19 14:57:46 +0200176 $link[] = '<a href="javascript:void(0);" onclick="insert_smiley(\''.$key.'\', \''.$alias.'\')"><img src="'.$image_url.$smileys[$key][0].'" alt="'.$smileys[$key][3].'" style="width: '.$smileys[$key][1].'; height: '.$smileys[$key][2].'; border: 0;" /></a>';
Derek Allard2067d1a2008-11-13 22:59:24 +0000177 $used[$smileys[$key][0]] = TRUE;
178 }
Barry Mienydd671972010-10-04 16:33:58 +0200179
Derek Allard2067d1a2008-11-13 22:59:24 +0000180 return $link;
181 }
182}
183
184// ------------------------------------------------------------------------
185
Derek Allard2067d1a2008-11-13 22:59:24 +0000186if ( ! function_exists('parse_smileys'))
187{
Timothy Warrenb75faa12012-04-27 12:03:32 -0400188 /**
189 * Parse Smileys
190 *
191 * Takes a string as input and swaps any contained smileys for the actual image
192 *
193 * @param string the text to be parsed
194 * @param string the URL to the folder containing the smiley images
195 * @param array
196 * @return string
197 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000198 function parse_smileys($str = '', $image_url = '', $smileys = NULL)
199 {
Alex Bilbie773ccc32012-06-02 11:11:08 +0100200 if ($image_url === '' OR ( ! is_array($smileys) && FALSE === ($smileys = _get_smiley_array())))
Derek Allard2067d1a2008-11-13 22:59:24 +0000201 {
202 return $str;
203 }
204
Derek Allard2067d1a2008-11-13 22:59:24 +0000205 // Add a trailing slash to the file path if needed
Andrey Andreev4921fed2012-01-07 01:28:07 +0200206 $image_url = rtrim($image_url, '/').'/';
Derek Allard2067d1a2008-11-13 22:59:24 +0000207
208 foreach ($smileys as $key => $val)
209 {
Andrey Andreev09375d72012-01-19 14:57:46 +0200210 $str = str_replace($key, '<img src="'.$image_url.$smileys[$key][0].'" alt="'.$smileys[$key][3].'" style="width: '.$smileys[$key][1].'; height: '.$smileys[$key][2].'; border: 0;" />', $str);
Derek Allard2067d1a2008-11-13 22:59:24 +0000211 }
212
213 return $str;
214 }
215}
216
217// ------------------------------------------------------------------------
218
Derek Allard2067d1a2008-11-13 22:59:24 +0000219if ( ! function_exists('_get_smiley_array'))
220{
Timothy Warrenb75faa12012-04-27 12:03:32 -0400221 /**
222 * Get Smiley Array
223 *
224 * Fetches the config/smiley.php file
225 *
226 * @return mixed
227 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000228 function _get_smiley_array()
229 {
Andrey Andreev06879112013-01-29 15:05:02 +0200230 static $_smileys;
231
Andrey Andreev66096142014-11-23 17:39:39 +0200232 if ( ! is_array($_smileys))
Greg Akerd96f8822011-12-27 16:23:47 -0600233 {
Andrey Andreev06879112013-01-29 15:05:02 +0200234 if (file_exists(APPPATH.'config/smileys.php'))
235 {
236 include(APPPATH.'config/smileys.php');
237 }
238
239 if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/smileys.php'))
240 {
241 include(APPPATH.'config/'.ENVIRONMENT.'/smileys.php');
242 }
243
244 if (empty($smileys) OR ! is_array($smileys))
245 {
246 $_smileys = array();
247 return FALSE;
248 }
249
250 $_smileys = $smileys;
Greg Akerd96f8822011-12-27 16:23:47 -0600251 }
Andrey Andreeve684bda2012-03-26 13:47:29 +0300252
Andrey Andreev06879112013-01-29 15:05:02 +0200253 return $_smileys;
Derek Allard2067d1a2008-11-13 22:59:24 +0000254 }
255}