diff --git a/modules/comment/comment.class.php b/modules/comment/comment.class.php index dc0b20777..4e68b722e 100644 --- a/modules/comment/comment.class.php +++ b/modules/comment/comment.class.php @@ -114,6 +114,15 @@ class comment extends ModuleObject return true; } + if(!$oModuleModel->getTrigger('document.moveDocumentModule', 'comment', 'controller', 'triggerMoveDocument', 'after')) + { + return true; + } + if(!$oModuleModel->getTrigger('document.copyDocumentModule', 'comment', 'controller', 'triggerAddCopyDocument', 'add')) + { + return true; + } + return FALSE; } @@ -204,6 +213,15 @@ class comment extends ModuleObject { $oDB->addIndex('comments', 'idx_nick_name', array('nick_name')); } + + if(!$oModuleModel->getTrigger('document.moveDocumentModule', 'comment', 'controller', 'triggerMoveDocument', 'after')) + { + $oModuleController->insertTrigger('document.moveDocumentModule', 'comment', 'controller', 'triggerMoveDocument', 'after'); + } + if(!$oModuleModel->getTrigger('document.copyDocumentModule', 'comment', 'controller', 'triggerAddCopyDocument', 'add')) + { + $oModuleController->insertTrigger('document.copyDocumentModule', 'comment', 'controller', 'triggerAddCopyDocument', 'add'); + } } /** diff --git a/modules/comment/comment.controller.php b/modules/comment/comment.controller.php index 03cfe7671..2b9fe220d 100644 --- a/modules/comment/comment.controller.php +++ b/modules/comment/comment.controller.php @@ -1726,7 +1726,45 @@ class commentController extends comment $this->add('comment_list', $commentList); } - + + function triggerMoveDocument($obj) + { + executeQuery('comment.updateCommentModule', $obj); + executeQuery('comment.updateCommentListModule', $obj); + } + + function triggerAddCopyDocument(&$obj) + { + $args = new stdClass; + $args->document_srls = $obj->source->document_srl; + $comment_list = executeQueryArray('comment.getCommentsByDocumentSrls', $args)->data; + + $copied_comments = array(); + foreach($comment_list as $comment) + { + $copy = clone $comment; + $copy->comment_srl = getNextSequence(); + $copy->module_srl = $obj->copied->module_srl; + $copy->document_srl = $obj->copied->document_srl; + $copy->parent_srl = $comment->parent_srl ? $copied_comments[$comment->parent_srl] : 0; + + // call a trigger (add) + $args = new stdClass; + $args->source = $comment; + $args->copied = $copy; + ModuleHandler::triggerCall('comment.copyCommentByDocument', 'add', $args); + + // insert a copied comment + $this->insertComment($copy, true); + + $copied_comments[$comment->comment_srl] = $copy->comment_srl; + } + + // update + $obj->copied->last_updater = $copy->nick_name; + $obj->copied->comment_count = count($copied_comments); + } + function triggerCopyModule(&$obj) { $oModuleModel = getModel('module'); @@ -1741,7 +1779,6 @@ class commentController extends comment } } } - } /* End of file comment.controller.php */ /* Location: ./modules/comment/comment.controller.php */ diff --git a/modules/comment/queries/getCommentsByDocumentSrls.xml b/modules/comment/queries/getCommentsByDocumentSrls.xml new file mode 100644 index 000000000..b7e2c0d68 --- /dev/null +++ b/modules/comment/queries/getCommentsByDocumentSrls.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/modules/document/document.admin.controller.php b/modules/document/document.admin.controller.php index 3393896ee..577426e6c 100644 --- a/modules/document/document.admin.controller.php +++ b/modules/document/document.admin.controller.php @@ -43,402 +43,7 @@ class documentAdminController extends document $this->setMessage(sprintf(lang('msg_checked_document_is_deleted'), $document_count) ); } - - /** - * Change the module to move a specific article - * @param array $document_srl_list - * @param int $module_srl - * @param int $category_srl - * @return Object - */ - function moveDocumentModule($document_srl_list, $module_srl, $category_srl) - { - if(!count($document_srl_list)) return; - - $oDocumentModel = getModel('document'); - $oDocumentController = getController('document'); - - $oDB = &DB::getInstance(); - $oDB->begin(); - - $triggerObj = new stdClass(); - $triggerObj->document_srls = implode(',',$document_srl_list); - $triggerObj->module_srl = $module_srl; - $triggerObj->category_srl = $category_srl; - // Call a trigger (before) - $output = ModuleHandler::triggerCall('document.moveDocumentModule', 'before', $triggerObj); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - - for($i=count($document_srl_list)-1;$i>=0;$i--) - { - $document_srl = $document_srl_list[$i]; - $oDocument = $oDocumentModel->getDocument($document_srl); - if(!$oDocument->isExists()) continue; - - $source_category_srl = $oDocument->get('category_srl'); - - unset($obj); - $obj = $oDocument->getObjectVars(); - - // ISSUE https://github.com/xpressengine/xe-core/issues/32 - $args_doc_origin = new stdClass(); - $args_doc_origin->document_srl = $document_srl; - $output_ori = executeQuery('document.getDocument', $args_doc_origin, array('content')); - $obj->content = $output_ori->data->content; - - // Move the attached file if the target module is different - if($module_srl != $obj->module_srl && $oDocument->hasUploadedFiles()) - { - $args = new stdClass; - $args->module_srl = $module_srl; - $args->upload_target_srl = $oDocument->get('document_srl'); - $output = executeQuery('file.updateFileModule', $args); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - } - - if($module_srl != $obj->module_srl) - { - $oDocumentController->deleteDocumentAliasByDocument($obj->document_srl); - } - - // Move a module of the article - $obj->module_srl = $module_srl; - $obj->category_srl = $category_srl; - $output = executeQuery('document.updateDocumentModule', $obj); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - else - { - $update_output = $oDocumentController->insertDocumentUpdateLog($obj); - if(!$update_output->toBool()) - { - $oDB->rollback(); - return $update_output; - } - } - - // Move a module of the extra vars - $output = executeQuery('document.moveDocumentExtraVars', $obj); - if(!$output->toBool()) { - $oDB->rollback(); - return $output; - } - - // Set 0 if a new category doesn't exist after catergory change - if($source_category_srl != $category_srl) - { - if($source_category_srl) $oDocumentController->updateCategoryCount($oDocument->get('module_srl'), $source_category_srl); - if($category_srl) $oDocumentController->updateCategoryCount($module_srl, $category_srl); - } - } - - $args = new stdClass(); - $args->document_srls = implode(',',$document_srl_list); - $args->module_srl = $module_srl; - - // move the comment - $output = executeQuery('comment.updateCommentModule', $args); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - - $output = executeQuery('comment.updateCommentListModule', $args); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - - // move the trackback - if(getClass('trackback')) - { - $output = executeQuery('trackback.updateTrackbackModule', $args); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - } - - // Tags - $output = executeQuery('tag.updateTagModule', $args); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - - // Call a trigger (after) - ModuleHandler::triggerCall('document.moveDocumentModule', 'after', $triggerObj); - - $oDB->commit(); - - //remove from cache - foreach ($document_srl_list as $document_srl) - { - Rhymix\Framework\Cache::delete('document_item:'. getNumberingPath($document_srl) . $document_srl); - } - return new BaseObject(); - } - - /** - * Copy the post - * @param array $document_srl_list - * @param int $module_srl - * @param int $category_srl - * @return object - */ - function copyDocumentModule($document_srl_list, $module_srl, $category_srl) - { - if(count($document_srl_list) < 1) return; - - $oDocumentModel = getModel('document'); - $oDocumentController = getController('document'); - - $oFileModel = getModel('file'); - - $oDB = &DB::getInstance(); - $oDB->begin(); - - $triggerObj = new stdClass(); - $triggerObj->document_srls = implode(',',$document_srl_list); - $triggerObj->module_srl = $module_srl; - $triggerObj->category_srl = $category_srl; - // Call a trigger (before) - $output = ModuleHandler::triggerCall('document.copyDocumentModule', 'before', $triggerObj); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - - $extraVarsList = $oDocumentModel->getDocumentExtraVarsFromDB($document_srl_list); - $extraVarsListByDocumentSrl = array(); - if(is_array($extraVarsList->data)) - { - foreach($extraVarsList->data as $value) - { - if(!isset($extraVarsListByDocumentSrl[$value->document_srl])) - { - $extraVarsListByDocumentSrl[$value->document_srl] = array(); - } - - $extraVarsListByDocumentSrl[$value->document_srl][] = $value; - } - } - - for($i=count($document_srl_list)-1;$i>=0;$i--) - { - $document_srl = $document_srl_list[$i]; - $oDocument = $oDocumentModel->getDocument($document_srl); - if(!$oDocument->isExists()) continue; - - $obj = $oDocument->getObjectVars(); - - $extraVars = $extraVarsListByDocumentSrl[$document_srl]; - if($module_srl == $obj->module_srl) - { - if(is_array($extraVars)) - { - foreach($extraVars as $extraItem) - { - if($extraItem->var_idx >= 0) $obj->{'extra_vars'.$extraItem->var_idx} = $extraItem->value; - } - } - } - $obj->module_srl = $module_srl; - $obj->document_srl = getNextSequence(); - $obj->category_srl = $category_srl; - $obj->password_is_hashed = true; - $obj->comment_count = 0; - $obj->trackback_count = 0; - - // Pre-register the attachment - if($oDocument->hasUploadedFiles()) - { - $files = $oDocument->getUploadedFiles(); - foreach($files as $val) - { - $file_info = array(); - $file_info['tmp_name'] = $val->uploaded_filename; - $file_info['name'] = $val->source_filename; - $oFileController = getController('file'); - $inserted_file = $oFileController->insertFile($file_info, $module_srl, $obj->document_srl, 0, true); - // if image/video files - if($val->direct_download == 'Y') - { - $source_filename = substr($val->uploaded_filename,2); - $target_filename = substr($inserted_file->get('uploaded_filename'),2); - $obj->content = str_replace($source_filename, $target_filename, $obj->content); - // If binary file - } - else - { - $obj->content = str_replace('file_srl='.$val->file_srl, 'file_srl='.$inserted_file->get('file_srl'), $obj->content); - $obj->content = str_replace('sid='.$val->sid, 'sid='.$inserted_file->get('sid'), $obj->content); - } - } - } - - // Write a post - $output = $oDocumentController->insertDocument($obj, true, true); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - - // copy multi language contents - if(is_array($extraVars)) - { - foreach($extraVars as $value) - { - if($value->idx >= 0 && $value->lang_code == Context::getLangType()) - { - continue; - } - - if( $value->var_idx < 0 || ($module_srl == $value->module_srl && $value->var_idx >= 0) ) - { - $oDocumentController->insertDocumentExtraVar($value->module_srl, $obj->document_srl, $value->var_idx, $value->value, $value->eid, $value->lang_code); - } - } - } - - // Move the comments - if($oDocument->getCommentCount()) - { - $oCommentModel = getModel('comment'); - $comment_output = $oCommentModel->getCommentList($document_srl, 0, true, 99999999); - $comments = $comment_output->data; - if(count($comments) > 0) - { - $oCommentController = getController('comment'); - $success_count = 0; - $p_comment_srl = array(); - foreach($comments as $comment_obj) - { - $comment_srl = getNextSequence(); - $p_comment_srl[$comment_obj->comment_srl] = $comment_srl; - - // Pre-register the attachment - if($comment_obj->uploaded_count) - { - $files = $oFileModel->getFiles($comment_obj->comment_srl, true); - foreach($files as $val) - { - $file_info = array(); - $file_info['tmp_name'] = $val->uploaded_filename; - $file_info['name'] = $val->source_filename; - $oFileController = getController('file'); - $inserted_file = $oFileController->insertFile($file_info, $module_srl, $comment_srl, 0, true); - // if image/video files - if($val->direct_download == 'Y') - { - $source_filename = substr($val->uploaded_filename,2); - $target_filename = substr($inserted_file->get('uploaded_filename'),2); - $comment_obj->content = str_replace($source_filename, $target_filename, $comment_obj->content); - // If binary file - } - else - { - $comment_obj->content = str_replace('file_srl='.$val->file_srl, 'file_srl='.$inserted_file->get('file_srl'), $comment_obj->content); - $comment_obj->content = str_replace('sid='.$val->sid, 'sid='.$inserted_file->get('sid'), $comment_obj->content); - } - } - } - - $comment_obj->module_srl = $obj->module_srl; - $comment_obj->document_srl = $obj->document_srl; - $comment_obj->comment_srl = $comment_srl; - - if($comment_obj->parent_srl) $comment_obj->parent_srl = $p_comment_srl[$comment_obj->parent_srl]; - - $output = $oCommentController->insertComment($comment_obj, true); - if($output->toBool()) $success_count ++; - } - $oDocumentController->updateCommentCount($obj->document_srl, $success_count, $comment_obj->nick_name, true); - } - } - - // Move the trackbacks - $oTrackbackModel = getModel('trackback'); - if($oTrackbackModel && $oDocument->getTrackbackCount()) - { - $trackbacks = $oTrackbackModel->getTrackbackList($oDocument->document_srl); - if(count($trackbacks)) - { - $success_count = 0; - foreach($trackbacks as $trackback_obj) - { - $trackback_obj->trackback_srl = getNextSequence(); - $trackback_obj->module_srl = $obj->module_srl; - $trackback_obj->document_srl = $obj->document_srl; - $output = executeQuery('trackback.insertTrackback', $trackback_obj); - if($output->toBool()) $success_count++; - } - // Update the number of trackbacks - $oDocumentController->updateTrackbackCount($obj->document_srl, $success_count); - } - } - - $copied_srls[$document_srl] = $obj->document_srl; - } - - // Call a trigger (before) - $triggerObj->copied_srls = $copied_srls; - ModuleHandler::triggerCall('document.copyDocumentModule', 'after', $triggerObj); - - $oDB->commit(); - - $output = new BaseObject(); - $output->add('copied_srls', $copied_srls); - return $output; - } - - /** - * Delete all documents of the module - * @param int $module_srl - * @return object - */ - function deleteModuleDocument($module_srl) - { - $args = new stdClass(); - $args->module_srl = $module_srl; - $oDocumentModel = getModel('document'); - $args->module_srl = $module_srl; - $document_list = $oDocumentModel->getDocumentList($args); - $documents = $document_list->data; - $output = executeQuery('document.deleteModuleDocument', $args); - if(is_array($documents)) - { - foreach ($documents as $oDocument) - { - $document_srl_list[] = $oDocument->document_srl; - } - } - - //remove from cache - foreach ($document_srl_list as $document_srl) - { - Rhymix\Framework\Cache::delete('document_item:'. getNumberingPath($document_srl) . $document_srl); - } - return $output; - } - + /** * Save the default settings of the document module * @return object @@ -788,60 +393,222 @@ class documentAdminController extends document $trash_srl = Context::get('trash_srl'); $this->restoreTrash($trash_srl); } - - /*function restoreTrash($trash_srl){ - $oDB = &DB::getInstance(); - $oDocumentModel = getModel('document'); - - $trash_args->trash_srl = $trash_srl; - - $output = executeQuery('document.getTrash', $trash_args); - if (!$output->toBool()) { - return $output; - } - - $document_args->document_srl = $output->data->document_srl; - $document_args->module_srl = $output->data->module_srl; - $document_args->member_srl = $output->data->member_srl; - $document_args->ipaddress = $output->data->ipaddress; - $document_args->update_order = $output->data->update_order; - - $oDocument = $oDocumentModel->getDocument($document_args->document_srl); - - // begin transaction - $oDB->begin(); - - $output = executeQuery('document.updateDocument', $document_args); - if (!$output->toBool()) { - $oDB->rollback(); - return $output; + + /** + * Move module of the documents + * @param array $document_srl_list + * @param int $target_module_srl + * @param int $target_category_srl + * @return Object + */ + function moveDocumentModule($document_srl_list, $target_module_srl, $target_category_srl) + { + if(empty($document_srl_list)) + { + return; + } + + $obj = new stdClass; + $obj->document_srls = implode(',', $document_srl_list); + $obj->list_count = count($document_srl_list); + $obj->document_list = executeQueryArray('document.getDocuments', $obj)->data; + $obj->module_srl = $target_module_srl; + $obj->category_srl = $target_category_srl; + + $oDB = DB::getInstance(); + $oDB->begin(); + + // call a trigger (before) + $output = ModuleHandler::triggerCall('document.moveDocumentModule', 'before', $obj); + if(!$output->toBool()) + { + $oDB->rollback(); + return $output; + } + + $origin_category = array(); + $oDocumentController = getController('document'); + + foreach($obj->document_list as $document) + { + // if the target module is different + if($document->module_srl != $obj->module_srl) + { + $oDocumentController->deleteDocumentAliasByDocument($document->document_srl); + } + + // if the target category is different + if($document->category_srl != $obj->category_srl && $document->category_srl) + { + $origin_category[$document->category_srl] = $document->module_srl; + } + + $oDocumentController->insertDocumentUpdateLog($document); + } + + // update documents + $output = executeQuery('document.updateDocumentsModule', $obj); + if(!$output->toBool()) + { + $oDB->rollback(); + return $output; + } + + // update extra vars + $output = executeQuery('document.updateDocumentExtraVarsModule', $obj); + if(!$output->toBool()) + { + $oDB->rollback(); + return $output; + } + + // call a trigger (after) + ModuleHandler::triggerCall('document.moveDocumentModule', 'after', $obj); + + // update category count + foreach($origin_category as $category_srl => $module_srl) + { + $oDocumentController->updateCategoryCount($module_srl, $category_srl); + } + if($obj->category_srl) + { + $oDocumentController->updateCategoryCount($obj->module_srl, $obj->category_srl); + } + + $oDB->commit(); + + // remove from cache + foreach ($document_srl_list as $document_srl) + { + Rhymix\Framework\Cache::delete('document_item:'. getNumberingPath($document_srl) . $document_srl); + } + + return new BaseObject(); } - $output = executeQuery('document.deleteTrash', $trash_args); - if (!$output->toBool()) { - $oDB->rollback(); - return $output; + /** + * Copy the documents + * @param array $document_srl_list + * @param int $target_module_srl + * @param int $target_category_srl + * @return object + */ + function copyDocumentModule($document_srl_list, $target_module_srl, $target_category_srl) + { + if(empty($document_srl_list)) + { + return; + } + + $obj = new stdClass; + $obj->document_srls = implode(',', $document_srl_list); + $obj->list_count = count($document_srl_list); + $obj->document_list = executeQueryArray('document.getDocuments', $obj)->data; + $obj->module_srl = $target_module_srl; + $obj->category_srl = $target_category_srl; + + $oDB = DB::getInstance(); + $oDB->begin(); + + // call a trigger (before) + $output = ModuleHandler::triggerCall('document.copyDocumentModule', 'before', $obj); + if(!$output->toBool()) + { + $oDB->rollback(); + return $output; + } + + $oDocumentController = getController('document'); + $extra_vars_list = getModel('document')->getDocumentExtraVarsFromDB($document_srl_list)->data; + + $extra_vars = array(); + foreach($extra_vars_list as $extra) + { + if(!isset($extra_vars[$extra->document_srl])) + { + $extra_vars[$extra->document_srl] = array(); + } + + $extra_vars[$extra->document_srl][] = $extra; + } + + $copied_srls = array(); + foreach($obj->document_list as $document) + { + $copy = clone $document; + $copy->document_srl = getNextSequence(); + $copy->module_srl = $obj->module_srl; + $copy->category_srl = $obj->category_srl; + $copy->comment_count = 0; + $copy->trackback_count = 0; + $copy->password_is_hashed = true; + + // call a trigger (add) + $args = new stdClass; + $args->source = $document; + $args->copied = $copy; + ModuleHandler::triggerCall('document.copyDocumentModule', 'add', $args); + + // insert a copied document + $output = $oDocumentController->insertDocument($copy, true, true); + if(!$output->toBool()) + { + $oDB->rollback(); + return $output; + } + + // insert copied extra vars of the document + if(isset($extra_vars[$document->document_srl])) + { + foreach($extra_vars[$document->document_srl] as $extra) + { + $oDocumentController->insertDocumentExtraVar($copy->module_srl, $copy->document_srl, $extra->var_idx, $extra->value, $extra->eid, $extra->lang_code); + } + } + + $copied_srls[$document->document_srl] = $copy->document_srl; + } + + // call a trigger (after) + $obj->copied_srls = $copied_srls; + ModuleHandler::triggerCall('document.copyDocumentModule', 'after', $obj); + + $oDB->commit(); + + // return copied document_srls + $output = new BaseObject(); + $output->add('copied_srls', $copied_srls); + return $output; } - // If the post was not temorarily saved, set the attachment's status to be valid - if($oDocument->hasUploadedFiles() && $document_args->member_srl != $document_args->module_srl) { - $args->upload_target_srl = $oDocument->document_srl; - $args->isvalid = 'Y'; - executeQuery('file.updateFileValid', $args); + + /** + * Delete all documents of the module + * @param int $module_srl + * @return object + */ + function deleteModuleDocument($module_srl) + { + $args = new stdClass; + $args->page = 0; + $args->module_srl = $module_srl; + $document_list = executeQueryArray('document.getDocumentList', $args, array('document_srl'))->data; + + // delete documents + $output = executeQuery('document.deleteModuleDocument', $args); + if(!$output->toBool()) + { + return $output; + } + + // remove from cache + foreach ($document_list as $document) + { + Rhymix\Framework\Cache::delete('document_item:'. getNumberingPath($document->document_srl) . $document->document_srl); + } + + return new BaseObject(); } - // call a trigger (after) - if($output->toBool()) { - $trigger_output = ModuleHandler::triggerCall('document.restoreTrash', 'after', $document_args); - if(!$trigger_output->toBool()) { - $oDB->rollback(); - return $trigger_output; - } - } - - // commit - $oDB->commit(); - return $output; - }*/ - + /** * Restore document from trash module, called by trash module * This method is passived diff --git a/modules/document/document.class.php b/modules/document/document.class.php index c1ab0ee49..03cb909de 100644 --- a/modules/document/document.class.php +++ b/modules/document/document.class.php @@ -131,7 +131,9 @@ class document extends ModuleObject // 2017.12.21 Add an index for nick_name if(!$oDB->isIndexExists('documents', 'idx_nick_name')) return true; - + + if(!$oModuleModel->getTrigger('file.deleteFile', 'document', 'controller', 'triggerAfterDeleteFile', 'after')) return true; + return false; } @@ -356,6 +358,11 @@ class document extends ModuleObject { $oDB->addIndex('documents', 'idx_nick_name', array('nick_name')); } + + if(!$oModuleModel->getTrigger('file.deleteFile', 'document', 'controller', 'triggerAfterDeleteFile', 'after')) + { + $oModuleController->insertTrigger('file.deleteFile', 'document', 'controller', 'triggerAfterDeleteFile', 'after'); + } } /** diff --git a/modules/document/document.controller.php b/modules/document/document.controller.php index bb9c07cbe..d8c7c05e9 100644 --- a/modules/document/document.controller.php +++ b/modules/document/document.controller.php @@ -1049,7 +1049,10 @@ class documentController extends document $trash_args->module_srl = $oDocument->get('module_srl'); $obj->module_srl = $oDocument->get('module_srl'); // Cannot throw data from the trash to the trash - if($trash_args->module_srl == 0) return false; + if($trash_args->module_srl == 0) + { + return new BaseObject(-1, 'Cannot throw data from the trash to the trash'); + } // Data setting $trash_args->document_srl = $obj->document_srl; $trash_args->description = $obj->description; @@ -2538,158 +2541,181 @@ class documentController extends document function procDocumentManageCheckedDocument() { @set_time_limit(0); - if(!Context::get('is_logged')) return $this->setError('msg_not_permitted'); $logged_info = Context::get('logged_info'); - - // Get request parameters. - $cart = Context::get('cart'); - if(!is_array($cart)) $cart = explode('|@|', $cart); - $cart = array_unique(array_map('intval', $cart)); - $type = Context::get('type'); - $target_module_srl = intval(Context::get('module_srl') ?: Context::get('target_module')); - $target_category_srl = Context::get('target_category'); - // send default message - misol 2015-07-23 - $send_default_message = Context::get('send_default_message'); - if($send_default_message === 'Y') - { - $message_content = ''; - $default_message_verbs = lang('default_message_verbs'); - if(isset($default_message_verbs[$type]) && is_string($default_message_verbs[$type])) - { - $message_content = sprintf(lang('default_message_format'), $logged_info->nick_name, $default_message_verbs[$type]); - } - } - else - { - $message_content = Context::get('message_content'); - if($message_content) $message_content = nl2br($message_content); - } - - // Check permissions on all documents. - $document_items = array(); - $document_srl_list = array(); - $module_srl_list = array(); - $oDocumentModel = getModel('document'); - foreach ($cart as $document_srl) - { - $oDocument = $oDocumentModel->getDocument($document_srl); - $document_items[] = $oDocument; - $document_srl_list[] = $document_srl; - $module_srl_list[] = $oDocument->get('module_srl'); - if (!$oDocument->isGranted()) - { - return $this->stop('msg_not_permitted'); - } - } + $obj = new stdClass; + $obj->type = Context::get('type'); + $obj->document_list = array(); + $obj->document_srl_list = array(); + $obj->target_module_srl = intval(Context::get('module_srl') ?: Context::get('target_module')); + $obj->target_category_srl = Context::get('target_category'); + $obj->manager_message = Context::get('message_content') ? nl2br(escape(strip_tags(Context::get('message_content')))) : ''; + $obj->send_message = $obj->manager_message || Context::get('send_default_message') == 'Y'; + $obj->return_message = ''; - // Check permissions on all modules. - $oModuleModel = getModel('module'); - if ($target_module_srl && !in_array($target_module_srl, $module_srl_list)) + // Check permission of target module + if($obj->target_module_srl) { - $module_srl_list[] = $target_module_srl; - } - foreach ($module_srl_list as $module_srl) - { - $module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl); + $module_info = getModel('module')->getModuleInfoByModuleSrl($obj->target_module_srl); if (!$module_info->module_srl) { return $this->setError('msg_invalid_request'); } - - $module_grant = $oModuleModel->getGrant($module_info, $logged_info); + $module_grant = getModel('module')->getGrant($module_info, $logged_info); if (!$module_grant->manager) { return $this->setError('msg_not_permitted'); } } - // Set a spam-filer not to be filtered to spams - $oSpamController = getController('spamfilter'); - $oSpamController->setAvoidLog(); - - if($type == 'move') + // Set Cart + $cart = Context::get('cart'); + if(!is_array($cart)) { - if(!$target_module_srl) return $this->setError('fail_to_move'); - - $oDocumentAdminController = getAdminController('document'); - $output = $oDocumentAdminController->moveDocumentModule($document_srl_list, $target_module_srl, $target_category_srl); - if(!$output->toBool()) return $this->setError('fail_to_move'); - - $msg_code = 'success_moved'; - + $cart = explode('|@|', $cart); } - else if($type == 'copy') + $obj->document_srl_list = array_unique(array_map('intval', $cart)); + + // Set document list + $obj->document_list = getModel('document')->getDocuments($obj->document_srl_list, false, false); + if(empty($obj->document_list)) { - if(!$target_module_srl) return $this->setError('fail_to_move'); - - $oDocumentAdminController = getAdminController('document'); - $output = $oDocumentAdminController->copyDocumentModule($document_srl_list, $target_module_srl, $target_category_srl); - if(!$output->toBool()) return $this->setError('fail_to_move'); - - $msg_code = 'success_copied'; + return $this->setError('msg_invalid_request'); } - else if($type =='delete') + + // Call a trigger (before) + $output = ModuleHandler::triggerCall('document.manage', 'before', $obj); + if(!$output->toBool()) { - $oDB = &DB::getInstance(); - $oDB->begin(); - foreach ($document_srl_list as $document_srl) + return $output; + } + + $oController = getAdminController('document'); + if($obj->type == 'move') + { + if(!$obj->target_module_srl) + { + return $this->setError('fail_to_move'); + } + + $output = $oController->moveDocumentModule($obj->document_srl_list, $obj->target_module_srl, $obj->target_category_srl); + if(!$output->toBool()) + { + return $output; + } + + $obj->return_message = 'success_moved'; + } + else if($obj->type == 'copy') + { + if(!$obj->target_module_srl) + { + return $this->setError('fail_to_move'); + } + + $output = $oController->copyDocumentModule($obj->document_srl_list, $obj->target_module_srl, $obj->target_category_srl); + if(!$output->toBool()) + { + return $output; + } + + $obj->return_message = 'success_copied'; + } + else if($obj->type == 'delete') + { + foreach ($obj->document_list as $document_srl => $oDocument) { $output = $this->deleteDocument($document_srl, true); - if(!$output->toBool()) return $this->setError('fail_to_delete'); + if(!$output->toBool()) + { + unset($obj->document_list[$document_srl]); + $obj->return_message = $output->getMessage(); + } } - $oDB->commit(); - $msg_code = 'success_deleted'; + + $obj->return_message = $obj->return_message ?: 'success_deleted'; } - else if($type == 'trash') + else if($obj->type == 'trash') { - $args = new stdClass(); - $args->description = $message_content; - - $oDB = &DB::getInstance(); - $oDB->begin(); - foreach ($document_srl_list as $document_srl) + $args = new stdClass; + $args->description = $obj->manager_message; + + foreach ($obj->document_list as $document_srl => $oDocument) { $args->document_srl = $document_srl; $output = $this->moveDocumentToTrash($args); - if(!$output || !$output->toBool()) return $this->setError('fail_to_trash'); + if(!$output->toBool()) + { + unset($obj->document_list[$document_srl]); + $obj->return_message = $output->getMessage(); + } } - $oDB->commit(); - $msg_code = 'success_trashed'; + + $obj->return_message = $obj->return_message ?: 'success_trashed'; } - else if($type == 'cancelDeclare') + else if($obj->type == 'cancelDeclare') { - $args = new stdClass(); - $args->document_srl = $document_srl_list; + $args = new stdClass; + $args->document_srl = $obj->document_srl_list; $output = executeQuery('document.deleteDeclaredDocuments', $args); - $msg_code = 'success_declare_canceled'; - } - - // Send a message - if($message_content) - { - $oCommunicationController = getController('communication'); - $title = cut_str($message_content,10,'...'); - $sender_member_srl = $logged_info->member_srl; - - foreach($document_items as $oDocument) + if(!$output->toBool()) { - if(!$oDocument->get('member_srl') || $oDocument->get('member_srl')==$sender_member_srl) continue; - - if($type=='move') $purl = sprintf("%s
", $oDocument->getPermanentUrl(), $oDocument->getPermanentUrl()); - else $purl = ""; - $content = sprintf("

%s


%s
%s
%s",$message_content, $purl, $oDocument->getTitleText(), $oDocument->getContent(false, false, false)); - - $oCommunicationController->sendMessage($sender_member_srl, $oDocument->get('member_srl'), $title, $content, false); + return $output; + } + + $obj->return_message = 'success_declare_canceled'; + } + else + { + return $this->setError('msg_invalid_request'); + } + + // Call a trigger (after) + ModuleHandler::triggerCall('document.manage', 'after', $obj); + + // Send a message + $actions = lang('default_message_verbs'); + if(isset($actions[$obj->type]) && $obj->send_message) + { + // Set message + $title = sprintf(lang('default_message_format'), $actions[$obj->type]); + $content = <<< Content +
{$title}
+

{$obj->manager_message}

+
+ +Content; + $document_item = '
  • %2$s
  • '; + + // Set recipient + $recipients = array(); + foreach ($obj->document_list as $document_srl => $oDocument) + { + if(!($member_srl = abs($oDocument->get('member_srl'))) || $logged_info->member_srl == $member_srl) + { + continue; + } + + if(!isset($recipients[$member_srl])) + { + $recipients[$member_srl] = array(); + } + + $recipients[$member_srl][] = sprintf($document_item, $oDocument->getPermanentUrl(), $oDocument->getTitleText()); + } + + // Send + $oCommunicationController = getController('communication'); + foreach ($recipients as $member_srl => $items) + { + $oCommunicationController->sendMessage($member_srl, $member_srl, $title, sprintf($content, implode('', $items)), false); } } - + $_SESSION['document_management'] = array(); - - $this->setMessage($msg_code); - - $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList'); - $this->setRedirectUrl($returnUrl); + + $this->setMessage($obj->return_message); + $this->setRedirectUrl(Context::get('success_return_url') ?: getNotEncodedUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList')); } /** @@ -2869,26 +2895,47 @@ class documentController extends document } } } - - public function updateUploaedCount($documentSrlList) + + public function updateUploaedCount($document_srl_list) { - $oDocumentModel = getModel('document'); - $oFileModel = getModel('file'); - - if(is_array($documentSrlList)) + if(!is_array($document_srl_list)) { - $documentSrlList = array_unique($documentSrlList); - foreach($documentSrlList AS $key => $documentSrl) + $document_srl_list = array($document_srl_list); + } + + if(empty($document_srl_list)) + { + return; + } + + $oFileModel = getModel('file'); + $document_srl_list = array_unique($document_srl_list); + + foreach($document_srl_list as $document_srl) + { + if(!$document_srl = (int) $document_srl) { - $fileCount = $oFileModel->getFilesCount($documentSrl); - $args = new stdClass(); - $args->document_srl = $documentSrl; - $args->uploaded_count = $fileCount; - executeQuery('document.updateUploadedCount', $args); + continue; } + + $args = new stdClass; + $args->document_srl = $document_srl; + $args->uploaded_count = $oFileModel->getFilesCount($document_srl); + executeQuery('document.updateUploadedCount', $args); } } - + + function triggerAfterDeleteFile($file) + { + $oDocument = getModel('document')->getDocument($file->upload_target_srl, false, false); + if(!$oDocument->isExists()) + { + return; + } + + $this->updateUploaedCount($file->upload_target_srl); + } + /** * Copy extra keys when module copied * @param object $obj diff --git a/modules/document/document.model.php b/modules/document/document.model.php index b55b2594c..31bf18a9d 100644 --- a/modules/document/document.model.php +++ b/modules/document/document.model.php @@ -29,25 +29,19 @@ class documentModel extends document { return $_SESSION['granted_document'][$document_srl]; } - + /** * Return document extra information from database - * @param array $documentSrls + * @param array $document_srls * @return object */ - function getDocumentExtraVarsFromDB($documentSrls) + function getDocumentExtraVarsFromDB($document_srls) { - if(!is_array($documentSrls) || count($documentSrls) == 0) - { - return $this->setError('msg_invalid_request'); - } - - $args = new stdClass(); - $args->document_srl = $documentSrls; - $output = executeQueryArray('document.getDocumentExtraVars', $args); - return $output; + $args = new stdClass; + $args->document_srl = $document_srls; + return executeQueryArray('document.getDocumentExtraVars', $args); } - + /** * Extra variables for each article will not be processed bulk select and apply the macro city * @return void @@ -167,57 +161,42 @@ class documentModel extends document * @param array $columnList * @return array value type is documentItem */ - function getDocuments($document_srls, $is_admin = false, $load_extra_vars=true, $columnList = array()) + function getDocuments($document_srls, $is_admin = false, $load_extra_vars = true, $columnList = array()) { - if(is_array($document_srls)) - { - $list_count = count($document_srls); - $document_srls = implode(',',$document_srls); - } - else - { - $list_count = 1; - } $args = new stdClass(); $args->document_srls = $document_srls; - $args->list_count = $list_count; + $args->list_count = is_array($document_srls) ? count($document_srls) : 1; $args->order_type = 'asc'; - - $output = executeQuery('document.getDocuments', $args, $columnList); - $document_list = $output->data; - if(!$document_list) return; - if(!is_array($document_list)) $document_list = array($document_list); - - $document_count = count($document_list); - foreach($document_list as $key => $attribute) + $output = executeQueryArray('document.getDocuments', $args, $columnList); + + $documents = array(); + foreach($output->data as $key => $attribute) { - $document_srl = $attribute->document_srl; - if(!$document_srl) continue; - + if(!$document_srl = $attribute->document_srl) + { + continue; + } + if(!$GLOBALS['XE_DOCUMENT_LIST'][$document_srl]) { - $oDocument = null; $oDocument = new documentItem(); $oDocument->setAttribute($attribute, false); - if($is_admin) $oDocument->setGrant(); + if($is_admin) + { + $oDocument->setGrant(); + } $GLOBALS['XE_DOCUMENT_LIST'][$document_srl] = $oDocument; } - - $result[$attribute->document_srl] = $GLOBALS['XE_DOCUMENT_LIST'][$document_srl]; + + $documents[$document_srl] = $GLOBALS['XE_DOCUMENT_LIST'][$document_srl]; } - - if($load_extra_vars) $this->setToAllDocumentExtraVars(); - - $output = null; - if(count($result)) + + if($load_extra_vars) { - foreach($result as $document_srl => $val) - { - $output[$document_srl] = $GLOBALS['XE_DOCUMENT_LIST'][$document_srl]; - } + $this->setToAllDocumentExtraVars(); } - - return $output; + + return $documents; } /** diff --git a/modules/document/lang/en.php b/modules/document/lang/en.php index 6b1058408..bbeeefd6f 100644 --- a/modules/document/lang/en.php +++ b/modules/document/lang/en.php @@ -85,11 +85,11 @@ $lang->select_category = 'Select a category.'; $lang->category_description = 'Category Description'; $lang->no_title_document = 'No title in this document.'; $lang->send_default_message = 'Send the default message'; -$lang->default_message_format = '%1$s %2$s the document below.'; -$lang->default_message_verbs['move'] = 'moves'; -$lang->default_message_verbs['copy'] = 'copies'; -$lang->default_message_verbs['delete'] = 'deletes'; -$lang->default_message_verbs['trash'] = 'deletes'; +$lang->default_message_format = '%1$s the document by manager.'; +$lang->default_message_verbs['move'] = 'moved'; +$lang->default_message_verbs['copy'] = 'copied'; +$lang->default_message_verbs['delete'] = 'deleted'; +$lang->default_message_verbs['trash'] = 'deleted'; $lang->improper_document_declare = 'Report an improper document'; $lang->original_date = 'Original date'; $lang->declared_count = 'Report count'; diff --git a/modules/document/lang/ja.php b/modules/document/lang/ja.php index 4b424d699..90282f93a 100644 --- a/modules/document/lang/ja.php +++ b/modules/document/lang/ja.php @@ -81,9 +81,3 @@ $lang->select_module_id = 'モジュールIDを選択してください。'; $lang->select_category = 'カテゴリを選択してください。'; $lang->category_description = 'カテゴリー説明'; $lang->no_title_document = 'タイトルがないドキュメントです。'; -$lang->send_default_message = 'Send the default message'; -$lang->default_message_format = '%1$s %2$s the document below.'; -$lang->default_message_verbs['move'] = 'moves'; -$lang->default_message_verbs['copy'] = 'copies'; -$lang->default_message_verbs['delete'] = 'deletes'; -$lang->default_message_verbs['trash'] = 'deletes'; diff --git a/modules/document/lang/ko.php b/modules/document/lang/ko.php index 0f49447a2..f67248482 100644 --- a/modules/document/lang/ko.php +++ b/modules/document/lang/ko.php @@ -84,10 +84,10 @@ $lang->select_category = '분류를 선택하세요.'; $lang->category_description = '카테고리 설명'; $lang->no_title_document = '제목이 없는 문서입니다.'; $lang->msg_admin_document_no_move_to_trash = '최고관리자의 게시물을 휴지통으로 이동시킬 권한이 없습니다.'; -$lang->send_default_message = '기본 쪽지 내용으로 보내기'; -$lang->default_message_format = '%1$s님께서 다음 게시물을 %2$s 합니다.'; -$lang->default_message_verbs['move'] = '이동'; -$lang->default_message_verbs['copy'] = '복사'; +$lang->send_default_message = '기본 내용으로만 쪽지 보내기'; +$lang->default_message_format = '관리자에 의해 게시물이 %1$s되었습니다.'; +$lang->default_message_verbs['move'] = '다른 게시판으로 이동'; +$lang->default_message_verbs['copy'] = '다른 게시판에 복사'; $lang->default_message_verbs['delete'] = '삭제'; $lang->default_message_verbs['trash'] = '삭제'; $lang->improper_document_declare = '불량 게시글 신고'; diff --git a/modules/document/lang/ru.php b/modules/document/lang/ru.php index 73c093264..351f199bb 100644 --- a/modules/document/lang/ru.php +++ b/modules/document/lang/ru.php @@ -59,9 +59,3 @@ $lang->search_target_trash_list['trash_member_srl'] = 'Номер удалите $lang->search_target_trash_list['trash_user_name'] = 'Имя удалителя'; $lang->search_target_trash_list['trash_date'] = 'Дата удаления'; $lang->search_target_trash_list['trash_ipaddress'] = 'IP адрес удалителя'; -$lang->send_default_message = 'Send the default message'; -$lang->default_message_format = '%1$s %2$s the document below.'; -$lang->default_message_verbs['move'] = 'moves'; -$lang->default_message_verbs['copy'] = 'copies'; -$lang->default_message_verbs['delete'] = 'deletes'; -$lang->default_message_verbs['trash'] = 'deletes'; diff --git a/modules/document/lang/tr.php b/modules/document/lang/tr.php index c0ff97f84..953e47c73 100644 --- a/modules/document/lang/tr.php +++ b/modules/document/lang/tr.php @@ -66,9 +66,3 @@ $lang->search_target_trash_list['trash_date'] = 'Silinme Tarihi'; $lang->search_target_trash_list['trash_ipaddress'] = 'Silici IP adresi'; $lang->success_trashed = 'Başarıyla silindi'; $lang->msg_not_selected_document = 'Hiçbir makale seçilmedi.'; -$lang->send_default_message = 'Send the default message'; -$lang->default_message_format = '%1$s %2$s the document below.'; -$lang->default_message_verbs['move'] = 'moves'; -$lang->default_message_verbs['copy'] = 'copies'; -$lang->default_message_verbs['delete'] = 'deletes'; -$lang->default_message_verbs['trash'] = 'deletes'; diff --git a/modules/document/lang/vi.php b/modules/document/lang/vi.php index dd3ca37a6..42c8743da 100644 --- a/modules/document/lang/vi.php +++ b/modules/document/lang/vi.php @@ -63,9 +63,3 @@ $lang->search_target_trash_list['trash_user_name'] = 'Tên người xóa'; $lang->search_target_trash_list['trash_date'] = 'Ngày xóa'; $lang->search_target_trash_list['trash_ipaddress'] = 'IP Người xóa'; $lang->success_trashed = 'Đã chuyển tới thùng rác thành công.'; -$lang->send_default_message = 'Send the default message'; -$lang->default_message_format = '%1$s %2$s the document below.'; -$lang->default_message_verbs['move'] = 'moves'; -$lang->default_message_verbs['copy'] = 'copies'; -$lang->default_message_verbs['delete'] = 'deletes'; -$lang->default_message_verbs['trash'] = 'deletes'; diff --git a/modules/document/lang/zh-CN.php b/modules/document/lang/zh-CN.php index e966e3ec3..14b31b91d 100644 --- a/modules/document/lang/zh-CN.php +++ b/modules/document/lang/zh-CN.php @@ -65,9 +65,3 @@ $lang->search_target_trash_list['trash_user_name'] = '操作人用户名'; $lang->search_target_trash_list['trash_date'] = '删除日期'; $lang->search_target_trash_list['trash_ipaddress'] = '操作人IP地址'; $lang->success_trashed = '已成功移除到回收箱。'; -$lang->send_default_message = 'Send the default message'; -$lang->default_message_format = '%1$s %2$s the document below.'; -$lang->default_message_verbs['move'] = 'moves'; -$lang->default_message_verbs['copy'] = 'copies'; -$lang->default_message_verbs['delete'] = 'deletes'; -$lang->default_message_verbs['trash'] = 'deletes'; diff --git a/modules/document/lang/zh-TW.php b/modules/document/lang/zh-TW.php index b9cfcb2ec..0cd82a80a 100644 --- a/modules/document/lang/zh-TW.php +++ b/modules/document/lang/zh-TW.php @@ -80,9 +80,3 @@ $lang->select_module_id = '選擇模組 ID.'; $lang->select_category = '選擇分類'; $lang->category_description = '分類說明'; $lang->no_title_document = '此文章無標題。'; -$lang->send_default_message = 'Send the default message'; -$lang->default_message_format = '%1$s %2$s the document below.'; -$lang->default_message_verbs['move'] = 'moves'; -$lang->default_message_verbs['copy'] = 'copies'; -$lang->default_message_verbs['delete'] = 'deletes'; -$lang->default_message_verbs['trash'] = 'deletes'; diff --git a/modules/document/queries/updateDocumentExtraVarsModule.xml b/modules/document/queries/updateDocumentExtraVarsModule.xml new file mode 100644 index 000000000..4e9ebf975 --- /dev/null +++ b/modules/document/queries/updateDocumentExtraVarsModule.xml @@ -0,0 +1,11 @@ + + +
    + + + + + + + + diff --git a/modules/document/queries/updateDocumentsModule.xml b/modules/document/queries/updateDocumentsModule.xml new file mode 100644 index 000000000..6b2876c5a --- /dev/null +++ b/modules/document/queries/updateDocumentsModule.xml @@ -0,0 +1,12 @@ + + +
    + + + + + + + + + diff --git a/modules/file/file.admin.controller.php b/modules/file/file.admin.controller.php index 329042ef1..e4b777f19 100644 --- a/modules/file/file.admin.controller.php +++ b/modules/file/file.admin.controller.php @@ -15,42 +15,12 @@ class fileAdminController extends file } /** - * Delete the attachment of a particular module - * - * @param int $module_srl Sequence of module to delete files + * @deprecated move to fileController * @return Object */ function deleteModuleFiles($module_srl) { - // Get a full list of attachments - $args = new stdClass(); - $args->module_srl = $module_srl; - $columnList = array('file_srl', 'uploaded_filename'); - $output = executeQueryArray('file.getModuleFiles',$args, $columnList); - if(!$output) return $output; - $files = $output->data; - // Remove from the DB - $args->module_srl = $module_srl; - $output = executeQuery('file.deleteModuleFiles', $args); - if(!$output->toBool()) return $output; - // Remove the file - FileHandler::removeDir( sprintf("./files/attach/images/%s/", $module_srl) ) ; - FileHandler::removeDir( sprintf("./files/attach/binaries/%s/", $module_srl) ); - // Remove the file list obtained from the DB - $path = array(); - $cnt = count($files); - for($i=0;$i<$cnt;$i++) - { - $uploaded_filename = $files[$i]->uploaded_filename; - FileHandler::removeFile($uploaded_filename); - - $path_info = pathinfo($uploaded_filename); - if(!in_array($path_info['dirname'], $path)) $path[] = $path_info['dirname']; - } - // Remove a file directory of the document - for($i=0;$ideleteModuleFiles($module_srl); } /** diff --git a/modules/file/file.class.php b/modules/file/file.class.php index 2bc3a535a..67032e4ce 100644 --- a/modules/file/file.class.php +++ b/modules/file/file.class.php @@ -77,7 +77,20 @@ class file extends ModuleObject if(!$oModuleModel->getTrigger('module.procModuleAdminCopyModule', 'file', 'controller', 'triggerCopyModule', 'after')) return true; if(!$oDB->isColumnExists('files', 'cover_image')) return true; - + + if(!$oModuleModel->getTrigger('document.moveDocumentModule', 'file', 'controller', 'triggerMoveDocument', 'after')) + { + return true; + } + if(!$oModuleModel->getTrigger('document.copyDocumentModule', 'file', 'controller', 'triggerAddCopyDocument', 'add')) + { + return true; + } + if(!$oModuleModel->getTrigger('comment.copyCommentByDocument', 'file', 'controller', 'triggerAddCopyCommentByDocument', 'add')) + { + return true; + } + return false; } @@ -140,6 +153,19 @@ class file extends ModuleObject } if(!$oDB->isColumnExists('files', 'cover_image')) $oDB->addColumn('files', 'cover_image', 'char', '1', 'N'); + + if(!$oModuleModel->getTrigger('document.moveDocumentModule', 'file', 'controller', 'triggerMoveDocument', 'after')) + { + $oModuleController->insertTrigger('document.moveDocumentModule', 'file', 'controller', 'triggerMoveDocument', 'after'); + } + if(!$oModuleModel->getTrigger('document.copyDocumentModule', 'file', 'controller', 'triggerAddCopyDocument', 'add')) + { + $oModuleController->insertTrigger('document.copyDocumentModule', 'file', 'controller', 'triggerAddCopyDocument', 'add'); + } + if(!$oModuleModel->getTrigger('comment.copyCommentByDocument', 'file', 'controller', 'triggerAddCopyCommentByDocument', 'add')) + { + $oModuleController->insertTrigger('comment.copyCommentByDocument', 'file', 'controller', 'triggerAddCopyCommentByDocument', 'add'); + } } /** diff --git a/modules/file/file.controller.php b/modules/file/file.controller.php index 994600928..982acb5d9 100644 --- a/modules/file/file.controller.php +++ b/modules/file/file.controller.php @@ -694,9 +694,8 @@ class fileController extends file { $module_srl = $obj->module_srl; if(!$module_srl) return; - - $oFileController = getAdminController('file'); - return $oFileController->deleteModuleFiles($module_srl); + + return $this->deleteModuleFiles($module_srl); } /** @@ -950,70 +949,58 @@ class fileController extends file * - ipaddress * * - * @param int $file_srl Sequence of file to delete + * @param array|int $file_list or $file_srl * @return Object */ - function deleteFile($file_srl) + function deleteFile($file_list) { - if(!$file_srl) return; - - $srls = (is_array($file_srl)) ? $file_srl : explode(',', $file_srl); - if(!count($srls)) return; - - $oDocumentController = getController('document'); - $documentSrlList = array(); - - foreach($srls as $srl) + if(!is_array($file_list)) { - $srl = (int)$srl; - if(!$srl) + $file_list = explode(',', $file_list); + } + + if(empty($file_list)) + { + return new BaseObject(); + } + + foreach($file_list as $file) + { + if(!is_object($file)) + { + if(!$file_srl = (int) $file) + { + continue; + } + $file = getModel('file')->getFile($file_srl); + } + + if(empty($file->file_srl)) { continue; } - - $args = new stdClass(); - $args->file_srl = $srl; - $output = executeQuery('file.getFile', $args); - - if(!$output->toBool() || !$output->data) - { - continue; - } - - $file_info = $output->data; - - if($file_info->upload_target_srl) - { - $documentSrlList[] = $file_info->upload_target_srl; - } - - $source_filename = $output->data->source_filename; - $uploaded_filename = $output->data->uploaded_filename; - + // Call a trigger (before) - $trigger_obj = $output->data; - $output = ModuleHandler::triggerCall('file.deleteFile', 'before', $trigger_obj); + $output = ModuleHandler::triggerCall('file.deleteFile', 'before', $file); if(!$output->toBool()) return $output; - + // Remove from the DB - $output = executeQuery('file.deleteFile', $args); + $output = executeQuery('file.deleteFile', $file); if(!$output->toBool()) return $output; - + // If successfully deleted, remove the file - Rhymix\Framework\Storage::delete(FileHandler::getRealPath($uploaded_filename)); - + Rhymix\Framework\Storage::delete(FileHandler::getRealPath($file->uploaded_filename)); + // Call a trigger (after) - ModuleHandler::triggerCall('file.deleteFile', 'after', $trigger_obj); + ModuleHandler::triggerCall('file.deleteFile', 'after', $file); // Remove empty directories - Rhymix\Framework\Storage::deleteEmptyDirectory(dirname(FileHandler::getRealPath($uploaded_filename)), true); + Rhymix\Framework\Storage::deleteEmptyDirectory(dirname(FileHandler::getRealPath($file->uploaded_filename)), true); } - - $oDocumentController->updateUploaedCount($documentSrlList); - - return $output; + + return new BaseObject(); } - + /** * Delete all attachments of a particular document * @@ -1024,26 +1011,39 @@ class fileController extends file { // Get a list of attachements $oFileModel = getModel('file'); - $columnList = array('file_srl', 'uploaded_filename', 'module_srl'); - $file_list = $oFileModel->getFiles($upload_target_srl, $columnList); + $file_list = $oFileModel->getFiles($upload_target_srl); + // Success returned if no attachement exists - if(!is_array($file_list)||!count($file_list)) return new BaseObject(); - - // Delete the file - foreach ($file_list as $file) + if(empty($file_list)) { - $this->deleteFile($file->file_srl); + return new BaseObject(); } - - // Remove from the DB - $args = new stdClass(); - $args->upload_target_srl = $upload_target_srl; - $output = executeQuery('file.deleteFiles', $args); - if(!$output->toBool()) return $output; - - return $output; + + // Delete the file + return $this->deleteFile($file_list); } - + + /** + * Delete the attachment of a particular module + * + * @param int $module_srl Sequence of module to delete files + * @return Object + */ + function deleteModuleFiles($module_srl) + { + // Get a full list of attachments + $args = new stdClass; + $args->module_srl = $module_srl; + $output = executeQueryArray('file.getModuleFiles', $args); + if(!$output->toBool() || empty($file_list = $output->data)) + { + return $output; + } + + // Delete the file + return $this->deleteFile($file_list); + } + /** * Move an attachement to the other document * @@ -1095,7 +1095,47 @@ class fileController extends file executeQuery('file.updateFile', $args); } } - + + function copyFile($source_file, $module_srl, $upload_target_srl, &$content = null) + { + $file_info = array(); + $file_info['name'] = $source_file->source_filename; + $file_info['tmp_name'] = $source_file->uploaded_filename; + $copied_file = $this->insertFile($file_info, $module_srl, $upload_target_srl, 0, true); + + if($content) + { + // if image/video files + if($source_file->direct_download == 'Y') + { + $source_filename = substr($source_file->uploaded_filename, 2); + $copied_filename = substr($copied_file->get('uploaded_filename'), 2); + $content = str_replace($source_filename, $copied_filename, $content); + } + // if binary file + else + { + $content = str_replace('file_srl=' . $source_file->file_srl, 'file_srl=' . $copied_file->get('file_srl'), $content); + $content = str_replace('sid=' . $source_file->sid, 'sid=' . $copied_file->get('sid'), $content); + } + } + + return $copied_file; + } + + function copyFiles($source_file_list, $module_srl, $upload_target_srl, &$content = null) + { + if(!is_array($source_file_list)) + { + $source_file_list = getModel('file')->getFiles($source_file_list, array(), 'file_srl', true); + } + + foreach($source_file_list as $source_file) + { + $this->copyFile($source_file, $module_srl, $upload_target_srl, $content); + } + } + public function procFileSetCoverImage() { $vars = Context::getRequestVars(); @@ -1123,8 +1163,8 @@ class fileController extends file $output = executeQuery('file.updateClearCoverImage', $args); if(!$output->toBool()) { - $oDB->rollback(); - return $output; + $oDB->rollback(); + return $output; } if($file_info->cover_image != 'Y') @@ -1161,7 +1201,34 @@ class fileController extends file { return; } - + + function triggerMoveDocument($obj) + { + $obj->upload_target_srls = $obj->document_srls; + executeQuery('file.updateFileModule', $obj); + executeQuery('file.updateFileModuleComment', $obj); + } + + function triggerAddCopyDocument(&$obj) + { + if(!$obj->source->uploaded_count) + { + return; + } + + $this->copyFiles($obj->source->document_srl, $obj->copied->module_srl, $obj->copied->document_srl, $obj->copied->content); + } + + function triggerAddCopyCommentByDocument(&$obj) + { + if(!$obj->source->uploaded_count) + { + return; + } + + $this->copyFiles($obj->source->comment_srl, $obj->copied->module_srl, $obj->copied->comment_srl, $obj->copied->content); + } + function triggerCopyModule(&$obj) { $oModuleModel = getModel('module'); diff --git a/modules/file/queries/updateFileModule.xml b/modules/file/queries/updateFileModule.xml index e33ff3d9f..365bbdaec 100644 --- a/modules/file/queries/updateFileModule.xml +++ b/modules/file/queries/updateFileModule.xml @@ -6,6 +6,6 @@ - + diff --git a/modules/file/queries/updateFileModuleComment.xml b/modules/file/queries/updateFileModuleComment.xml new file mode 100644 index 000000000..f053a1d4b --- /dev/null +++ b/modules/file/queries/updateFileModuleComment.xml @@ -0,0 +1,13 @@ + + +
    +
    + + + + + + + + + diff --git a/modules/spamfilter/spamfilter.class.php b/modules/spamfilter/spamfilter.class.php index c9e512de5..d55425133 100644 --- a/modules/spamfilter/spamfilter.class.php +++ b/modules/spamfilter/spamfilter.class.php @@ -49,7 +49,12 @@ class spamfilter extends ModuleObject if(!$oDB->isColumnExists('spamfilter_denied_word', 'latest_hit')) return true; if(!$oDB->isColumnExists('spamfilter_denied_ip', 'description')) return true; - + + if(!$oModuleModel->getTrigger('document.manage', 'spamfilter', 'controller', 'triggerManageDocument', 'before')) + { + return true; + } + return false; } @@ -102,6 +107,11 @@ class spamfilter extends ModuleObject { $oDB->addColumn('spamfilter_denied_ip','description','varchar', 250); } + + if(!$oModuleModel->getTrigger('document.manage', 'spamfilter', 'controller', 'triggerManageDocument', 'before')) + { + $oModuleController->insertTrigger('document.manage', 'spamfilter', 'controller', 'triggerManageDocument', 'before'); + } } /** diff --git a/modules/spamfilter/spamfilter.controller.php b/modules/spamfilter/spamfilter.controller.php index d4319e3a7..b6d7225a6 100644 --- a/modules/spamfilter/spamfilter.controller.php +++ b/modules/spamfilter/spamfilter.controller.php @@ -224,7 +224,15 @@ class spamfilterController extends spamfilter // Save a log $this->insertLog(); } - + + /** + * @brief while document manager is running, stop filter + */ + function triggerManageDocument(&$obj) + { + $this->setAvoidLog(); + } + /** * @brief Log registration * Register the newly accessed IP address in the log. In case the log interval is withing a certain time, diff --git a/modules/tag/tag.class.php b/modules/tag/tag.class.php index a79b95e38..987049bb6 100644 --- a/modules/tag/tag.class.php +++ b/modules/tag/tag.class.php @@ -43,6 +43,7 @@ class tag extends ModuleObject if(!$oModuleModel->getTrigger('module.deleteModule', 'tag', 'controller', 'triggerDeleteModuleTags', 'after')) return true; // tag in the index column of the table tag if(!$oDB->isIndexExists("tags","idx_tag")) return true; + if(!$oModuleModel->getTrigger('document.moveDocumentModule', 'tag', 'controller', 'triggerMoveDocument', 'after')) return true; return false; } @@ -76,6 +77,11 @@ class tag extends ModuleObject // tag in the index column of the table tag if(!$oDB->isIndexExists("tags","idx_tag")) $oDB->addIndex("tags","idx_tag", array("document_srl","tag")); + + if(!$oModuleModel->getTrigger('document.moveDocumentModule', 'tag', 'controller', 'triggerMoveDocument', 'after')) + { + $oModuleController->insertTrigger('document.moveDocumentModule', 'tag', 'controller', 'triggerMoveDocument', 'after'); + } } /** diff --git a/modules/tag/tag.controller.php b/modules/tag/tag.controller.php index ff030d731..ce4b35603 100644 --- a/modules/tag/tag.controller.php +++ b/modules/tag/tag.controller.php @@ -94,6 +94,11 @@ class tagController extends tag $oTagController = getAdminController('tag'); return $oTagController->deleteModuleTags($module_srl); } + + function triggerMoveDocument($obj) + { + executeQuery('tag.updateTagModule', $obj); + } } /* End of file tag.controller.php */ /* Location: ./modules/tag/tag.controller.php */