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:
Tomasz Sowa 2010-02-06 14:08:44 +00:00
parent ed9feaf542
commit 0e50977779
16 changed files with 137 additions and 38 deletions

View File

@ -50,6 +50,7 @@ class Content
void FunEmacs(); void FunEmacs();
void FunPriv(); void FunPriv();
bool FunRmCheckAccess();
void FunRmDirRecursive(); void FunRmDirRecursive();
void FunRmDir(); void FunRmDir();
void FunRm(); void FunRm();
@ -116,6 +117,7 @@ class Content
bool FunEditTicketCheckAccess(); bool FunEditTicketCheckAccess();
void PostFunEditTicketLogAndRedirect(); void PostFunEditTicketLogAndRedirect();
void EditTicketCheckFirstItem();
void EditTicketModTicket(); void EditTicketModTicket();
void EditTicketModDir(); void EditTicketModDir();
void EditTicketModFirstItem(); void EditTicketModFirstItem();

View File

@ -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; return;
} }
EditTicketCheckFirstItem();
EditTicketModTicket(); EditTicketModTicket();
EditTicketModDir(); EditTicketModDir();
EditTicketModFirstItem(); EditTicketModFirstItem();

View File

@ -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() void Content::FunRmDirRecursive()
{ {
data.dirs.MakePath(request.dir_table.back()->id, request.session->dir_old);
// this method deletes recursively all directories // this method deletes recursively all directories
data.dirs.DeleteDir(request.dir_table.back()->id); data.dirs.DeleteDir(request.dir_table.back()->id);
@ -53,12 +74,6 @@ void Content::FunRmDirRecursive()
void Content::FunRmDir() void Content::FunRmDir()
{ {
if( !request.CanRemove(*request.dir_table.back()) )
{
request.status = Error::permission_denied;
return;
}
if( request.param_table.empty() ) if( request.param_table.empty() )
request.status = Error::permission_denied; request.status = Error::permission_denied;
else else
@ -72,27 +87,17 @@ void Content::FunRmDir()
} }
void Content::FunRm() void Content::FunRm()
{ {
if( !request.is_item ) if( !FunRmCheckAccess() )
{
FunRmDir();
return; return;
}
if( !request.CanRemove(request.item) ) if( !request.is_item )
{ return FunRmDir();
request.status = Error::permission_denied;
return;
}
if( request.param_table.empty() ) 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 ) ) if( db.DelItem( request.item ) )
{ {
request.session->done_status = Error::ok; request.session->done_status = Error::ok;
@ -101,6 +106,10 @@ void Content::FunRm()
if( data.mounts.pmount->type == Mount::thread ) if( data.mounts.pmount->type == Mount::thread )
db.EditThreadRemoveItem(request.item.parent_id); db.EditThreadRemoveItem(request.item.parent_id);
else
if( data.mounts.pmount->type == Mount::ticket )
db.EditTicketRemoveItem(request.item.id);
} }
else else
{ {

View File

@ -1103,6 +1103,7 @@ Error Db::DelDirById(long id)
AssertConnection(); AssertConnection();
std::ostringstream query, query2; 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 << "');"; query << "delete from core.content where content.id in (select content_id from core.item where parent_id='" << id << "');";
r = AssertQuery( query.str() ); r = AssertQuery( query.str() );
AssertResultStatus(r, PGRES_COMMAND_OK); AssertResultStatus(r, PGRES_COMMAND_OK);
@ -1226,7 +1227,7 @@ Error Db::DelItemCountContents(const Item & item, long & contents)
contents = atol( AssertValue(r, 0, 0) ); contents = atol( AssertValue(r, 0, 0) );
log << log1 << "counters: " << contents << logend; // !! log << log2 << "counters: " << contents << logend; // !! nie potrzebne w logach
} }
catch(const Error & e) catch(const Error & e)
{ {
@ -1909,3 +1910,61 @@ Error Db::EditTicketById(Ticket & ticket)
return status; 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;
}

View File

@ -96,6 +96,8 @@ public:
//bool IsTicket(long dir_id); //bool IsTicket(long dir_id);
Error AddTicket(Ticket & ticket); Error AddTicket(Ticket & ticket);
Error EditTicketById(Ticket & ticket); Error EditTicketById(Ticket & ticket);
Error EditTicketRemoveItem(long item_id);
Error RemoveTicket(long dir_id);
protected: protected:

View File

@ -271,6 +271,7 @@ void Dirs::DeleteDir(long id)
dir_table.DelById(id); dir_table.DelById(id);
db.RemoveThread(id); db.RemoveThread(id);
db.RemoveTicket(id);
} }

View File

@ -65,7 +65,6 @@ long default_item;
// used by the database // used by the database
// !! moze da sie w ogole z tego zrezygnowac?
long content_id; long content_id;

View File

@ -41,7 +41,7 @@ void Session::Clear()
new_session = true; new_session = true;
spam_score = 0; spam_score = 0;
dir_old.clear(); // dir_old.clear();
} }

