fixed: find_ticket_value (in plugins/ticket/templates.cpp)

should find the first item (can be more than one item with the same 'param')

fixed: added sorting tickets params in ReadTicketParams() (in plugins/ticket/ticketinfo.cpp)

fixed: plugin should have its own 'PluginInfo info' struct
a plugin's function can call another plugin's functions

added: removing tickets files/images

added: removing threads

changed: rm function will call WINIX_FILE_REMOVED now when deleting directories





git-svn-id: svn://ttmath.org/publicrep/winix/trunk@710 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2011-01-23 23:23:24 +00:00
parent 915cabdf97
commit 3071df227a
47 changed files with 418 additions and 222 deletions

View File

@@ -178,20 +178,6 @@ void RemoveFile(PluginInfo & info)
void RemoveDir(PluginInfo & info)
{
DbItemQuery query;
std::vector<long> items;
size_t i;
// !! may only files can be retrieved here?
query.SetAll(false, false);
query.WhereParentId(info.l1);
info.db->GetItems(items, query);
// removing childs
for(i=0 ; i<items.size() ; ++i)
stats.RemoveItem(items[i]);
// removing the directory
stats.RemoveItem(info.l1);
}

View File

@@ -214,7 +214,7 @@ showthreads.o: ../../core/synchro.h tdb.h thread.h ../../db/dbbase.h
showthreads.o: threadinfo.h
tdb.o: tdb.h thread.h ../../db/dbbase.h ../../core/error.h ../../core/log.h
tdb.o: ../../core/textstream.h ../../core/log.h
templates.o: threadinfo.h thread.h ../../core/item.h ../../core/system.h
templates.o: threadinfo.h ../../core/item.h ../../core/system.h
templates.o: ../../core/dirs.h ../../core/item.h ../../core/dircontainer.h
templates.o: ../../db/db.h ../../db/dbbase.h ../../db/dbconn.h
templates.o: ../../db/dbtextstream.h ../../core/textstream.h
@@ -240,15 +240,15 @@ templates.o: ../../core/mount.h ../../core/mountparser.h ../../core/config.h
templates.o: ../../core/confparser.h ../../core/htmlfilter.h
templates.o: ../../core/users.h ../../core/groups.h ../../core/group.h
templates.o: ../../core/loadavg.h ../../core/thumb.h ../../core/basethread.h
templates.o: reply.h ../../functions/functionbase.h ../../core/request.h
templates.o: thread.h tdb.h ../../db/dbbase.h reply.h
templates.o: ../../functions/functionbase.h ../../core/request.h
templates.o: ../../core/requesttypes.h ../../templates/htmltextstream.h
templates.o: ../../core/synchro.h tdb.h ../../db/dbbase.h funthread.h
templates.o: createthread.h showthreads.h ../../core/misc.h
templates.o: ../../core/plugin.h pluginmsg.h ../../core/system.h
templates.o: ../../core/sessionmanager.h ../../core/sessioncontainer.h
templates.o: ../../functions/functions.h ../../functions/functionbase.h
templates.o: ../../functions/functionparser.h ../../core/cur.h
templates.o: ../../functions/adduser.h ../../functions/cat.h
templates.o: ../../core/synchro.h funthread.h createthread.h showthreads.h
templates.o: ../../core/misc.h ../../core/plugin.h pluginmsg.h
templates.o: ../../core/system.h ../../core/sessionmanager.h
templates.o: ../../core/sessioncontainer.h ../../functions/functions.h
templates.o: ../../functions/functionbase.h ../../functions/functionparser.h
templates.o: ../../core/cur.h ../../functions/adduser.h ../../functions/cat.h
templates.o: ../../functions/chmod.h ../../functions/privchanger.h
templates.o: ../../functions/chown.h ../../functions/ckeditor.h
templates.o: ../../functions/cp.h ../../functions/default.h
@@ -269,7 +269,7 @@ templates.o: ../../templates/patterncacher.h
templates.o: ../../templates/ckeditorgetparser.h
templates.o: ../../core/httpsimpleparser.h ../../core/log.h
templates.o: ../../templates/indexpatterns.h ../../core/sessionmanager.h
threadinfo.o: threadinfo.h thread.h ../../core/item.h ../../core/system.h
threadinfo.o: threadinfo.h ../../core/item.h ../../core/system.h
threadinfo.o: ../../core/dirs.h ../../core/item.h ../../core/dircontainer.h
threadinfo.o: ../../db/db.h ../../db/dbbase.h ../../db/dbconn.h
threadinfo.o: ../../db/dbtextstream.h ../../core/textstream.h
@@ -295,3 +295,4 @@ threadinfo.o: ../../core/mount.h ../../core/mountparser.h ../../core/config.h
threadinfo.o: ../../core/confparser.h ../../core/htmlfilter.h
threadinfo.o: ../../core/users.h ../../core/groups.h ../../core/group.h
threadinfo.o: ../../core/loadavg.h ../../core/thumb.h ../../core/basethread.h
threadinfo.o: thread.h tdb.h ../../db/dbbase.h

