20 public $mActionForm =
null;
21 public $mErrorMessages = [];
22 public $mAllowedExts = [
'gif' =>
'image/gif',
'jpg' =>
'image/jpeg',
'jpeg' =>
'image/jpeg',
'png' =>
'image/png'];
24 public function prepare(&$controller, &$xoopsUser)
27 $this->mActionForm->prepare();
30 public function getDefaultView(&$controller, &$xoopsUser)
32 return LEGACY_FRAME_VIEW_INPUT;
35 public function _addErrorMessage($msg)
37 $this->mErrorMessages[] = $msg;
40 public function execute(&$controller, &$xoopsUser)
42 $form_cancel = $controller->mRoot->mContext->mRequest->getRequest(
'_form_control_cancel');
43 if (
null !== $form_cancel) {
44 return LEGACY_FRAME_VIEW_CANCEL;
47 $this->mActionForm->fetch();
48 $this->mActionForm->validate();
50 if ($this->mActionForm->hasError()) {
51 return $this->getDefaultView($controller, $xoopsUser);
54 $formFile = $this->mActionForm->get(
'upload');
55 $formFileExt = $formFile->getExtension();
59 if (
'zip' === strtolower($formFileExt)) {
60 if (!file_exists(XOOPS_ROOT_PATH .
'/class/Archive_Zip.php')) {
61 return LEGACY_FRAME_VIEW_ERROR;
63 require_once XOOPS_ROOT_PATH .
'/class/Archive_Zip.php';
65 $files = $zip->extract([
'extract_as_string' =>
true]) ;
66 if (! is_array(@$files)) {
67 return LEGACY_FRAME_VIEW_ERROR;
69 if (!$this->_fetchZipSmilesImages($files, $smilesimages)) {
70 return LEGACY_FRAME_VIEW_ERROR;
74 require_once XOOPS_ROOT_PATH .
'/class/class.tar.php';
76 $tar->openTar($formFile->_mTmpFileName);
77 if (!is_array(@$tar->files)) {
78 return LEGACY_FRAME_VIEW_ERROR;
80 if (!$this->_fetchTarSmilesImages($tar->files, $smilesimages)) {
81 return LEGACY_FRAME_VIEW_ERROR;
85 if (!$this->_saveSmilesImages($smilesimages)) {
86 return LEGACY_FRAME_VIEW_ERROR;
88 return LEGACY_FRAME_VIEW_SUCCESS;
91 public function _fetchZipSmilesImages(&$files, &$smilesimages)
93 foreach ($files as $file) {
94 $file_pos = strrpos($file[
'filename'],
'/') ;
95 if (
false !== $file_pos) {
96 $file[
'filename'] = substr($file[
'filename'], $file_pos+1);
98 if (!empty($file[
'filename']) && preg_match(
"/(.*)\.(gif|jpg|jpeg|png)$/i", $file[
'filename'], $match) && !preg_match(
'/[' . preg_quote(
'\/:*?"<>|',
'/') .
']/', $file[
'filename'])) {
99 $smilesimages[] = [
'name' => $file[
'filename'],
'content' => $file[
'content']];
106 public function _fetchTarSmilesImages(&$files, &$smilesimages)
108 foreach ($files as $id => $info) {
109 $file_pos = strrpos($info[
'name'],
'/') ;
110 if (
false !== $file_pos) {
111 $info[
'name'] = substr($info[
'name'], $file_pos+1);
113 if (!empty($info[
'name']) && preg_match(
"/(.*)\.(gif|jpg|jpeg|png)$/i", $info[
'name'], $match) && !preg_match(
'/[' . preg_quote(
'\/:*?"<>|',
'/') .
']/', $info[
'name'])) {
114 $smilesimages[] = [
'name' => $info[
'name'],
'content' => $info[
'file']];
121 public function _saveSmilesImages(&$smilesimages)
123 if (0 === (is_countable($smilesimages) ? count($smilesimages) : 0)) {
127 $smileshandler =& xoops_getmodulehandler(
'smiles');
129 for ($i = 0; $i < (is_countable($smilesimages) ? count($smilesimages) : 0); $i++) {
130 $ext_pos = strrpos($smilesimages[$i][
'name'],
'.') ;
131 if (
false === $ext_pos) {
134 $ext = strtolower(substr($smilesimages[$i][
'name'], $ext_pos + 1)) ;
135 if (empty($this->mAllowedExts[$ext])) {
138 $file_name = substr($smilesimages[$i][
'name'], 0, $ext_pos) ;
139 $save_file_name = uniqid(
'smil') .
'.' . $ext ;
140 $filehandle = fopen(XOOPS_UPLOAD_PATH.
'/'.$save_file_name,
'w') ;
145 if (!@fwrite($filehandle, $smilesimages[$i][
'content'])) {
147 @fclose($filehandle) ;
150 @fclose($filehandle) ;
152 $smiles =& $smileshandler->create();
153 $smiles->set(
'code', $file_name);
154 $smiles->set(
'emotion', $file_name);
155 $smiles->set(
'smile_url', $save_file_name);
156 $smiles->set(
'display', 1);
158 if (!$smileshandler->insert($smiles)) {
167 public function executeViewInput(&$controller, &$xoopsUser, &$render)
169 $render->setTemplateName(
'smiles_upload.html');
170 $render->setAttribute(
'actionForm', $this->mActionForm);
173 public function executeViewSuccess(&$controller, &$xoopsUser, &$render)
175 $controller->executeForward(
'./index.php?action=SmilesList');
178 public function executeViewError(&$controller, &$xoopsUser, &$render)
180 if (0 == count($this->mErrorMessages)) {
181 $controller->executeRedirect(
'./index.php?action=SmilesList', 1, _AD_LEGACY_ERROR_DBUPDATE_FAILED);
183 $render->setTemplateName(
'smiles_upload_error.html');
184 $render->setAttribute(
'errorMessages', $this->mErrorMessages);
188 public function executeViewCancel(&$controller, &$xoopsUser, &$render)
190 $controller->executeForward(
'./index.php?action=SmilesList');