View File

@ -60,7 +60,7 @@ struct Session
Rebus::Item * rebus_item; Rebus::Item * rebus_item;
bool rebus_checked; bool rebus_checked;
std::string dir_old; //std::string dir_old;
int spam_score; int spam_score;

View File

@ -28,7 +28,7 @@
</select> </select>
</td></tr> </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> </table>
<input class="submit" type="submit" value="{change}"> <input class="submit" type="submit" value="{change}">

View File

@ -33,7 +33,7 @@
[if-one ticket_is] [if-one ticket_is]
<div class="ticketinfo"> <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> <table>
[if-any ticket_type_tab]<tr><th>{ticket_info_type}:</th><td>[ticket_type]</td></tr>[end] [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] [if-any ticket_status_tab]<tr><th>{ticket_info_status}:</th><td>[ticket_status]</td></tr>[end]

View File

@ -285,12 +285,6 @@ void dir_last_dates_equal(Info & i)
void dir_old(Info & i)
{
HtmlEscape(i.out, request.session->dir_old);
}

View File

@ -129,7 +129,7 @@ PatternTab::iterator i;
if( i == pattern_tab.end() ) 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; return;
} }

View File

@ -256,7 +256,7 @@ void Templates::CreateFunctions()
functions.Insert("dir_last_date_modification", dir_last_date_modification); functions.Insert("dir_last_date_modification", dir_last_date_modification);
functions.Insert("dir_last_dates_equal", dir_last_dates_equal); functions.Insert("dir_last_dates_equal", dir_last_dates_equal);
functions.Insert("dir_old", dir_old);
/* /*
user user
@ -348,6 +348,7 @@ void Templates::CreateFunctions()
*/ */
functions.Insert("ticket_is", ticket_is); functions.Insert("ticket_is", ticket_is);
functions.Insert("ticket_can_create", ticket_can_create); 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_type", ticket_type);
functions.Insert("ticket_status", ticket_status); functions.Insert("ticket_status", ticket_status);
functions.Insert("ticket_priority", ticket_priority); functions.Insert("ticket_priority", ticket_priority);

View File

@ -170,8 +170,6 @@ namespace TemplatesFunctions
void dir_last_date_modification(Info & i); void dir_last_date_modification(Info & i);
void dir_last_dates_equal(Info & i); void dir_last_dates_equal(Info & i);
void dir_old(Info & i);
/* /*
user user
@ -258,6 +256,7 @@ namespace TemplatesFunctions
*/ */
void ticket_is(Info & i); // !! change to is_ticket lub na ticket_defined void ticket_is(Info & i); // !! change to is_ticket lub na ticket_defined
void ticket_can_create(Info & i); void ticket_can_create(Info & i);
void ticket_can_edit(Info & i);
void ticket_type(Info & i); void ticket_type(Info & i);
void ticket_status(Info & i); void ticket_status(Info & i);
void ticket_priority(Info & i); void ticket_priority(Info & i);

View File

@ -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) void ticket_type(Info & i)
{ {