12 public $mActionForm =
null;
13 public $mErrorMessages = [];
14 public $mAllowedExts = [
'gif' =>
'image/gif',
'jpg' =>
'image/jpeg',
'jpeg' =>
'image/jpeg',
'png' =>
'image/png'];
17 public function prepare(&$controller, &$xoopsUser, $moduleConfig)
20 $this->mActionForm->prepare();
23 public function getDefaultView(&$controller, &$xoopsUser)
25 return USER_FRAME_VIEW_INPUT;
28 public function _addErrorMessage($msg)
30 $this->mErrorMessages[] = $msg;
33 public function execute(&$controller, &$xoopsUser)
35 $form_cancel = $controller->mRoot->mContext->mRequest->getRequest(
'_form_control_cancel');
36 if (
null != $form_cancel) {
37 return USER_FRAME_VIEW_CANCEL;
40 $this->mActionForm->fetch();
41 $this->mActionForm->validate();
43 if ($this->mActionForm->hasError()) {
44 return $this->getDefaultView($controller, $xoopsUser);
47 $formFile = $this->mActionForm->get(
'upload');
48 $formFileExt = $formFile->getExtension();
52 if (
'zip' == strtolower($formFileExt)) {
53 if (!file_exists(XOOPS_ROOT_PATH .
'/class/Archive_Zip.php')) {
54 return USER_FRAME_VIEW_ERROR;
56 require_once XOOPS_ROOT_PATH .
'/class/Archive_Zip.php';
58 $files = $zip->extract([
'extract_as_string' =>
true]) ;
59 if (! is_array(@$files)) {
60 return USER_FRAME_VIEW_ERROR;
62 if (!$this->_fetchZipAvatarImages($files, $avatarimages)) {
63 return USER_FRAME_VIEW_ERROR;
67 require_once XOOPS_ROOT_PATH .
'/class/class.tar.php';
69 $tar->openTar($formFile->_mTmpFileName);
70 if (!is_array(@$tar->files)) {
71 return USER_FRAME_VIEW_ERROR;
73 if (!$this->_fetchTarAvatarImages($tar->files, $avatarimages)) {
74 return USER_FRAME_VIEW_ERROR;
78 if (!$this->_saveAvatarImages($avatarimages)) {
79 return USER_FRAME_VIEW_ERROR;
81 return USER_FRAME_VIEW_SUCCESS;
84 public function _fetchZipAvatarImages(&$files, &$avatarimages)
86 foreach ($files as $file) {
87 $file_pos = strrpos($file[
'filename'],
'/') ;
88 if (
false !== $file_pos) {
89 $file[
'filename'] = substr($file[
'filename'], $file_pos+1);
91 if (!empty($file[
'filename']) && preg_match(
"/(.*)\.(gif|jpg|jpeg|png)$/i", $file[
'filename'], $match) && !preg_match(
'/[' . preg_quote(
'\/:*?"<>|',
'/') .
']/', $file[
'filename'])) {
92 $avatarimages[] = [
'name' => $file[
'filename'],
'content' => $file[
'content']];
99 public function _fetchTarAvatarImages(&$files, &$avatarimages)
101 foreach ($files as $id => $info) {
102 $file_pos = strrpos($info[
'name'],
'/') ;
103 if (
false !== $file_pos) {
104 $info[
'name'] = substr($info[
'name'], $file_pos+1);
106 if (!empty($info[
'name']) && preg_match(
"/(.*)\.(gif|jpg|jpeg|png)$/i", $info[
'name'], $match) && !preg_match(
'/[' . preg_quote(
'\/:*?"<>|',
'/') .
']/', $info[
'name'])) {
107 $avatarimages[] = [
'name' => $info[
'name'],
'content' => $info[
'file']];
114 public function _saveAvatarImages(&$avatarimages)
116 if (0 == (is_countable($avatarimages) ? count($avatarimages) : 0)) {
120 $avatarhandler =& xoops_getmodulehandler(
'avatar');
122 for ($i = 0; $i < (is_countable($avatarimages) ? count($avatarimages) : 0); $i++) {
123 $ext_pos = strrpos($avatarimages[$i][
'name'],
'.') ;
124 if (
false === $ext_pos) {
127 $ext = strtolower(substr($avatarimages[$i][
'name'], $ext_pos + 1)) ;
128 if (empty($this->mAllowedExts[$ext])) {
131 $file_name = substr($avatarimages[$i][
'name'], 0, $ext_pos) ;
132 $save_file_name = uniqid(
'savt') .
'.' . $ext ;
133 $filehandle = fopen(XOOPS_UPLOAD_PATH.
'/'.$save_file_name,
'w') ;
138 if (!@fwrite($filehandle, $avatarimages[$i][
'content'])) {
140 @fclose($filehandle) ;
143 @fclose($filehandle) ;
145 $avatar =& $avatarhandler->create();
146 $avatar->set(
'avatar_name', $file_name);
147 $avatar->set(
'avatar_file', $save_file_name);
148 $avatar->set(
'avatar_display', 1);
149 $avatar->set(
'avatar_weight', 0);
150 $avatar->set(
'avatar_type',
'S');
151 $avatar->set(
'avatar_mimetype', $this->mAllowedExts[$ext]);
153 if (!$avatarhandler->insert($avatar)) {
162 public function executeViewInput(&$controller, &$xoopsUser, &$render)
164 $render->setTemplateName(
'avatar_upload.html');
165 $render->setAttribute(
'actionForm', $this->mActionForm);
168 public function executeViewSuccess(&$controller, &$xoopsUser, &$render)
170 $controller->executeForward(
'./index.php?action=AvatarList');
173 public function executeViewError(&$controller, &$xoopsUser, &$render)
175 if (0 == count($this->mErrorMessages)) {
176 $controller->executeRedirect(
'./index.php?action=AvatarList', 1, _AD_USER_ERROR_DBUPDATE_FAILED);
178 $render->setTemplateName(
'avatar_upload_error.html');
179 $render->setAttribute(
'errorMessages', $this->mErrorMessages);
183 public function executeViewCancel(&$controller, &$xoopsUser, &$render)
185 $controller->executeForward(
'./index.php?action=AvatarList');