mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-06 18:21:39 +09:00
Implement creating, renaming, and deleting scrap folders
This commit is contained in:
parent
cf0a5d019c
commit
4a5385a635
10 changed files with 226 additions and 10 deletions
|
|
@ -47,6 +47,9 @@
|
||||||
<action name="procMemberScrapDocument" type="controller" permission="member" />
|
<action name="procMemberScrapDocument" type="controller" permission="member" />
|
||||||
<action name="procMemberDeleteScrap" type="controller" permission="member" />
|
<action name="procMemberDeleteScrap" type="controller" permission="member" />
|
||||||
<action name="procMemberMoveScrapFolder" type="controller" permission="member" />
|
<action name="procMemberMoveScrapFolder" type="controller" permission="member" />
|
||||||
|
<action name="procMemberInsertScrapFolder" type="controller" permission="member" />
|
||||||
|
<action name="procMemberRenameScrapFolder" type="controller" permission="member" />
|
||||||
|
<action name="procMemberDeleteScrapFolder" type="controller" permission="member" />
|
||||||
<action name="procMemberSaveDocument" type="controller" permission="member" />
|
<action name="procMemberSaveDocument" type="controller" permission="member" />
|
||||||
<action name="procMemberDeleteSavedDocument" type="controller" permission="member" />
|
<action name="procMemberDeleteSavedDocument" type="controller" permission="member" />
|
||||||
<action name="procMemberDeleteAutologin" type="controller" permission="member" />
|
<action name="procMemberDeleteAutologin" type="controller" permission="member" />
|
||||||
|
|
|
||||||
|
|
@ -121,6 +121,8 @@ $lang->cmd_view_saved_document = 'Saved Articles';
|
||||||
$lang->cmd_send_email = 'Send Mail';
|
$lang->cmd_send_email = 'Send Mail';
|
||||||
$lang->msg_email_not_exists = 'You have entered an invalid email address.';
|
$lang->msg_email_not_exists = 'You have entered an invalid email address.';
|
||||||
$lang->msg_alreay_scrapped = 'This article is already scrapped.';
|
$lang->msg_alreay_scrapped = 'This article is already scrapped.';
|
||||||
|
$lang->msg_folder_alreay_exists = 'A folder with the same name already exists.';
|
||||||
|
$lang->msg_folder_not_empty = 'The folder is not empty.';
|
||||||
$lang->msg_cart_is_null = 'Please select the target.';
|
$lang->msg_cart_is_null = 'Please select the target.';
|
||||||
$lang->msg_checked_file_is_deleted = '%d attached file(s) is(are) deleted.';
|
$lang->msg_checked_file_is_deleted = '%d attached file(s) is(are) deleted.';
|
||||||
$lang->msg_find_account_title = 'Account Info';
|
$lang->msg_find_account_title = 'Account Info';
|
||||||
|
|
@ -309,3 +311,6 @@ $lang->msg_spammer_complete = 'Completed.';
|
||||||
$lang->cmd_login_browser_info = 'Browser Information';
|
$lang->cmd_login_browser_info = 'Browser Information';
|
||||||
$lang->cmd_initial_login = 'First Login';
|
$lang->cmd_initial_login = 'First Login';
|
||||||
$lang->cmd_recent_visit = 'Recent Visit';
|
$lang->cmd_recent_visit = 'Recent Visit';
|
||||||
|
$lang->scrap_folder_create = 'New Folder';
|
||||||
|
$lang->scrap_folder_rename = 'Rename';
|
||||||
|
$lang->scrap_folder_delete = 'Delete';
|
||||||
|
|
|
||||||
|
|
@ -125,6 +125,8 @@ $lang->cmd_modify_nickname_log = '닉네임 변경 기록';
|
||||||
$lang->cmd_member_profile_view = '회원 프로필사진 보이기';
|
$lang->cmd_member_profile_view = '회원 프로필사진 보이기';
|
||||||
$lang->msg_email_not_exists = '이메일 주소가 존재하지 않습니다.';
|
$lang->msg_email_not_exists = '이메일 주소가 존재하지 않습니다.';
|
||||||
$lang->msg_alreay_scrapped = '이미 스크랩된 게시물입니다.';
|
$lang->msg_alreay_scrapped = '이미 스크랩된 게시물입니다.';
|
||||||
|
$lang->msg_folder_alreay_exists = '이미 존재하는 폴더 이름입니다.';
|
||||||
|
$lang->msg_folder_not_empty = '폴더가 비어 있지 않습니다.';
|
||||||
$lang->msg_cart_is_null = '대상을 선택해주세요.';
|
$lang->msg_cart_is_null = '대상을 선택해주세요.';
|
||||||
$lang->msg_checked_file_is_deleted = '%d개의 첨부 파일이 삭제되었습니다.';
|
$lang->msg_checked_file_is_deleted = '%d개의 첨부 파일이 삭제되었습니다.';
|
||||||
$lang->msg_find_account_title = '아이디/비밀번호 정보입니다.';
|
$lang->msg_find_account_title = '아이디/비밀번호 정보입니다.';
|
||||||
|
|
@ -329,3 +331,6 @@ $lang->nick_name_after_changing = '닉네임 변경 후';
|
||||||
$lang->cmd_login_browser_info = '브라우저 정보';
|
$lang->cmd_login_browser_info = '브라우저 정보';
|
||||||
$lang->cmd_initial_login = '최초 로그인';
|
$lang->cmd_initial_login = '최초 로그인';
|
||||||
$lang->cmd_recent_visit = '최근 방문';
|
$lang->cmd_recent_visit = '최근 방문';
|
||||||
|
$lang->scrap_folder_create = '폴더 추가';
|
||||||
|
$lang->scrap_folder_rename = '이름 변경';
|
||||||
|
$lang->scrap_folder_delete = '삭제';
|
||||||
|
|
|
||||||
|
|
@ -222,11 +222,12 @@ class memberController extends member
|
||||||
return new Object(-1,'msg_invalid_request');
|
return new Object(-1,'msg_invalid_request');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check folder
|
// Check that the target folder exists and belongs to member
|
||||||
$args = new stdClass;
|
$args = new stdClass;
|
||||||
$args->member_srl = $logged_info->member_srl;
|
$args->member_srl = $logged_info->member_srl;
|
||||||
|
$args->folder_srl = $folder_srl;
|
||||||
$output = executeQueryArray('member.getScrapFolderList', $args);
|
$output = executeQueryArray('member.getScrapFolderList', $args);
|
||||||
if(!array_filter($output->data, function($folder) use($folder_srl) { return $folder->folder_srl == $folder_srl; }))
|
if(!count($output->data))
|
||||||
{
|
{
|
||||||
return new Object(-1, 'msg_invalid_request');
|
return new Object(-1, 'msg_invalid_request');
|
||||||
}
|
}
|
||||||
|
|
@ -239,6 +240,137 @@ class memberController extends member
|
||||||
return executeQuery('member.updateScrapDocumentFolder', $args);
|
return executeQuery('member.updateScrapDocumentFolder', $args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a scrap folder
|
||||||
|
*
|
||||||
|
* @return void|Object (void : success, Object : fail)
|
||||||
|
*/
|
||||||
|
function procMemberInsertScrapFolder()
|
||||||
|
{
|
||||||
|
// Check login information
|
||||||
|
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||||
|
$logged_info = Context::get('logged_info');
|
||||||
|
|
||||||
|
// Get new folder name
|
||||||
|
$folder_name = Context::get('name');
|
||||||
|
$folder_name = escape(trim(utf8_normalize_spaces($folder_name)));
|
||||||
|
if(!$folder_name)
|
||||||
|
{
|
||||||
|
return new Object(-1, 'msg_invalid_request');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check existing folder with same name
|
||||||
|
$args = new stdClass;
|
||||||
|
$args->member_srl = $logged_info->member_srl;
|
||||||
|
$args->name = $folder_name;
|
||||||
|
$output = executeQueryArray('member.getScrapFolderList', $args);
|
||||||
|
if(count($output->data) || $folder_name === lang('default_folder'))
|
||||||
|
{
|
||||||
|
return new Object(-1, 'msg_folder_alreay_exists');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create folder
|
||||||
|
$args = new stdClass;
|
||||||
|
$args->folder_srl = getNextSequence();
|
||||||
|
$args->member_srl = $logged_info->member_srl;
|
||||||
|
$args->name = $folder_name;
|
||||||
|
$args->list_order = $args->folder_srl;
|
||||||
|
$this->add('folder_srl', $args->folder_srl);
|
||||||
|
return executeQuery('member.insertScrapFolder', $args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rename a scrap folder
|
||||||
|
*
|
||||||
|
* @return void|Object (void : success, Object : fail)
|
||||||
|
*/
|
||||||
|
function procMemberRenameScrapFolder()
|
||||||
|
{
|
||||||
|
// Check login information
|
||||||
|
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||||
|
$logged_info = Context::get('logged_info');
|
||||||
|
|
||||||
|
// Get new folder name
|
||||||
|
$folder_srl = intval(Context::get('folder_srl'));
|
||||||
|
$folder_name = Context::get('name');
|
||||||
|
$folder_name = escape(trim(utf8_normalize_spaces($folder_name)));
|
||||||
|
if(!$folder_srl || !$folder_name)
|
||||||
|
{
|
||||||
|
return new Object(-1, 'msg_invalid_request');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check that the original folder exists and belongs to member
|
||||||
|
$args = new stdClass;
|
||||||
|
$args->member_srl = $logged_info->member_srl;
|
||||||
|
$args->folder_srl = $folder_srl;
|
||||||
|
$output = executeQueryArray('member.getScrapFolderList', $args);
|
||||||
|
if(!count($output->data))
|
||||||
|
{
|
||||||
|
return new Object(-1, 'msg_invalid_request');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check existing folder with same name
|
||||||
|
$args = new stdClass;
|
||||||
|
$args->member_srl = $logged_info->member_srl;
|
||||||
|
$args->not_folder_srl = $folder_srl;
|
||||||
|
$args->name = $folder_name;
|
||||||
|
$output = executeQueryArray('member.getScrapFolderList', $args);
|
||||||
|
if(count($output->data) || $folder_name === lang('default_folder'))
|
||||||
|
{
|
||||||
|
return new Object(-1, 'msg_folder_alreay_exists');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rename folder
|
||||||
|
$args = new stdClass;
|
||||||
|
$args->folder_srl = $folder_srl;
|
||||||
|
$args->name = $folder_name;
|
||||||
|
return executeQuery('member.updateScrapFolder', $args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a scrap folder
|
||||||
|
*
|
||||||
|
* @return void|Object (void : success, Object : fail)
|
||||||
|
*/
|
||||||
|
function procMemberDeleteScrapFolder()
|
||||||
|
{
|
||||||
|
// Check login information
|
||||||
|
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||||
|
$logged_info = Context::get('logged_info');
|
||||||
|
|
||||||
|
// Get folder_srl to delete
|
||||||
|
$folder_srl = intval(Context::get('folder_srl'));
|
||||||
|
if(!$folder_srl)
|
||||||
|
{
|
||||||
|
return new Object(-1, 'msg_invalid_request');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check that the folder exists and belongs to member
|
||||||
|
$args = new stdClass;
|
||||||
|
$args->member_srl = $logged_info->member_srl;
|
||||||
|
$args->folder_srl = $folder_srl;
|
||||||
|
$output = executeQueryArray('member.getScrapFolderList', $args);
|
||||||
|
if(!count($output->data))
|
||||||
|
{
|
||||||
|
return new Object(-1, 'msg_invalid_request');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check that the folder is empty
|
||||||
|
$args = new stdClass;
|
||||||
|
$args->member_srl = $logged_info->member_srl;
|
||||||
|
$args->folder_srl = $folder_srl;
|
||||||
|
$output = executeQueryArray('member.getScrapDocumentList', $args);
|
||||||
|
if(count($output->data))
|
||||||
|
{
|
||||||
|
return new Object(-1, 'msg_folder_not_empty');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete folder
|
||||||
|
$args = new stdClass;
|
||||||
|
$args->folder_srl = $folder_srl;
|
||||||
|
return executeQuery('member.deleteScrapFolder', $args);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save posts
|
* Save posts
|
||||||
* @deprecated - instead Document Controller - procDocumentTempSave method use
|
* @deprecated - instead Document Controller - procDocumentTempSave method use
|
||||||
|
|
|
||||||
|
|
@ -460,6 +460,7 @@ class memberView extends member
|
||||||
Context::set('document_list', $output->data);
|
Context::set('document_list', $output->data);
|
||||||
Context::set('page_navigation', $output->page_navigation);
|
Context::set('page_navigation', $output->page_navigation);
|
||||||
Context::set('scrap_folders', $folders);
|
Context::set('scrap_folders', $folders);
|
||||||
|
Context::set('folder_srl', $folder_srl);
|
||||||
|
|
||||||
$security = new Security($output->data);
|
$security = new Security($output->data);
|
||||||
$security->encodeHTML('..nick_name');
|
$security->encodeHTML('..nick_name');
|
||||||
|
|
|
||||||
8
modules/member/queries/deleteScrapFolder.xml
Normal file
8
modules/member/queries/deleteScrapFolder.xml
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
<query id="deleteScrapFolder" action="delete">
|
||||||
|
<tables>
|
||||||
|
<table name="member_scrap_folders" />
|
||||||
|
</tables>
|
||||||
|
<conditions>
|
||||||
|
<condition operation="equal" column="folder_srl" var="folder_srl" notnull="notnull" />
|
||||||
|
</conditions>
|
||||||
|
</query>
|
||||||
|
|
@ -7,6 +7,9 @@
|
||||||
</columns>
|
</columns>
|
||||||
<conditions>
|
<conditions>
|
||||||
<condition operation="equal" column="member_srl" var="member_srl" filter="number" />
|
<condition operation="equal" column="member_srl" var="member_srl" filter="number" />
|
||||||
|
<condition operation="equal" column="folder_srl" var="folder_srl" pipe="and" />
|
||||||
|
<condition operation="notequal" column="folder_srl" var="not_folder_srl" pipe="and" />
|
||||||
|
<condition operation="equal" column="name" var="name" pipe="and" />
|
||||||
</conditions>
|
</conditions>
|
||||||
<navigation>
|
<navigation>
|
||||||
<index var="sort_index" default="list_order" order="asc" />
|
<index var="sort_index" default="list_order" order="asc" />
|
||||||
|
|
|
||||||
11
modules/member/queries/updateScrapFolder.xml
Normal file
11
modules/member/queries/updateScrapFolder.xml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<query id="updateScrapFolder" action="update">
|
||||||
|
<tables>
|
||||||
|
<table name="member_scrap_folders" />
|
||||||
|
</tables>
|
||||||
|
<columns>
|
||||||
|
<column name="name" var="name" notnull="notnull" />
|
||||||
|
</columns>
|
||||||
|
<conditions>
|
||||||
|
<condition operation="equal" column="folder_srl" var="folder_srl" notnull="notnull" />
|
||||||
|
</conditions>
|
||||||
|
</query>
|
||||||
|
|
@ -163,14 +163,48 @@ function insertSelectedModule(id, module_srl, mid, browser_title) {
|
||||||
|
|
||||||
/* 스크랩 폴더 이동 */
|
/* 스크랩 폴더 이동 */
|
||||||
jQuery(function($) {
|
jQuery(function($) {
|
||||||
|
$("#scrap_folder_create").on("click", function() {
|
||||||
|
var input = $(this).siblings("input.folder_name").first();
|
||||||
|
if (!input.is(":visible")) {
|
||||||
|
input.show();
|
||||||
|
} else {
|
||||||
|
if (!input.val()) return;
|
||||||
|
var params = { name: input.val() };
|
||||||
|
exec_json('member.procMemberInsertScrapFolder', params, function(data) {
|
||||||
|
window.location.href = current_url.setQuery("folder_srl", data.folder_srl);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("#scrap_folder_rename").on("click", function() {
|
||||||
|
var folder_srl = $(this).data("folder-srl");
|
||||||
|
var input = $(this).siblings("input.folder_name").first();
|
||||||
|
if (!input.is(":visible")) {
|
||||||
|
input.show();
|
||||||
|
} else {
|
||||||
|
if (!input.val()) return;
|
||||||
|
var params = { folder_srl: folder_srl, name: input.val() };
|
||||||
|
exec_json('member.procMemberRenameScrapFolder', params, function() {
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("#scrap_folder_delete").on("click", function() {
|
||||||
|
var folder_srl = $(this).data("folder-srl");
|
||||||
|
var params = { folder_srl: folder_srl };
|
||||||
|
exec_json('member.procMemberDeleteScrapFolder', params, function() {
|
||||||
|
window.location.href = current_url.setQuery("folder_srl", "");
|
||||||
|
});
|
||||||
|
});
|
||||||
$("#scrap_folder_list").on("change", function() {
|
$("#scrap_folder_list").on("change", function() {
|
||||||
location.href = current_url.setQuery("folder_srl", $(this).val());
|
window.location.href = current_url.setQuery("folder_srl", $(this).val());
|
||||||
});
|
});
|
||||||
$(".scrap_folder_move").on("change", function() {
|
$(".scrap_folder_move").on("change", function() {
|
||||||
var document_srl = $(this).data('document-srl');
|
var document_srl = $(this).data('document-srl');
|
||||||
var folder_srl = $(this).val();
|
var folder_srl = $(this).val();
|
||||||
if (!folder_srl) return;
|
if (!folder_srl) return;
|
||||||
var params = { document_srl: document_srl, folder_srl: folder_srl };
|
var params = { document_srl: document_srl, folder_srl: folder_srl };
|
||||||
exec_json('member.procMemberMoveScrapFolder', params, function() { location.reload(); });
|
exec_json('member.procMemberMoveScrapFolder', params, function() {
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,25 @@
|
||||||
<include target="./common_header.html" />
|
<include target="./common_header.html" />
|
||||||
<h1>{$member_title = $lang->cmd_view_scrapped_document}</h1>
|
<h1>{$member_title = $lang->cmd_view_scrapped_document}</h1>
|
||||||
|
|
||||||
<select id="scrap_folder_list">
|
<div>
|
||||||
<!--@foreach($scrap_folders as $folder)-->
|
<div class="btnArea" style="clear:none;float:left">
|
||||||
<option value="{$folder->folder_srl}" selected="selected"|cond="$folder_srl == $folder->folder_srl">{$folder->name == '/DEFAULT/' ? $lang->default_folder : $folder_name}</option>
|
<select id="scrap_folder_list" style="margin:0">
|
||||||
<!--@endforeach-->
|
<!--@foreach($scrap_folders as $folder)-->
|
||||||
</select>
|
<option value="{$folder->folder_srl}" selected="selected"|cond="$folder_srl == $folder->folder_srl">{$folder->name == '/DEFAULT/' ? $lang->default_folder : $folder->name}</option>
|
||||||
|
<!--@endforeach-->
|
||||||
|
</select>
|
||||||
|
<div class="btn-group">
|
||||||
|
<input type="text" class="folder_name" style="margin:0;display:none" />
|
||||||
|
<button id="scrap_folder_rename" class="btn" data-folder-srl="{$folder_srl}">{$lang->scrap_folder_rename}</button>
|
||||||
|
<button id="scrap_folder_delete" class="btn" data-folder-srl="{$folder_srl}">{$lang->scrap_folder_delete}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btnArea" style="clear:none;float:right">
|
||||||
|
<input type="text" class="folder_name" style="margin:0;display:none" />
|
||||||
|
<button id="scrap_folder_create" class="btn">{$lang->scrap_folder_create}</button>
|
||||||
|
</div>
|
||||||
|
<div class="clear:both"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<table class="table table-striped table-hover">
|
<table class="table table-striped table-hover">
|
||||||
<thead>
|
<thead>
|
||||||
|
|
@ -29,7 +43,7 @@
|
||||||
<select class="scrap_folder_move" data-document-srl="{$val->document_srl}">
|
<select class="scrap_folder_move" data-document-srl="{$val->document_srl}">
|
||||||
<option value="">{$lang->cmd_move}</option>
|
<option value="">{$lang->cmd_move}</option>
|
||||||
<!--@foreach($scrap_folders as $folder)-->
|
<!--@foreach($scrap_folders as $folder)-->
|
||||||
<option value="{$folder->folder_srl}">{$folder->name == '/DEFAULT/' ? $lang->default_folder : $folder_name}</option>
|
<option value="{$folder->folder_srl}">{$folder->name == '/DEFAULT/' ? $lang->default_folder : $folder->name}</option>
|
||||||
<!--@endforeach-->
|
<!--@endforeach-->
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue