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 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();

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;
}
EditTicketCheckFirstItem();
EditTicketModTicket();
EditTicketModDir();
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()
{
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
{

View File

@ -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;
}

View File

@ -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:

View File

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

View File

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

View File

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

View File

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

View File

@ -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}">

View File

@ -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]

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() )
{
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;
}

View File

@ -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);

View File

@ -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);

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)
{