added: 'rm' function can work with tickets
git-svn-id: svn://ttmath.org/publicrep/winix/trunk@565 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
parent
ed9feaf542
commit
0e50977779
|
@ -50,6 +50,7 @@ class Content
|
|||
void FunEmacs();
|
||||
void FunPriv();
|
||||
|
||||
bool FunRmCheckAccess();
|
||||
void FunRmDirRecursive();
|
||||
void FunRmDir();
|
||||
void FunRm();
|
||||
|
@ -116,6 +117,7 @@ class Content
|
|||
|
||||
bool FunEditTicketCheckAccess();
|
||||
void PostFunEditTicketLogAndRedirect();
|
||||
void EditTicketCheckFirstItem();
|
||||
void EditTicketModTicket();
|
||||
void EditTicketModDir();
|
||||
void EditTicketModFirstItem();
|
||||
|
|
|
@ -29,6 +29,33 @@ return true;
|
|||
|
||||
|
||||
|
||||
void Content::EditTicketCheckFirstItem()
|
||||
{
|
||||
if( request.session->done_status != Error::ok )
|
||||
return;
|
||||
|
||||
|
||||
if( request.ticket.item_id == -1 )
|
||||
{
|
||||
// creating a new item (the item was deleted by a user)
|
||||
|
||||
Item item;
|
||||
item.parent_id = request.dir_table.back()->id;
|
||||
item.subject = request.dir_table.back()->subject;
|
||||
item.type = Item::file;
|
||||
item.privileges = 0644; // !! tymczasowo
|
||||
SetUser(item);
|
||||
PrepareUrl(item);
|
||||
|
||||
request.session->done_status = db.AddItem(item);
|
||||
|
||||
if( request.session->done_status == Error::ok )
|
||||
{
|
||||
log << log2 << "Content: added the first item with content for the ticket, item.id: " << item.id << logend;
|
||||
request.ticket.item_id = item.id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -128,6 +155,7 @@ void Content::PostFunEditTicket()
|
|||
return;
|
||||
}
|
||||
|
||||
EditTicketCheckFirstItem();
|
||||
EditTicketModTicket();
|
||||
EditTicketModDir();
|
||||
EditTicketModFirstItem();
|
||||
|
|
|
@ -15,10 +15,31 @@
|
|||
|
||||
|
||||
|
||||
bool Content::FunRmCheckAccess()
|
||||
{
|
||||
if( !request.is_item )
|
||||
{
|
||||
if( !request.CanRemove(*request.dir_table.back()) )
|
||||
{
|
||||
request.status = Error::permission_denied;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
if( !request.CanRemove(request.item) )
|
||||
{
|
||||
request.status = Error::permission_denied;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Content::FunRmDirRecursive()
|
||||
{
|
||||
data.dirs.MakePath(request.dir_table.back()->id, request.session->dir_old);
|
||||
|
||||
// this method deletes recursively all directories
|
||||
data.dirs.DeleteDir(request.dir_table.back()->id);
|
||||
|
||||
|
@ -53,12 +74,6 @@ void Content::FunRmDirRecursive()
|
|||
|
||||
void Content::FunRmDir()
|
||||
{
|
||||
if( !request.CanRemove(*request.dir_table.back()) )
|
||||
{
|
||||
request.status = Error::permission_denied;
|
||||
return;
|
||||
}
|
||||
|
||||
if( request.param_table.empty() )
|
||||
request.status = Error::permission_denied;
|
||||
else
|
||||
|
@ -72,27 +87,17 @@ void Content::FunRmDir()
|
|||
}
|
||||
|
||||
|
||||
|
||||
void Content::FunRm()
|
||||
{
|
||||
if( !request.is_item )
|
||||
{
|
||||
FunRmDir();
|
||||
if( !FunRmCheckAccess() )
|
||||
return;
|
||||
}
|
||||
|
||||
if( !request.CanRemove(request.item) )
|
||||
{
|
||||
request.status = Error::permission_denied;
|
||||
return;
|
||||
}
|
||||
|
||||
if( !request.is_item )
|
||||
return FunRmDir();
|
||||
|
||||
if( request.param_table.empty() )
|
||||
{
|
||||
// we'll put some information about the deleted item (on the next page)
|
||||
request.session->item = request.item;
|
||||
|
||||
// !! zmienic interfejs dla db.DelItem
|
||||
if( db.DelItem( request.item ) )
|
||||
{
|
||||
request.session->done_status = Error::ok;
|
||||
|
@ -101,6 +106,10 @@ void Content::FunRm()
|
|||
|
||||
if( data.mounts.pmount->type == Mount::thread )
|
||||
db.EditThreadRemoveItem(request.item.parent_id);
|
||||
else
|
||||
if( data.mounts.pmount->type == Mount::ticket )
|
||||
db.EditTicketRemoveItem(request.item.id);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
61
core/db.cpp
61
core/db.cpp
|
@ -1103,6 +1103,7 @@ Error Db::DelDirById(long id)
|
|||
AssertConnection();
|
||||
std::ostringstream query, query2;
|
||||
|
||||
// !! trzeba poprawic to usuwanie gdy beda hard linki
|
||||
query << "delete from core.content where content.id in (select content_id from core.item where parent_id='" << id << "');";
|
||||
r = AssertQuery( query.str() );
|
||||
AssertResultStatus(r, PGRES_COMMAND_OK);
|
||||
|
@ -1226,7 +1227,7 @@ Error Db::DelItemCountContents(const Item & item, long & contents)
|
|||
|
||||
contents = atol( AssertValue(r, 0, 0) );
|
||||
|
||||
log << log1 << "counters: " << contents << logend; // !!
|
||||
log << log2 << "counters: " << contents << logend; // !! nie potrzebne w logach
|
||||
}
|
||||
catch(const Error & e)
|
||||
{
|
||||
|
@ -1909,3 +1910,61 @@ Error Db::EditTicketById(Ticket & ticket)
|
|||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
Error Db::EditTicketRemoveItem(long item_id)
|
||||
{
|
||||
PGresult * r = 0;
|
||||
Error status = Error::ok;
|
||||
|
||||
try
|
||||
{
|
||||
AssertConnection();
|
||||
std::ostringstream query;
|
||||
|
||||
query << "update core.ticket set item_id = '-1' where item_id='" << item_id << "';";
|
||||
|
||||
r = AssertQuery(query.str());
|
||||
AssertResultStatus(r, PGRES_COMMAND_OK);
|
||||
}
|
||||
catch(const Error & e)
|
||||
{
|
||||
status = e;
|
||||
}
|
||||
|
||||
ClearResult(r);
|
||||
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
Error Db::RemoveTicket(long dir_id)
|
||||
{
|
||||
PGresult * r = 0;
|
||||
Error status = Error::ok;
|
||||
|
||||
try
|
||||
{
|
||||
AssertConnection();
|
||||
std::ostringstream query;
|
||||
query << "delete from core.ticket where dir_id='" << dir_id << "';";
|
||||
|
||||
const char * crows = PQcmdTuples(r);
|
||||
if( crows )
|
||||
log << log2 << "Db: deleted " << atol(crows) << " rows from core.ticket" << logend;
|
||||
|
||||
r = AssertQuery(query.str());
|
||||
AssertResultStatus(r, PGRES_COMMAND_OK);
|
||||
}
|
||||
catch(const Error & e)
|
||||
{
|
||||
status = e;
|
||||
}
|
||||
|
||||
ClearResult(r);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -96,6 +96,8 @@ public:
|
|||
//bool IsTicket(long dir_id);
|
||||
Error AddTicket(Ticket & ticket);
|
||||
Error EditTicketById(Ticket & ticket);
|
||||
Error EditTicketRemoveItem(long item_id);
|
||||
Error RemoveTicket(long dir_id);
|
||||
|
||||
protected:
|
||||
|
||||
|
|
|
@ -271,6 +271,7 @@ void Dirs::DeleteDir(long id)
|
|||
dir_table.DelById(id);
|
||||
|
||||
db.RemoveThread(id);
|
||||
db.RemoveTicket(id);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -65,7 +65,6 @@ long default_item;
|
|||
|
||||
|
||||
// used by the database
|
||||
// !! moze da sie w ogole z tego zrezygnowac?
|
||||
long content_id;
|
||||
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ void Session::Clear()
|
|||
new_session = true;
|
||||
spam_score = 0;
|
||||
|
||||
dir_old.clear();
|
||||
// dir_old.clear();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ struct Session
|
|||
Rebus::Item * rebus_item;
|
||||
bool rebus_checked;
|
||||
|
||||
std::string dir_old;
|
||||
//std::string dir_old;
|
||||
|
||||
|
||||
int spam_score;
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
</select>
|
||||
</td></tr>
|
||||
|
||||
<tr><td>permissions:</td><td><input class="privileges" type="text" name="privileges" value="[priv_privileges]"></td></tr>
|
||||
<tr><td>{permissions}:</td><td><input class="privileges" type="text" name="privileges" value="[priv_privileges]"></td></tr>
|
||||
</table>
|
||||
|
||||
<input class="submit" type="submit" value="{change}">
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
[if-one ticket_is]
|
||||
<div class="ticketinfo">
|
||||
<p class="edit"><a href="[doc_base_url][dir]editticket">\[{edit}\]</a></p>
|
||||
[if-one ticket_can_edit]<p class="edit"><a href="[doc_base_url][dir]editticket">\[{edit}\]</a></p>[end]
|
||||
<table>
|
||||
[if-any ticket_type_tab]<tr><th>{ticket_info_type}:</th><td>[ticket_type]</td></tr>[end]
|
||||
[if-any ticket_status_tab]<tr><th>{ticket_info_status}:</th><td>[ticket_status]</td></tr>[end]
|
||||
|
|
|
@ -285,12 +285,6 @@ void dir_last_dates_equal(Info & i)
|
|||
|
||||
|
||||
|
||||
void dir_old(Info & i)
|
||||
{
|
||||
HtmlEscape(i.out, request.session->dir_old);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -129,7 +129,7 @@ PatternTab::iterator i;
|
|||
|
||||
if( i == pattern_tab.end() )
|
||||
{
|
||||
log << log2 << "PC: there is no such an item to delete, id: " << item.id << ", url: " << item.url << logend;
|
||||
log << log3 << "PC: there is no such an item to delete, id: " << item.id << ", url: " << item.url << logend;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -256,7 +256,7 @@ void Templates::CreateFunctions()
|
|||
functions.Insert("dir_last_date_modification", dir_last_date_modification);
|
||||
functions.Insert("dir_last_dates_equal", dir_last_dates_equal);
|
||||
|
||||
functions.Insert("dir_old", dir_old);
|
||||
|
||||
|
||||
/*
|
||||
user
|
||||
|
@ -348,6 +348,7 @@ void Templates::CreateFunctions()
|
|||
*/
|
||||
functions.Insert("ticket_is", ticket_is);
|
||||
functions.Insert("ticket_can_create", ticket_can_create);
|
||||
functions.Insert("ticket_can_edit", ticket_can_edit);
|
||||
functions.Insert("ticket_type", ticket_type);
|
||||
functions.Insert("ticket_status", ticket_status);
|
||||
functions.Insert("ticket_priority", ticket_priority);
|
||||
|
|
|
@ -170,8 +170,6 @@ namespace TemplatesFunctions
|
|||
void dir_last_date_modification(Info & i);
|
||||
void dir_last_dates_equal(Info & i);
|
||||
|
||||
void dir_old(Info & i);
|
||||
|
||||
|
||||
/*
|
||||
user
|
||||
|
@ -258,6 +256,7 @@ namespace TemplatesFunctions
|
|||
*/
|
||||
void ticket_is(Info & i); // !! change to is_ticket lub na ticket_defined
|
||||
void ticket_can_create(Info & i);
|
||||
void ticket_can_edit(Info & i);
|
||||
void ticket_type(Info & i);
|
||||
void ticket_status(Info & i);
|
||||
void ticket_priority(Info & i);
|
||||
|
|
|
@ -32,6 +32,11 @@ void ticket_can_create(Info & i)
|
|||
}
|
||||
|
||||
|
||||
void ticket_can_edit(Info & i)
|
||||
{
|
||||
i.result = request.CanEditTicket();
|
||||
}
|
||||
|
||||
|
||||
void ticket_type(Info & i)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue