@@ -29,217 +29,217 @@ |
||
29 | 29 | */ |
30 | 30 | class SysUtility |
31 | 31 | { |
32 | - use VersionChecks; |
|
33 | - |
|
34 | - //checkVerXoops, checkVerPhp Traits |
|
35 | - |
|
36 | - use ServerStats; |
|
37 | - |
|
38 | - // getServerStats Trait |
|
39 | - |
|
40 | - use FilesManagement; |
|
41 | - |
|
42 | - // Files Management Trait |
|
43 | - |
|
44 | - /** |
|
45 | - * truncateHtml can truncate a string up to a number of characters while preserving whole words and HTML tags |
|
46 | - * www.gsdesign.ro/blog/cut-html-string-without-breaking-the-tags |
|
47 | - * www.cakephp.org |
|
48 | - * |
|
49 | - * @param string $text String to truncate. |
|
50 | - * @param int $length Length of returned string, including ellipsis. |
|
51 | - * @param string $ending Ending to be appended to the trimmed string. |
|
52 | - * @param bool $exact If false, $text will not be cut mid-word |
|
53 | - * @param bool $considerHtml If true, HTML tags would be handled correctly |
|
54 | - * |
|
55 | - * @return string Trimmed string. |
|
56 | - */ |
|
57 | - public static function truncateHtml($text, $length = 100, $ending = '...', $exact = false, $considerHtml = true): string |
|
58 | - { |
|
59 | - if ($considerHtml) { |
|
60 | - // if the plain text is shorter than the maximum length, return the whole text |
|
61 | - if (mb_strlen(\preg_replace('/<.*?' . '>/', '', $text)) <= $length) { |
|
62 | - return $text; |
|
63 | - } |
|
64 | - // splits all html-tags to scanable lines |
|
65 | - \preg_match_all('/(<.+?' . '>)?([^<>]*)/s', $text, $lines, \PREG_SET_ORDER); |
|
66 | - $total_length = mb_strlen($ending); |
|
67 | - $open_tags = []; |
|
68 | - $truncate = ''; |
|
69 | - foreach ($lines as $line_matchings) { |
|
70 | - // if there is any html-tag in this line, handle it and add it (uncounted) to the output |
|
71 | - if (!empty($line_matchings[1])) { |
|
72 | - // if it's an "empty element" with or without xhtml-conform closing slash |
|
73 | - if (\preg_match('/^<(\s*.+?\/\s*|\s*(img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param)(\s.+?)?)>$/is', $line_matchings[1])) { |
|
74 | - // do nothing |
|
75 | - // if tag is a closing tag |
|
76 | - } elseif (\preg_match('/^<\s*\/(\S+?)\s*>$/s', $line_matchings[1], $tag_matchings)) { |
|
77 | - // delete tag from $open_tags list |
|
78 | - $pos = \array_search($tag_matchings[1], $open_tags, true); |
|
79 | - if (false !== $pos) { |
|
80 | - unset($open_tags[$pos]); |
|
81 | - } |
|
82 | - // if tag is an opening tag |
|
83 | - } elseif (\preg_match('/^<\s*([^\s>!]+).*?' . '>$/s', $line_matchings[1], $tag_matchings)) { |
|
84 | - // add tag to the beginning of $open_tags list |
|
85 | - \array_unshift($open_tags, \mb_strtolower($tag_matchings[1])); |
|
86 | - } |
|
87 | - // add html-tag to $truncate'd text |
|
88 | - $truncate .= $line_matchings[1]; |
|
89 | - } |
|
90 | - // calculate the length of the plain text part of the line; handle entities as one character |
|
91 | - $content_length = mb_strlen(\preg_replace('/&[0-9a-z]{2,8};|&#\d{1,7};|[0-9a-f]{1,6};/i', ' ', $line_matchings[2])); |
|
92 | - if ($total_length + $content_length > $length) { |
|
93 | - // the number of characters which are left |
|
94 | - $left = $length - $total_length; |
|
95 | - $entities_length = 0; |
|
96 | - // search for html entities |
|
97 | - if (\preg_match_all('/&[0-9a-z]{2,8};|&#\d{1,7};|[0-9a-f]{1,6};/i', $line_matchings[2], $entities, \PREG_OFFSET_CAPTURE)) { |
|
98 | - // calculate the real length of all entities in the legal range |
|
99 | - foreach ($entities[0] as $entity) { |
|
100 | - if ($left >= $entity[1] + 1 - $entities_length) { |
|
101 | - $left--; |
|
102 | - $entities_length += mb_strlen($entity[0]); |
|
103 | - } else { |
|
104 | - // no more characters left |
|
105 | - break; |
|
106 | - } |
|
107 | - } |
|
108 | - } |
|
109 | - $truncate .= mb_substr($line_matchings[2], 0, $left + $entities_length); |
|
110 | - // maximum lenght is reached, so get off the loop |
|
111 | - break; |
|
112 | - } |
|
113 | - $truncate .= $line_matchings[2]; |
|
114 | - $total_length += $content_length; |
|
115 | - |
|
116 | - // if the maximum length is reached, get off the loop |
|
117 | - if ($total_length >= $length) { |
|
118 | - break; |
|
119 | - } |
|
120 | - } |
|
121 | - } else { |
|
122 | - if (mb_strlen($text) <= $length) { |
|
123 | - return $text; |
|
124 | - } |
|
125 | - $truncate = mb_substr($text, 0, $length - mb_strlen($ending)); |
|
126 | - } |
|
127 | - // if the words shouldn't be cut in the middle... |
|
128 | - if (!$exact) { |
|
129 | - // ...search the last occurance of a space... |
|
130 | - $spacepos = mb_strrpos($truncate, ' '); |
|
131 | - if (isset($spacepos)) { |
|
132 | - // ...and cut the text in this position |
|
133 | - $truncate = mb_substr($truncate, 0, $spacepos); |
|
134 | - } |
|
135 | - } |
|
136 | - // add the defined ending to the text |
|
137 | - $truncate .= $ending; |
|
138 | - if ($considerHtml) { |
|
139 | - // close all unclosed html-tags |
|
140 | - foreach ($open_tags as $tag) { |
|
141 | - $truncate .= '</' . $tag . '>'; |
|
142 | - } |
|
143 | - } |
|
144 | - |
|
145 | - return $truncate; |
|
146 | - } |
|
147 | - |
|
148 | - /** |
|
149 | - * @param \Xmf\Module\Helper $helper |
|
150 | - * @param array|null $options |
|
151 | - * @return \XoopsFormDhtmlTextArea|\XoopsFormEditor |
|
152 | - */ |
|
153 | - public static function getEditor($helper = null, $options = null) |
|
154 | - { |
|
155 | - /** @var Helper $helper */ |
|
156 | - if (null === $options) { |
|
157 | - $options = []; |
|
158 | - $options['name'] = 'Editor'; |
|
159 | - $options['value'] = 'Editor'; |
|
160 | - $options['rows'] = 10; |
|
161 | - $options['cols'] = '100%'; |
|
162 | - $options['width'] = '100%'; |
|
163 | - $options['height'] = '400px'; |
|
164 | - } |
|
165 | - |
|
166 | - if (null === $helper) { |
|
167 | - $helper = Helper::getInstance(); |
|
168 | - } |
|
169 | - |
|
170 | - $isAdmin = $helper->isUserAdmin(); |
|
171 | - |
|
172 | - if (\class_exists('XoopsFormEditor')) { |
|
173 | - if ($isAdmin) { |
|
174 | - $descEditor = new \XoopsFormEditor(\ucfirst($options['name']), $helper->getConfig('editorAdmin'), $options, $nohtml = false, $onfailure = 'textarea'); |
|
175 | - } else { |
|
176 | - $descEditor = new \XoopsFormEditor(\ucfirst($options['name']), $helper->getConfig('editorUser'), $options, $nohtml = false, $onfailure = 'textarea'); |
|
177 | - } |
|
178 | - } else { |
|
179 | - $descEditor = new \XoopsFormDhtmlTextArea(\ucfirst($options['name']), $options['name'], $options['value'], '100%', '100%'); |
|
180 | - } |
|
181 | - |
|
182 | - // $form->addElement($descEditor); |
|
183 | - |
|
184 | - return $descEditor; |
|
185 | - } |
|
186 | - |
|
187 | - /** |
|
188 | - * @param string $fieldname |
|
189 | - * @param string $table |
|
190 | - * @return bool |
|
191 | - */ |
|
192 | - public static function fieldExists(string $fieldname, string $table): bool |
|
193 | - { |
|
194 | - global $xoopsDB; |
|
195 | - $result = $xoopsDB->queryF("SHOW COLUMNS FROM $table LIKE '$fieldname'"); |
|
196 | - |
|
197 | - return ($xoopsDB->getRowsNum($result) > 0); |
|
198 | - } |
|
199 | - |
|
200 | - /** |
|
201 | - * @param array|string $tableName |
|
202 | - * @param int $id_field |
|
203 | - * @param int $id |
|
204 | - * |
|
205 | - * @return mixed |
|
206 | - */ |
|
207 | - public static function cloneRecord($tableName, $id_field, $id) |
|
208 | - { |
|
209 | - $new_id = false; |
|
210 | - $table = $GLOBALS['xoopsDB']->prefix($tableName); |
|
211 | - // copy content of the record you wish to clone |
|
212 | - $sql = "SELECT * FROM $table WHERE $idField='" . $id . "' "; |
|
213 | - $result = $GLOBALS['xoopsDB']->query($sql); |
|
214 | - if ($result instanceof \mysqli_result) { |
|
215 | - $tempTable = $GLOBALS['xoopsDB']->fetchArray($result, \MYSQLI_ASSOC); |
|
216 | - } |
|
217 | - if (!$tempTable) { |
|
218 | - \trigger_error($GLOBALS['xoopsDB']->error()); |
|
219 | - } |
|
220 | - // set the auto-incremented id's value to blank. |
|
221 | - unset($tempTable[$id_field]); |
|
222 | - // insert cloned copy of the original record |
|
223 | - $sql = "INSERT INTO $table (" . \implode(', ', \array_keys($tempTable)) . ") VALUES ('" . \implode("', '", \array_values($tempTable)) . "')"; |
|
224 | - $result = $GLOBALS['xoopsDB']->queryF($sql); |
|
225 | - if (!$result) { |
|
226 | - \trigger_error($GLOBALS['xoopsDB']->error()); |
|
227 | - } |
|
228 | - // Return the new id |
|
229 | - $new_id = $GLOBALS['xoopsDB']->getInsertId(); |
|
230 | - |
|
231 | - return $new_id; |
|
232 | - } |
|
233 | - |
|
234 | - /** |
|
235 | - * @param string $tablename |
|
236 | - * |
|
237 | - * @return bool |
|
238 | - */ |
|
239 | - public static function tableExists($tablename): bool |
|
240 | - { |
|
241 | - $result = $GLOBALS['xoopsDB']->queryF("SHOW TABLES LIKE '$tablename'"); |
|
242 | - |
|
243 | - return $GLOBALS['xoopsDB']->getRowsNum($result) > 0; |
|
244 | - } |
|
32 | + use VersionChecks; |
|
33 | + |
|
34 | + //checkVerXoops, checkVerPhp Traits |
|
35 | + |
|
36 | + use ServerStats; |
|
37 | + |
|
38 | + // getServerStats Trait |
|
39 | + |
|
40 | + use FilesManagement; |
|
41 | + |
|
42 | + // Files Management Trait |
|
43 | + |
|
44 | + /** |
|
45 | + * truncateHtml can truncate a string up to a number of characters while preserving whole words and HTML tags |
|
46 | + * www.gsdesign.ro/blog/cut-html-string-without-breaking-the-tags |
|
47 | + * www.cakephp.org |
|
48 | + * |
|
49 | + * @param string $text String to truncate. |
|
50 | + * @param int $length Length of returned string, including ellipsis. |
|
51 | + * @param string $ending Ending to be appended to the trimmed string. |
|
52 | + * @param bool $exact If false, $text will not be cut mid-word |
|
53 | + * @param bool $considerHtml If true, HTML tags would be handled correctly |
|
54 | + * |
|
55 | + * @return string Trimmed string. |
|
56 | + */ |
|
57 | + public static function truncateHtml($text, $length = 100, $ending = '...', $exact = false, $considerHtml = true): string |
|
58 | + { |
|
59 | + if ($considerHtml) { |
|
60 | + // if the plain text is shorter than the maximum length, return the whole text |
|
61 | + if (mb_strlen(\preg_replace('/<.*?' . '>/', '', $text)) <= $length) { |
|
62 | + return $text; |
|
63 | + } |
|
64 | + // splits all html-tags to scanable lines |
|
65 | + \preg_match_all('/(<.+?' . '>)?([^<>]*)/s', $text, $lines, \PREG_SET_ORDER); |
|
66 | + $total_length = mb_strlen($ending); |
|
67 | + $open_tags = []; |
|
68 | + $truncate = ''; |
|
69 | + foreach ($lines as $line_matchings) { |
|
70 | + // if there is any html-tag in this line, handle it and add it (uncounted) to the output |
|
71 | + if (!empty($line_matchings[1])) { |
|
72 | + // if it's an "empty element" with or without xhtml-conform closing slash |
|
73 | + if (\preg_match('/^<(\s*.+?\/\s*|\s*(img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param)(\s.+?)?)>$/is', $line_matchings[1])) { |
|
74 | + // do nothing |
|
75 | + // if tag is a closing tag |
|
76 | + } elseif (\preg_match('/^<\s*\/(\S+?)\s*>$/s', $line_matchings[1], $tag_matchings)) { |
|
77 | + // delete tag from $open_tags list |
|
78 | + $pos = \array_search($tag_matchings[1], $open_tags, true); |
|
79 | + if (false !== $pos) { |
|
80 | + unset($open_tags[$pos]); |
|
81 | + } |
|
82 | + // if tag is an opening tag |
|
83 | + } elseif (\preg_match('/^<\s*([^\s>!]+).*?' . '>$/s', $line_matchings[1], $tag_matchings)) { |
|
84 | + // add tag to the beginning of $open_tags list |
|
85 | + \array_unshift($open_tags, \mb_strtolower($tag_matchings[1])); |
|
86 | + } |
|
87 | + // add html-tag to $truncate'd text |
|
88 | + $truncate .= $line_matchings[1]; |
|
89 | + } |
|
90 | + // calculate the length of the plain text part of the line; handle entities as one character |
|
91 | + $content_length = mb_strlen(\preg_replace('/&[0-9a-z]{2,8};|&#\d{1,7};|[0-9a-f]{1,6};/i', ' ', $line_matchings[2])); |
|
92 | + if ($total_length + $content_length > $length) { |
|
93 | + // the number of characters which are left |
|
94 | + $left = $length - $total_length; |
|
95 | + $entities_length = 0; |
|
96 | + // search for html entities |
|
97 | + if (\preg_match_all('/&[0-9a-z]{2,8};|&#\d{1,7};|[0-9a-f]{1,6};/i', $line_matchings[2], $entities, \PREG_OFFSET_CAPTURE)) { |
|
98 | + // calculate the real length of all entities in the legal range |
|
99 | + foreach ($entities[0] as $entity) { |
|
100 | + if ($left >= $entity[1] + 1 - $entities_length) { |
|
101 | + $left--; |
|
102 | + $entities_length += mb_strlen($entity[0]); |
|
103 | + } else { |
|
104 | + // no more characters left |
|
105 | + break; |
|
106 | + } |
|
107 | + } |
|
108 | + } |
|
109 | + $truncate .= mb_substr($line_matchings[2], 0, $left + $entities_length); |
|
110 | + // maximum lenght is reached, so get off the loop |
|
111 | + break; |
|
112 | + } |
|
113 | + $truncate .= $line_matchings[2]; |
|
114 | + $total_length += $content_length; |
|
115 | + |
|
116 | + // if the maximum length is reached, get off the loop |
|
117 | + if ($total_length >= $length) { |
|
118 | + break; |
|
119 | + } |
|
120 | + } |
|
121 | + } else { |
|
122 | + if (mb_strlen($text) <= $length) { |
|
123 | + return $text; |
|
124 | + } |
|
125 | + $truncate = mb_substr($text, 0, $length - mb_strlen($ending)); |
|
126 | + } |
|
127 | + // if the words shouldn't be cut in the middle... |
|
128 | + if (!$exact) { |
|
129 | + // ...search the last occurance of a space... |
|
130 | + $spacepos = mb_strrpos($truncate, ' '); |
|
131 | + if (isset($spacepos)) { |
|
132 | + // ...and cut the text in this position |
|
133 | + $truncate = mb_substr($truncate, 0, $spacepos); |
|
134 | + } |
|
135 | + } |
|
136 | + // add the defined ending to the text |
|
137 | + $truncate .= $ending; |
|
138 | + if ($considerHtml) { |
|
139 | + // close all unclosed html-tags |
|
140 | + foreach ($open_tags as $tag) { |
|
141 | + $truncate .= '</' . $tag . '>'; |
|
142 | + } |
|
143 | + } |
|
144 | + |
|
145 | + return $truncate; |
|
146 | + } |
|
147 | + |
|
148 | + /** |
|
149 | + * @param \Xmf\Module\Helper $helper |
|
150 | + * @param array|null $options |
|
151 | + * @return \XoopsFormDhtmlTextArea|\XoopsFormEditor |
|
152 | + */ |
|
153 | + public static function getEditor($helper = null, $options = null) |
|
154 | + { |
|
155 | + /** @var Helper $helper */ |
|
156 | + if (null === $options) { |
|
157 | + $options = []; |
|
158 | + $options['name'] = 'Editor'; |
|
159 | + $options['value'] = 'Editor'; |
|
160 | + $options['rows'] = 10; |
|
161 | + $options['cols'] = '100%'; |
|
162 | + $options['width'] = '100%'; |
|
163 | + $options['height'] = '400px'; |
|
164 | + } |
|
165 | + |
|
166 | + if (null === $helper) { |
|
167 | + $helper = Helper::getInstance(); |
|
168 | + } |
|
169 | + |
|
170 | + $isAdmin = $helper->isUserAdmin(); |
|
171 | + |
|
172 | + if (\class_exists('XoopsFormEditor')) { |
|
173 | + if ($isAdmin) { |
|
174 | + $descEditor = new \XoopsFormEditor(\ucfirst($options['name']), $helper->getConfig('editorAdmin'), $options, $nohtml = false, $onfailure = 'textarea'); |
|
175 | + } else { |
|
176 | + $descEditor = new \XoopsFormEditor(\ucfirst($options['name']), $helper->getConfig('editorUser'), $options, $nohtml = false, $onfailure = 'textarea'); |
|
177 | + } |
|
178 | + } else { |
|
179 | + $descEditor = new \XoopsFormDhtmlTextArea(\ucfirst($options['name']), $options['name'], $options['value'], '100%', '100%'); |
|
180 | + } |
|
181 | + |
|
182 | + // $form->addElement($descEditor); |
|
183 | + |
|
184 | + return $descEditor; |
|
185 | + } |
|
186 | + |
|
187 | + /** |
|
188 | + * @param string $fieldname |
|
189 | + * @param string $table |
|
190 | + * @return bool |
|
191 | + */ |
|
192 | + public static function fieldExists(string $fieldname, string $table): bool |
|
193 | + { |
|
194 | + global $xoopsDB; |
|
195 | + $result = $xoopsDB->queryF("SHOW COLUMNS FROM $table LIKE '$fieldname'"); |
|
196 | + |
|
197 | + return ($xoopsDB->getRowsNum($result) > 0); |
|
198 | + } |
|
199 | + |
|
200 | + /** |
|
201 | + * @param array|string $tableName |
|
202 | + * @param int $id_field |
|
203 | + * @param int $id |
|
204 | + * |
|
205 | + * @return mixed |
|
206 | + */ |
|
207 | + public static function cloneRecord($tableName, $id_field, $id) |
|
208 | + { |
|
209 | + $new_id = false; |
|
210 | + $table = $GLOBALS['xoopsDB']->prefix($tableName); |
|
211 | + // copy content of the record you wish to clone |
|
212 | + $sql = "SELECT * FROM $table WHERE $idField='" . $id . "' "; |
|
213 | + $result = $GLOBALS['xoopsDB']->query($sql); |
|
214 | + if ($result instanceof \mysqli_result) { |
|
215 | + $tempTable = $GLOBALS['xoopsDB']->fetchArray($result, \MYSQLI_ASSOC); |
|
216 | + } |
|
217 | + if (!$tempTable) { |
|
218 | + \trigger_error($GLOBALS['xoopsDB']->error()); |
|
219 | + } |
|
220 | + // set the auto-incremented id's value to blank. |
|
221 | + unset($tempTable[$id_field]); |
|
222 | + // insert cloned copy of the original record |
|
223 | + $sql = "INSERT INTO $table (" . \implode(', ', \array_keys($tempTable)) . ") VALUES ('" . \implode("', '", \array_values($tempTable)) . "')"; |
|
224 | + $result = $GLOBALS['xoopsDB']->queryF($sql); |
|
225 | + if (!$result) { |
|
226 | + \trigger_error($GLOBALS['xoopsDB']->error()); |
|
227 | + } |
|
228 | + // Return the new id |
|
229 | + $new_id = $GLOBALS['xoopsDB']->getInsertId(); |
|
230 | + |
|
231 | + return $new_id; |
|
232 | + } |
|
233 | + |
|
234 | + /** |
|
235 | + * @param string $tablename |
|
236 | + * |
|
237 | + * @return bool |
|
238 | + */ |
|
239 | + public static function tableExists($tablename): bool |
|
240 | + { |
|
241 | + $result = $GLOBALS['xoopsDB']->queryF("SHOW TABLES LIKE '$tablename'"); |
|
242 | + |
|
243 | + return $GLOBALS['xoopsDB']->getRowsNum($result) > 0; |
|
244 | + } |
|
245 | 245 | } |
@@ -58,11 +58,11 @@ discard block |
||
58 | 58 | { |
59 | 59 | if ($considerHtml) { |
60 | 60 | // if the plain text is shorter than the maximum length, return the whole text |
61 | - if (mb_strlen(\preg_replace('/<.*?' . '>/', '', $text)) <= $length) { |
|
61 | + if (mb_strlen(\preg_replace('/<.*?'.'>/', '', $text))<=$length) { |
|
62 | 62 | return $text; |
63 | 63 | } |
64 | 64 | // splits all html-tags to scanable lines |
65 | - \preg_match_all('/(<.+?' . '>)?([^<>]*)/s', $text, $lines, \PREG_SET_ORDER); |
|
65 | + \preg_match_all('/(<.+?'.'>)?([^<>]*)/s', $text, $lines, \PREG_SET_ORDER); |
|
66 | 66 | $total_length = mb_strlen($ending); |
67 | 67 | $open_tags = []; |
68 | 68 | $truncate = ''; |
@@ -76,11 +76,11 @@ discard block |
||
76 | 76 | } elseif (\preg_match('/^<\s*\/(\S+?)\s*>$/s', $line_matchings[1], $tag_matchings)) { |
77 | 77 | // delete tag from $open_tags list |
78 | 78 | $pos = \array_search($tag_matchings[1], $open_tags, true); |
79 | - if (false !== $pos) { |
|
79 | + if (false!==$pos) { |
|
80 | 80 | unset($open_tags[$pos]); |
81 | 81 | } |
82 | 82 | // if tag is an opening tag |
83 | - } elseif (\preg_match('/^<\s*([^\s>!]+).*?' . '>$/s', $line_matchings[1], $tag_matchings)) { |
|
83 | + } elseif (\preg_match('/^<\s*([^\s>!]+).*?'.'>$/s', $line_matchings[1], $tag_matchings)) { |
|
84 | 84 | // add tag to the beginning of $open_tags list |
85 | 85 | \array_unshift($open_tags, \mb_strtolower($tag_matchings[1])); |
86 | 86 | } |
@@ -89,15 +89,15 @@ discard block |
||
89 | 89 | } |
90 | 90 | // calculate the length of the plain text part of the line; handle entities as one character |
91 | 91 | $content_length = mb_strlen(\preg_replace('/&[0-9a-z]{2,8};|&#\d{1,7};|[0-9a-f]{1,6};/i', ' ', $line_matchings[2])); |
92 | - if ($total_length + $content_length > $length) { |
|
92 | + if ($total_length+$content_length>$length) { |
|
93 | 93 | // the number of characters which are left |
94 | - $left = $length - $total_length; |
|
94 | + $left = $length-$total_length; |
|
95 | 95 | $entities_length = 0; |
96 | 96 | // search for html entities |
97 | 97 | if (\preg_match_all('/&[0-9a-z]{2,8};|&#\d{1,7};|[0-9a-f]{1,6};/i', $line_matchings[2], $entities, \PREG_OFFSET_CAPTURE)) { |
98 | 98 | // calculate the real length of all entities in the legal range |
99 | 99 | foreach ($entities[0] as $entity) { |
100 | - if ($left >= $entity[1] + 1 - $entities_length) { |
|
100 | + if ($left>=$entity[1]+1-$entities_length) { |
|
101 | 101 | $left--; |
102 | 102 | $entities_length += mb_strlen($entity[0]); |
103 | 103 | } else { |
@@ -106,7 +106,7 @@ discard block |
||
106 | 106 | } |
107 | 107 | } |
108 | 108 | } |
109 | - $truncate .= mb_substr($line_matchings[2], 0, $left + $entities_length); |
|
109 | + $truncate .= mb_substr($line_matchings[2], 0, $left+$entities_length); |
|
110 | 110 | // maximum lenght is reached, so get off the loop |
111 | 111 | break; |
112 | 112 | } |
@@ -114,15 +114,15 @@ discard block |
||
114 | 114 | $total_length += $content_length; |
115 | 115 | |
116 | 116 | // if the maximum length is reached, get off the loop |
117 | - if ($total_length >= $length) { |
|
117 | + if ($total_length>=$length) { |
|
118 | 118 | break; |
119 | 119 | } |
120 | 120 | } |
121 | 121 | } else { |
122 | - if (mb_strlen($text) <= $length) { |
|
122 | + if (mb_strlen($text)<=$length) { |
|
123 | 123 | return $text; |
124 | 124 | } |
125 | - $truncate = mb_substr($text, 0, $length - mb_strlen($ending)); |
|
125 | + $truncate = mb_substr($text, 0, $length-mb_strlen($ending)); |
|
126 | 126 | } |
127 | 127 | // if the words shouldn't be cut in the middle... |
128 | 128 | if (!$exact) { |
@@ -138,7 +138,7 @@ discard block |
||
138 | 138 | if ($considerHtml) { |
139 | 139 | // close all unclosed html-tags |
140 | 140 | foreach ($open_tags as $tag) { |
141 | - $truncate .= '</' . $tag . '>'; |
|
141 | + $truncate .= '</'.$tag.'>'; |
|
142 | 142 | } |
143 | 143 | } |
144 | 144 | |
@@ -153,7 +153,7 @@ discard block |
||
153 | 153 | public static function getEditor($helper = null, $options = null) |
154 | 154 | { |
155 | 155 | /** @var Helper $helper */ |
156 | - if (null === $options) { |
|
156 | + if (null===$options) { |
|
157 | 157 | $options = []; |
158 | 158 | $options['name'] = 'Editor'; |
159 | 159 | $options['value'] = 'Editor'; |
@@ -163,7 +163,7 @@ discard block |
||
163 | 163 | $options['height'] = '400px'; |
164 | 164 | } |
165 | 165 | |
166 | - if (null === $helper) { |
|
166 | + if (null===$helper) { |
|
167 | 167 | $helper = Helper::getInstance(); |
168 | 168 | } |
169 | 169 | |
@@ -194,7 +194,7 @@ discard block |
||
194 | 194 | global $xoopsDB; |
195 | 195 | $result = $xoopsDB->queryF("SHOW COLUMNS FROM $table LIKE '$fieldname'"); |
196 | 196 | |
197 | - return ($xoopsDB->getRowsNum($result) > 0); |
|
197 | + return ($xoopsDB->getRowsNum($result)>0); |
|
198 | 198 | } |
199 | 199 | |
200 | 200 | /** |
@@ -209,7 +209,7 @@ discard block |
||
209 | 209 | $new_id = false; |
210 | 210 | $table = $GLOBALS['xoopsDB']->prefix($tableName); |
211 | 211 | // copy content of the record you wish to clone |
212 | - $sql = "SELECT * FROM $table WHERE $idField='" . $id . "' "; |
|
212 | + $sql = "SELECT * FROM $table WHERE $idField='".$id."' "; |
|
213 | 213 | $result = $GLOBALS['xoopsDB']->query($sql); |
214 | 214 | if ($result instanceof \mysqli_result) { |
215 | 215 | $tempTable = $GLOBALS['xoopsDB']->fetchArray($result, \MYSQLI_ASSOC); |
@@ -220,7 +220,7 @@ discard block |
||
220 | 220 | // set the auto-incremented id's value to blank. |
221 | 221 | unset($tempTable[$id_field]); |
222 | 222 | // insert cloned copy of the original record |
223 | - $sql = "INSERT INTO $table (" . \implode(', ', \array_keys($tempTable)) . ") VALUES ('" . \implode("', '", \array_values($tempTable)) . "')"; |
|
223 | + $sql = "INSERT INTO $table (".\implode(', ', \array_keys($tempTable)).") VALUES ('".\implode("', '", \array_values($tempTable))."')"; |
|
224 | 224 | $result = $GLOBALS['xoopsDB']->queryF($sql); |
225 | 225 | if (!$result) { |
226 | 226 | \trigger_error($GLOBALS['xoopsDB']->error()); |
@@ -240,6 +240,6 @@ discard block |
||
240 | 240 | { |
241 | 241 | $result = $GLOBALS['xoopsDB']->queryF("SHOW TABLES LIKE '$tablename'"); |
242 | 242 | |
243 | - return $GLOBALS['xoopsDB']->getRowsNum($result) > 0; |
|
243 | + return $GLOBALS['xoopsDB']->getRowsNum($result)>0; |
|
244 | 244 | } |
245 | 245 | } |