View File

@@ -69,7 +69,7 @@ void CreateThread::MakePost()
if( cur->request->status == WINIX_ERR_OK )
{
thread.Clear();
thread.file_id = cur->request->item.id;
thread.file_id = cur->request->item.id;
cur->request->status = tdb->AddThread(thread);
}

View File

@@ -51,9 +51,6 @@ return true;
void FunThread::PrepareThread(long file_id)
{
thread_info->Clear();
//cur->request->status = tdb->GetThreadByFileId(file_id, thread);
cur->request->status = tdb->GetAnswers(file_id, id_tab);
if( !id_tab.empty() )
@@ -68,6 +65,7 @@ void FunThread::PrepareThread(long file_id)
iq.WhereFileType(WINIX_ITEM_FILETYPE_NONE);
db->GetItems(thread_info->item_tab, iq);
system->CheckAccessToItems(thread_info->item_tab);
thread_info->item_sort_tab.resize(thread_info->item_tab.size());
@@ -75,8 +73,6 @@ void FunThread::PrepareThread(long file_id)
for(size_t i=0 ; i<thread_info->item_tab.size() ; ++i)
thread_info->item_sort_tab[i] = &thread_info->item_tab[i];
}
system->CheckAccessToItems(thread_info->item_tab);
}

View File

@@ -74,7 +74,7 @@ void AddMounts(PluginInfo & info)
void RemoveThread(PluginInfo & i)
{
thread_info.RemoveThread(i.l1);
}
@@ -97,6 +97,9 @@ void SetSortTab(PluginInfo & info)
typedef std::vector<Item*> SortTab;
SortTab * psort_tab = reinterpret_cast<SortTab*>(info.p1);
// !! dodac jakies czyszczenie tej tablicy wskaznikow na koncu przetwarzania requestu
// aby kiedys przypadkowo nie odwolac sie do nie istniejacego obiektu
// poprzez bezposrednie uzycie jakiejs funkcji z ezc
thread_info.item_sort_tab = *psort_tab;
}
@@ -130,23 +133,25 @@ void Init(PluginInfo & info)
{
using namespace Thread;
plugin.Assign(WINIX_CREATE_FUNCTIONS, AddFunctions);
plugin.Assign(WINIX_SELECT_DEFAULT_FUNCTION, SelectDefaultFunction);
plugin.Assign(WINIX_ADD_MOUNTS, AddMounts);
plugin.Assign(WINIX_FILE_REMOVED, RemoveThread);
plugin.Assign(WINIX_NOTIFY_ADD_TEMPLATE, AddNotifyTemplate);
plugin.Assign(WINIX_TEMPLATES_CREATEFUNCTIONS, AddEzcFunctions);
plugin.Assign(WINIX_CREATE_FUNCTIONS, AddFunctions);
plugin.Assign(WINIX_SELECT_DEFAULT_FUNCTION, SelectDefaultFunction);
plugin.Assign(WINIX_ADD_MOUNTS, AddMounts);
plugin.Assign(WINIX_FILE_REMOVED, RemoveThread);
plugin.Assign(WINIX_NOTIFY_ADD_TEMPLATE, AddNotifyTemplate);
plugin.Assign(WINIX_TEMPLATES_CREATEFUNCTIONS, AddEzcFunctions);
// for other plugins
plugin.Assign(WINIX_PL_THREAD_SET_SORTTAB, SetSortTab);
plugin.Assign(WINIX_PL_THREAD_READ_THREADS, ReadThreads);
plugin.Assign(WINIX_PL_THREAD_SET_SORTTAB, SetSortTab);
plugin.Assign(WINIX_PL_THREAD_READ_THREADS, ReadThreads);
plugin.Assign(WINIX_PL_THREAD_SET_SORTTAB_INDEX, SetSortTabIndex);
plugin.Assign(WINIX_PL_THREAD_PREPARE_THREAD, PrepareThread);
plugin.Assign(WINIX_PL_THREAD_PREPARE_THREAD, PrepareThread);
tdb.SetConn(info.db->GetConn());
tdb.LogQueries(info.config->log_db_query);
// thread_info and fun_show_threads are used in 'ticket' plugins too
thread_info.SetDb(info.db);
thread_info.SetTDb(&tdb);
thread_info.SetSystem(info.system);
thread_info.plugin_id = info.plugin_id;

View File

@@ -12,11 +12,13 @@
#define WINIX_PL_THREAD_SET_SORTTAB 4000
#define WINIX_PL_THREAD_READ_THREADS 4001
#define WINIX_PL_THREAD_SET_SORTTAB_INDEX 4002
#define WINIX_PL_THREAD_CAN_USE_REPLY 4003
#define WINIX_PL_THREAD_PREPARE_THREAD 4004
#define WINIX_PL_THREAD_SET_SORTTAB 4000
#define WINIX_PL_THREAD_READ_THREADS 4001
#define WINIX_PL_THREAD_SET_SORTTAB_INDEX 4002
#define WINIX_PL_THREAD_PREPARE_THREAD 4003
#endif

View File

@@ -21,6 +21,7 @@ namespace Thread
Reply::Reply()
{
fun.url = L"reply";
files_dir = 0;
}
@@ -37,22 +38,18 @@ void Reply::SetThreadInfo(ThreadInfo * pthread_info)
}
/*
we can use 'reply' function everywhere where 'thread_dir' mount option is defined
if there is no such a thread in 'thread' table it will be added automatically
*/
bool Reply::HasAccess()
{
if( !cur->request->is_item )
return false;
Item * dir = thread_info->FindThreadDir();
files_dir = thread_info->FindThreadDir();
if( !dir || !system->HasWriteAccess(*dir) )
return false;
plugin.Call(WINIX_PL_THREAD_CAN_USE_REPLY);
if( plugin.True() > 0 )
return true;
if( system->mounts.pmount->type != thread_info->mount_type_thread )
if( !files_dir || !system->HasWriteAccess(*files_dir) )
return false;
return true;
@@ -62,13 +59,8 @@ return true;
void Reply::MakePost()
{
Item * dir = thread_info->FindThreadDir();
if( !dir )
{
cur->request->status = WINIX_ERR_PERMISSION_DENIED;
return;
}
// !! jak bedzie dostepne assert
// ASSERT(files_dir)
if( tdb->GetThreadByFileId(cur->request->item.id, thread) != WINIX_ERR_OK )
{
@@ -85,7 +77,7 @@ void Reply::MakePost()
functions->ReadItem(answer, Item::file);
functions->SetUser(answer);
functions->PrepareUrl(answer);
answer.parent_id = dir->id;
answer.parent_id = files_dir->id;
answer.privileges = 0644; // !! tymczasowo
if( functions->CheckAbuse() )

View File

@@ -38,6 +38,7 @@ private:
ThreadInfo * thread_info;
Item answer;
Thread thread;
Item * files_dir;
};

View File

@@ -96,17 +96,6 @@ void ShowThreads::ReadFiles()
}
void ShowThreads::ReadThreads()
{
// reading threads for the files
file_id_tab.resize(thread_info->item_sort_tab.size());
for(size_t i=0 ; i<thread_info->item_sort_tab.size() ; ++i)
file_id_tab[i] = thread_info->item_sort_tab[i]->id;
tdb->GetThreads(file_id_tab, thread_info->thread_tab);
}
void ShowThreads::CreatePointers()
{
@@ -118,7 +107,6 @@ void ShowThreads::CreatePointers()
}
void ShowThreads::SortPointers()
{
int sort_type = 1;
@@ -132,6 +120,19 @@ void ShowThreads::SortPointers()
void ShowThreads::ReadThreads()
{
// reading threads for the files
file_id_tab.resize(thread_info->item_sort_tab.size());
for(size_t i=0 ; i<thread_info->item_sort_tab.size() ; ++i)
file_id_tab[i] = thread_info->item_sort_tab[i]->id;
tdb->GetThreads(file_id_tab, thread_info->thread_tab);
}
void ShowThreads::MakeGet()
{
thread_info->Clear();

View File

@@ -175,12 +175,12 @@ return status;
Error TDb::EditThreadAddItem(long file_id, long item_id)
Error TDb::EditThreadAddItem(long file_id, long answer_id)
{
query.Clear();
query << R("insert into plugins.thread_files (file_id, answer_id) values (")
<< file_id
<< item_id
<< answer_id
<< R(");");
Error status = DoCommand(query);
@@ -190,7 +190,7 @@ Error TDb::EditThreadAddItem(long file_id, long item_id)
query.Clear();
query << R("update plugins.thread set (last_item, replies) = (")
<< item_id
<< answer_id
<< R(", replies+1) where file_id=")
<< file_id
<< R(";");

View File

@@ -17,6 +17,7 @@
#include "core/error.h"
namespace Thread
{
@@ -29,7 +30,7 @@ public:
Error GetThreadByFileId(long file_id, Thread & thread);
Error GetThreads(const std::vector<long> & file_id_tab, std::vector<Thread> & thread_tab);
Error GetAnswers(long file_id, std::vector<long> & answer_id_tab);
Error EditThreadAddItem(long file_id, long item_id);
Error EditThreadAddItem(long file_id, long answer_id);
Error EditThreadRemoveItem(long file_id);
Error RemoveThread(long file_id);
long FindLastItem(long file_id);

View File

@@ -472,6 +472,14 @@ void thread_can_create(Info & i)
void thread_mount_arg_is(Info & i)
{
if( system->mounts.pmount )
i.res = system->mounts.pmount->IsArg(thread_info.mount_par_thread, i.par);
}
void AddEzcFunctions(PluginInfo & info)
@@ -518,6 +526,7 @@ void AddEzcFunctions(PluginInfo & info)
fun->Insert("thread_can_reply", thread_can_reply);
fun->Insert("thread_can_create", thread_can_create);
fun->Insert("thread_mount_arg_is", thread_mount_arg_is);
}

View File

@@ -14,6 +14,17 @@
namespace Thread
{
void ThreadInfo::SetDb(Db * pdb)
{
db = pdb;
}
void ThreadInfo::SetTDb(TDb * ptdb)
{
tdb = ptdb;
}
void ThreadInfo::SetSystem(System * psystem)
{
@@ -47,6 +58,18 @@ return out_dir_tab.back();
void ThreadInfo::RemoveThread(long file_id)
{
if( tdb->GetAnswers(file_id, remove_answer_id_tab) == WINIX_ERR_OK )
{
for(size_t i=0 ; i<remove_answer_id_tab.size() ; ++i)
db->DelFileById(remove_answer_id_tab[i]);
}
tdb->RemoveThread(file_id);
}
} // namespace

View File

@@ -11,10 +11,11 @@
#define headerfile_winix_plugins_thread_threadinfo
#include <vector>
#include "thread.h"
#include "core/item.h"
#include "core/system.h"
#include "db/db.h"
#include "thread.h"
#include "tdb.h"
@@ -26,10 +27,14 @@ class ThreadInfo
public:
void SetDb(Db * pdb);
void SetTDb(TDb * ptdb);
void SetSystem(System * psystem);
void Clear();
Item * FindThreadDir();
// id of a mount type
int mount_type_thread;
@@ -57,11 +62,18 @@ public:
// template index for notifications
size_t template_index;
void RemoveThread(long file_id);
private:
Db * db;
TDb * tdb;
System * system;
std::vector<Item*> out_dir_tab;
std::vector<long> remove_answer_id_tab;
Item out_item;

View File

@@ -51,6 +51,7 @@ createticket.o: ../../functions/tinymce.h ../../functions/uname.h
createticket.o: ../../functions/upload.h ../../functions/uptime.h
createticket.o: ../../functions/who.h ../../functions/vim.h
createticket.o: ../../core/htmlfilter.h sessiondata.h ../../core/plugindata.h
createticket.o: ../../functions/rm.h
editticket.o: editticket.h tdb.h ticket.h ../../db/dbbase.h ../../db/dbconn.h
editticket.o: ../../db/dbtextstream.h ../../core/textstream.h
editticket.o: ../../core/misc.h ../../core/item.h ../../core/error.h
@@ -99,7 +100,7 @@ editticket.o: ../../functions/uname.h ../../functions/upload.h
editticket.o: ../../functions/uptime.h ../../functions/who.h
editticket.o: ../../functions/vim.h ../../core/htmlfilter.h
editticket.o: ../../functions/functionbase.h ../../core/synchro.h
editticket.o: sessiondata.h ../../core/plugindata.h
editticket.o: sessiondata.h ../../core/plugindata.h ../../functions/rm.h
funticket.o: funticket.h tdb.h ticket.h ../../db/dbbase.h ../../db/dbconn.h
funticket.o: ../../db/dbtextstream.h ../../core/textstream.h
funticket.o: ../../core/misc.h ../../core/item.h ../../core/error.h
@@ -206,9 +207,11 @@ init.o: ../../templates/templates.h ../../templates/patterncacher.h
init.o: ../../templates/ckeditorgetparser.h ../../core/httpsimpleparser.h
init.o: ../../core/log.h ../../templates/indexpatterns.h
init.o: ../../core/sessionmanager.h sessiondata.h ../../core/plugindata.h
init.o: ../../plugins/thread/showthreads.h ../../plugins/thread/threadinfo.h
init.o: ../../plugins/thread/thread.h ../../plugins/thread/pluginmsg.h
init.o: ../../functions/rm.h ../../plugins/thread/showthreads.h
init.o: ../../plugins/thread/threadinfo.h ../../plugins/thread/thread.h
init.o: ../../plugins/thread/pluginmsg.h
sessiondata.o: sessiondata.h ../../core/plugindata.h ticket.h
sessiondata.o: ../../functions/rm.h
showtickets.o: showtickets.h tdb.h ticket.h ../../db/dbbase.h
showtickets.o: ../../db/dbconn.h ../../db/dbtextstream.h
showtickets.o: ../../core/textstream.h ../../core/misc.h ../../core/item.h
@@ -324,7 +327,7 @@ templates.o: ../../templates/templates.h ../../templates/patterncacher.h
templates.o: ../../templates/ckeditorgetparser.h
templates.o: ../../core/httpsimpleparser.h ../../core/log.h
templates.o: ../../templates/indexpatterns.h ../../core/sessionmanager.h
templates.o: sessiondata.h ../../core/plugindata.h
templates.o: sessiondata.h ../../core/plugindata.h ../../functions/rm.h
templates.o: ../../plugins/thread/pluginmsg.h
ticketconf.o: ticketconf.h
ticketinfo.o: ticketinfo.h ticket.h ticketparser.h ticketconf.h
@@ -375,6 +378,6 @@ ticketinfo.o: ../../functions/uptime.h ../../functions/who.h
ticketinfo.o: ../../functions/vim.h ../../core/htmlfilter.h tdb.h
ticketinfo.o: ../../db/dbbase.h ../../db/dbconn.h ../../db/dbtextstream.h
ticketinfo.o: ../../core/error.h ../../core/log.h ../../core/misc.h
ticketinfo.o: sessiondata.h ../../core/plugindata.h
ticketinfo.o: sessiondata.h ../../core/plugindata.h ../../functions/rm.h
ticketparser.o: ticketparser.h ticketconf.h ../../core/log.h
ticketparser.o: ../../core/misc.h

View File

@@ -53,7 +53,7 @@ return true;
void CreateTicket::AddTicket(Ticket & ticket, Item & item)
{
ticket.file_id = item.id;
ticket.file_id = item.id;
cur->request->status = tdb->AddTicket(ticket);
if( cur->request->status == WINIX_ERR_OK )
@@ -91,7 +91,7 @@ void CreateTicket::Submit(Ticket & ticket, Item & item)
if( cur->request->status == WINIX_ERR_OK )
{
log << log2 << "CreateTicket: added a new ticket" << logend;
RemoveTicket();
RemoveTmpTicket();
system->RedirectTo(item);
}
else
@@ -103,13 +103,14 @@ void CreateTicket::Submit(Ticket & ticket, Item & item)
void CreateTicket::RemoveTicket()
void CreateTicket::RemoveTmpTicket()
{
SessionData * session_data = reinterpret_cast<SessionData*>(
cur->session->plugin_data.Get(ticket_info->plugin_id) );
long dir_id = cur->request->dir_tab.back()->id;
session_data->create_ticket_map.erase(dir_id);
session_data->create_file_map.erase(dir_id);
}
@@ -126,6 +127,17 @@ return ticket;
}
std::vector<long> & CreateTicket::PrepareFileMap()
{
SessionData * session_data = reinterpret_cast<SessionData*>(
cur->session->plugin_data.Get(ticket_info->plugin_id) );
long dir_id = cur->request->dir_tab.back()->id;
std::vector<long> & file_map = session_data->GetFileTab(dir_id, session_data->create_file_map);
return file_map;
}
void CreateTicket::MakePost()
{
@@ -135,8 +147,9 @@ void CreateTicket::MakePost()
Ticket & ticket = PrepareTicket();
Item & item = cur->request->item;
ticket_info->ticket = &ticket;
std::vector<long> & file_map = PrepareFileMap();
ticket_info->ReadTicketParams(ticket, false);
ticket_info->ReadTicketParams(ticket, false, &file_map);
functions->ReadItem(item, Item::file);
if( !cur->request->IsPostVar(L"fileuploadsubmit") )

View File

@@ -36,8 +36,9 @@ private:
void AddTicket(Ticket & ticket, Item & item);
void Submit(Ticket & ticket, Item & item);
void RemoveTicket();
void RemoveTmpTicket();
Ticket & PrepareTicket();
std::vector<long> & PrepareFileMap();
TDb * tdb;
TicketInfo * ticket_info;

View File

@@ -91,7 +91,7 @@ void EditTicket::Submit(Ticket & ticket, Item & item)
if( cur->request->status == WINIX_ERR_OK )
{
log << log2 << "EditTicket: ticket modified" << logend;
RemoveTicket();
RemoveTmpTicket();
system->RedirectTo(item);
}
else
@@ -104,13 +104,13 @@ void EditTicket::Submit(Ticket & ticket, Item & item)
void EditTicket::RemoveTicket()
void EditTicket::RemoveTmpTicket()
{
SessionData * session_data = reinterpret_cast<SessionData*>(
cur->session->plugin_data.Get(ticket_info->plugin_id) );
long file_id = cur->request->item.id;
session_data->create_ticket_map.erase(file_id);
session_data->edit_ticket_map.erase(file_id);
session_data->new_file_map.erase(file_id);
}

View File

@@ -34,7 +34,7 @@ public:
private:
void RemoveTicket();
void RemoveTmpTicket();
Ticket & PrepareTicket();
std::vector<long> & PrepareFileMap();
std::wstring old_url;

View File

@@ -88,7 +88,7 @@ void ProcessRequest(PluginInfo & info)
void RemoveTicket(PluginInfo & i)
{
tdb.RemoveTicket(i.l1);
ticket_info.RemoveTicket(i.l1);
}
@@ -107,6 +107,8 @@ void AddNotifyTemplate(PluginInfo & info)
void CreateSession(PluginInfo & info)
{
SessionData * p = new SessionData();
p->fun_rm = &info.functions->fun_rm;
info.cur->session->plugin_data.Assign(p);
log << log4 << "Ticket: created ticket plugin data: " << (void*)p << logend;
}
@@ -115,14 +117,7 @@ void CreateSession(PluginInfo & info)
void RemoveSession(PluginInfo & info)
{
delete info.plugin_data_base;
log << log4 << "Ticket: removed ticket plugin date: " << (void*)info.plugin_data_base << logend;
}
void CanUseReply(PluginInfo & info)
{
if( info.system->mounts.pmount && info.system->mounts.pmount->type == ticket_info.mount_type_ticket )
info.res = true;
log << log4 << "Ticket: removed ticket plugin data: " << (void*)info.plugin_data_base << logend;
}
@@ -149,7 +144,6 @@ using namespace Ticket;
plugin.Assign(WINIX_NOTIFY_ADD_TEMPLATE, AddNotifyTemplate);
plugin.Assign(WINIX_SESSION_CREATED, CreateSession);
plugin.Assign(WINIX_SESSION_REMOVE, RemoveSession);
plugin.Assign(WINIX_PL_THREAD_CAN_USE_REPLY, CanUseReply);
tdb.SetConn(info.db->GetConn());
tdb.LogQueries(info.config->log_db_query);

View File

@@ -13,6 +13,39 @@
namespace Ticket
{
SessionData::SessionData()
{
fun_rm = 0;
}
SessionData::~SessionData()
{
RemoveFileMap(create_file_map);
RemoveFileMap(new_file_map);
}
void SessionData::RemoveFileMap(SessionData::FileMap & file_map)
{
FileMap::iterator i;
if( fun_rm )
{
for(i=file_map.begin() ; i!=file_map.end() ; ++i)
{
for(size_t a=0 ; a<i->second.size() ; ++a)
{
long file_id = i->second[a];
fun_rm->RemoveItemById(file_id);
}
}
file_map.clear();
}
}
Ticket & SessionData::GetTicket(long id, SessionData::TicketMap & ticket_map, bool * is_new)

View File

@@ -15,6 +15,7 @@
#include <map>
#include "core/plugindata.h"
#include "ticket.h"
#include "functions/rm.h"
namespace Ticket
@@ -23,9 +24,14 @@ namespace Ticket
struct SessionData : public PluginDataBase
{
SessionData();
~SessionData();
typedef std::map<long, Ticket> TicketMap;
typedef std::map<long, std::vector<long> > FileMap;
// temporary tickets for 'createticket' function
// <parent_dir_id, Ticket>
TicketMap create_ticket_map;
@@ -34,8 +40,14 @@ struct SessionData : public PluginDataBase
// <file_id, Ticket>
TicketMap edit_ticket_map;
// temporary files for 'createticket' function
// these files should be deleted if a user will not click on the submit button
FileMap create_file_map;
// temporary files for 'editticket' function
// these files should be deleted if a user will not click on the submit button
// !! zmienic nazwe na edit_file_map albo podobnie
FileMap new_file_map;
@@ -44,6 +56,10 @@ struct SessionData : public PluginDataBase
std::vector<long> & GetFileTab(long id, FileMap & file_map);
// for deleting new_file_map files
Fun::Rm * fun_rm;
void RemoveFileMap(FileMap & file_map);
};

View File

@@ -62,7 +62,7 @@ bool ShowTickets::Sort::operator()(const Item * item1, const Item * item2)
time_t time1 = Time(tm1);
time_t time2 = Time(tm2);
return time1 < time2;
return time1 > time2;
}
}
@@ -91,17 +91,6 @@ void ShowTickets::ReadFiles()
}
void ShowTickets::ReadTickets()
{
// reading tickets for the files
file_id_tab.resize(ticket_info->item_sort_tab.size());
for(size_t i=0 ; i<ticket_info->item_sort_tab.size() ; ++i)
file_id_tab[i] = ticket_info->item_sort_tab[i]->id;
tdb->GetTickets(file_id_tab, ticket_info->ticket_tab);
}
void ShowTickets::CreatePointers()
{
@@ -127,6 +116,18 @@ void ShowTickets::SortPointers()
void ShowTickets::ReadTickets()
{
// reading tickets for the files
file_id_tab.resize(ticket_info->item_sort_tab.size());
for(size_t i=0 ; i<ticket_info->item_sort_tab.size() ; ++i)
file_id_tab[i] = ticket_info->item_sort_tab[i]->id;
tdb->GetTickets(file_id_tab, ticket_info->ticket_tab);
}
void ShowTickets::MakeGet()
{
ticket_info->Clear();

View File

@@ -38,9 +38,9 @@ private:
std::vector<long> file_id_tab;
void ReadFiles();
void ReadTickets();
void CreatePointers();
void SortPointers();
void ReadTickets();
struct Sort
{

View File

@@ -71,6 +71,8 @@ Error TDb::GetTicket(long file_id, Ticket & ticket)
int cintvalue = AssertColumn(r, "int_value");
int cstrvalue = AssertColumn(r, "str_value");
// !! mozna dodac uzycie ticket.par_tab.reserve()
for(int i=0 ; i<rows ; ++i)
{
par.param = AssertValueInt(r, i, cparam);

View File

@@ -49,6 +49,7 @@ return percent;
// binary search for conf_item.id in ticket.par_tab (ticket.par_tab must be sorted by 'param')
// !! zmienic nazwe na find_ticket_param
bool find_ticket_value(const TicketConf::TicketItem & conf_item, const Ticket & ticket, size_t & ticket_par_index)
{
if( ticket.par_tab.empty() )
@@ -68,6 +69,9 @@ bool find_ticket_value(const TicketConf::TicketItem & conf_item, const Ticket &
if( ticket.par_tab[o2].param == conf_item.id )
{
while( o2 > 0 && ticket.par_tab[o2-1].param == conf_item.id )
--o2;
ticket_par_index = o2;
return true;
}
@@ -81,7 +85,12 @@ bool find_ticket_value(const TicketConf::TicketItem & conf_item, const Ticket &
ticket_par_index = (o1 + o2) / 2;
if( ticket.par_tab[ticket_par_index].param == conf_item.id )
{
while( ticket_par_index > 0 && ticket.par_tab[ticket_par_index-1].param == conf_item.id )
--ticket_par_index;
return true;
}
if( ticket.par_tab[ticket_par_index].param < conf_item.id )
o1 = ticket_par_index;

View File

@@ -12,6 +12,7 @@
#include <vector>
#include <string>
#include <algorithm>
namespace Ticket
@@ -27,7 +28,6 @@ struct Ticket
void Clear()
{
// !! what about file_id?
param = 0;
int_value = 0;
str_value.clear();
@@ -52,6 +52,19 @@ struct Ticket
sort_id = 0;
}
struct Sort
{
bool operator()(const TicketParam & par1, const TicketParam & par2)
{
return par1.param < par2.param;
}
};
void SortParTab()
{
std::sort(par_tab.begin(), par_tab.end(), Sort());
}
Ticket()
{

View File

@@ -302,6 +302,7 @@ bool add = false;
if( cur->request->status == WINIX_ERR_OK )
{
add = true;
par.int_value = file.id;
system->MakePath(file, par.str_value);
if( file_map )
@@ -335,6 +336,8 @@ bool exists = false;
ticket_param.Clear();
log << log1 << "szukamy dla param_id: " << param_id << logend;
for(size_t i=0 ; i<cur_conf->tab.size() ; ++i)
{
if( param_id == cur_conf->tab[i].id )
@@ -420,10 +423,27 @@ PostFileTab::iterator i2;
if( IsSubString(config->ticket_form_prefix, i2->first) )
ReadTicketParam(ticket, Toi(i2->first.c_str() + config->ticket_form_prefix.size()), i2->second, file_map);
}
ticket.SortParTab();
}
void TicketInfo::RemoveTicket(long file_id)
{
if( tdb->GetTicket(file_id, rm_ticket) == WINIX_ERR_OK )
{
for(size_t i=0 ; i<rm_ticket.par_tab.size(); ++i)
{
long id = rm_ticket.par_tab[i].int_value;
functions->fun_rm.RemoveItemById(id);
}
tdb->RemoveTicket(file_id);
}
}
} // namespace

View File

@@ -93,6 +93,8 @@ public:
void CheckMinMaxValue(const TicketConf::TicketItem & conf_item, Ticket::TicketParam & par);
void ReadTicketParams(Ticket & ticket, bool clear_ticket = true, std::vector<long> * file_map = 0);
void RemoveTicket(long file_id);
private:
Db * db;
@@ -119,6 +121,9 @@ private:
const TicketConf cur_conf_empty;
const Ticket ticket_empty;
// for removing a ticket
Ticket rm_ticket;
bool GetConfContent(const std::wstring & path);
bool ParseTicketConf(long mount_dir_id, const std::wstring & path);
void ReadTicketConf(Mounts & mounts, bool skip_existing_configs);