Completed
Push — master ( 88111b...b3fce7 )
by Michael
05:58
created
sendlink.php 1 patch
Indentation   +74 added lines, -74 removed lines patch added patch discarded remove patch
@@ -28,82 +28,82 @@
 block discarded – undo
28 28
 $op = isset($_POST['op']) ? $_POST['op'] : '';
29 29
 
30 30
 switch ($op) {
31
-    case 'sendlink':
31
+	case 'sendlink':
32 32
 
33 33
 //        require_once XOOPS_ROOT_PATH . '/modules/smartobject/class/smartobjectcontroller.php';
34
-        $controller = new XoopsModules\Smartobject\ObjectController($smartobjectLinkHandler);
35
-
36
-        $linkObj = $controller->storeSmartObject();
37
-        if ($linkObj->hasError()) {
38
-            /**
39
-             * @todo inform user and propose to close the window if a problem occured when saving the link
40
-             */
41
-        }
42
-
43
-        $xoopsMailer = xoops_getMailer();
44
-        $xoopsMailer->useMail();
45
-        $xoopsMailer->setTemplateDir('language/' . $xoopsConfig['language'] . '/mail_template');
46
-
47
-        $xoopsMailer->setTemplate('sendlink.tpl');
48
-        $xoopsMailer->assign('X_SITENAME', $xoopsConfig['sitename']);
49
-        $xoopsMailer->assign('TO_NAME', $linkObj->getVar('to_name'));
50
-        $xoopsMailer->assign('FROM_NAME', $linkObj->getVar('from_name'));
51
-        $xoopsMailer->assign('SITEURL', XOOPS_URL . '/');
52
-        $xoopsMailer->assign('ADMINMAIL', $xoopsConfig['adminmail']);
53
-        $xoopsMailer->assign('MESSAGE', $_POST['body']);
54
-        $xoopsMailer->setToEmails($linkObj->getVar('to_email'));
55
-        $xoopsMailer->setFromEmail($linkObj->getVar('from_email'));
56
-        $xoopsMailer->setFromName($xoopsConfig['sitename']);
57
-        $xoopsMailer->setSubject(sprintf(_CO_SOBJECT_SUBJECT_DEFAULT, $myts->oopsStripSlashesGPC($xoopsConfig['sitename'])));
58
-
59
-        if (!$xoopsMailer->send(true)) {
60
-            $xoopsTpl->assign('send_error', sprintf(_CO_SOBJECT_SEND_ERROR, $xoopsConfig['adminmail']) . '<br>' . $xoopsMailer->getErrors(true));
61
-        } else {
62
-            $xoopsTpl->assign('send_success', _CO_SOBJECT_SEND_SUCCESS);
63
-        }
64
-
65
-        break;
66
-
67
-    default:
68
-        if (isset($_GET['mid'])) {
69
-            $mid = $_GET['mid'];
70
-        } else {
71
-            /**
72
-             * @todo close the window if no mid is passed as GET
73
-             */
74
-        }
75
-
76
-        $hModule = xoops_getHandler('module');
77
-        $module  = $hModule->get($mid);
78
-        $linkObj->setVar('mid', $module->getVar('mid'));
79
-        $linkObj->setVar('mid_name', $module->getVar('name'));
80
-
81
-        if (isset($_GET['link'])) {
82
-            $link = $_GET['link'];
83
-        } else {
84
-            /**
85
-             * @todo close the window if no link is passed as GET
86
-             */
87
-        }
88
-        $linkObj->setVar('link', $link);
89
-
90
-        if (is_object($xoopsUser)) {
91
-            $linkObj->setVar('from_uid', $xoopsUser->getVar('uid'));
92
-            $linkObj->setVar('from_name', '' !== $xoopsUser->getVar('name') ? $xoopsUser->getVar('name') : $xoopsUser->getVar('uname'));
93
-            $linkObj->setVar('from_email', $xoopsUser->getVar('email'));
94
-        }
95
-
96
-        $linkObj->setVar('subject', sprintf(_CO_SOBJECT_SUBJECT_DEFAULT, $xoopsConfig['sitename']));
97
-        $linkObj->setVar('body', sprintf(_CO_SOBJECT_BODY_DEFAULT, $xoopsConfig['sitename'], $link));
98
-        $linkObj->setVar('date', time());
99
-        $linkObj->hideFieldFromForm(['from_uid', 'to_uid', 'link', 'mid', 'mid_name']);
100
-
101
-        $form = $linkObj->getForm(_CO_SOBJECT_SEND_LINK_FORM, 'sendlink', false, _SEND, 'javascript:window.close();');
102
-
103
-        $form->assign($xoopsTpl);
104
-
105
-        $xoopsTpl->assign('showform', true);
106
-        break;
34
+		$controller = new XoopsModules\Smartobject\ObjectController($smartobjectLinkHandler);
35
+
36
+		$linkObj = $controller->storeSmartObject();
37
+		if ($linkObj->hasError()) {
38
+			/**
39
+			 * @todo inform user and propose to close the window if a problem occured when saving the link
40
+			 */
41
+		}
42
+
43
+		$xoopsMailer = xoops_getMailer();
44
+		$xoopsMailer->useMail();
45
+		$xoopsMailer->setTemplateDir('language/' . $xoopsConfig['language'] . '/mail_template');
46
+
47
+		$xoopsMailer->setTemplate('sendlink.tpl');
48
+		$xoopsMailer->assign('X_SITENAME', $xoopsConfig['sitename']);
49
+		$xoopsMailer->assign('TO_NAME', $linkObj->getVar('to_name'));
50
+		$xoopsMailer->assign('FROM_NAME', $linkObj->getVar('from_name'));
51
+		$xoopsMailer->assign('SITEURL', XOOPS_URL . '/');
52
+		$xoopsMailer->assign('ADMINMAIL', $xoopsConfig['adminmail']);
53
+		$xoopsMailer->assign('MESSAGE', $_POST['body']);
54
+		$xoopsMailer->setToEmails($linkObj->getVar('to_email'));
55
+		$xoopsMailer->setFromEmail($linkObj->getVar('from_email'));
56
+		$xoopsMailer->setFromName($xoopsConfig['sitename']);
57
+		$xoopsMailer->setSubject(sprintf(_CO_SOBJECT_SUBJECT_DEFAULT, $myts->oopsStripSlashesGPC($xoopsConfig['sitename'])));
58
+
59
+		if (!$xoopsMailer->send(true)) {
60
+			$xoopsTpl->assign('send_error', sprintf(_CO_SOBJECT_SEND_ERROR, $xoopsConfig['adminmail']) . '<br>' . $xoopsMailer->getErrors(true));
61
+		} else {
62
+			$xoopsTpl->assign('send_success', _CO_SOBJECT_SEND_SUCCESS);
63
+		}
64
+
65
+		break;
66
+
67
+	default:
68
+		if (isset($_GET['mid'])) {
69
+			$mid = $_GET['mid'];
70
+		} else {
71
+			/**
72
+			 * @todo close the window if no mid is passed as GET
73
+			 */
74
+		}
75
+
76
+		$hModule = xoops_getHandler('module');
77
+		$module  = $hModule->get($mid);
78
+		$linkObj->setVar('mid', $module->getVar('mid'));
79
+		$linkObj->setVar('mid_name', $module->getVar('name'));
80
+
81
+		if (isset($_GET['link'])) {
82
+			$link = $_GET['link'];
83
+		} else {
84
+			/**
85
+			 * @todo close the window if no link is passed as GET
86
+			 */
87
+		}
88
+		$linkObj->setVar('link', $link);
89
+
90
+		if (is_object($xoopsUser)) {
91
+			$linkObj->setVar('from_uid', $xoopsUser->getVar('uid'));
92
+			$linkObj->setVar('from_name', '' !== $xoopsUser->getVar('name') ? $xoopsUser->getVar('name') : $xoopsUser->getVar('uname'));
93
+			$linkObj->setVar('from_email', $xoopsUser->getVar('email'));
94
+		}
95
+
96
+		$linkObj->setVar('subject', sprintf(_CO_SOBJECT_SUBJECT_DEFAULT, $xoopsConfig['sitename']));
97
+		$linkObj->setVar('body', sprintf(_CO_SOBJECT_BODY_DEFAULT, $xoopsConfig['sitename'], $link));
98
+		$linkObj->setVar('date', time());
99
+		$linkObj->hideFieldFromForm(['from_uid', 'to_uid', 'link', 'mid', 'mid_name']);
100
+
101
+		$form = $linkObj->getForm(_CO_SOBJECT_SEND_LINK_FORM, 'sendlink', false, _SEND, 'javascript:window.close();');
102
+
103
+		$form->assign($xoopsTpl);
104
+
105
+		$xoopsTpl->assign('showform', true);
106
+		break;
107 107
 }
108 108
 
109 109
 $xoopsTpl->display('db:smartobject_sendlink.tpl');
Please login to merge, or discard this patch.
class/FileHandler.php 1 patch
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -31,12 +31,12 @@
 block discarded – undo
31 31
  */
32 32
 class FileHandler extends Smartobject\PersistableObjectHandler
33 33
 {
34
-    /**
35
-     * SmartobjectFileHandler constructor.
36
-     * @param \XoopsDatabase $db
37
-     */
38
-    public function __construct(\XoopsDatabase $db)
39
-    {
40
-        parent::__construct($db, File::class, 'fileid', 'caption', 'desc', 'smartobject');
41
-    }
34
+	/**
35
+	 * SmartobjectFileHandler constructor.
36
+	 * @param \XoopsDatabase $db
37
+	 */
38
+	public function __construct(\XoopsDatabase $db)
39
+	{
40
+		parent::__construct($db, File::class, 'fileid', 'caption', 'desc', 'smartobject');
41
+	}
42 42
 }
Please login to merge, or discard this patch.
class/BasedUrl.php 1 patch
Indentation   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -29,29 +29,29 @@
 block discarded – undo
29 29
  */
30 30
 class BasedUrl extends Smartobject\BaseSmartObject
31 31
 {
32
-    /**
33
-     * SmartobjectBasedUrl constructor.
34
-     */
35
-    public function __construct()
36
-    {
37
-        $this->quickInitVar('caption', XOBJ_DTYPE_TXTBOX, false);
38
-        $this->quickInitVar('description', XOBJ_DTYPE_TXTBOX, false);
39
-        $this->quickInitVar('url', XOBJ_DTYPE_TXTBOX, false);
40
-    }
32
+	/**
33
+	 * SmartobjectBasedUrl constructor.
34
+	 */
35
+	public function __construct()
36
+	{
37
+		$this->quickInitVar('caption', XOBJ_DTYPE_TXTBOX, false);
38
+		$this->quickInitVar('description', XOBJ_DTYPE_TXTBOX, false);
39
+		$this->quickInitVar('url', XOBJ_DTYPE_TXTBOX, false);
40
+	}
41 41
 
42
-    /**
43
-     * @param  string $key
44
-     * @param  string $format
45
-     * @return mixed
46
-     */
47
-    public function getVar($key, $format = 'e')
48
-    {
49
-        if (0 === strpos($key, 'url_')) {
50
-            return parent::getVar('url', $format);
51
-        } elseif (0 === strpos($key, 'caption_')) {
52
-            return parent::getVar('caption', $format);
53
-        } else {
54
-            return parent::getVar($key, $format);
55
-        }
56
-    }
42
+	/**
43
+	 * @param  string $key
44
+	 * @param  string $format
45
+	 * @return mixed
46
+	 */
47
+	public function getVar($key, $format = 'e')
48
+	{
49
+		if (0 === strpos($key, 'url_')) {
50
+			return parent::getVar('url', $format);
51
+		} elseif (0 === strpos($key, 'caption_')) {
52
+			return parent::getVar('caption', $format);
53
+		} else {
54
+			return parent::getVar($key, $format);
55
+		}
56
+	}
57 57
 }
Please login to merge, or discard this patch.
class/CustomtagHandler.php 1 patch
Indentation   +36 added lines, -36 removed lines patch added patch discarded remove patch
@@ -30,48 +30,48 @@
 block discarded – undo
30 30
  */
31 31
 class CustomtagHandler extends Smartobject\PersistableObjectHandler
32 32
 {
33
-    public $objects = false;
33
+	public $objects = false;
34 34
 
35
-    /**
36
-     * SmartobjectCustomtagHandler constructor.
37
-     * @param \XoopsDatabase $db
38
-     */
39
-    public function __construct(\XoopsDatabase $db)
40
-    {
41
-        parent::__construct($db, Customtag::class, 'customtagid', 'name', 'description', 'smartobject');
42
-        $this->addPermission('view', _CO_SOBJECT_CUSTOMTAG_PERMISSION_VIEW, _CO_SOBJECT_CUSTOMTAG_PERMISSION_VIEW_DSC);
43
-    }
35
+	/**
36
+	 * SmartobjectCustomtagHandler constructor.
37
+	 * @param \XoopsDatabase $db
38
+	 */
39
+	public function __construct(\XoopsDatabase $db)
40
+	{
41
+		parent::__construct($db, Customtag::class, 'customtagid', 'name', 'description', 'smartobject');
42
+		$this->addPermission('view', _CO_SOBJECT_CUSTOMTAG_PERMISSION_VIEW, _CO_SOBJECT_CUSTOMTAG_PERMISSION_VIEW_DSC);
43
+	}
44 44
 
45
-    /**
46
-     * @return array|bool
47
-     */
48
-    public function getCustomtagsByName()
49
-    {
50
-        if (!$this->objects) {
51
-            global $xoopsConfig;
45
+	/**
46
+	 * @return array|bool
47
+	 */
48
+	public function getCustomtagsByName()
49
+	{
50
+		if (!$this->objects) {
51
+			global $xoopsConfig;
52 52
 
53
-            $ret = [];
53
+			$ret = [];
54 54
 
55
-            $criteria = new \CriteriaCompo();
55
+			$criteria = new \CriteriaCompo();
56 56
 
57
-            $criteria_language = new \CriteriaCompo();
58
-            $criteria_language->add(new \Criteria('language', $xoopsConfig['language']));
59
-            $criteria_language->add(new \Criteria('language', 'all'), 'OR');
60
-            $criteria->add($criteria_language);
57
+			$criteria_language = new \CriteriaCompo();
58
+			$criteria_language->add(new \Criteria('language', $xoopsConfig['language']));
59
+			$criteria_language->add(new \Criteria('language', 'all'), 'OR');
60
+			$criteria->add($criteria_language);
61 61
 
62
-            $smartobjectPermissionsHandler = new PermissionHandler($this);
63
-            $granted_ids                   = $smartobjectPermissionsHandler->getGrantedItems('view');
62
+			$smartobjectPermissionsHandler = new PermissionHandler($this);
63
+			$granted_ids                   = $smartobjectPermissionsHandler->getGrantedItems('view');
64 64
 
65
-            if ($granted_ids && count($granted_ids) > 0) {
66
-                $criteria->add(new \Criteria('customtagid', '(' . implode(', ', $granted_ids) . ')', 'IN'));
67
-                $customtagsObj =& $this->getObjects($criteria, true);
68
-                foreach ($customtagsObj as $customtagObj) {
69
-                    $ret[$customtagObj->getVar('name')] = $customtagObj;
70
-                }
71
-            }
72
-            $this->objects = $ret;
73
-        }
65
+			if ($granted_ids && count($granted_ids) > 0) {
66
+				$criteria->add(new \Criteria('customtagid', '(' . implode(', ', $granted_ids) . ')', 'IN'));
67
+				$customtagsObj =& $this->getObjects($criteria, true);
68
+				foreach ($customtagsObj as $customtagObj) {
69
+					$ret[$customtagObj->getVar('name')] = $customtagObj;
70
+				}
71
+			}
72
+			$this->objects = $ret;
73
+		}
74 74
 
75
-        return $this->objects;
76
-    }
75
+		return $this->objects;
76
+	}
77 77
 }
Please login to merge, or discard this patch.
class/MetaGen.php 1 patch
Indentation   +378 added lines, -378 removed lines patch added patch discarded remove patch
@@ -20,350 +20,350 @@  discard block
 block discarded – undo
20 20
  */
21 21
 class MetaGen
22 22
 {
23
-    public $_myts;
24
-
25
-    public $_title;
26
-    public $_original_title;
27
-    public $_keywords;
28
-    public $_meta_description;
29
-    public $_categoryPath;
30
-    public $_description;
31
-    public $_minChar = 4;
32
-
33
-    /**
34
-     * SmartMetaGen constructor.
35
-     * @param      $title
36
-     * @param bool $keywords
37
-     * @param bool $description
38
-     * @param bool $categoryPath
39
-     */
40
-    public function __construct($title, $keywords = false, $description = false, $categoryPath = false)
41
-    {
42
-        $this->_myts = \MyTextSanitizer::getInstance();
43
-        $this->setCategoryPath($categoryPath);
44
-        $this->setTitle($title);
45
-        $this->setDescription($description);
46
-
47
-        if (!$keywords) {
48
-            $keywords = $this->createMetaKeywords();
49
-        }
50
-
51
-        /*      $myts = \MyTextSanitizer::getInstance();
23
+	public $_myts;
24
+
25
+	public $_title;
26
+	public $_original_title;
27
+	public $_keywords;
28
+	public $_meta_description;
29
+	public $_categoryPath;
30
+	public $_description;
31
+	public $_minChar = 4;
32
+
33
+	/**
34
+	 * SmartMetaGen constructor.
35
+	 * @param      $title
36
+	 * @param bool $keywords
37
+	 * @param bool $description
38
+	 * @param bool $categoryPath
39
+	 */
40
+	public function __construct($title, $keywords = false, $description = false, $categoryPath = false)
41
+	{
42
+		$this->_myts = \MyTextSanitizer::getInstance();
43
+		$this->setCategoryPath($categoryPath);
44
+		$this->setTitle($title);
45
+		$this->setDescription($description);
46
+
47
+		if (!$keywords) {
48
+			$keywords = $this->createMetaKeywords();
49
+		}
50
+
51
+		/*      $myts = \MyTextSanitizer::getInstance();
52 52
          if (method_exists($myts, 'formatForML')) {
53 53
          $keywords = $myts->formatForML($keywords);
54 54
          $description = $myts->formatForML($description);
55 55
          }
56 56
          */
57
-        $this->setKeywords($keywords);
58
-    }
59
-
60
-    /**
61
-     * Return true if the string is length > 0
62
-     *
63
-     * @credit psylove
64
-     *
65
-     * @var    string $string Chaine de caract�re
66
-     * @return boolean
67
-     */
68
-    public function emptyString($var)
69
-    {
70
-        return (strlen($var) > 0);
71
-    }
72
-
73
-    /**
74
-     * Create a title for the short_url field of an article
75
-     *
76
-     * @credit psylove
77
-     *
78
-     * @var    string      $title title of the article
79
-     * @param  bool|string $withExt
80
-     * @return string      sort_url for the article
81
-     */
82
-    public function generateSeoTitle($title = '', $withExt = true)
83
-    {
84
-        // Transformation de la chaine en minuscule
85
-        // Codage de la chaine afin d'éviter les erreurs 500 en cas de caractères imprévus
86
-        $title = rawurlencode(strtolower($title));
87
-
88
-        // Transformation des ponctuations
89
-        $pattern = [
90
-            '/%09/', // Tab
91
-            '/%20/', // Space
92
-            '/%21/', // !
93
-            '/%22/', // "
94
-            '/%23/', // #
95
-            '/%25/', // %
96
-            '/%26/', // &
97
-            '/%27/', // '
98
-            '/%28/', // (
99
-            '/%29/', // )
100
-            '/%2C/', // ,
101
-            '/%2F/', // /
102
-            '/%3A/', // :
103
-            '/%3B/', // ;
104
-            '/%3C/', // <
105
-            '/%3D/', // =
106
-            '/%3E/', // >
107
-            '/%3F/', // ?
108
-            '/%40/', // @
109
-            '/%5B/', // [
110
-            '/%5C/', // \
111
-            '/%5D/', // ]
112
-            '/%5E/', // ^
113
-            '/%7B/', // {
114
-            '/%7C/', // |
115
-            '/%7D/', // }
116
-            '/%7E/', // ~
117
-            "/\./" // .
118
-        ];
119
-        $rep_pat = [
120
-            '-',
121
-            '-',
122
-            '-',
123
-            '-',
124
-            '-',
125
-            '-100',
126
-            '-',
127
-            '-',
128
-            '-',
129
-            '-',
130
-            '-',
131
-            '-',
132
-            '-',
133
-            '-',
134
-            '-',
135
-            '-',
136
-            '-',
137
-            '-',
138
-            '-at-',
139
-            '-',
140
-            '-',
141
-            '-',
142
-            '-',
143
-            '-',
144
-            '-',
145
-            '-',
146
-            '-',
147
-            '-'
148
-        ];
149
-        $title   = preg_replace($pattern, $rep_pat, $title);
150
-
151
-        // Transformation des caractères accentués
152
-        $pattern = [
153
-            '/%B0/', // °
154
-            '/%E8/', // è
155
-            '/%E9/', // é
156
-            '/%EA/', // ê
157
-            '/%EB/', // ë
158
-            '/%E7/', // ç
159
-            '/%E0/', // à
160
-            '/%E2/', // â
161
-            '/%E4/', // ä
162
-            '/%EE/', // î
163
-            '/%EF/', // ï
164
-            '/%F9/', // ù
165
-            '/%FC/', // ü
166
-            '/%FB/', // û
167
-            '/%F4/', // ô
168
-            '/%F6/', // ö
169
-        ];
170
-        $rep_pat = ['-', 'e', 'e', 'e', 'e', 'c', 'a', 'a', 'a', 'i', 'i', 'u', 'u', 'u', 'o', 'o'];
171
-        $title   = preg_replace($pattern, $rep_pat, $title);
172
-
173
-        $tableau = explode('-', $title); // Transforme la chaine de caract�res en tableau
174
-        $tableau = array_filter($tableau, [$this, 'emptyString']); // Supprime les chaines vides du tableau
175
-        $title   = implode('-', $tableau); // Transforme un tableau en chaine de caract�res s�par� par un tiret
176
-
177
-        if (count($title) > 0) {
178
-            if ($withExt) {
179
-                $title .= '.html';
180
-            }
181
-
182
-            return $title;
183
-        } else {
184
-            return '';
185
-        }
186
-    }
187
-
188
-    /**
189
-     * @param $document
190
-     * @return mixed
191
-     */
192
-    public function html2text($document)
193
-    {
194
-        return Smartobject\Utility::getHtml2text($document);
195
-    }
196
-
197
-    /**
198
-     * @param $title
199
-     */
200
-    public function setTitle($title)
201
-    {
202
-        global $xoopsModule, $xoopsModuleConfig;
203
-        $this->_title          = $this->html2text($title);
204
-        $this->_title          = $this->purifyText($this->_title);
205
-        $this->_original_title = $this->_title;
206
-
207
-        $moduleName = $xoopsModule->getVar('name');
208
-
209
-        $titleTag = [];
210
-
211
-        $show_mod_name_breadcrumb = isset($xoopsModuleConfig['show_mod_name_breadcrumb']) ? $xoopsModuleConfig['show_mod_name_breadcrumb'] : true;
212
-
213
-        if ($moduleName && $show_mod_name_breadcrumb) {
214
-            $titleTag['module'] = $moduleName;
215
-        }
216
-
217
-        if (isset($this->_title) && ('' !== $this->_title) && (strtoupper($this->_title) != strtoupper($moduleName))) {
218
-            $titleTag['title'] = $this->_title;
219
-        }
220
-
221
-        if (isset($this->_categoryPath) && ('' !== $this->_categoryPath)) {
222
-            $titleTag['category'] = $this->_categoryPath;
223
-        }
224
-
225
-        $ret = isset($titleTag['title']) ? $titleTag['title'] : '';
226
-
227
-        if (isset($titleTag['category']) && '' !== $titleTag['category']) {
228
-            if ('' !== $ret) {
229
-                $ret .= ' - ';
230
-            }
231
-            $ret .= $titleTag['category'];
232
-        }
233
-        if (isset($titleTag['module']) && '' !== $titleTag['module']) {
234
-            if ('' !== $ret) {
235
-                $ret .= ' - ';
236
-            }
237
-            $ret .= $titleTag['module'];
238
-        }
239
-        $this->_title = $ret;
240
-    }
241
-
242
-    /**
243
-     * @param $keywords
244
-     */
245
-    public function setKeywords($keywords)
246
-    {
247
-        $this->_keywords = $keywords;
248
-    }
249
-
250
-    /**
251
-     * @param $categoryPath
252
-     */
253
-    public function setCategoryPath($categoryPath)
254
-    {
255
-        $categoryPath        = $this->html2text($categoryPath);
256
-        $this->_categoryPath = $categoryPath;
257
-    }
258
-
259
-    /**
260
-     * @param $description
261
-     */
262
-    public function setDescription($description)
263
-    {
264
-        if (!$description) {
265
-            global $xoopsModuleConfig;
266
-            if (isset($xoopsModuleConfig['module_meta_description'])) {
267
-                $description = $xoopsModuleConfig['module_meta_description'];
268
-            }
269
-        }
270
-
271
-        $description = $this->html2text($description);
272
-        $description = $this->purifyText($description);
273
-
274
-        $description = preg_replace("/([^\r\n])\r\n([^\r\n])/", "\\1 \\2", $description);
275
-        $description = preg_replace("/[\r\n]*\r\n[\r\n]*/", "\r\n\r\n", $description);
276
-        $description = preg_replace('/[ ]* [ ]*/', ' ', $description);
277
-        $description = stripslashes($description);
278
-
279
-        $this->_description      = $description;
280
-        $this->_meta_description = $this->createMetaDescription();
281
-    }
282
-
283
-    public function createTitleTag()
284
-    {
285
-    }
286
-
287
-    /**
288
-     * @param               $text
289
-     * @param  bool         $keyword
290
-     * @return mixed|string
291
-     */
292
-    public function purifyText($text, $keyword = false)
293
-    {
294
-        return Smartobject\Utility::purifyText($text, $keyword);
295
-    }
296
-
297
-    /**
298
-     * @param  int $maxWords
299
-     * @return string
300
-     */
301
-    public function createMetaDescription($maxWords = 100)
302
-    {
303
-        $words = [];
304
-        $words = explode(' ', $this->_description);
305
-
306
-        // Only keep $maxWords words
307
-        $newWords = [];
308
-        $i        = 0;
309
-
310
-        while ($i < $maxWords - 1 && $i < count($words)) {
311
-            $newWords[] = $words[$i];
312
-            ++$i;
313
-        }
314
-        $ret = implode(' ', $newWords);
315
-
316
-        return $ret;
317
-    }
318
-
319
-    /**
320
-     * @param $text
321
-     * @param $minChar
322
-     * @return array
323
-     */
324
-    public function findMetaKeywords($text, $minChar)
325
-    {
326
-        $keywords = [];
327
-
328
-        $text = $this->purifyText($text);
329
-        $text = $this->html2text($text);
330
-
331
-        $text = preg_replace("/([^\r\n])\r\n([^\r\n])/", "\\1 \\2", $text);
332
-        $text = preg_replace("/[\r\n]*\r\n[\r\n]*/", "\r\n\r\n", $text);
333
-        $text = preg_replace('/[ ]* [ ]*/', ' ', $text);
334
-        $text = stripslashes($text);
335
-        $text =
336
-
337
-        $originalKeywords = preg_split('/[^a-zA-Z\'"-]+/', $text, -1, PREG_SPLIT_NO_EMPTY);
338
-
339
-        foreach ($originalKeywords as $originalKeyword) {
340
-            $secondRoundKeywords = explode("'", $originalKeyword);
341
-            foreach ($secondRoundKeywords as $secondRoundKeyword) {
342
-                if (strlen($secondRoundKeyword) >= $minChar) {
343
-                    if (!in_array($secondRoundKeyword, $keywords)) {
344
-                        $keywords[] = trim($secondRoundKeyword);
345
-                    }
346
-                }
347
-            }
348
-        }
349
-
350
-        return $keywords;
351
-    }
352
-
353
-    /**
354
-     * @return string
355
-     */
356
-    public function createMetaKeywords()
357
-    {
358
-        global $xoopsModuleConfig;
359
-        $keywords = $this->findMetaKeywords($this->_original_title . ' ' . $this->_description, $this->_minChar);
360
-        if (isset($xoopsModuleConfig) && isset($xoopsModuleConfig['moduleMetaKeywords'])
361
-            && '' !== $xoopsModuleConfig['moduleMetaKeywords']) {
362
-            $moduleKeywords = explode(',', $xoopsModuleConfig['moduleMetaKeywords']);
363
-            $keywords       = array_merge($keywords, $moduleKeywords);
364
-        }
365
-
366
-        /* Commenting this out as it may cause problem on XOOPS ML websites
57
+		$this->setKeywords($keywords);
58
+	}
59
+
60
+	/**
61
+	 * Return true if the string is length > 0
62
+	 *
63
+	 * @credit psylove
64
+	 *
65
+	 * @var    string $string Chaine de caract�re
66
+	 * @return boolean
67
+	 */
68
+	public function emptyString($var)
69
+	{
70
+		return (strlen($var) > 0);
71
+	}
72
+
73
+	/**
74
+	 * Create a title for the short_url field of an article
75
+	 *
76
+	 * @credit psylove
77
+	 *
78
+	 * @var    string      $title title of the article
79
+	 * @param  bool|string $withExt
80
+	 * @return string      sort_url for the article
81
+	 */
82
+	public function generateSeoTitle($title = '', $withExt = true)
83
+	{
84
+		// Transformation de la chaine en minuscule
85
+		// Codage de la chaine afin d'éviter les erreurs 500 en cas de caractères imprévus
86
+		$title = rawurlencode(strtolower($title));
87
+
88
+		// Transformation des ponctuations
89
+		$pattern = [
90
+			'/%09/', // Tab
91
+			'/%20/', // Space
92
+			'/%21/', // !
93
+			'/%22/', // "
94
+			'/%23/', // #
95
+			'/%25/', // %
96
+			'/%26/', // &
97
+			'/%27/', // '
98
+			'/%28/', // (
99
+			'/%29/', // )
100
+			'/%2C/', // ,
101
+			'/%2F/', // /
102
+			'/%3A/', // :
103
+			'/%3B/', // ;
104
+			'/%3C/', // <
105
+			'/%3D/', // =
106
+			'/%3E/', // >
107
+			'/%3F/', // ?
108
+			'/%40/', // @
109
+			'/%5B/', // [
110
+			'/%5C/', // \
111
+			'/%5D/', // ]
112
+			'/%5E/', // ^
113
+			'/%7B/', // {
114
+			'/%7C/', // |
115
+			'/%7D/', // }
116
+			'/%7E/', // ~
117
+			"/\./" // .
118
+		];
119
+		$rep_pat = [
120
+			'-',
121
+			'-',
122
+			'-',
123
+			'-',
124
+			'-',
125
+			'-100',
126
+			'-',
127
+			'-',
128
+			'-',
129
+			'-',
130
+			'-',
131
+			'-',
132
+			'-',
133
+			'-',
134
+			'-',
135
+			'-',
136
+			'-',
137
+			'-',
138
+			'-at-',
139
+			'-',
140
+			'-',
141
+			'-',
142
+			'-',
143
+			'-',
144
+			'-',
145
+			'-',
146
+			'-',
147
+			'-'
148
+		];
149
+		$title   = preg_replace($pattern, $rep_pat, $title);
150
+
151
+		// Transformation des caractères accentués
152
+		$pattern = [
153
+			'/%B0/', // °
154
+			'/%E8/', // è
155
+			'/%E9/', // é
156
+			'/%EA/', // ê
157
+			'/%EB/', // ë
158
+			'/%E7/', // ç
159
+			'/%E0/', // à
160
+			'/%E2/', // â
161
+			'/%E4/', // ä
162
+			'/%EE/', // î
163
+			'/%EF/', // ï
164
+			'/%F9/', // ù
165
+			'/%FC/', // ü
166
+			'/%FB/', // û
167
+			'/%F4/', // ô
168
+			'/%F6/', // ö
169
+		];
170
+		$rep_pat = ['-', 'e', 'e', 'e', 'e', 'c', 'a', 'a', 'a', 'i', 'i', 'u', 'u', 'u', 'o', 'o'];
171
+		$title   = preg_replace($pattern, $rep_pat, $title);
172
+
173
+		$tableau = explode('-', $title); // Transforme la chaine de caract�res en tableau
174
+		$tableau = array_filter($tableau, [$this, 'emptyString']); // Supprime les chaines vides du tableau
175
+		$title   = implode('-', $tableau); // Transforme un tableau en chaine de caract�res s�par� par un tiret
176
+
177
+		if (count($title) > 0) {
178
+			if ($withExt) {
179
+				$title .= '.html';
180
+			}
181
+
182
+			return $title;
183
+		} else {
184
+			return '';
185
+		}
186
+	}
187
+
188
+	/**
189
+	 * @param $document
190
+	 * @return mixed
191
+	 */
192
+	public function html2text($document)
193
+	{
194
+		return Smartobject\Utility::getHtml2text($document);
195
+	}
196
+
197
+	/**
198
+	 * @param $title
199
+	 */
200
+	public function setTitle($title)
201
+	{
202
+		global $xoopsModule, $xoopsModuleConfig;
203
+		$this->_title          = $this->html2text($title);
204
+		$this->_title          = $this->purifyText($this->_title);
205
+		$this->_original_title = $this->_title;
206
+
207
+		$moduleName = $xoopsModule->getVar('name');
208
+
209
+		$titleTag = [];
210
+
211
+		$show_mod_name_breadcrumb = isset($xoopsModuleConfig['show_mod_name_breadcrumb']) ? $xoopsModuleConfig['show_mod_name_breadcrumb'] : true;
212
+
213
+		if ($moduleName && $show_mod_name_breadcrumb) {
214
+			$titleTag['module'] = $moduleName;
215
+		}
216
+
217
+		if (isset($this->_title) && ('' !== $this->_title) && (strtoupper($this->_title) != strtoupper($moduleName))) {
218
+			$titleTag['title'] = $this->_title;
219
+		}
220
+
221
+		if (isset($this->_categoryPath) && ('' !== $this->_categoryPath)) {
222
+			$titleTag['category'] = $this->_categoryPath;
223
+		}
224
+
225
+		$ret = isset($titleTag['title']) ? $titleTag['title'] : '';
226
+
227
+		if (isset($titleTag['category']) && '' !== $titleTag['category']) {
228
+			if ('' !== $ret) {
229
+				$ret .= ' - ';
230
+			}
231
+			$ret .= $titleTag['category'];
232
+		}
233
+		if (isset($titleTag['module']) && '' !== $titleTag['module']) {
234
+			if ('' !== $ret) {
235
+				$ret .= ' - ';
236
+			}
237
+			$ret .= $titleTag['module'];
238
+		}
239
+		$this->_title = $ret;
240
+	}
241
+
242
+	/**
243
+	 * @param $keywords
244
+	 */
245
+	public function setKeywords($keywords)
246
+	{
247
+		$this->_keywords = $keywords;
248
+	}
249
+
250
+	/**
251
+	 * @param $categoryPath
252
+	 */
253
+	public function setCategoryPath($categoryPath)
254
+	{
255
+		$categoryPath        = $this->html2text($categoryPath);
256
+		$this->_categoryPath = $categoryPath;
257
+	}
258
+
259
+	/**
260
+	 * @param $description
261
+	 */
262
+	public function setDescription($description)
263
+	{
264
+		if (!$description) {
265
+			global $xoopsModuleConfig;
266
+			if (isset($xoopsModuleConfig['module_meta_description'])) {
267
+				$description = $xoopsModuleConfig['module_meta_description'];
268
+			}
269
+		}
270
+
271
+		$description = $this->html2text($description);
272
+		$description = $this->purifyText($description);
273
+
274
+		$description = preg_replace("/([^\r\n])\r\n([^\r\n])/", "\\1 \\2", $description);
275
+		$description = preg_replace("/[\r\n]*\r\n[\r\n]*/", "\r\n\r\n", $description);
276
+		$description = preg_replace('/[ ]* [ ]*/', ' ', $description);
277
+		$description = stripslashes($description);
278
+
279
+		$this->_description      = $description;
280
+		$this->_meta_description = $this->createMetaDescription();
281
+	}
282
+
283
+	public function createTitleTag()
284
+	{
285
+	}
286
+
287
+	/**
288
+	 * @param               $text
289
+	 * @param  bool         $keyword
290
+	 * @return mixed|string
291
+	 */
292
+	public function purifyText($text, $keyword = false)
293
+	{
294
+		return Smartobject\Utility::purifyText($text, $keyword);
295
+	}
296
+
297
+	/**
298
+	 * @param  int $maxWords
299
+	 * @return string
300
+	 */
301
+	public function createMetaDescription($maxWords = 100)
302
+	{
303
+		$words = [];
304
+		$words = explode(' ', $this->_description);
305
+
306
+		// Only keep $maxWords words
307
+		$newWords = [];
308
+		$i        = 0;
309
+
310
+		while ($i < $maxWords - 1 && $i < count($words)) {
311
+			$newWords[] = $words[$i];
312
+			++$i;
313
+		}
314
+		$ret = implode(' ', $newWords);
315
+
316
+		return $ret;
317
+	}
318
+
319
+	/**
320
+	 * @param $text
321
+	 * @param $minChar
322
+	 * @return array
323
+	 */
324
+	public function findMetaKeywords($text, $minChar)
325
+	{
326
+		$keywords = [];
327
+
328
+		$text = $this->purifyText($text);
329
+		$text = $this->html2text($text);
330
+
331
+		$text = preg_replace("/([^\r\n])\r\n([^\r\n])/", "\\1 \\2", $text);
332
+		$text = preg_replace("/[\r\n]*\r\n[\r\n]*/", "\r\n\r\n", $text);
333
+		$text = preg_replace('/[ ]* [ ]*/', ' ', $text);
334
+		$text = stripslashes($text);
335
+		$text =
336
+
337
+		$originalKeywords = preg_split('/[^a-zA-Z\'"-]+/', $text, -1, PREG_SPLIT_NO_EMPTY);
338
+
339
+		foreach ($originalKeywords as $originalKeyword) {
340
+			$secondRoundKeywords = explode("'", $originalKeyword);
341
+			foreach ($secondRoundKeywords as $secondRoundKeyword) {
342
+				if (strlen($secondRoundKeyword) >= $minChar) {
343
+					if (!in_array($secondRoundKeyword, $keywords)) {
344
+						$keywords[] = trim($secondRoundKeyword);
345
+					}
346
+				}
347
+			}
348
+		}
349
+
350
+		return $keywords;
351
+	}
352
+
353
+	/**
354
+	 * @return string
355
+	 */
356
+	public function createMetaKeywords()
357
+	{
358
+		global $xoopsModuleConfig;
359
+		$keywords = $this->findMetaKeywords($this->_original_title . ' ' . $this->_description, $this->_minChar);
360
+		if (isset($xoopsModuleConfig) && isset($xoopsModuleConfig['moduleMetaKeywords'])
361
+			&& '' !== $xoopsModuleConfig['moduleMetaKeywords']) {
362
+			$moduleKeywords = explode(',', $xoopsModuleConfig['moduleMetaKeywords']);
363
+			$keywords       = array_merge($keywords, $moduleKeywords);
364
+		}
365
+
366
+		/* Commenting this out as it may cause problem on XOOPS ML websites
367 367
          $return_keywords = array();
368 368
 
369 369
          // Cleaning for duplicate keywords
@@ -373,43 +373,43 @@  discard block
 block discarded – undo
373 373
          }
374 374
          }*/
375 375
 
376
-        // Only take the first 90 keywords
377
-        $newKeywords = [];
378
-        $i           = 0;
379
-        while ($i < 90 - 1 && isset($keywords[$i])) {
380
-            $newKeywords[] = $keywords[$i];
381
-            ++$i;
382
-        }
383
-        $ret = implode(', ', $newKeywords);
384
-
385
-        return $ret;
386
-    }
387
-
388
-    public function autoBuildMeta_keywords()
389
-    {
390
-    }
391
-
392
-    public function buildAutoMetaTags()
393
-    {
394
-        global $xoopsModule, $xoopsModuleConfig;
395
-
396
-        $this->_keywords         = $this->createMetaKeywords();
397
-        $this->_meta_description = $this->createMetaDescription();
398
-        $this->_title            = $this->createTitleTag();
399
-    }
400
-
401
-    public function createMetaTags()
402
-    {
403
-        global $xoopsTpl, $xoTheme;
404
-
405
-        if (is_object($xoTheme)) {
406
-            $xoTheme->addMeta('meta', 'keywords', $this->_keywords);
407
-            $xoTheme->addMeta('meta', 'description', $this->_description);
408
-            $xoTheme->addMeta('meta', 'title', $this->_title);
409
-        } else {
410
-            $xoopsTpl->assign('xoops_meta_keywords', $this->_keywords);
411
-            $xoopsTpl->assign('xoops_meta_description', $this->_description);
412
-        }
413
-        $xoopsTpl->assign('xoops_pagetitle', $this->_title);
414
-    }
376
+		// Only take the first 90 keywords
377
+		$newKeywords = [];
378
+		$i           = 0;
379
+		while ($i < 90 - 1 && isset($keywords[$i])) {
380
+			$newKeywords[] = $keywords[$i];
381
+			++$i;
382
+		}
383
+		$ret = implode(', ', $newKeywords);
384
+
385
+		return $ret;
386
+	}
387
+
388
+	public function autoBuildMeta_keywords()
389
+	{
390
+	}
391
+
392
+	public function buildAutoMetaTags()
393
+	{
394
+		global $xoopsModule, $xoopsModuleConfig;
395
+
396
+		$this->_keywords         = $this->createMetaKeywords();
397
+		$this->_meta_description = $this->createMetaDescription();
398
+		$this->_title            = $this->createTitleTag();
399
+	}
400
+
401
+	public function createMetaTags()
402
+	{
403
+		global $xoopsTpl, $xoTheme;
404
+
405
+		if (is_object($xoTheme)) {
406
+			$xoTheme->addMeta('meta', 'keywords', $this->_keywords);
407
+			$xoTheme->addMeta('meta', 'description', $this->_description);
408
+			$xoTheme->addMeta('meta', 'title', $this->_title);
409
+		} else {
410
+			$xoopsTpl->assign('xoops_meta_keywords', $this->_keywords);
411
+			$xoopsTpl->assign('xoops_meta_description', $this->_description);
412
+		}
413
+		$xoopsTpl->assign('xoops_pagetitle', $this->_title);
414
+	}
415 415
 }
Please login to merge, or discard this patch.
class/MemberHandler.php 1 patch
Indentation   +200 added lines, -200 removed lines patch added patch discarded remove patch
@@ -37,227 +37,227 @@
 block discarded – undo
37 37
  */
38 38
 class MemberHandler extends \XoopsMemberHandler
39 39
 {
40
-    /**
41
-     * constructor
42
-     * @param \XoopsDatabase $db
43
-     */
44
-    public function __construct(\XoopsDatabase $db)
45
-    {
46
-        parent::__construct($db);
47
-        $this->_uHandler = Smartobject\Helper::getInstance()->getHandler('User');
48
-    }
40
+	/**
41
+	 * constructor
42
+	 * @param \XoopsDatabase $db
43
+	 */
44
+	public function __construct(\XoopsDatabase $db)
45
+	{
46
+		parent::__construct($db);
47
+		$this->_uHandler = Smartobject\Helper::getInstance()->getHandler('User');
48
+	}
49 49
 
50
-    /**
51
-     * @param       $userObj
52
-     * @param  bool $groups
53
-     * @param  bool $notifyUser
54
-     * @param  bool $password
55
-     * @return bool
56
-     */
57
-    public function addAndActivateUser($userObj, $groups = false, $notifyUser = true, &$password = false)
58
-    {
59
-        $email = $userObj->getVar('email');
60
-        if (!$userObj->getVar('email') || '' === $email) {
61
-            $userObj->setErrors(_CO_SOBJECT_USER_NEED_EMAIL);
50
+	/**
51
+	 * @param       $userObj
52
+	 * @param  bool $groups
53
+	 * @param  bool $notifyUser
54
+	 * @param  bool $password
55
+	 * @return bool
56
+	 */
57
+	public function addAndActivateUser($userObj, $groups = false, $notifyUser = true, &$password = false)
58
+	{
59
+		$email = $userObj->getVar('email');
60
+		if (!$userObj->getVar('email') || '' === $email) {
61
+			$userObj->setErrors(_CO_SOBJECT_USER_NEED_EMAIL);
62 62
 
63
-            return false;
64
-        }
63
+			return false;
64
+		}
65 65
 
66
-        $password = $userObj->getVar('pass');
67
-        // randomly generating the password if not already set
68
-        if ('' === $password) {
69
-            $password = substr(md5(uniqid(mt_rand(), 1)), 0, 6);
70
-        }
71
-        $userObj->setVar('pass', md5($password));
66
+		$password = $userObj->getVar('pass');
67
+		// randomly generating the password if not already set
68
+		if ('' === $password) {
69
+			$password = substr(md5(uniqid(mt_rand(), 1)), 0, 6);
70
+		}
71
+		$userObj->setVar('pass', md5($password));
72 72
 
73
-        // if no username is set, let's generate one
74
-        $unamecount = 20;
75
-        $uname      = $userObj->getVar('uname');
76
-        if (!$uname || '' === $uname) {
77
-            $usernames = $this->genUserNames($email, $unamecount);
78
-            $newuser   = false;
79
-            $i         = 0;
80
-            while (false === $newuser) {
81
-                $crit  = new \Criteria('uname', $usernames[$i]);
82
-                $count = $this->getUserCount($crit);
83
-                if (0 == $count) {
84
-                    $newuser = true;
85
-                } else {
86
-                    //Move to next username
87
-                    ++$i;
88
-                    if ($i == $unamecount) {
89
-                        //Get next batch of usernames to try, reset counter
90
-                        $usernames = $this->genUserNames($email, $unamecount);
91
-                        $i         = 0;
92
-                    }
93
-                }
94
-            }
95
-        }
73
+		// if no username is set, let's generate one
74
+		$unamecount = 20;
75
+		$uname      = $userObj->getVar('uname');
76
+		if (!$uname || '' === $uname) {
77
+			$usernames = $this->genUserNames($email, $unamecount);
78
+			$newuser   = false;
79
+			$i         = 0;
80
+			while (false === $newuser) {
81
+				$crit  = new \Criteria('uname', $usernames[$i]);
82
+				$count = $this->getUserCount($crit);
83
+				if (0 == $count) {
84
+					$newuser = true;
85
+				} else {
86
+					//Move to next username
87
+					++$i;
88
+					if ($i == $unamecount) {
89
+						//Get next batch of usernames to try, reset counter
90
+						$usernames = $this->genUserNames($email, $unamecount);
91
+						$i         = 0;
92
+					}
93
+				}
94
+			}
95
+		}
96 96
 
97
-        global $xoopsConfig;
97
+		global $xoopsConfig;
98 98
 
99
-        $configHandler   = xoops_getHandler('config');
100
-        $xoopsConfigUser = $configHandler->getConfigsByCat(XOOPS_CONF_USER);
101
-        switch ($xoopsConfigUser['activation_type']) {
102
-            case 0:
103
-                $level           = 0;
104
-                $mailtemplate    = 'smartmail_activate_user.tpl';
105
-                $aInfoMessages[] = sprintf(_NL_MA_NEW_USER_NEED_ACT, $user_email);
106
-                break;
107
-            case 1:
108
-                $level           = 1;
109
-                $mailtemplate    = 'smartmail_auto_activate_user.tpl';
110
-                $aInfoMessages[] = sprintf(_NL_MA_NEW_USER_AUTO_ACT, $user_email);
111
-                break;
112
-            case 2:
113
-            default:
114
-                $level           = 0;
115
-                $mailtemplate    = 'smartmail_admin_activate_user.tpl';
116
-                $aInfoMessages[] = sprintf(_NL_MA_NEW_USER_ADMIN_ACT, $user_email);
117
-        }
99
+		$configHandler   = xoops_getHandler('config');
100
+		$xoopsConfigUser = $configHandler->getConfigsByCat(XOOPS_CONF_USER);
101
+		switch ($xoopsConfigUser['activation_type']) {
102
+			case 0:
103
+				$level           = 0;
104
+				$mailtemplate    = 'smartmail_activate_user.tpl';
105
+				$aInfoMessages[] = sprintf(_NL_MA_NEW_USER_NEED_ACT, $user_email);
106
+				break;
107
+			case 1:
108
+				$level           = 1;
109
+				$mailtemplate    = 'smartmail_auto_activate_user.tpl';
110
+				$aInfoMessages[] = sprintf(_NL_MA_NEW_USER_AUTO_ACT, $user_email);
111
+				break;
112
+			case 2:
113
+			default:
114
+				$level           = 0;
115
+				$mailtemplate    = 'smartmail_admin_activate_user.tpl';
116
+				$aInfoMessages[] = sprintf(_NL_MA_NEW_USER_ADMIN_ACT, $user_email);
117
+		}
118 118
 
119
-        $userObj->setVar('uname', $usernames[$i]);
120
-        $userObj->setVar('user_avatar', 'blank.gif');
121
-        $userObj->setVar('user_regdate', time());
122
-        $userObj->setVar('timezone_offset', $xoopsConfig['default_TZ']);
123
-        $actkey = substr(md5(uniqid(mt_rand(), 1)), 0, 8);
124
-        $userObj->setVar('actkey', $actkey);
125
-        $userObj->setVar('email', $email);
126
-        $userObj->setVar('notify_method', 2);
127
-        $userObj->setVar('level', $userObj);
119
+		$userObj->setVar('uname', $usernames[$i]);
120
+		$userObj->setVar('user_avatar', 'blank.gif');
121
+		$userObj->setVar('user_regdate', time());
122
+		$userObj->setVar('timezone_offset', $xoopsConfig['default_TZ']);
123
+		$actkey = substr(md5(uniqid(mt_rand(), 1)), 0, 8);
124
+		$userObj->setVar('actkey', $actkey);
125
+		$userObj->setVar('email', $email);
126
+		$userObj->setVar('notify_method', 2);
127
+		$userObj->setVar('level', $userObj);
128 128
 
129
-        if ($this->insertUser($userObj)) {
129
+		if ($this->insertUser($userObj)) {
130 130
 
131
-            // if $groups=false, Add the user to Registered Users group
132
-            if (!$groups) {
133
-                $this->addUserToGroup(XOOPS_GROUP_USERS, $userObj->getVar('uid'));
134
-            } else {
135
-                foreach ($groups as $groupid) {
136
-                    $this->addUserToGroup($groupid, $userObj->getVar('uid'));
137
-                }
138
-            }
139
-        } else {
140
-            return false;
141
-        }
131
+			// if $groups=false, Add the user to Registered Users group
132
+			if (!$groups) {
133
+				$this->addUserToGroup(XOOPS_GROUP_USERS, $userObj->getVar('uid'));
134
+			} else {
135
+				foreach ($groups as $groupid) {
136
+					$this->addUserToGroup($groupid, $userObj->getVar('uid'));
137
+				}
138
+			}
139
+		} else {
140
+			return false;
141
+		}
142 142
 
143
-        if ($notifyUser) {
144
-            // send some notifications
145
-            $xoopsMailer = xoops_getMailer();
146
-            $xoopsMailer->useMail();
147
-            $xoopsMailer->setTemplateDir(SMARTOBJECT_ROOT_PATH . 'language/' . $xoopsConfig['language'] . '/mail_template');
148
-            $xoopsMailer->setTemplate('smartobject_notify_user_added_by_admin.tpl');
149
-            $xoopsMailer->assign('XOOPS_USER_PASSWORD', $password);
150
-            $xoopsMailer->assign('SITENAME', $xoopsConfig['sitename']);
151
-            $xoopsMailer->assign('ADMINMAIL', $xoopsConfig['adminmail']);
152
-            $xoopsMailer->assign('SITEURL', XOOPS_URL . '/');
153
-            $xoopsMailer->assign('NAME', $userObj->getVar('name'));
154
-            $xoopsMailer->assign('UNAME', $userObj->getVar('uname'));
155
-            $xoopsMailer->setToUsers($userObj);
156
-            $xoopsMailer->setFromEmail($xoopsConfig['adminmail']);
157
-            $xoopsMailer->setFromName($xoopsConfig['sitename']);
158
-            $xoopsMailer->setSubject(sprintf(_CO_SOBJECT_NEW_USER_NOTIFICATION_SUBJECT, $xoopsConfig['sitename']));
143
+		if ($notifyUser) {
144
+			// send some notifications
145
+			$xoopsMailer = xoops_getMailer();
146
+			$xoopsMailer->useMail();
147
+			$xoopsMailer->setTemplateDir(SMARTOBJECT_ROOT_PATH . 'language/' . $xoopsConfig['language'] . '/mail_template');
148
+			$xoopsMailer->setTemplate('smartobject_notify_user_added_by_admin.tpl');
149
+			$xoopsMailer->assign('XOOPS_USER_PASSWORD', $password);
150
+			$xoopsMailer->assign('SITENAME', $xoopsConfig['sitename']);
151
+			$xoopsMailer->assign('ADMINMAIL', $xoopsConfig['adminmail']);
152
+			$xoopsMailer->assign('SITEURL', XOOPS_URL . '/');
153
+			$xoopsMailer->assign('NAME', $userObj->getVar('name'));
154
+			$xoopsMailer->assign('UNAME', $userObj->getVar('uname'));
155
+			$xoopsMailer->setToUsers($userObj);
156
+			$xoopsMailer->setFromEmail($xoopsConfig['adminmail']);
157
+			$xoopsMailer->setFromName($xoopsConfig['sitename']);
158
+			$xoopsMailer->setSubject(sprintf(_CO_SOBJECT_NEW_USER_NOTIFICATION_SUBJECT, $xoopsConfig['sitename']));
159 159
 
160
-            if (!$xoopsMailer->send(true)) {
161
-                /**
162
-                 * @todo trap error if email was not sent
163
-                 */
164
-                $xoopsMailer->getErrors(true);
165
-            }
166
-        }
160
+			if (!$xoopsMailer->send(true)) {
161
+				/**
162
+				 * @todo trap error if email was not sent
163
+				 */
164
+				$xoopsMailer->getErrors(true);
165
+			}
166
+		}
167 167
 
168
-        return true;
169
-    }
168
+		return true;
169
+	}
170 170
 
171
-    /**
172
-     * Generates an array of usernames
173
-     *
174
-     * @param  string $email email of user
175
-     * @param  int    $count number of names to generate
176
-     * @return array  $names
177
-     * @internal param string $name name of user
178
-     * @author   xHelp Team
179
-     *
180
-     * @access   public
181
-     */
182
-    public function genUserNames($email, $count = 20)
183
-    {
184
-        $name = substr($email, 0, strpos($email, '@')); //Take the email adress without domain as username
171
+	/**
172
+	 * Generates an array of usernames
173
+	 *
174
+	 * @param  string $email email of user
175
+	 * @param  int    $count number of names to generate
176
+	 * @return array  $names
177
+	 * @internal param string $name name of user
178
+	 * @author   xHelp Team
179
+	 *
180
+	 * @access   public
181
+	 */
182
+	public function genUserNames($email, $count = 20)
183
+	{
184
+		$name = substr($email, 0, strpos($email, '@')); //Take the email adress without domain as username
185 185
 
186
-        $names  = [];
187
-        $userid = explode('@', $email);
186
+		$names  = [];
187
+		$userid = explode('@', $email);
188 188
 
189
-        $basename    = '';
190
-        $hasbasename = false;
191
-        $emailname   = $userid[0];
189
+		$basename    = '';
190
+		$hasbasename = false;
191
+		$emailname   = $userid[0];
192 192
 
193
-        $names[] = $emailname;
193
+		$names[] = $emailname;
194 194
 
195
-        if (strlen($name) > 0) {
196
-            $name = explode(' ', trim($name));
197
-            if (count($name) > 1) {
198
-                $basename = strtolower(substr($name[0], 0, 1) . $name[count($name) - 1]);
199
-            } else {
200
-                $basename = strtolower($name[0]);
201
-            }
202
-            $basename = xoops_substr($basename, 0, 60, '');
203
-            //Prevent Duplication of Email Username and Name
204
-            if (!in_array($basename, $names)) {
205
-                $names[]     = $basename;
206
-                $hasbasename = true;
207
-            }
208
-        }
195
+		if (strlen($name) > 0) {
196
+			$name = explode(' ', trim($name));
197
+			if (count($name) > 1) {
198
+				$basename = strtolower(substr($name[0], 0, 1) . $name[count($name) - 1]);
199
+			} else {
200
+				$basename = strtolower($name[0]);
201
+			}
202
+			$basename = xoops_substr($basename, 0, 60, '');
203
+			//Prevent Duplication of Email Username and Name
204
+			if (!in_array($basename, $names)) {
205
+				$names[]     = $basename;
206
+				$hasbasename = true;
207
+			}
208
+		}
209 209
 
210
-        $i          = count($names);
211
-        $onbasename = 1;
212
-        while ($i < $count) {
213
-            $num = $this->genRandNumber();
214
-            if ($onbasename < 0 && $hasbasename) {
215
-                $names[] = xoops_substr($basename, 0, 58, '') . $num;
216
-            } else {
217
-                $names[] = xoops_substr($emailname, 0, 58, '') . $num;
218
-            }
219
-            $i          = count($names);
220
-            $onbasename = ~$onbasename;
221
-            $num        = '';
222
-        }
210
+		$i          = count($names);
211
+		$onbasename = 1;
212
+		while ($i < $count) {
213
+			$num = $this->genRandNumber();
214
+			if ($onbasename < 0 && $hasbasename) {
215
+				$names[] = xoops_substr($basename, 0, 58, '') . $num;
216
+			} else {
217
+				$names[] = xoops_substr($emailname, 0, 58, '') . $num;
218
+			}
219
+			$i          = count($names);
220
+			$onbasename = ~$onbasename;
221
+			$num        = '';
222
+		}
223 223
 
224
-        return $names;
225
-    }
224
+		return $names;
225
+	}
226 226
 
227
-    /**
228
-     * Creates a random number with a specified number of $digits
229
-     *
230
-     * @param  int $digits number of digits
231
-     * @return int random number
232
-     * @author xHelp Team
233
-     *
234
-     * @access public
235
-     */
236
-    public function genRandNumber($digits = 2)
237
-    {
238
-        $this->initRand();
239
-        $tmp = [];
227
+	/**
228
+	 * Creates a random number with a specified number of $digits
229
+	 *
230
+	 * @param  int $digits number of digits
231
+	 * @return int random number
232
+	 * @author xHelp Team
233
+	 *
234
+	 * @access public
235
+	 */
236
+	public function genRandNumber($digits = 2)
237
+	{
238
+		$this->initRand();
239
+		$tmp = [];
240 240
 
241
-        for ($i = 0; $i < $digits; ++$i) {
242
-            $tmp[$i] = (mt_rand() % 9);
243
-        }
241
+		for ($i = 0; $i < $digits; ++$i) {
242
+			$tmp[$i] = (mt_rand() % 9);
243
+		}
244 244
 
245
-        return implode('', $tmp);
246
-    }
245
+		return implode('', $tmp);
246
+	}
247 247
 
248
-    /**
249
-     * Gives the random number generator a seed to start from
250
-     *
251
-     * @return void
252
-     *
253
-     * @access public
254
-     */
255
-    public function initRand()
256
-    {
257
-        static $randCalled = false;
258
-        if (!$randCalled) {
259
-            mt_srand((double)microtime() * 1000000);
260
-            $randCalled = true;
261
-        }
262
-    }
248
+	/**
249
+	 * Gives the random number generator a seed to start from
250
+	 *
251
+	 * @return void
252
+	 *
253
+	 * @access public
254
+	 */
255
+	public function initRand()
256
+	{
257
+		static $randCalled = false;
258
+		if (!$randCalled) {
259
+			mt_srand((double)microtime() * 1000000);
260
+			$randCalled = true;
261
+		}
262
+	}
263 263
 }
Please login to merge, or discard this patch.
class/File.php 1 patch
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -29,12 +29,12 @@
 block discarded – undo
29 29
  */
30 30
 class File extends Smartobject\BaseSmartObjectBasedUrl
31 31
 {
32
-    /**
33
-     * SmartobjectFile constructor.
34
-     */
35
-    public function __construct()
36
-    {
37
-        parent::__construct();
38
-        $this->quickInitVar('fileid', XOBJ_DTYPE_TXTBOX, true, _CO_SOBJECT_RATING_DIRNAME);
39
-    }
32
+	/**
33
+	 * SmartobjectFile constructor.
34
+	 */
35
+	public function __construct()
36
+	{
37
+		parent::__construct();
38
+		$this->quickInitVar('fileid', XOBJ_DTYPE_TXTBOX, true, _CO_SOBJECT_RATING_DIRNAME);
39
+	}
40 40
 }
Please login to merge, or discard this patch.
class/Rating.php 1 patch
Indentation   +119 added lines, -119 removed lines patch added patch discarded remove patch
@@ -30,123 +30,123 @@
 block discarded – undo
30 30
  */
31 31
 class Rating extends Smartobject\BaseSmartObject
32 32
 {
33
-    public $_modulePlugin = false;
34
-
35
-    /**
36
-     * SmartobjectRating constructor.
37
-     */
38
-    public function __construct()
39
-    {
40
-        $this->quickInitVar('ratingid', XOBJ_DTYPE_INT, true);
41
-        $this->quickInitVar('dirname', XOBJ_DTYPE_TXTBOX, true, _CO_SOBJECT_RATING_DIRNAME);
42
-        $this->quickInitVar('item', XOBJ_DTYPE_TXTBOX, true, _CO_SOBJECT_RATING_ITEM);
43
-        $this->quickInitVar('itemid', XOBJ_DTYPE_INT, true, _CO_SOBJECT_RATING_ITEMID);
44
-        $this->quickInitVar('uid', XOBJ_DTYPE_INT, true, _CO_SOBJECT_RATING_UID);
45
-        $this->quickInitVar('date', XOBJ_DTYPE_LTIME, true, _CO_SOBJECT_RATING_DATE);
46
-        $this->quickInitVar('rate', XOBJ_DTYPE_INT, true, _CO_SOBJECT_RATING_RATE);
47
-
48
-        $this->initNonPersistableVar('name', XOBJ_DTYPE_TXTBOX, 'user', _CO_SOBJECT_RATING_NAME);
49
-
50
-        $this->setControl('dirname', [
51
-            'handler'  => 'rating',
52
-            'method'   => 'getModuleList',
53
-            'onSelect' => 'submit'
54
-        ]);
55
-
56
-        $this->setControl('item', [
57
-            'object' => &$this,
58
-            'method' => 'getItemList'
59
-        ]);
60
-
61
-        $this->setControl('uid', 'user');
62
-
63
-        $this->setControl('rate', [
64
-            'handler' => 'rating',
65
-            'method'  => 'getRateList'
66
-        ]);
67
-    }
68
-
69
-    /**
70
-     * @param  string $key
71
-     * @param  string $format
72
-     * @return mixed
73
-     */
74
-    public function getVar($key, $format = 's')
75
-    {
76
-        if ('s' === $format && in_array($key, ['name', 'dirname'])) {
77
-            //            return call_user_func(array($this, $key));
78
-            return $this->{$key}();
79
-        }
80
-
81
-        return parent::getVar($key, $format);
82
-    }
83
-
84
-    /**
85
-     * @return string
86
-     */
87
-    public function name()
88
-    {
89
-        $ret = Smartobject\Utility::getLinkedUnameFromId($this->getVar('uid', 'e'), true, []);
90
-
91
-        return $ret;
92
-    }
93
-
94
-    /**
95
-     * @return mixed
96
-     */
97
-    public function dirname()
98
-    {
99
-        global $smartobjectRatingHandler;
100
-        $moduleArray = $smartobjectRatingHandler->getModuleList();
101
-
102
-        return $moduleArray[$this->getVar('dirname', 'n')];
103
-    }
104
-
105
-    /**
106
-     * @return mixed
107
-     */
108
-    public function getItemList()
109
-    {
110
-        $plugin = $this->getModulePlugin();
111
-
112
-        return $plugin->getItemList();
113
-    }
114
-
115
-    /**
116
-     * @return string
117
-     */
118
-    public function getItemValue()
119
-    {
120
-        $moduleUrl      = XOOPS_URL . '/modules/' . $this->getVar('dirname', 'n') . '/';
121
-        $plugin         = $this->getModulePlugin();
122
-        $pluginItemInfo = $plugin->getItemInfo($this->getVar('item'));
123
-        if (!$pluginItemInfo) {
124
-            return '';
125
-        }
126
-        $itemPath = sprintf($pluginItemInfo['url'], $this->getVar('itemid'));
127
-        $ret      = '<a href="' . $moduleUrl . $itemPath . '">' . $pluginItemInfo['caption'] . '</a>';
128
-
129
-        return $ret;
130
-    }
131
-
132
-    /**
133
-     * @return mixed
134
-     */
135
-    public function getRateValue()
136
-    {
137
-        return $this->getVar('rate');
138
-    }
139
-
140
-    /**
141
-     * @return bool
142
-     */
143
-    public function getModulePlugin()
144
-    {
145
-        if (!$this->_modulePlugin) {
146
-            global $smartobjectRatingHandler;
147
-            $this->_modulePlugin = $smartobjectRatingHandler->pluginsObject->getPlugin($this->getVar('dirname', 'n'));
148
-        }
149
-
150
-        return $this->_modulePlugin;
151
-    }
33
+	public $_modulePlugin = false;
34
+
35
+	/**
36
+	 * SmartobjectRating constructor.
37
+	 */
38
+	public function __construct()
39
+	{
40
+		$this->quickInitVar('ratingid', XOBJ_DTYPE_INT, true);
41
+		$this->quickInitVar('dirname', XOBJ_DTYPE_TXTBOX, true, _CO_SOBJECT_RATING_DIRNAME);
42
+		$this->quickInitVar('item', XOBJ_DTYPE_TXTBOX, true, _CO_SOBJECT_RATING_ITEM);
43
+		$this->quickInitVar('itemid', XOBJ_DTYPE_INT, true, _CO_SOBJECT_RATING_ITEMID);
44
+		$this->quickInitVar('uid', XOBJ_DTYPE_INT, true, _CO_SOBJECT_RATING_UID);
45
+		$this->quickInitVar('date', XOBJ_DTYPE_LTIME, true, _CO_SOBJECT_RATING_DATE);
46
+		$this->quickInitVar('rate', XOBJ_DTYPE_INT, true, _CO_SOBJECT_RATING_RATE);
47
+
48
+		$this->initNonPersistableVar('name', XOBJ_DTYPE_TXTBOX, 'user', _CO_SOBJECT_RATING_NAME);
49
+
50
+		$this->setControl('dirname', [
51
+			'handler'  => 'rating',
52
+			'method'   => 'getModuleList',
53
+			'onSelect' => 'submit'
54
+		]);
55
+
56
+		$this->setControl('item', [
57
+			'object' => &$this,
58
+			'method' => 'getItemList'
59
+		]);
60
+
61
+		$this->setControl('uid', 'user');
62
+
63
+		$this->setControl('rate', [
64
+			'handler' => 'rating',
65
+			'method'  => 'getRateList'
66
+		]);
67
+	}
68
+
69
+	/**
70
+	 * @param  string $key
71
+	 * @param  string $format
72
+	 * @return mixed
73
+	 */
74
+	public function getVar($key, $format = 's')
75
+	{
76
+		if ('s' === $format && in_array($key, ['name', 'dirname'])) {
77
+			//            return call_user_func(array($this, $key));
78
+			return $this->{$key}();
79
+		}
80
+
81
+		return parent::getVar($key, $format);
82
+	}
83
+
84
+	/**
85
+	 * @return string
86
+	 */
87
+	public function name()
88
+	{
89
+		$ret = Smartobject\Utility::getLinkedUnameFromId($this->getVar('uid', 'e'), true, []);
90
+
91
+		return $ret;
92
+	}
93
+
94
+	/**
95
+	 * @return mixed
96
+	 */
97
+	public function dirname()
98
+	{
99
+		global $smartobjectRatingHandler;
100
+		$moduleArray = $smartobjectRatingHandler->getModuleList();
101
+
102
+		return $moduleArray[$this->getVar('dirname', 'n')];
103
+	}
104
+
105
+	/**
106
+	 * @return mixed
107
+	 */
108
+	public function getItemList()
109
+	{
110
+		$plugin = $this->getModulePlugin();
111
+
112
+		return $plugin->getItemList();
113
+	}
114
+
115
+	/**
116
+	 * @return string
117
+	 */
118
+	public function getItemValue()
119
+	{
120
+		$moduleUrl      = XOOPS_URL . '/modules/' . $this->getVar('dirname', 'n') . '/';
121
+		$plugin         = $this->getModulePlugin();
122
+		$pluginItemInfo = $plugin->getItemInfo($this->getVar('item'));
123
+		if (!$pluginItemInfo) {
124
+			return '';
125
+		}
126
+		$itemPath = sprintf($pluginItemInfo['url'], $this->getVar('itemid'));
127
+		$ret      = '<a href="' . $moduleUrl . $itemPath . '">' . $pluginItemInfo['caption'] . '</a>';
128
+
129
+		return $ret;
130
+	}
131
+
132
+	/**
133
+	 * @return mixed
134
+	 */
135
+	public function getRateValue()
136
+	{
137
+		return $this->getVar('rate');
138
+	}
139
+
140
+	/**
141
+	 * @return bool
142
+	 */
143
+	public function getModulePlugin()
144
+	{
145
+		if (!$this->_modulePlugin) {
146
+			global $smartobjectRatingHandler;
147
+			$this->_modulePlugin = $smartobjectRatingHandler->pluginsObject->getPlugin($this->getVar('dirname', 'n'));
148
+		}
149
+
150
+		return $this->_modulePlugin;
151
+	}
152 152
 }
Please login to merge, or discard this patch.
class/Utility.php 1 patch
Indentation   +1241 added lines, -1241 removed lines patch added patch discarded remove patch
@@ -9,186 +9,186 @@  discard block
 block discarded – undo
9 9
  */
10 10
 class Utility
11 11
 {
12
-    use Common\VersionChecks; //checkVerXoops, checkVerPhp Traits
13
-
14
-    use Common\ServerStats; // getServerStats Trait
15
-
16
-    use Common\FilesManagement; // Files Management Trait
17
-
18
-    //--------------- Custom module methods -----------------------------
19
-
20
-
21
-
22
-    /**
23
-     * @param $cssfile
24
-     * @return string
25
-     */
26
-    public static function getCssLink($cssfile)
27
-    {
28
-        $ret = '<link rel="stylesheet" type="text/css" href="' . $cssfile . '">';
29
-
30
-        return $ret;
31
-    }
32
-
33
-    /**
34
-     * @return string
35
-     */
36
-    public static function getPageBeforeForm()
37
-    {
38
-        global $smart_previous_page;
39
-
40
-        return isset($_POST['smart_page_before_form']) ? $_POST['smart_page_before_form'] : $smart_previous_page;
41
-    }
42
-
43
-    /**
44
-     * Checks if a user is admin of $module
45
-     *
46
-     * @param  bool $module
47
-     * @return bool: true if user is admin
48
-     */
49
-    public static function userIsAdmin($module = false)
50
-    {
51
-        global $xoopsUser;
52
-        static $smart_isAdmin;
53
-        if (!$module) {
54
-            global $xoopsModule;
55
-            $module = $xoopsModule->getVar('dirname');
56
-        }
57
-        if (isset($smart_isAdmin[$module])) {
58
-            return $smart_isAdmin[$module];
59
-        }
60
-        if (!$xoopsUser) {
61
-            $smart_isAdmin[$module] = false;
62
-
63
-            return $smart_isAdmin[$module];
64
-        }
65
-        $smart_isAdmin[$module] = false;
66
-        $smartModule            = static::getModuleInfo($module);
67
-        if (!is_object($smartModule)) {
68
-            return false;
69
-        }
70
-        $module_id              = $smartModule->getVar('mid');
71
-        $smart_isAdmin[$module] = $xoopsUser->isAdmin($module_id);
72
-
73
-        return $smart_isAdmin[$module];
74
-    }
75
-
76
-    /**
77
-     * @return bool
78
-     */
79
-    public static function isXoops22()
80
-    {
81
-        $xoops22 = false;
82
-        $xv      = str_replace('XOOPS ', '', XOOPS_VERSION);
83
-        if ('2' == substr($xv, 2, 1)) {
84
-            $xoops22 = true;
85
-        }
86
-
87
-        return $xoops22;
88
-    }
89
-
90
-    /**
91
-     * @param  bool $withLink
92
-     * @param  bool $forBreadCrumb
93
-     * @param  bool $moduleName
94
-     * @return string
95
-     */
96
-    public static function getModuleName($withLink = true, $forBreadCrumb = false, $moduleName = false)
97
-    {
98
-        if (!$moduleName) {
99
-            global $xoopsModule;
100
-            $moduleName = $xoopsModule->getVar('dirname');
101
-        }
102
-        $smartModule       = static::getModuleInfo($moduleName);
103
-        $smartModuleConfig = static::getModuleConfig($moduleName);
104
-        if (!isset($smartModule)) {
105
-            return '';
106
-        }
107
-
108
-        if ($forBreadCrumb
109
-            && (isset($smartModuleConfig['show_mod_name_breadcrumb'])
110
-                && !$smartModuleConfig['show_mod_name_breadcrumb'])) {
111
-            return '';
112
-        }
113
-        if (!$withLink) {
114
-            return $smartModule->getVar('name');
115
-        } else {
116
-            $seoMode = static::getModuleModeSEO($moduleName);
117
-            if ('rewrite' === $seoMode) {
118
-                $seoModuleName = static::getModuleNameForSEO($moduleName);
119
-                $ret           = XOOPS_URL . '/' . $seoModuleName . '/';
120
-            } elseif ('pathinfo' === $seoMode) {
121
-                $ret = XOOPS_URL . '/modules/' . $moduleName . '/seo.php/' . $seoModuleName . '/';
122
-            } else {
123
-                $ret = XOOPS_URL . '/modules/' . $moduleName . '/';
124
-            }
125
-
126
-            return '<a href="' . $ret . '">' . $smartModule->getVar('name') . '</a>';
127
-        }
128
-    }
129
-
130
-    /**
131
-     * @param  bool $moduleName
132
-     * @return string
133
-     */
134
-    public static function getModuleNameForSEO($moduleName = false)
135
-    {
136
-        $smartModule       = static::getModuleInfo($moduleName);
137
-        $smartModuleConfig = static::getModuleConfig($moduleName);
138
-        if (isset($smartModuleConfig['seo_module_name'])) {
139
-            return $smartModuleConfig['seo_module_name'];
140
-        }
141
-        $ret = static::getModuleName(false, false, $moduleName);
142
-
143
-        return strtolower($ret);
144
-    }
145
-
146
-    /**
147
-     * @param  bool $moduleName
148
-     * @return bool
149
-     */
150
-    public static function getModuleModeSEO($moduleName = false)
151
-    {
152
-        $smartModule       = static::getModuleInfo($moduleName);
153
-        $smartModuleConfig = static::getModuleConfig($moduleName);
154
-
155
-        return isset($smartModuleConfig['seo_mode']) ? $smartModuleConfig['seo_mode'] : false;
156
-    }
157
-
158
-    /**
159
-     * @param  bool $moduleName
160
-     * @return bool
161
-     */
162
-    public static function getModuleIncludeIdSEO($moduleName = false)
163
-    {
164
-        $smartModule       = static::getModuleInfo($moduleName);
165
-        $smartModuleConfig = static::getModuleConfig($moduleName);
166
-
167
-        return !empty($smartModuleConfig['seo_inc_id']);
168
-    }
169
-
170
-    /**
171
-     * @param $key
172
-     * @return string
173
-     */
174
-    public static function getEnv($key)
175
-    {
176
-        $ret = '';
177
-        $ret = isset($_SERVER[$key]) ? $_SERVER[$key] : (isset($_ENV[$key]) ? $_ENV[$key] : '');
178
-
179
-        return $ret;
180
-    }
181
-
182
-    public static function getXoopsCpHeader()
183
-    {
184
-        xoops_cp_header();
185
-        global $xoopsModule, $xoopsConfig;
186
-        /**
187
-         * include SmartObject admin language file
188
-         */
189
-        /** @var Smartobject\Helper $helper */
190
-        $helper = Smartobject\Helper::getInstance();
191
-        $helper->loadLanguage('admin'); ?>
12
+	use Common\VersionChecks; //checkVerXoops, checkVerPhp Traits
13
+
14
+	use Common\ServerStats; // getServerStats Trait
15
+
16
+	use Common\FilesManagement; // Files Management Trait
17
+
18
+	//--------------- Custom module methods -----------------------------
19
+
20
+
21
+
22
+	/**
23
+	 * @param $cssfile
24
+	 * @return string
25
+	 */
26
+	public static function getCssLink($cssfile)
27
+	{
28
+		$ret = '<link rel="stylesheet" type="text/css" href="' . $cssfile . '">';
29
+
30
+		return $ret;
31
+	}
32
+
33
+	/**
34
+	 * @return string
35
+	 */
36
+	public static function getPageBeforeForm()
37
+	{
38
+		global $smart_previous_page;
39
+
40
+		return isset($_POST['smart_page_before_form']) ? $_POST['smart_page_before_form'] : $smart_previous_page;
41
+	}
42
+
43
+	/**
44
+	 * Checks if a user is admin of $module
45
+	 *
46
+	 * @param  bool $module
47
+	 * @return bool: true if user is admin
48
+	 */
49
+	public static function userIsAdmin($module = false)
50
+	{
51
+		global $xoopsUser;
52
+		static $smart_isAdmin;
53
+		if (!$module) {
54
+			global $xoopsModule;
55
+			$module = $xoopsModule->getVar('dirname');
56
+		}
57
+		if (isset($smart_isAdmin[$module])) {
58
+			return $smart_isAdmin[$module];
59
+		}
60
+		if (!$xoopsUser) {
61
+			$smart_isAdmin[$module] = false;
62
+
63
+			return $smart_isAdmin[$module];
64
+		}
65
+		$smart_isAdmin[$module] = false;
66
+		$smartModule            = static::getModuleInfo($module);
67
+		if (!is_object($smartModule)) {
68
+			return false;
69
+		}
70
+		$module_id              = $smartModule->getVar('mid');
71
+		$smart_isAdmin[$module] = $xoopsUser->isAdmin($module_id);
72
+
73
+		return $smart_isAdmin[$module];
74
+	}
75
+
76
+	/**
77
+	 * @return bool
78
+	 */
79
+	public static function isXoops22()
80
+	{
81
+		$xoops22 = false;
82
+		$xv      = str_replace('XOOPS ', '', XOOPS_VERSION);
83
+		if ('2' == substr($xv, 2, 1)) {
84
+			$xoops22 = true;
85
+		}
86
+
87
+		return $xoops22;
88
+	}
89
+
90
+	/**
91
+	 * @param  bool $withLink
92
+	 * @param  bool $forBreadCrumb
93
+	 * @param  bool $moduleName
94
+	 * @return string
95
+	 */
96
+	public static function getModuleName($withLink = true, $forBreadCrumb = false, $moduleName = false)
97
+	{
98
+		if (!$moduleName) {
99
+			global $xoopsModule;
100
+			$moduleName = $xoopsModule->getVar('dirname');
101
+		}
102
+		$smartModule       = static::getModuleInfo($moduleName);
103
+		$smartModuleConfig = static::getModuleConfig($moduleName);
104
+		if (!isset($smartModule)) {
105
+			return '';
106
+		}
107
+
108
+		if ($forBreadCrumb
109
+			&& (isset($smartModuleConfig['show_mod_name_breadcrumb'])
110
+				&& !$smartModuleConfig['show_mod_name_breadcrumb'])) {
111
+			return '';
112
+		}
113
+		if (!$withLink) {
114
+			return $smartModule->getVar('name');
115
+		} else {
116
+			$seoMode = static::getModuleModeSEO($moduleName);
117
+			if ('rewrite' === $seoMode) {
118
+				$seoModuleName = static::getModuleNameForSEO($moduleName);
119
+				$ret           = XOOPS_URL . '/' . $seoModuleName . '/';
120
+			} elseif ('pathinfo' === $seoMode) {
121
+				$ret = XOOPS_URL . '/modules/' . $moduleName . '/seo.php/' . $seoModuleName . '/';
122
+			} else {
123
+				$ret = XOOPS_URL . '/modules/' . $moduleName . '/';
124
+			}
125
+
126
+			return '<a href="' . $ret . '">' . $smartModule->getVar('name') . '</a>';
127
+		}
128
+	}
129
+
130
+	/**
131
+	 * @param  bool $moduleName
132
+	 * @return string
133
+	 */
134
+	public static function getModuleNameForSEO($moduleName = false)
135
+	{
136
+		$smartModule       = static::getModuleInfo($moduleName);
137
+		$smartModuleConfig = static::getModuleConfig($moduleName);
138
+		if (isset($smartModuleConfig['seo_module_name'])) {
139
+			return $smartModuleConfig['seo_module_name'];
140
+		}
141
+		$ret = static::getModuleName(false, false, $moduleName);
142
+
143
+		return strtolower($ret);
144
+	}
145
+
146
+	/**
147
+	 * @param  bool $moduleName
148
+	 * @return bool
149
+	 */
150
+	public static function getModuleModeSEO($moduleName = false)
151
+	{
152
+		$smartModule       = static::getModuleInfo($moduleName);
153
+		$smartModuleConfig = static::getModuleConfig($moduleName);
154
+
155
+		return isset($smartModuleConfig['seo_mode']) ? $smartModuleConfig['seo_mode'] : false;
156
+	}
157
+
158
+	/**
159
+	 * @param  bool $moduleName
160
+	 * @return bool
161
+	 */
162
+	public static function getModuleIncludeIdSEO($moduleName = false)
163
+	{
164
+		$smartModule       = static::getModuleInfo($moduleName);
165
+		$smartModuleConfig = static::getModuleConfig($moduleName);
166
+
167
+		return !empty($smartModuleConfig['seo_inc_id']);
168
+	}
169
+
170
+	/**
171
+	 * @param $key
172
+	 * @return string
173
+	 */
174
+	public static function getEnv($key)
175
+	{
176
+		$ret = '';
177
+		$ret = isset($_SERVER[$key]) ? $_SERVER[$key] : (isset($_ENV[$key]) ? $_ENV[$key] : '');
178
+
179
+		return $ret;
180
+	}
181
+
182
+	public static function getXoopsCpHeader()
183
+	{
184
+		xoops_cp_header();
185
+		global $xoopsModule, $xoopsConfig;
186
+		/**
187
+		 * include SmartObject admin language file
188
+		 */
189
+		/** @var Smartobject\Helper $helper */
190
+		$helper = Smartobject\Helper::getInstance();
191
+		$helper->loadLanguage('admin'); ?>
192 192
 
193 193
         <script type='text/javascript'>
194 194
             <!--
@@ -202,504 +202,504 @@  discard block
 block discarded – undo
202 202
             src='<?php echo SMARTOBJECT_URL ?>include/smart.js'></script>
203 203
         <?php
204 204
 
205
-        /**
206
-         * Include the admin language constants for the SmartObject Framework
207
-         */
208
-        /** @var Smartobject\Helper $helper */
209
-        $helper = Smartobject\Helper::getInstance();
210
-        $helper->loadLanguage('admin');
211
-    }
212
-
213
-    /**
214
-     * Detemines if a table exists in the current db
215
-     *
216
-     * @param  string $table the table name (without XOOPS prefix)
217
-     * @return bool   True if table exists, false if not
218
-     *
219
-     * @access public
220
-     * @author xhelp development team
221
-     */
222
-    public static function isTable($table)
223
-    {
224
-        $bRetVal = false;
225
-        //Verifies that a MySQL table exists
226
-        $xoopsDB  = \XoopsDatabaseFactory::getDatabaseConnection();
227
-        $realname = $xoopsDB->prefix($table);
228
-        $sql      = 'SHOW TABLES FROM ' . XOOPS_DB_NAME;
229
-        $ret      = $xoopsDB->queryF($sql);
230
-        while (false !== (list($m_table) = $xoopsDB->fetchRow($ret))) {
231
-            if ($m_table == $realname) {
232
-                $bRetVal = true;
233
-                break;
234
-            }
235
-        }
236
-        $xoopsDB->freeRecordSet($ret);
237
-
238
-        return $bRetVal;
239
-    }
240
-
241
-    /**
242
-     * Gets a value from a key in the xhelp_meta table
243
-     *
244
-     * @param  string $key
245
-     * @param  bool   $moduleName
246
-     * @return string $value
247
-     *
248
-     * @access public
249
-     * @author xhelp development team
250
-     */
251
-    public static function getMeta($key, $moduleName = false)
252
-    {
253
-        if (!$moduleName) {
254
-            $moduleName = static::getCurrentModuleName();
255
-        }
256
-        $xoopsDB = \XoopsDatabaseFactory::getDatabaseConnection();
257
-        $sql     = sprintf('SELECT metavalue FROM `%s` WHERE metakey=%s', $xoopsDB->prefix($moduleName . '_meta'), $xoopsDB->quoteString($key));
258
-        $ret     = $xoopsDB->query($sql);
259
-        if (!$ret) {
260
-            $value = false;
261
-        } else {
262
-            list($value) = $xoopsDB->fetchRow($ret);
263
-        }
264
-
265
-        return $value;
266
-    }
267
-
268
-    /**
269
-     * @return bool
270
-     */
271
-    public static function getCurrentModuleName()
272
-    {
273
-        global $xoopsModule;
274
-        if (is_object($xoopsModule)) {
275
-            return $xoopsModule->getVar('dirname');
276
-        } else {
277
-            return false;
278
-        }
279
-    }
280
-
281
-    /**
282
-     * Sets a value for a key in the xhelp_meta table
283
-     *
284
-     * @param  string $key
285
-     * @param  string $value
286
-     * @param  bool   $moduleName
287
-     * @return bool   TRUE if success, FALSE if failure
288
-     *
289
-     * @access public
290
-     * @author xhelp development team
291
-     */
292
-    public static function setMeta($key, $value, $moduleName = false)
293
-    {
294
-        if (!$moduleName) {
295
-            $moduleName = static::getCurrentModuleName();
296
-        }
297
-        $xoopsDB = \XoopsDatabaseFactory::getDatabaseConnection();
298
-        $ret     = static::getMeta($key, $moduleName);
299
-        if ('0' === $ret || $ret > 0) {
300
-            $sql = sprintf('UPDATE %s SET metavalue = %s WHERE metakey = %s', $xoopsDB->prefix($moduleName . '_meta'), $xoopsDB->quoteString($value), $xoopsDB->quoteString($key));
301
-        } else {
302
-            $sql = sprintf('INSERT INTO %s (metakey, metavalue) VALUES (%s, %s)', $xoopsDB->prefix($moduleName . '_meta'), $xoopsDB->quoteString($key), $xoopsDB->quoteString($value));
303
-        }
304
-        $ret = $xoopsDB->queryF($sql);
305
-        if (!$ret) {
306
-            return false;
307
-        }
308
-
309
-        return true;
310
-    }
311
-
312
-    // Thanks to Mithrandir:-)
313
-    /**
314
-     * @param         $str
315
-     * @param         $start
316
-     * @param         $length
317
-     * @param  string $trimmarker
318
-     * @return string
319
-     */
320
-    public static function getSubstr($str, $start, $length, $trimmarker = '...')
321
-    {
322
-        // if the string is empty, let's get out ;-)
323
-        if ('' === $str) {
324
-            return $str;
325
-        }
326
-        // reverse a string that is shortened with '' as trimmarker
327
-        $reversed_string = strrev(xoops_substr($str, $start, $length, ''));
328
-        // find first space in reversed string
329
-        $position_of_space = strpos($reversed_string, ' ', 0);
330
-        // truncate the original string to a length of $length
331
-        // minus the position of the last space
332
-        // plus the length of the $trimmarker
333
-        $truncated_string = xoops_substr($str, $start, $length - $position_of_space + strlen($trimmarker), $trimmarker);
334
-
335
-        return $truncated_string;
336
-    }
337
-
338
-    /**
339
-     * @param              $key
340
-     * @param  bool        $moduleName
341
-     * @param  string      $default
342
-     * @return null|string
343
-     */
344
-    public static function getConfig($key, $moduleName = false, $default = 'default_is_undefined')
345
-    {
346
-        if (!$moduleName) {
347
-            $moduleName = static::getCurrentModuleName();
348
-        }
349
-        $configs = static::getModuleConfig($moduleName);
350
-        if (isset($configs[$key])) {
351
-            return $configs[$key];
352
-        } else {
353
-            if ('default_is_undefined' === $default) {
354
-                return null;
355
-            } else {
356
-                return $default;
357
-            }
358
-        }
359
-    }
360
-
361
-    /**
362
-     * Copy a file, or a folder and its contents
363
-     *
364
-     * @author      Aidan Lister <[email protected]>
365
-     * @param  string $source The source
366
-     * @param  string $dest   The destination
367
-     * @return bool   Returns true on success, false on failure
368
-     */
369
-    public static function copyr($source, $dest)
370
-    {
371
-        // Simple copy for a file
372
-        if (is_file($source)) {
373
-            return copy($source, $dest);
374
-        }
375
-        // Make destination directory
376
-        if (!is_dir($dest)) {
377
-            mkdir($dest);
378
-        }
379
-        // Loop through the folder
380
-        $dir = dir($source);
381
-        while (false !== $entry = $dir->read()) {
382
-            // Skip pointers
383
-            if ('.' === $entry || '..' === $entry) {
384
-                continue;
385
-            }
386
-            // Deep copy directories
387
-            if (is_dir("$source/$entry") && ("$source/$entry" !== $dest)) {
388
-                static::copyr("$source/$entry", "$dest/$entry");
389
-            } else {
390
-                copy("$source/$entry", "$dest/$entry");
391
-            }
392
-        }
393
-        // Clean up
394
-        $dir->close();
395
-
396
-        return true;
397
-    }
398
-
399
-    /**
400
-     * Thanks to the NewBB2 Development Team
401
-     * @param $target
402
-     * @return bool
403
-     */
404
-    public static function mkdirAsAdmin($target)
405
-    {
406
-        // http://www.php.net/manual/en/function.mkdir.php
407
-        // saint at corenova.com
408
-        // bart at cdasites dot com
409
-        if (is_dir($target) || empty($target)) {
410
-            return true; // best case check first
411
-        }
412
-        if (file_exists($target) && !is_dir($target)) {
413
-            return false;
414
-        }
415
-        if (Smartobject\Utility::mkdirAsAdmin(substr($target, 0, strrpos($target, '/')))) {
416
-            if (!file_exists($target)) {
417
-                $res = mkdir($target, 0777); // crawl back up & create dir tree
418
-                static::chmodAsAdmin($target);
419
-
420
-                return $res;
421
-            }
422
-        }
423
-        $res = is_dir($target);
424
-
425
-        return $res;
426
-    }
427
-
428
-    /**
429
-     * Thanks to the NewBB2 Development Team
430
-     * @param       $target
431
-     * @param  int  $mode
432
-     * @return bool
433
-     */
434
-    public static function chmodAsAdmin($target, $mode = 0777)
435
-    {
436
-        return @ chmod($target, $mode);
437
-    }
438
-
439
-    /**
440
-     * @param $src
441
-     * @param $maxWidth
442
-     * @param $maxHeight
443
-     * @return array
444
-     */
445
-    public static function imageResize($src, $maxWidth, $maxHeight)
446
-    {
447
-        $width  = '';
448
-        $height = '';
449
-        $type   = '';
450
-        $attr   = '';
451
-        if (file_exists($src)) {
452
-            list($width, $height, $type, $attr) = getimagesize($src);
453
-            if ($width > $maxWidth) {
454
-                $originalWidth = $width;
455
-                $width         = $maxWidth;
456
-                $height        = $width * $height / $originalWidth;
457
-            }
458
-            if ($height > $maxHeight) {
459
-                $originalHeight = $height;
460
-                $height         = $maxHeight;
461
-                $width          = $height * $width / $originalHeight;
462
-            }
463
-            $attr = " width='$width' height='$height'";
464
-        }
465
-
466
-        return [
467
-            $width,
468
-            $height,
469
-            $type,
470
-            $attr
471
-        ];
472
-    }
473
-
474
-    /**
475
-     * @param  bool $moduleName
476
-     * @return mixed
477
-     */
478
-    public static function getModuleInfo($moduleName = false)
479
-    {
480
-        static $smartModules;
481
-        if (isset($smartModules[$moduleName])) {
482
-            $ret =& $smartModules[$moduleName];
483
-
484
-            return $ret;
485
-        }
486
-        global $xoopsModule;
487
-        if (!$moduleName) {
488
-            if (isset($xoopsModule) && is_object($xoopsModule)) {
489
-                $smartModules[$xoopsModule->getVar('dirname')] = $xoopsModule;
490
-
491
-                return $smartModules[$xoopsModule->getVar('dirname')];
492
-            }
493
-        }
494
-        if (!isset($smartModules[$moduleName])) {
495
-            if (isset($xoopsModule) && is_object($xoopsModule) && $xoopsModule->getVar('dirname') == $moduleName) {
496
-                $smartModules[$moduleName] = $xoopsModule;
497
-            } else {
498
-                $hModule = xoops_getHandler('module');
499
-                if ('xoops' !== $moduleName) {
500
-                    $smartModules[$moduleName] = $hModule->getByDirname($moduleName);
501
-                } else {
502
-                    $smartModules[$moduleName] = $hModule->getByDirname('system');
503
-                }
504
-            }
505
-        }
506
-
507
-        return $smartModules[$moduleName];
508
-    }
509
-
510
-    /**
511
-     * @param  bool $moduleName
512
-     * @return bool
513
-     */
514
-    public static function getModuleConfig($moduleName = false)
515
-    {
516
-        static $smartConfigs;
517
-        if (isset($smartConfigs[$moduleName])) {
518
-            $ret =& $smartConfigs[$moduleName];
519
-
520
-            return $ret;
521
-        }
522
-        global $xoopsModule, $xoopsModuleConfig;
523
-        if (!$moduleName) {
524
-            if (isset($xoopsModule) && is_object($xoopsModule)) {
525
-                $smartConfigs[$xoopsModule->getVar('dirname')] = $xoopsModuleConfig;
526
-
527
-                return $smartConfigs[$xoopsModule->getVar('dirname')];
528
-            }
529
-        }
530
-        // if we still did not found the xoopsModule, this is because there is none
531
-        if (!$moduleName) {
532
-            $ret = false;
533
-
534
-            return $ret;
535
-        }
536
-        if (isset($xoopsModule) && is_object($xoopsModule) && $xoopsModule->getVar('dirname') == $moduleName) {
537
-            $smartConfigs[$moduleName] = $xoopsModuleConfig;
538
-        } else {
539
-            $module = static::getModuleInfo($moduleName);
540
-            if (!is_object($module)) {
541
-                $ret = false;
542
-
543
-                return $ret;
544
-            }
545
-            $hModConfig                = xoops_getHandler('config');
546
-            $smartConfigs[$moduleName] =& $hModConfig->getConfigsByCat(0, $module->getVar('mid'));
547
-        }
548
-
549
-        return $smartConfigs[$moduleName];
550
-    }
551
-
552
-    /**
553
-     * @param $dirname
554
-     * @return bool
555
-     */
556
-    public static function deleteFile($dirname)
557
-    {
558
-        // Simple delete for a file
559
-        if (is_file($dirname)) {
560
-            return unlink($dirname);
561
-        }
562
-    }
563
-
564
-    /**
565
-     * @param  array $errors
566
-     * @return string
567
-     */
568
-    public static function formatErrors($errors = [])
569
-    {
570
-        $ret = '';
571
-        foreach ($errors as $key => $value) {
572
-            $ret .= '<br> - ' . $value;
573
-        }
574
-
575
-        return $ret;
576
-    }
577
-
578
-    /**
579
-     * getLinkedUnameFromId()
580
-     *
581
-     * @param  integer $userid Userid of poster etc
582
-     * @param  integer $name   :  0 Use Usenamer 1 Use realname
583
-     * @param  array   $users
584
-     * @param  bool    $withContact
585
-     * @return string
586
-     */
587
-    public static function getLinkedUnameFromId($userid = 0, $name = 0, $users = [], $withContact = false)
588
-    {
589
-        if (!is_numeric($userid)) {
590
-            return $userid;
591
-        }
592
-        $userid = (int)$userid;
593
-        if ($userid > 0) {
594
-            if ($users == []) {
595
-                //fetching users
596
-                $memberHandler = xoops_getHandler('member');
597
-                $user          =& $memberHandler->getUser($userid);
598
-            } else {
599
-                if (!isset($users[$userid])) {
600
-                    return $GLOBALS['xoopsConfig']['anonymous'];
601
-                }
602
-                $user =& $users[$userid];
603
-            }
604
-            if (is_object($user)) {
605
-                $ts        = \MyTextSanitizer:: getInstance();
606
-                $username  = $user->getVar('uname');
607
-                $fullname  = '';
608
-                $fullname2 = $user->getVar('name');
609
-                if ($name && !empty($fullname2)) {
610
-                    $fullname = $user->getVar('name');
611
-                }
612
-                if (!empty($fullname)) {
613
-                    $linkeduser = "$fullname [<a href='" . XOOPS_URL . '/userinfo.php?uid=' . $userid . "'>" . $ts->htmlSpecialChars($username) . '</a>]';
614
-                } else {
615
-                    $linkeduser = "<a href='" . XOOPS_URL . '/userinfo.php?uid=' . $userid . "'>" . ucwords($ts->htmlSpecialChars($username)) . '</a>';
616
-                }
617
-                // add contact info: email + PM
618
-                if ($withContact) {
619
-                    $linkeduser .= ' <a href="mailto:' . $user->getVar('email') . '"><img style="vertical-align: middle;" src="' . XOOPS_URL . '/images/icons/email.gif' . '" alt="' . _CO_SOBJECT_SEND_EMAIL . '" title="' . _CO_SOBJECT_SEND_EMAIL . '"></a>';
620
-                    $js         = "javascript:openWithSelfMain('" . XOOPS_URL . '/pmlite.php?send2=1&to_userid=' . $userid . "', 'pmlite',450,370);";
621
-                    $linkeduser .= ' <a href="' . $js . '"><img style="vertical-align: middle;" src="' . XOOPS_URL . '/images/icons/pm.gif' . '" alt="' . _CO_SOBJECT_SEND_PM . '" title="' . _CO_SOBJECT_SEND_PM . '"></a>';
622
-                }
623
-
624
-                return $linkeduser;
625
-            }
626
-        }
627
-
628
-        return $GLOBALS['xoopsConfig']['anonymous'];
629
-    }
630
-
631
-    /**
632
-     * @param int    $currentoption
633
-     * @param string $breadcrumb
634
-     * @param bool   $submenus
635
-     * @param int    $currentsub
636
-     */
637
-    public static function getAdminMenu($currentoption = 0, $breadcrumb = '', $submenus = false, $currentsub = -1)
638
-    {
639
-        global $xoopsModule, $xoopsConfig;
640
-        require_once XOOPS_ROOT_PATH . '/class/template.php';
641
-
642
-
643
-        /** @var Smartobject\Helper $helper */
644
-        $helper = Smartobject\Helper::getInstance();
645
-        $helper->loadLanguage('admin');
646
-        $helper->loadLanguage('modinfo');
647
-        $headermenu  = [];
648
-        $adminObject = [];
649
-        include XOOPS_ROOT_PATH . '/modules/' . $xoopsModule->getVar('dirname') . '/admin/menu.php';
650
-        $tpl = new \XoopsTpl();
651
-        $tpl->assign([
652
-                         'headermenu'      => $headermenu,
653
-                         'adminmenu'       => $adminObject,
654
-                         'current'         => $currentoption,
655
-                         'breadcrumb'      => $breadcrumb,
656
-                         'headermenucount' => count($headermenu),
657
-                         'submenus'        => $submenus,
658
-                         'currentsub'      => $currentsub,
659
-                         'submenuscount'   => count($submenus)
660
-                     ]);
661
-        $tpl->display('db:smartobject_admin_menu.tpl');
662
-    }
663
-
664
-    /**
665
-     * @param string $id
666
-     * @param string $title
667
-     * @param string $dsc
668
-     */
669
-    public static function getCollapsableBar($id = '', $title = '', $dsc = '')
670
-    {
671
-        global $xoopsModule;
672
-        echo "<h3 style=\"color: #2F5376; font-weight: bold; font-size: 14px; margin: 6px 0 0 0; \"><a href='javascript:;' onclick=\"togglecollapse('" . $id . "'); toggleIcon('" . $id . "_icon')\";>";
673
-        echo "<img id='" . $id . "_icon' src=" . SMARTOBJECT_URL . "assets/images/close12.gif alt=''></a>&nbsp;" . $title . '</h3>';
674
-        echo "<div id='" . $id . "'>";
675
-        if ('' !== $dsc) {
676
-            echo '<span style="color: #567; margin: 3px 0 12px 0; font-size: small; display: block; ">' . $dsc . '</span>';
677
-        }
678
-    }
679
-
680
-    /**
681
-     * @param string $id
682
-     * @param string $title
683
-     * @param string $dsc
684
-     */
685
-    public static function getAjaxCollapsableBar($id = '', $title = '', $dsc = '')
686
-    {
687
-        global $xoopsModule;
688
-        $onClick = "ajaxtogglecollapse('$id')";
689
-        //$onClick = "togglecollapse('$id'); toggleIcon('" . $id . "_icon')";
690
-        echo '<h3 style="border: 1px solid; color: #2F5376; font-weight: bold; font-size: 14px; margin: 6px 0 0 0; " onclick="' . $onClick . '">';
691
-        echo "<img id='" . $id . "_icon' src=" . SMARTOBJECT_URL . "assets/images/close12.gif alt=''></a>&nbsp;" . $title . '</h3>';
692
-        echo "<div id='" . $id . "'>";
693
-        if ('' !== $dsc) {
694
-            echo '<span style="color: #567; margin: 3px 0 12px 0; font-size: small; display: block; ">' . $dsc . '</span>';
695
-        }
696
-    }
697
-
698
-    /**
699
-     * Ajax testing......
700
-     * @param $name
701
-     */
702
-    /*
205
+		/**
206
+		 * Include the admin language constants for the SmartObject Framework
207
+		 */
208
+		/** @var Smartobject\Helper $helper */
209
+		$helper = Smartobject\Helper::getInstance();
210
+		$helper->loadLanguage('admin');
211
+	}
212
+
213
+	/**
214
+	 * Detemines if a table exists in the current db
215
+	 *
216
+	 * @param  string $table the table name (without XOOPS prefix)
217
+	 * @return bool   True if table exists, false if not
218
+	 *
219
+	 * @access public
220
+	 * @author xhelp development team
221
+	 */
222
+	public static function isTable($table)
223
+	{
224
+		$bRetVal = false;
225
+		//Verifies that a MySQL table exists
226
+		$xoopsDB  = \XoopsDatabaseFactory::getDatabaseConnection();
227
+		$realname = $xoopsDB->prefix($table);
228
+		$sql      = 'SHOW TABLES FROM ' . XOOPS_DB_NAME;
229
+		$ret      = $xoopsDB->queryF($sql);
230
+		while (false !== (list($m_table) = $xoopsDB->fetchRow($ret))) {
231
+			if ($m_table == $realname) {
232
+				$bRetVal = true;
233
+				break;
234
+			}
235
+		}
236
+		$xoopsDB->freeRecordSet($ret);
237
+
238
+		return $bRetVal;
239
+	}
240
+
241
+	/**
242
+	 * Gets a value from a key in the xhelp_meta table
243
+	 *
244
+	 * @param  string $key
245
+	 * @param  bool   $moduleName
246
+	 * @return string $value
247
+	 *
248
+	 * @access public
249
+	 * @author xhelp development team
250
+	 */
251
+	public static function getMeta($key, $moduleName = false)
252
+	{
253
+		if (!$moduleName) {
254
+			$moduleName = static::getCurrentModuleName();
255
+		}
256
+		$xoopsDB = \XoopsDatabaseFactory::getDatabaseConnection();
257
+		$sql     = sprintf('SELECT metavalue FROM `%s` WHERE metakey=%s', $xoopsDB->prefix($moduleName . '_meta'), $xoopsDB->quoteString($key));
258
+		$ret     = $xoopsDB->query($sql);
259
+		if (!$ret) {
260
+			$value = false;
261
+		} else {
262
+			list($value) = $xoopsDB->fetchRow($ret);
263
+		}
264
+
265
+		return $value;
266
+	}
267
+
268
+	/**
269
+	 * @return bool
270
+	 */
271
+	public static function getCurrentModuleName()
272
+	{
273
+		global $xoopsModule;
274
+		if (is_object($xoopsModule)) {
275
+			return $xoopsModule->getVar('dirname');
276
+		} else {
277
+			return false;
278
+		}
279
+	}
280
+
281
+	/**
282
+	 * Sets a value for a key in the xhelp_meta table
283
+	 *
284
+	 * @param  string $key
285
+	 * @param  string $value
286
+	 * @param  bool   $moduleName
287
+	 * @return bool   TRUE if success, FALSE if failure
288
+	 *
289
+	 * @access public
290
+	 * @author xhelp development team
291
+	 */
292
+	public static function setMeta($key, $value, $moduleName = false)
293
+	{
294
+		if (!$moduleName) {
295
+			$moduleName = static::getCurrentModuleName();
296
+		}
297
+		$xoopsDB = \XoopsDatabaseFactory::getDatabaseConnection();
298
+		$ret     = static::getMeta($key, $moduleName);
299
+		if ('0' === $ret || $ret > 0) {
300
+			$sql = sprintf('UPDATE %s SET metavalue = %s WHERE metakey = %s', $xoopsDB->prefix($moduleName . '_meta'), $xoopsDB->quoteString($value), $xoopsDB->quoteString($key));
301
+		} else {
302
+			$sql = sprintf('INSERT INTO %s (metakey, metavalue) VALUES (%s, %s)', $xoopsDB->prefix($moduleName . '_meta'), $xoopsDB->quoteString($key), $xoopsDB->quoteString($value));
303
+		}
304
+		$ret = $xoopsDB->queryF($sql);
305
+		if (!$ret) {
306
+			return false;
307
+		}
308
+
309
+		return true;
310
+	}
311
+
312
+	// Thanks to Mithrandir:-)
313
+	/**
314
+	 * @param         $str
315
+	 * @param         $start
316
+	 * @param         $length
317
+	 * @param  string $trimmarker
318
+	 * @return string
319
+	 */
320
+	public static function getSubstr($str, $start, $length, $trimmarker = '...')
321
+	{
322
+		// if the string is empty, let's get out ;-)
323
+		if ('' === $str) {
324
+			return $str;
325
+		}
326
+		// reverse a string that is shortened with '' as trimmarker
327
+		$reversed_string = strrev(xoops_substr($str, $start, $length, ''));
328
+		// find first space in reversed string
329
+		$position_of_space = strpos($reversed_string, ' ', 0);
330
+		// truncate the original string to a length of $length
331
+		// minus the position of the last space
332
+		// plus the length of the $trimmarker
333
+		$truncated_string = xoops_substr($str, $start, $length - $position_of_space + strlen($trimmarker), $trimmarker);
334
+
335
+		return $truncated_string;
336
+	}
337
+
338
+	/**
339
+	 * @param              $key
340
+	 * @param  bool        $moduleName
341
+	 * @param  string      $default
342
+	 * @return null|string
343
+	 */
344
+	public static function getConfig($key, $moduleName = false, $default = 'default_is_undefined')
345
+	{
346
+		if (!$moduleName) {
347
+			$moduleName = static::getCurrentModuleName();
348
+		}
349
+		$configs = static::getModuleConfig($moduleName);
350
+		if (isset($configs[$key])) {
351
+			return $configs[$key];
352
+		} else {
353
+			if ('default_is_undefined' === $default) {
354
+				return null;
355
+			} else {
356
+				return $default;
357
+			}
358
+		}
359
+	}
360
+
361
+	/**
362
+	 * Copy a file, or a folder and its contents
363
+	 *
364
+	 * @author      Aidan Lister <[email protected]>
365
+	 * @param  string $source The source
366
+	 * @param  string $dest   The destination
367
+	 * @return bool   Returns true on success, false on failure
368
+	 */
369
+	public static function copyr($source, $dest)
370
+	{
371
+		// Simple copy for a file
372
+		if (is_file($source)) {
373
+			return copy($source, $dest);
374
+		}
375
+		// Make destination directory
376
+		if (!is_dir($dest)) {
377
+			mkdir($dest);
378
+		}
379
+		// Loop through the folder
380
+		$dir = dir($source);
381
+		while (false !== $entry = $dir->read()) {
382
+			// Skip pointers
383
+			if ('.' === $entry || '..' === $entry) {
384
+				continue;
385
+			}
386
+			// Deep copy directories
387
+			if (is_dir("$source/$entry") && ("$source/$entry" !== $dest)) {
388
+				static::copyr("$source/$entry", "$dest/$entry");
389
+			} else {
390
+				copy("$source/$entry", "$dest/$entry");
391
+			}
392
+		}
393
+		// Clean up
394
+		$dir->close();
395
+
396
+		return true;
397
+	}
398
+
399
+	/**
400
+	 * Thanks to the NewBB2 Development Team
401
+	 * @param $target
402
+	 * @return bool
403
+	 */
404
+	public static function mkdirAsAdmin($target)
405
+	{
406
+		// http://www.php.net/manual/en/function.mkdir.php
407
+		// saint at corenova.com
408
+		// bart at cdasites dot com
409
+		if (is_dir($target) || empty($target)) {
410
+			return true; // best case check first
411
+		}
412
+		if (file_exists($target) && !is_dir($target)) {
413
+			return false;
414
+		}
415
+		if (Smartobject\Utility::mkdirAsAdmin(substr($target, 0, strrpos($target, '/')))) {
416
+			if (!file_exists($target)) {
417
+				$res = mkdir($target, 0777); // crawl back up & create dir tree
418
+				static::chmodAsAdmin($target);
419
+
420
+				return $res;
421
+			}
422
+		}
423
+		$res = is_dir($target);
424
+
425
+		return $res;
426
+	}
427
+
428
+	/**
429
+	 * Thanks to the NewBB2 Development Team
430
+	 * @param       $target
431
+	 * @param  int  $mode
432
+	 * @return bool
433
+	 */
434
+	public static function chmodAsAdmin($target, $mode = 0777)
435
+	{
436
+		return @ chmod($target, $mode);
437
+	}
438
+
439
+	/**
440
+	 * @param $src
441
+	 * @param $maxWidth
442
+	 * @param $maxHeight
443
+	 * @return array
444
+	 */
445
+	public static function imageResize($src, $maxWidth, $maxHeight)
446
+	{
447
+		$width  = '';
448
+		$height = '';
449
+		$type   = '';
450
+		$attr   = '';
451
+		if (file_exists($src)) {
452
+			list($width, $height, $type, $attr) = getimagesize($src);
453
+			if ($width > $maxWidth) {
454
+				$originalWidth = $width;
455
+				$width         = $maxWidth;
456
+				$height        = $width * $height / $originalWidth;
457
+			}
458
+			if ($height > $maxHeight) {
459
+				$originalHeight = $height;
460
+				$height         = $maxHeight;
461
+				$width          = $height * $width / $originalHeight;
462
+			}
463
+			$attr = " width='$width' height='$height'";
464
+		}
465
+
466
+		return [
467
+			$width,
468
+			$height,
469
+			$type,
470
+			$attr
471
+		];
472
+	}
473
+
474
+	/**
475
+	 * @param  bool $moduleName
476
+	 * @return mixed
477
+	 */
478
+	public static function getModuleInfo($moduleName = false)
479
+	{
480
+		static $smartModules;
481
+		if (isset($smartModules[$moduleName])) {
482
+			$ret =& $smartModules[$moduleName];
483
+
484
+			return $ret;
485
+		}
486
+		global $xoopsModule;
487
+		if (!$moduleName) {
488
+			if (isset($xoopsModule) && is_object($xoopsModule)) {
489
+				$smartModules[$xoopsModule->getVar('dirname')] = $xoopsModule;
490
+
491
+				return $smartModules[$xoopsModule->getVar('dirname')];
492
+			}
493
+		}
494
+		if (!isset($smartModules[$moduleName])) {
495
+			if (isset($xoopsModule) && is_object($xoopsModule) && $xoopsModule->getVar('dirname') == $moduleName) {
496
+				$smartModules[$moduleName] = $xoopsModule;
497
+			} else {
498
+				$hModule = xoops_getHandler('module');
499
+				if ('xoops' !== $moduleName) {
500
+					$smartModules[$moduleName] = $hModule->getByDirname($moduleName);
501
+				} else {
502
+					$smartModules[$moduleName] = $hModule->getByDirname('system');
503
+				}
504
+			}
505
+		}
506
+
507
+		return $smartModules[$moduleName];
508
+	}
509
+
510
+	/**
511
+	 * @param  bool $moduleName
512
+	 * @return bool
513
+	 */
514
+	public static function getModuleConfig($moduleName = false)
515
+	{
516
+		static $smartConfigs;
517
+		if (isset($smartConfigs[$moduleName])) {
518
+			$ret =& $smartConfigs[$moduleName];
519
+
520
+			return $ret;
521
+		}
522
+		global $xoopsModule, $xoopsModuleConfig;
523
+		if (!$moduleName) {
524
+			if (isset($xoopsModule) && is_object($xoopsModule)) {
525
+				$smartConfigs[$xoopsModule->getVar('dirname')] = $xoopsModuleConfig;
526
+
527
+				return $smartConfigs[$xoopsModule->getVar('dirname')];
528
+			}
529
+		}
530
+		// if we still did not found the xoopsModule, this is because there is none
531
+		if (!$moduleName) {
532
+			$ret = false;
533
+
534
+			return $ret;
535
+		}
536
+		if (isset($xoopsModule) && is_object($xoopsModule) && $xoopsModule->getVar('dirname') == $moduleName) {
537
+			$smartConfigs[$moduleName] = $xoopsModuleConfig;
538
+		} else {
539
+			$module = static::getModuleInfo($moduleName);
540
+			if (!is_object($module)) {
541
+				$ret = false;
542
+
543
+				return $ret;
544
+			}
545
+			$hModConfig                = xoops_getHandler('config');
546
+			$smartConfigs[$moduleName] =& $hModConfig->getConfigsByCat(0, $module->getVar('mid'));
547
+		}
548
+
549
+		return $smartConfigs[$moduleName];
550
+	}
551
+
552
+	/**
553
+	 * @param $dirname
554
+	 * @return bool
555
+	 */
556
+	public static function deleteFile($dirname)
557
+	{
558
+		// Simple delete for a file
559
+		if (is_file($dirname)) {
560
+			return unlink($dirname);
561
+		}
562
+	}
563
+
564
+	/**
565
+	 * @param  array $errors
566
+	 * @return string
567
+	 */
568
+	public static function formatErrors($errors = [])
569
+	{
570
+		$ret = '';
571
+		foreach ($errors as $key => $value) {
572
+			$ret .= '<br> - ' . $value;
573
+		}
574
+
575
+		return $ret;
576
+	}
577
+
578
+	/**
579
+	 * getLinkedUnameFromId()
580
+	 *
581
+	 * @param  integer $userid Userid of poster etc
582
+	 * @param  integer $name   :  0 Use Usenamer 1 Use realname
583
+	 * @param  array   $users
584
+	 * @param  bool    $withContact
585
+	 * @return string
586
+	 */
587
+	public static function getLinkedUnameFromId($userid = 0, $name = 0, $users = [], $withContact = false)
588
+	{
589
+		if (!is_numeric($userid)) {
590
+			return $userid;
591
+		}
592
+		$userid = (int)$userid;
593
+		if ($userid > 0) {
594
+			if ($users == []) {
595
+				//fetching users
596
+				$memberHandler = xoops_getHandler('member');
597
+				$user          =& $memberHandler->getUser($userid);
598
+			} else {
599
+				if (!isset($users[$userid])) {
600
+					return $GLOBALS['xoopsConfig']['anonymous'];
601
+				}
602
+				$user =& $users[$userid];
603
+			}
604
+			if (is_object($user)) {
605
+				$ts        = \MyTextSanitizer:: getInstance();
606
+				$username  = $user->getVar('uname');
607
+				$fullname  = '';
608
+				$fullname2 = $user->getVar('name');
609
+				if ($name && !empty($fullname2)) {
610
+					$fullname = $user->getVar('name');
611
+				}
612
+				if (!empty($fullname)) {
613
+					$linkeduser = "$fullname [<a href='" . XOOPS_URL . '/userinfo.php?uid=' . $userid . "'>" . $ts->htmlSpecialChars($username) . '</a>]';
614
+				} else {
615
+					$linkeduser = "<a href='" . XOOPS_URL . '/userinfo.php?uid=' . $userid . "'>" . ucwords($ts->htmlSpecialChars($username)) . '</a>';
616
+				}
617
+				// add contact info: email + PM
618
+				if ($withContact) {
619
+					$linkeduser .= ' <a href="mailto:' . $user->getVar('email') . '"><img style="vertical-align: middle;" src="' . XOOPS_URL . '/images/icons/email.gif' . '" alt="' . _CO_SOBJECT_SEND_EMAIL . '" title="' . _CO_SOBJECT_SEND_EMAIL . '"></a>';
620
+					$js         = "javascript:openWithSelfMain('" . XOOPS_URL . '/pmlite.php?send2=1&to_userid=' . $userid . "', 'pmlite',450,370);";
621
+					$linkeduser .= ' <a href="' . $js . '"><img style="vertical-align: middle;" src="' . XOOPS_URL . '/images/icons/pm.gif' . '" alt="' . _CO_SOBJECT_SEND_PM . '" title="' . _CO_SOBJECT_SEND_PM . '"></a>';
622
+				}
623
+
624
+				return $linkeduser;
625
+			}
626
+		}
627
+
628
+		return $GLOBALS['xoopsConfig']['anonymous'];
629
+	}
630
+
631
+	/**
632
+	 * @param int    $currentoption
633
+	 * @param string $breadcrumb
634
+	 * @param bool   $submenus
635
+	 * @param int    $currentsub
636
+	 */
637
+	public static function getAdminMenu($currentoption = 0, $breadcrumb = '', $submenus = false, $currentsub = -1)
638
+	{
639
+		global $xoopsModule, $xoopsConfig;
640
+		require_once XOOPS_ROOT_PATH . '/class/template.php';
641
+
642
+
643
+		/** @var Smartobject\Helper $helper */
644
+		$helper = Smartobject\Helper::getInstance();
645
+		$helper->loadLanguage('admin');
646
+		$helper->loadLanguage('modinfo');
647
+		$headermenu  = [];
648
+		$adminObject = [];
649
+		include XOOPS_ROOT_PATH . '/modules/' . $xoopsModule->getVar('dirname') . '/admin/menu.php';
650
+		$tpl = new \XoopsTpl();
651
+		$tpl->assign([
652
+						 'headermenu'      => $headermenu,
653
+						 'adminmenu'       => $adminObject,
654
+						 'current'         => $currentoption,
655
+						 'breadcrumb'      => $breadcrumb,
656
+						 'headermenucount' => count($headermenu),
657
+						 'submenus'        => $submenus,
658
+						 'currentsub'      => $currentsub,
659
+						 'submenuscount'   => count($submenus)
660
+					 ]);
661
+		$tpl->display('db:smartobject_admin_menu.tpl');
662
+	}
663
+
664
+	/**
665
+	 * @param string $id
666
+	 * @param string $title
667
+	 * @param string $dsc
668
+	 */
669
+	public static function getCollapsableBar($id = '', $title = '', $dsc = '')
670
+	{
671
+		global $xoopsModule;
672
+		echo "<h3 style=\"color: #2F5376; font-weight: bold; font-size: 14px; margin: 6px 0 0 0; \"><a href='javascript:;' onclick=\"togglecollapse('" . $id . "'); toggleIcon('" . $id . "_icon')\";>";
673
+		echo "<img id='" . $id . "_icon' src=" . SMARTOBJECT_URL . "assets/images/close12.gif alt=''></a>&nbsp;" . $title . '</h3>';
674
+		echo "<div id='" . $id . "'>";
675
+		if ('' !== $dsc) {
676
+			echo '<span style="color: #567; margin: 3px 0 12px 0; font-size: small; display: block; ">' . $dsc . '</span>';
677
+		}
678
+	}
679
+
680
+	/**
681
+	 * @param string $id
682
+	 * @param string $title
683
+	 * @param string $dsc
684
+	 */
685
+	public static function getAjaxCollapsableBar($id = '', $title = '', $dsc = '')
686
+	{
687
+		global $xoopsModule;
688
+		$onClick = "ajaxtogglecollapse('$id')";
689
+		//$onClick = "togglecollapse('$id'); toggleIcon('" . $id . "_icon')";
690
+		echo '<h3 style="border: 1px solid; color: #2F5376; font-weight: bold; font-size: 14px; margin: 6px 0 0 0; " onclick="' . $onClick . '">';
691
+		echo "<img id='" . $id . "_icon' src=" . SMARTOBJECT_URL . "assets/images/close12.gif alt=''></a>&nbsp;" . $title . '</h3>';
692
+		echo "<div id='" . $id . "'>";
693
+		if ('' !== $dsc) {
694
+			echo '<span style="color: #567; margin: 3px 0 12px 0; font-size: small; display: block; ">' . $dsc . '</span>';
695
+		}
696
+	}
697
+
698
+	/**
699
+	 * Ajax testing......
700
+	 * @param $name
701
+	 */
702
+	/*
703 703
      public static function getCollapsableBar($id = '', $title = '', $dsc='')
704 704
      {
705 705
     
@@ -717,22 +717,22 @@  discard block
 block discarded – undo
717 717
      }
718 718
      }
719 719
      */
720
-    public static function opencloseCollapsable($name)
721
-    {
722
-        $urls        = static::getCurrentUrls();
723
-        $path        = $urls['phpself'];
724
-        $cookie_name = $path . '_smart_collaps_' . $name;
725
-        $cookie_name = str_replace('.', '_', $cookie_name);
726
-        $cookie      = static::getCookieVar($cookie_name, '');
727
-        if ('none' === $cookie) {
728
-            echo '
720
+	public static function opencloseCollapsable($name)
721
+	{
722
+		$urls        = static::getCurrentUrls();
723
+		$path        = $urls['phpself'];
724
+		$cookie_name = $path . '_smart_collaps_' . $name;
725
+		$cookie_name = str_replace('.', '_', $cookie_name);
726
+		$cookie      = static::getCookieVar($cookie_name, '');
727
+		if ('none' === $cookie) {
728
+			echo '
729 729
                 <script type="text/javascript"><!--
730 730
                 togglecollapse("' . $name . '"); toggleIcon("' . $name . '_icon");
731 731
                     //-->
732 732
                 </script>
733 733
                 ';
734
-        }
735
-        /*  if ($cookie == 'none') {
734
+		}
735
+		/*  if ($cookie == 'none') {
736 736
          echo '
737 737
          <script type="text/javascript"><!--
738 738
          hideElement("' . $name . '");
@@ -741,96 +741,96 @@  discard block
 block discarded – undo
741 741
          ';
742 742
          }
743 743
          */
744
-    }
745
-
746
-    /**
747
-     * @param $name
748
-     */
749
-    public static function closeCollapsable($name)
750
-    {
751
-        echo '</div>';
752
-        static::opencloseCollapsable($name);
753
-        echo '<br>';
754
-    }
755
-
756
-    /**
757
-     * @param     $name
758
-     * @param     $value
759
-     * @param int $time
760
-     */
761
-    public static function setCookieVar($name, $value, $time = 0)
762
-    {
763
-        if (0 == $time) {
764
-            $time = time() + 3600 * 24 * 365;
765
-            //$time = '';
766
-        }
767
-        setcookie($name, $value, $time, '/');
768
-    }
769
-
770
-    /**
771
-     * @param         $name
772
-     * @param  string $default
773
-     * @return string
774
-     */
775
-    public static function getCookieVar($name, $default = '')
776
-    {
777
-        $name = str_replace('.', '_', $name);
778
-        if (isset($_COOKIE[$name]) && ($_COOKIE[$name] > '')) {
779
-            return $_COOKIE[$name];
780
-        } else {
781
-            return $default;
782
-        }
783
-    }
784
-
785
-    /**
786
-     * @return array
787
-     */
788
-    public static function getCurrentUrls()
789
-    {
790
-        $urls        = [];
791
-        $http        = (false === strpos(XOOPS_URL, 'https://')) ? 'http://' : 'https://';
792
-        $phpself     = $_SERVER['PHP_SELF'];
793
-        $httphost    = $_SERVER['HTTP_HOST'];
794
-        $querystring = $_SERVER['QUERY_STRING'];
795
-        if ('' !== $querystring) {
796
-            $querystring = '?' . $querystring;
797
-        }
798
-        $currenturl           = $http . $httphost . $phpself . $querystring;
799
-        $urls                 = [];
800
-        $urls['http']         = $http;
801
-        $urls['httphost']     = $httphost;
802
-        $urls['phpself']      = $phpself;
803
-        $urls['querystring']  = $querystring;
804
-        $urls['full_phpself'] = $http . $httphost . $phpself;
805
-        $urls['full']         = $currenturl;
806
-        $urls['isHomePage']   = (XOOPS_URL . '/index.php') == ($http . $httphost . $phpself);
807
-
808
-        return $urls;
809
-    }
810
-
811
-    /**
812
-     * @return mixed
813
-     */
814
-    public static function getCurrentPage()
815
-    {
816
-        $urls = static::getCurrentUrls();
817
-
818
-        return $urls['full'];
819
-    }
820
-
821
-    /**
822
-     * Create a title for the short_url field of an article
823
-     *
824
-     * @credit psylove
825
-     *
826
-     * @var    string $title   title of the article
827
-     * @var    string $withExt do we add an html extension or not
828
-     * @return string sort_url for the article
829
-     */
830
-    /**
831
-     * Moved in SmartMetaGenClass
832
-     */
833
-    /*
744
+	}
745
+
746
+	/**
747
+	 * @param $name
748
+	 */
749
+	public static function closeCollapsable($name)
750
+	{
751
+		echo '</div>';
752
+		static::opencloseCollapsable($name);
753
+		echo '<br>';
754
+	}
755
+
756
+	/**
757
+	 * @param     $name
758
+	 * @param     $value
759
+	 * @param int $time
760
+	 */
761
+	public static function setCookieVar($name, $value, $time = 0)
762
+	{
763
+		if (0 == $time) {
764
+			$time = time() + 3600 * 24 * 365;
765
+			//$time = '';
766
+		}
767
+		setcookie($name, $value, $time, '/');
768
+	}
769
+
770
+	/**
771
+	 * @param         $name
772
+	 * @param  string $default
773
+	 * @return string
774
+	 */
775
+	public static function getCookieVar($name, $default = '')
776
+	{
777
+		$name = str_replace('.', '_', $name);
778
+		if (isset($_COOKIE[$name]) && ($_COOKIE[$name] > '')) {
779
+			return $_COOKIE[$name];
780
+		} else {
781
+			return $default;
782
+		}
783
+	}
784
+
785
+	/**
786
+	 * @return array
787
+	 */
788
+	public static function getCurrentUrls()
789
+	{
790
+		$urls        = [];
791
+		$http        = (false === strpos(XOOPS_URL, 'https://')) ? 'http://' : 'https://';
792
+		$phpself     = $_SERVER['PHP_SELF'];
793
+		$httphost    = $_SERVER['HTTP_HOST'];
794
+		$querystring = $_SERVER['QUERY_STRING'];
795
+		if ('' !== $querystring) {
796
+			$querystring = '?' . $querystring;
797
+		}
798
+		$currenturl           = $http . $httphost . $phpself . $querystring;
799
+		$urls                 = [];
800
+		$urls['http']         = $http;
801
+		$urls['httphost']     = $httphost;
802
+		$urls['phpself']      = $phpself;
803
+		$urls['querystring']  = $querystring;
804
+		$urls['full_phpself'] = $http . $httphost . $phpself;
805
+		$urls['full']         = $currenturl;
806
+		$urls['isHomePage']   = (XOOPS_URL . '/index.php') == ($http . $httphost . $phpself);
807
+
808
+		return $urls;
809
+	}
810
+
811
+	/**
812
+	 * @return mixed
813
+	 */
814
+	public static function getCurrentPage()
815
+	{
816
+		$urls = static::getCurrentUrls();
817
+
818
+		return $urls['full'];
819
+	}
820
+
821
+	/**
822
+	 * Create a title for the short_url field of an article
823
+	 *
824
+	 * @credit psylove
825
+	 *
826
+	 * @var    string $title   title of the article
827
+	 * @var    string $withExt do we add an html extension or not
828
+	 * @return string sort_url for the article
829
+	 */
830
+	/**
831
+	 * Moved in SmartMetaGenClass
832
+	 */
833
+	/*
834 834
      public static function smart_seo_title($title='', $withExt=true)
835 835
      {
836 836
      // Transformation de la chaine en minuscule
@@ -876,468 +876,468 @@  discard block
 block discarded – undo
876 876
      return '';
877 877
      }
878 878
      */
879
-    public static function getModFooter()
880
-    {
881
-        global $xoopsConfig, $xoopsModule, $xoopsModuleConfig;
882
-
883
-        require_once XOOPS_ROOT_PATH . '/class/template.php';
884
-        $tpl = new \XoopsTpl();
885
-
886
-        $hModule      = xoops_getHandler('module');
887
-        $versioninfo  =& $hModule->get($xoopsModule->getVar('mid'));
888
-        $modfootertxt = 'Module ' . $versioninfo->getInfo('name') . ' - Version ' . $versioninfo->getInfo('version') . '';
889
-        $modfooter    = "<a href='" . $versioninfo->getInfo('support_site_url') . "' target='_blank'><img src='" . XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . "/assets/images/cssbutton.gif' title='" . $modfootertxt . "' alt='" . $modfootertxt . "'></a>";
890
-        $tpl->assign('modfooter', $modfooter);
891
-
892
-        if (!defined('_AM_SOBJECT_XOOPS_PRO')) {
893
-            define('_AM_SOBJECT_XOOPS_PRO', 'Do you need help with this module ?<br>Do you need new features not yet available?');
894
-        }
895
-        $smartobjectConfig = static::getModuleConfig('smartobject');
896
-        $tpl->assign('smartobject_enable_admin_footer', $smartobjectConfig['enable_admin_footer']);
897
-        $tpl->display(SMARTOBJECT_ROOT_PATH . 'templates/smartobject_admin_footer.tpl');
898
-    }
899
-
900
-    public static function getXoopsCpFooter()
901
-    {
902
-        static::getModFooter();
903
-        xoops_cp_footer();
904
-    }
905
-
906
-    /**
907
-     * @param $text
908
-     * @return mixed
909
-     */
910
-    public static function sanitizeForCommonTags($text)
911
-    {
912
-        global $xoopsConfig;
913
-        $text = str_replace('{X_SITENAME}', $xoopsConfig['sitename'], $text);
914
-        $text = str_replace('{X_ADMINMAIL}', $xoopsConfig['adminmail'], $text);
915
-
916
-        return $text;
917
-    }
918
-
919
-    /**
920
-     * @param $src
921
-     */
922
-    public static function addScript($src)
923
-    {
924
-        echo '<script src="' . $src . '" type="text/javascript"></script>';
925
-    }
926
-
927
-    /**
928
-     * @param $src
929
-     */
930
-    public static function addStyle($src)
931
-    {
932
-        if ('smartobject' === $src) {
933
-            $src = SMARTOBJECT_URL . 'assets/css/module.css';
934
-        }
935
-        echo static::getCssLink($src);
936
-    }
937
-
938
-    public static function addAdminAjaxSupport()
939
-    {
940
-        static::addScript(SMARTOBJECT_URL . 'include/scriptaculous/lib/prototype.js');
941
-        static::addScript(SMARTOBJECT_URL . 'include/scriptaculous/src/scriptaculous.js');
942
-        static::addScript(SMARTOBJECT_URL . 'include/scriptaculous/src/smart.js');
943
-    }
944
-
945
-    /**
946
-     * @param $text
947
-     * @return mixed
948
-     */
949
-    public static function sanitizeForSmartpopupLink($text)
950
-    {
951
-        $patterns[]     = "/\[smartpopup=(['\"]?)([^\"'<>]*)\\1](.*)\[\/smartpopup\]/sU";
952
-        $replacements[] = "<a href=\"javascript:openWithSelfMain('\\2', 'smartpopup', 700, 519);\">\\3</a>";
953
-        $ret            = preg_replace($patterns, $replacements, $text);
954
-
955
-        return $ret;
956
-    }
957
-
958
-    /**
959
-     * Finds the width and height of an image (can also be a flash file)
960
-     *
961
-     * @credit phppp
962
-     *
963
-     * @var    string $url    path of the image file
964
-     * @var    string $width  reference to the width
965
-     * @var    string $height reference to the height
966
-     * @return bool   false if impossible to find dimension
967
-     */
968
-    public static function getImageSize($url, & $width, & $height)
969
-    {
970
-        if (empty($width) || empty($height)) {
971
-            if (!$dimension = @ getimagesize($url)) {
972
-                return false;
973
-            }
974
-            if (!empty($width)) {
975
-                $height = $dimension[1] * $width / $dimension[0];
976
-            } elseif (!empty($height)) {
977
-                $width = $dimension[0] * $height / $dimension[1];
978
-            } else {
979
-                list($width, $height) = [
980
-                    $dimension[0],
981
-                    $dimension[1]
982
-                ];
983
-            }
984
-
985
-            return true;
986
-        } else {
987
-            return true;
988
-        }
989
-    }
990
-
991
-    /**
992
-     * Convert characters to decimal values
993
-     *
994
-     * @author eric.wallet at yahoo.fr
995
-     * @link   http://ca.php.net/manual/en/function.htmlentities.php#69913
996
-     * @param $str
997
-     * @return mixed
998
-     */
999
-    public static function getHtmlnumericentities($str)
1000
-    {
1001
-        //    return preg_replace('/[^!-%\x27-;=?-~ ]/e', '"&#".ord("$0").chr(59)', $str);
1002
-        return preg_replace_callback('/[^!-%\x27-;=?-~ ]/', function ($m) {
1003
-            return '&#' . ord($m[0]) . chr(59);
1004
-        }, $str);
1005
-    }
1006
-
1007
-    /**
1008
-     * @param        $name
1009
-     * @param  bool  $optional
1010
-     * @return mixed
1011
-     */
1012
-    public static function getCoreHandler($name, $optional = false)
1013
-    {
1014
-        static $handlers;
1015
-        $name = strtolower(trim($name));
1016
-        if (!isset($handlers[$name])) {
1017
-            if (file_exists($hnd_file = XOOPS_ROOT_PATH . '/kernel/' . $name . '.php')) {
1018
-                require_once $hnd_file;
1019
-            }
1020
-            $class = 'Xoops' . ucfirst($name) . 'Handler';
1021
-            if (class_exists($class)) {
1022
-                $handlers[$name] = new $class($GLOBALS['xoopsDB'], 'xoops');
1023
-            }
1024
-        }
1025
-        if (!isset($handlers[$name]) && !$optional) {
1026
-            trigger_error('Class <b>' . $class . '</b> does not exist<br>Handler Name: ' . $name, E_USER_ERROR);
1027
-        }
1028
-        if (isset($handlers[$name])) {
1029
-            return $handlers[$name];
1030
-        }
1031
-        $inst = false;
1032
-    }
1033
-
1034
-    /**
1035
-     * @param $matches
1036
-     * @return string
1037
-     */
1038
-    public static function sanitizeAdsenses_callback($matches)
1039
-    {
1040
-        global $smartobjectAdsenseHandler;
1041
-        if (isset($smartobjectAdsenseHandler->objects[$matches[1]])) {
1042
-            $adsenseObj = $smartobjectAdsenseHandler->objects[$matches[1]];
1043
-            $ret        = $adsenseObj->render();
1044
-
1045
-            return $ret;
1046
-        } else {
1047
-            return '';
1048
-        }
1049
-    }
1050
-
1051
-    /**
1052
-     * @param $text
1053
-     * @return mixed
1054
-     */
1055
-    public static function sanitizeAdsenses($text)
1056
-    {
1057
-        $patterns     = [];
1058
-        $replacements = [];
1059
-
1060
-        $patterns[] = "/\[adsense](.*)\[\/adsense\]/sU";
1061
-        $text       = preg_replace_callback($patterns, 'Smartobject\Utility::sanitizeAdsenses_callback', $text);
1062
-
1063
-        return $text;
1064
-    }
1065
-
1066
-    /**
1067
-     * @param $matches
1068
-     * @return string
1069
-     */
1070
-    public static function sanitizeCustomtags_callback($matches)
1071
-    {
1072
-        global $smartobjectCustomtagHandler;
1073
-        if (isset($smartobjectCustomtagHandler->objects[$matches[1]])) {
1074
-            $customObj = $smartobjectCustomtagHandler->objects[$matches[1]];
1075
-            $ret       = $customObj->renderWithPhp();
1076
-
1077
-            return $ret;
1078
-        } else {
1079
-            return '';
1080
-        }
1081
-    }
1082
-
1083
-    /**
1084
-     * @param $text
1085
-     * @return mixed
1086
-     */
1087
-    public static function sanitizeCustomtags($text)
1088
-    {
1089
-        $patterns     = [];
1090
-        $replacements = [];
1091
-
1092
-        $patterns[] = "/\[customtag](.*)\[\/customtag\]/sU";
1093
-        $text       = preg_replace_callback($patterns, 'Smartobject\Utility::sanitizeCustomtags_callback', $text);
1094
-
1095
-        return $text;
1096
-    }
1097
-
1098
-    /**
1099
-     * @param $module
1100
-     * @param $file
1101
-     */
1102
-    public static function loadLanguageFile($module, $file)
1103
-    {
1104
-        global $xoopsConfig;
1105
-
1106
-        $filename = XOOPS_ROOT_PATH . '/modules/' . $module . '/language/' . $xoopsConfig['language'] . '/' . $file . '.php';
1107
-        if (!file_exists($filename)) {
1108
-            $filename = XOOPS_ROOT_PATH . '/modules/' . $module . '/language/english/' . $file . '.php';
1109
-        }
1110
-        if (file_exists($filename)) {
1111
-            require_once $filename;
1112
-        }
1113
-    }
1114
-
1115
-    public static function loadCommonLanguageFile()
1116
-    {
1117
-        static::loadLanguageFile('smartobject', 'common');
1118
-    }
1119
-
1120
-    /**
1121
-     * @param               $text
1122
-     * @param  bool         $keyword
1123
-     * @return mixed|string
1124
-     */
1125
-    public static function purifyText($text, $keyword = false)
1126
-    {
1127
-        global $myts;
1128
-        $text = str_replace('&nbsp;', ' ', $text);
1129
-        $text = str_replace('<br>', ' ', $text);
1130
-        $text = str_replace('<br>', ' ', $text);
1131
-        $text = str_replace('<br', ' ', $text);
1132
-        $text = strip_tags($text);
1133
-        $text = html_entity_decode($text);
1134
-        $text = $myts->undoHtmlSpecialChars($text);
1135
-        $text = str_replace(')', ' ', $text);
1136
-        $text = str_replace('(', ' ', $text);
1137
-        $text = str_replace(':', ' ', $text);
1138
-        $text = str_replace('&euro', ' euro ', $text);
1139
-        $text = str_replace('&hellip', '...', $text);
1140
-        $text = str_replace('&rsquo', ' ', $text);
1141
-        $text = str_replace('!', ' ', $text);
1142
-        $text = str_replace('?', ' ', $text);
1143
-        $text = str_replace('"', ' ', $text);
1144
-        $text = str_replace('-', ' ', $text);
1145
-        $text = str_replace('\n', ' ', $text);
1146
-        $text = str_replace('&#8213;', ' ', $text);
1147
-
1148
-        if ($keyword) {
1149
-            $text = str_replace('.', ' ', $text);
1150
-            $text = str_replace(',', ' ', $text);
1151
-            $text = str_replace('\'', ' ', $text);
1152
-        }
1153
-        $text = str_replace(';', ' ', $text);
1154
-
1155
-        return $text;
1156
-    }
1157
-
1158
-    /**
1159
-     * @param $document
1160
-     * @return mixed
1161
-     */
1162
-    public static function getHtml2text($document)
1163
-    {
1164
-        // PHP Manual:: function preg_replace
1165
-        // $document should contain an HTML document.
1166
-        // This will remove HTML tags, javascript sections
1167
-        // and white space. It will also convert some
1168
-        // common HTML entities to their text equivalent.
1169
-        // Credits: newbb2
1170
-        $search = [
1171
-            "'<script[^>]*?>.*?</script>'si", // Strip out javascript
1172
-            "'<img.*?>'si", // Strip out img tags
1173
-            "'<[\/\!]*?[^<>]*?>'si", // Strip out HTML tags
1174
-            "'([\r\n])[\s]+'", // Strip out white space
1175
-            "'&(quot|#34);'i", // Replace HTML entities
1176
-            "'&(amp|#38);'i",
1177
-            "'&(lt|#60);'i",
1178
-            "'&(gt|#62);'i",
1179
-            "'&(nbsp|#160);'i",
1180
-            "'&(iexcl|#161);'i",
1181
-            "'&(cent|#162);'i",
1182
-            "'&(pound|#163);'i",
1183
-            "'&(copy|#169);'i"
1184
-        ]; // evaluate as php
1185
-
1186
-        $replace = [
1187
-            '',
1188
-            '',
1189
-            '',
1190
-            "\\1",
1191
-            '"',
1192
-            '&',
1193
-            '<',
1194
-            '>',
1195
-            ' ',
1196
-            chr(161),
1197
-            chr(162),
1198
-            chr(163),
1199
-            chr(169),
1200
-        ];
1201
-
1202
-        $text = preg_replace($search, $replace, $document);
1203
-
1204
-        preg_replace_callback('/&#(\d+);/', function ($matches) {
1205
-            return chr($matches[1]);
1206
-        }, $document);
1207
-
1208
-        return $text;
1209
-    }
1210
-
1211
-    /**
1212
-     * @author pillepop2003 at yahoo dot de
1213
-     *
1214
-     * Use this snippet to extract any float out of a string. You can choose how a single dot is treated with the (bool) 'single_dot_as_decimal' directive.
1215
-     * This function should be able to cover almost all floats that appear in an european environment.
1216
-     * @param            $str
1217
-     * @param  bool      $set
1218
-     * @return float|int
1219
-     */
1220
-    public static function getFloat($str, $set = false)
1221
-    {
1222
-        if (preg_match("/([0-9\.,-]+)/", $str, $match)) {
1223
-            // Found number in $str, so set $str that number
1224
-            $str = $match[0];
1225
-            if (false !== strpos($str, ',')) {
1226
-                // A comma exists, that makes it easy, cos we assume it separates the decimal part.
1227
-                $str = str_replace('.', '', $str);    // Erase thousand seps
1228
-                $str = str_replace(',', '.', $str);    // Convert , to . for floatval command
1229
-
1230
-                return (float)$str;
1231
-            } else {
1232
-                // No comma exists, so we have to decide, how a single dot shall be treated
1233
-                if (true === preg_match("/^[0-9\-]*[\.]{1}[0-9-]+$/", $str) && true === $set['single_dot_as_decimal']) {
1234
-                    // Treat single dot as decimal separator
1235
-                    return (float)$str;
1236
-                } else {
1237
-                    //echo "str: ".$str; echo "ret: ".str_replace('.', '', $str); echo "<br><br> ";
1238
-                    // Else, treat all dots as thousand seps
1239
-                    $str = str_replace('.', '', $str);    // Erase thousand seps
1240
-
1241
-                    return (float)$str;
1242
-                }
1243
-            }
1244
-        } else {
1245
-            // No number found, return zero
1246
-            return 0;
1247
-        }
1248
-    }
1249
-
1250
-    /**
1251
-     * @param                         $var
1252
-     * @param  bool                   $currencyObj
1253
-     * @return float|int|mixed|string
1254
-     */
1255
-    public static function getCurrency($var, $currencyObj = false)
1256
-    {
1257
-        $ret = static::getFloat($var, ['single_dot_as_decimal' => true]);
1258
-        $ret = round($ret, 2);
1259
-        // make sur we have at least .00 in the $var
1260
-        $decimal_section_original = strstr($ret, '.');
1261
-        $decimal_section          = $decimal_section_original;
1262
-        if ($decimal_section) {
1263
-            if (1 == strlen($decimal_section)) {
1264
-                $decimal_section = '.00';
1265
-            } elseif (2 == strlen($decimal_section)) {
1266
-                $decimal_section .= '0';
1267
-            }
1268
-            $ret = str_replace($decimal_section_original, $decimal_section, $ret);
1269
-        } else {
1270
-            $ret .= '.00';
1271
-        }
1272
-        if ($currencyObj) {
1273
-            $ret = $ret . ' ' . $currencyObj->getCode();
1274
-        }
1275
-
1276
-        return $ret;
1277
-    }
1278
-
1279
-    /**
1280
-     * @param $var
1281
-     * @return float|int|mixed|string
1282
-     */
1283
-    public static function float($var)
1284
-    {
1285
-        return static::getCurrency($var);
1286
-    }
1287
-
1288
-    /**
1289
-     * @param  bool $moduleName
1290
-     * @return string
1291
-     */
1292
-    public static function getModuleAdminLink($moduleName = false)
1293
-    {
1294
-        global $xoopsModule;
1295
-        if (!$moduleName && (isset($xoopsModule) && is_object($xoopsModule))) {
1296
-            $moduleName = $xoopsModule->getVar('dirname');
1297
-        }
1298
-        $ret = '';
1299
-        if ($moduleName) {
1300
-            $ret = "<a href='" . XOOPS_URL . "/modules/$moduleName/admin/index.php'>" . _CO_SOBJECT_ADMIN_PAGE . '</a>';
1301
-        }
1302
-
1303
-        return $ret;
1304
-    }
1305
-
1306
-    /**
1307
-     * @return array|bool
1308
-     */
1309
-    public static function getEditors()
1310
-    {
1311
-        $filename = XOOPS_ROOT_PATH . '/class/xoopseditor/xoopseditor.php';
1312
-        if (!file_exists($filename)) {
1313
-            return false;
1314
-        }
1315
-        require_once $filename;
1316
-        $xoopseditorHandler = \XoopsEditorHandler::getInstance();
1317
-        $aList              = $xoopseditorHandler->getList();
1318
-        $ret                = [];
1319
-        foreach ($aList as $k => $v) {
1320
-            $ret[$v] = $k;
1321
-        }
1322
-
1323
-        return $ret;
1324
-    }
1325
-
1326
-    /**
1327
-     * @param $moduleName
1328
-     * @param $items
1329
-     * @return array
1330
-     */
1331
-    public static function getTablesArray($moduleName, $items)
1332
-    {
1333
-        $ret = [];
1334
-        foreach ($items as $item) {
1335
-            $ret[] = $moduleName . '_' . $item;
1336
-        }
1337
-        $ret[] = $moduleName . '_meta';
1338
-
1339
-        return $ret;
1340
-    }
879
+	public static function getModFooter()
880
+	{
881
+		global $xoopsConfig, $xoopsModule, $xoopsModuleConfig;
882
+
883
+		require_once XOOPS_ROOT_PATH . '/class/template.php';
884
+		$tpl = new \XoopsTpl();
885
+
886
+		$hModule      = xoops_getHandler('module');
887
+		$versioninfo  =& $hModule->get($xoopsModule->getVar('mid'));
888
+		$modfootertxt = 'Module ' . $versioninfo->getInfo('name') . ' - Version ' . $versioninfo->getInfo('version') . '';
889
+		$modfooter    = "<a href='" . $versioninfo->getInfo('support_site_url') . "' target='_blank'><img src='" . XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . "/assets/images/cssbutton.gif' title='" . $modfootertxt . "' alt='" . $modfootertxt . "'></a>";
890
+		$tpl->assign('modfooter', $modfooter);
891
+
892
+		if (!defined('_AM_SOBJECT_XOOPS_PRO')) {
893
+			define('_AM_SOBJECT_XOOPS_PRO', 'Do you need help with this module ?<br>Do you need new features not yet available?');
894
+		}
895
+		$smartobjectConfig = static::getModuleConfig('smartobject');
896
+		$tpl->assign('smartobject_enable_admin_footer', $smartobjectConfig['enable_admin_footer']);
897
+		$tpl->display(SMARTOBJECT_ROOT_PATH . 'templates/smartobject_admin_footer.tpl');
898
+	}
899
+
900
+	public static function getXoopsCpFooter()
901
+	{
902
+		static::getModFooter();
903
+		xoops_cp_footer();
904
+	}
905
+
906
+	/**
907
+	 * @param $text
908
+	 * @return mixed
909
+	 */
910
+	public static function sanitizeForCommonTags($text)
911
+	{
912
+		global $xoopsConfig;
913
+		$text = str_replace('{X_SITENAME}', $xoopsConfig['sitename'], $text);
914
+		$text = str_replace('{X_ADMINMAIL}', $xoopsConfig['adminmail'], $text);
915
+
916
+		return $text;
917
+	}
918
+
919
+	/**
920
+	 * @param $src
921
+	 */
922
+	public static function addScript($src)
923
+	{
924
+		echo '<script src="' . $src . '" type="text/javascript"></script>';
925
+	}
926
+
927
+	/**
928
+	 * @param $src
929
+	 */
930
+	public static function addStyle($src)
931
+	{
932
+		if ('smartobject' === $src) {
933
+			$src = SMARTOBJECT_URL . 'assets/css/module.css';
934
+		}
935
+		echo static::getCssLink($src);
936
+	}
937
+
938
+	public static function addAdminAjaxSupport()
939
+	{
940
+		static::addScript(SMARTOBJECT_URL . 'include/scriptaculous/lib/prototype.js');
941
+		static::addScript(SMARTOBJECT_URL . 'include/scriptaculous/src/scriptaculous.js');
942
+		static::addScript(SMARTOBJECT_URL . 'include/scriptaculous/src/smart.js');
943
+	}
944
+
945
+	/**
946
+	 * @param $text
947
+	 * @return mixed
948
+	 */
949
+	public static function sanitizeForSmartpopupLink($text)
950
+	{
951
+		$patterns[]     = "/\[smartpopup=(['\"]?)([^\"'<>]*)\\1](.*)\[\/smartpopup\]/sU";
952
+		$replacements[] = "<a href=\"javascript:openWithSelfMain('\\2', 'smartpopup', 700, 519);\">\\3</a>";
953
+		$ret            = preg_replace($patterns, $replacements, $text);
954
+
955
+		return $ret;
956
+	}
957
+
958
+	/**
959
+	 * Finds the width and height of an image (can also be a flash file)
960
+	 *
961
+	 * @credit phppp
962
+	 *
963
+	 * @var    string $url    path of the image file
964
+	 * @var    string $width  reference to the width
965
+	 * @var    string $height reference to the height
966
+	 * @return bool   false if impossible to find dimension
967
+	 */
968
+	public static function getImageSize($url, & $width, & $height)
969
+	{
970
+		if (empty($width) || empty($height)) {
971
+			if (!$dimension = @ getimagesize($url)) {
972
+				return false;
973
+			}
974
+			if (!empty($width)) {
975
+				$height = $dimension[1] * $width / $dimension[0];
976
+			} elseif (!empty($height)) {
977
+				$width = $dimension[0] * $height / $dimension[1];
978
+			} else {
979
+				list($width, $height) = [
980
+					$dimension[0],
981
+					$dimension[1]
982
+				];
983
+			}
984
+
985
+			return true;
986
+		} else {
987
+			return true;
988
+		}
989
+	}
990
+
991
+	/**
992
+	 * Convert characters to decimal values
993
+	 *
994
+	 * @author eric.wallet at yahoo.fr
995
+	 * @link   http://ca.php.net/manual/en/function.htmlentities.php#69913
996
+	 * @param $str
997
+	 * @return mixed
998
+	 */
999
+	public static function getHtmlnumericentities($str)
1000
+	{
1001
+		//    return preg_replace('/[^!-%\x27-;=?-~ ]/e', '"&#".ord("$0").chr(59)', $str);
1002
+		return preg_replace_callback('/[^!-%\x27-;=?-~ ]/', function ($m) {
1003
+			return '&#' . ord($m[0]) . chr(59);
1004
+		}, $str);
1005
+	}
1006
+
1007
+	/**
1008
+	 * @param        $name
1009
+	 * @param  bool  $optional
1010
+	 * @return mixed
1011
+	 */
1012
+	public static function getCoreHandler($name, $optional = false)
1013
+	{
1014
+		static $handlers;
1015
+		$name = strtolower(trim($name));
1016
+		if (!isset($handlers[$name])) {
1017
+			if (file_exists($hnd_file = XOOPS_ROOT_PATH . '/kernel/' . $name . '.php')) {
1018
+				require_once $hnd_file;
1019
+			}
1020
+			$class = 'Xoops' . ucfirst($name) . 'Handler';
1021
+			if (class_exists($class)) {
1022
+				$handlers[$name] = new $class($GLOBALS['xoopsDB'], 'xoops');
1023
+			}
1024
+		}
1025
+		if (!isset($handlers[$name]) && !$optional) {
1026
+			trigger_error('Class <b>' . $class . '</b> does not exist<br>Handler Name: ' . $name, E_USER_ERROR);
1027
+		}
1028
+		if (isset($handlers[$name])) {
1029
+			return $handlers[$name];
1030
+		}
1031
+		$inst = false;
1032
+	}
1033
+
1034
+	/**
1035
+	 * @param $matches
1036
+	 * @return string
1037
+	 */
1038
+	public static function sanitizeAdsenses_callback($matches)
1039
+	{
1040
+		global $smartobjectAdsenseHandler;
1041
+		if (isset($smartobjectAdsenseHandler->objects[$matches[1]])) {
1042
+			$adsenseObj = $smartobjectAdsenseHandler->objects[$matches[1]];
1043
+			$ret        = $adsenseObj->render();
1044
+
1045
+			return $ret;
1046
+		} else {
1047
+			return '';
1048
+		}
1049
+	}
1050
+
1051
+	/**
1052
+	 * @param $text
1053
+	 * @return mixed
1054
+	 */
1055
+	public static function sanitizeAdsenses($text)
1056
+	{
1057
+		$patterns     = [];
1058
+		$replacements = [];
1059
+
1060
+		$patterns[] = "/\[adsense](.*)\[\/adsense\]/sU";
1061
+		$text       = preg_replace_callback($patterns, 'Smartobject\Utility::sanitizeAdsenses_callback', $text);
1062
+
1063
+		return $text;
1064
+	}
1065
+
1066
+	/**
1067
+	 * @param $matches
1068
+	 * @return string
1069
+	 */
1070
+	public static function sanitizeCustomtags_callback($matches)
1071
+	{
1072
+		global $smartobjectCustomtagHandler;
1073
+		if (isset($smartobjectCustomtagHandler->objects[$matches[1]])) {
1074
+			$customObj = $smartobjectCustomtagHandler->objects[$matches[1]];
1075
+			$ret       = $customObj->renderWithPhp();
1076
+
1077
+			return $ret;
1078
+		} else {
1079
+			return '';
1080
+		}
1081
+	}
1082
+
1083
+	/**
1084
+	 * @param $text
1085
+	 * @return mixed
1086
+	 */
1087
+	public static function sanitizeCustomtags($text)
1088
+	{
1089
+		$patterns     = [];
1090
+		$replacements = [];
1091
+
1092
+		$patterns[] = "/\[customtag](.*)\[\/customtag\]/sU";
1093
+		$text       = preg_replace_callback($patterns, 'Smartobject\Utility::sanitizeCustomtags_callback', $text);
1094
+
1095
+		return $text;
1096
+	}
1097
+
1098
+	/**
1099
+	 * @param $module
1100
+	 * @param $file
1101
+	 */
1102
+	public static function loadLanguageFile($module, $file)
1103
+	{
1104
+		global $xoopsConfig;
1105
+
1106
+		$filename = XOOPS_ROOT_PATH . '/modules/' . $module . '/language/' . $xoopsConfig['language'] . '/' . $file . '.php';
1107
+		if (!file_exists($filename)) {
1108
+			$filename = XOOPS_ROOT_PATH . '/modules/' . $module . '/language/english/' . $file . '.php';
1109
+		}
1110
+		if (file_exists($filename)) {
1111
+			require_once $filename;
1112
+		}
1113
+	}
1114
+
1115
+	public static function loadCommonLanguageFile()
1116
+	{
1117
+		static::loadLanguageFile('smartobject', 'common');
1118
+	}
1119
+
1120
+	/**
1121
+	 * @param               $text
1122
+	 * @param  bool         $keyword
1123
+	 * @return mixed|string
1124
+	 */
1125
+	public static function purifyText($text, $keyword = false)
1126
+	{
1127
+		global $myts;
1128
+		$text = str_replace('&nbsp;', ' ', $text);
1129
+		$text = str_replace('<br>', ' ', $text);
1130
+		$text = str_replace('<br>', ' ', $text);
1131
+		$text = str_replace('<br', ' ', $text);
1132
+		$text = strip_tags($text);
1133
+		$text = html_entity_decode($text);
1134
+		$text = $myts->undoHtmlSpecialChars($text);
1135
+		$text = str_replace(')', ' ', $text);
1136
+		$text = str_replace('(', ' ', $text);
1137
+		$text = str_replace(':', ' ', $text);
1138
+		$text = str_replace('&euro', ' euro ', $text);
1139
+		$text = str_replace('&hellip', '...', $text);
1140
+		$text = str_replace('&rsquo', ' ', $text);
1141
+		$text = str_replace('!', ' ', $text);
1142
+		$text = str_replace('?', ' ', $text);
1143
+		$text = str_replace('"', ' ', $text);
1144
+		$text = str_replace('-', ' ', $text);
1145
+		$text = str_replace('\n', ' ', $text);
1146
+		$text = str_replace('&#8213;', ' ', $text);
1147
+
1148
+		if ($keyword) {
1149
+			$text = str_replace('.', ' ', $text);
1150
+			$text = str_replace(',', ' ', $text);
1151
+			$text = str_replace('\'', ' ', $text);
1152
+		}
1153
+		$text = str_replace(';', ' ', $text);
1154
+
1155
+		return $text;
1156
+	}
1157
+
1158
+	/**
1159
+	 * @param $document
1160
+	 * @return mixed
1161
+	 */
1162
+	public static function getHtml2text($document)
1163
+	{
1164
+		// PHP Manual:: function preg_replace
1165
+		// $document should contain an HTML document.
1166
+		// This will remove HTML tags, javascript sections
1167
+		// and white space. It will also convert some
1168
+		// common HTML entities to their text equivalent.
1169
+		// Credits: newbb2
1170
+		$search = [
1171
+			"'<script[^>]*?>.*?</script>'si", // Strip out javascript
1172
+			"'<img.*?>'si", // Strip out img tags
1173
+			"'<[\/\!]*?[^<>]*?>'si", // Strip out HTML tags
1174
+			"'([\r\n])[\s]+'", // Strip out white space
1175
+			"'&(quot|#34);'i", // Replace HTML entities
1176
+			"'&(amp|#38);'i",
1177
+			"'&(lt|#60);'i",
1178
+			"'&(gt|#62);'i",
1179
+			"'&(nbsp|#160);'i",
1180
+			"'&(iexcl|#161);'i",
1181
+			"'&(cent|#162);'i",
1182
+			"'&(pound|#163);'i",
1183
+			"'&(copy|#169);'i"
1184
+		]; // evaluate as php
1185
+
1186
+		$replace = [
1187
+			'',
1188
+			'',
1189
+			'',
1190
+			"\\1",
1191
+			'"',
1192
+			'&',
1193
+			'<',
1194
+			'>',
1195
+			' ',
1196
+			chr(161),
1197
+			chr(162),
1198
+			chr(163),
1199
+			chr(169),
1200
+		];
1201
+
1202
+		$text = preg_replace($search, $replace, $document);
1203
+
1204
+		preg_replace_callback('/&#(\d+);/', function ($matches) {
1205
+			return chr($matches[1]);
1206
+		}, $document);
1207
+
1208
+		return $text;
1209
+	}
1210
+
1211
+	/**
1212
+	 * @author pillepop2003 at yahoo dot de
1213
+	 *
1214
+	 * Use this snippet to extract any float out of a string. You can choose how a single dot is treated with the (bool) 'single_dot_as_decimal' directive.
1215
+	 * This function should be able to cover almost all floats that appear in an european environment.
1216
+	 * @param            $str
1217
+	 * @param  bool      $set
1218
+	 * @return float|int
1219
+	 */
1220
+	public static function getFloat($str, $set = false)
1221
+	{
1222
+		if (preg_match("/([0-9\.,-]+)/", $str, $match)) {
1223
+			// Found number in $str, so set $str that number
1224
+			$str = $match[0];
1225
+			if (false !== strpos($str, ',')) {
1226
+				// A comma exists, that makes it easy, cos we assume it separates the decimal part.
1227
+				$str = str_replace('.', '', $str);    // Erase thousand seps
1228
+				$str = str_replace(',', '.', $str);    // Convert , to . for floatval command
1229
+
1230
+				return (float)$str;
1231
+			} else {
1232
+				// No comma exists, so we have to decide, how a single dot shall be treated
1233
+				if (true === preg_match("/^[0-9\-]*[\.]{1}[0-9-]+$/", $str) && true === $set['single_dot_as_decimal']) {
1234
+					// Treat single dot as decimal separator
1235
+					return (float)$str;
1236
+				} else {
1237
+					//echo "str: ".$str; echo "ret: ".str_replace('.', '', $str); echo "<br><br> ";
1238
+					// Else, treat all dots as thousand seps
1239
+					$str = str_replace('.', '', $str);    // Erase thousand seps
1240
+
1241
+					return (float)$str;
1242
+				}
1243
+			}
1244
+		} else {
1245
+			// No number found, return zero
1246
+			return 0;
1247
+		}
1248
+	}
1249
+
1250
+	/**
1251
+	 * @param                         $var
1252
+	 * @param  bool                   $currencyObj
1253
+	 * @return float|int|mixed|string
1254
+	 */
1255
+	public static function getCurrency($var, $currencyObj = false)
1256
+	{
1257
+		$ret = static::getFloat($var, ['single_dot_as_decimal' => true]);
1258
+		$ret = round($ret, 2);
1259
+		// make sur we have at least .00 in the $var
1260
+		$decimal_section_original = strstr($ret, '.');
1261
+		$decimal_section          = $decimal_section_original;
1262
+		if ($decimal_section) {
1263
+			if (1 == strlen($decimal_section)) {
1264
+				$decimal_section = '.00';
1265
+			} elseif (2 == strlen($decimal_section)) {
1266
+				$decimal_section .= '0';
1267
+			}
1268
+			$ret = str_replace($decimal_section_original, $decimal_section, $ret);
1269
+		} else {
1270
+			$ret .= '.00';
1271
+		}
1272
+		if ($currencyObj) {
1273
+			$ret = $ret . ' ' . $currencyObj->getCode();
1274
+		}
1275
+
1276
+		return $ret;
1277
+	}
1278
+
1279
+	/**
1280
+	 * @param $var
1281
+	 * @return float|int|mixed|string
1282
+	 */
1283
+	public static function float($var)
1284
+	{
1285
+		return static::getCurrency($var);
1286
+	}
1287
+
1288
+	/**
1289
+	 * @param  bool $moduleName
1290
+	 * @return string
1291
+	 */
1292
+	public static function getModuleAdminLink($moduleName = false)
1293
+	{
1294
+		global $xoopsModule;
1295
+		if (!$moduleName && (isset($xoopsModule) && is_object($xoopsModule))) {
1296
+			$moduleName = $xoopsModule->getVar('dirname');
1297
+		}
1298
+		$ret = '';
1299
+		if ($moduleName) {
1300
+			$ret = "<a href='" . XOOPS_URL . "/modules/$moduleName/admin/index.php'>" . _CO_SOBJECT_ADMIN_PAGE . '</a>';
1301
+		}
1302
+
1303
+		return $ret;
1304
+	}
1305
+
1306
+	/**
1307
+	 * @return array|bool
1308
+	 */
1309
+	public static function getEditors()
1310
+	{
1311
+		$filename = XOOPS_ROOT_PATH . '/class/xoopseditor/xoopseditor.php';
1312
+		if (!file_exists($filename)) {
1313
+			return false;
1314
+		}
1315
+		require_once $filename;
1316
+		$xoopseditorHandler = \XoopsEditorHandler::getInstance();
1317
+		$aList              = $xoopseditorHandler->getList();
1318
+		$ret                = [];
1319
+		foreach ($aList as $k => $v) {
1320
+			$ret[$v] = $k;
1321
+		}
1322
+
1323
+		return $ret;
1324
+	}
1325
+
1326
+	/**
1327
+	 * @param $moduleName
1328
+	 * @param $items
1329
+	 * @return array
1330
+	 */
1331
+	public static function getTablesArray($moduleName, $items)
1332
+	{
1333
+		$ret = [];
1334
+		foreach ($items as $item) {
1335
+			$ret[] = $moduleName . '_' . $item;
1336
+		}
1337
+		$ret[] = $moduleName . '_meta';
1338
+
1339
+		return $ret;
1340
+	}
1341 1341
     
1342 1342
     
1343 1343
 }
Please login to merge, or discard this patch.