added: issues ticket system

added functions: ticket, createticket, editticket
         (there is no 'rm' function working for tickets yet)
changed: mount parser and mount points
         now we have more parameters (arguments in parameters)
some refactoring in functions 'emacs' and 'mkdir'



git-svn-id: svn://ttmath.org/publicrep/cmslu/trunk@554 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2010-01-25 04:52:17 +00:00
parent 356e93914b
commit 89daf6489d
48 changed files with 2856 additions and 874 deletions

View File

@@ -17,46 +17,31 @@
void Content::CheckSpecialFile()
bool Content::FunEmacsCheckAccess()
{
static std::string fstab = "fstab";
Item * etc = data.dirs.GetEtcDir();
if( !etc )
return;
if( request.item.parent_id != etc->id )
return;
if( request.item.url == fstab )
if( !request.is_item )
{
log << log3 << "Content: reloading mount points" << logend;
data.mounts.ReadMounts(request.item.content);
// adding a new item
if( !request.CanUseEmacs(*request.dir_table.back()) )
{
request.status = Error::permission_denied;
return false;
}
}
else // editing an existing item
if( !request.CanUseEmacs(request.item) )
{
request.status = Error::permission_denied;
return false;
}
}
return true;
}
void Content::PostFunEmacsAdd()
{
request.session->done = Done::added_item;
request.is_item = true;
SetUser(request.item);
request.item.group_id = -1;
request.item.privileges = 0644; // !! tymczasowo, bedzie uzyte umask
request.item.parent_id = request.dir_table.back()->id;
request.item.type = Item::file;
// dates (creation and modification) is set by request.item.Clear() at the beginning
if( !request.CanUseEmacs(*request.dir_table.back() ) )
throw Error(Error::permission_denied);
request.session->done = Done::added_item;
request.session->done_status = db.AddItem(request.item);
if( request.session->done_status == Error::ok )
@@ -70,14 +55,8 @@ void Content::PostFunEmacsAdd()
void Content::PostFunEmacsEdit(bool with_url)
{
request.session->done = Done::edited_item;
if( !request.CanUseEmacs(request.item) )
throw Error(Error::permission_denied);
time_t t = std::time(0);
request.item.date_modification = *std::localtime( &t );
request.item.SetDateModifyToNow();
request.session->done = Done::edited_item;
request.session->done_status = db.EditItemById(request.item, with_url);
if( request.session->done_status == Error::ok )
@@ -90,79 +69,53 @@ void Content::PostFunEmacsEdit(bool with_url)
}
// returning true if the 'url' has to be change
bool Content::PostFunSetUrlSubject()
bool Content::PostEmacsCheckAbuse(bool adding)
{
bool with_url = false;
std::string * new_url = request.PostVar("url");
std::string * new_subject = request.PostVar("subject");
if( request.is_item )
if( !CheckRebus() )
{
// editing an item
if( new_url && *new_url != request.item.url )
with_url = true;
}
else
{
// adding a new item
with_url = true;
request.status = Error::incorrect_rebus;
request.session->done = (adding)? Done::added_item : Done::edited_item;
request.session->done_status = Error::incorrect_rebus;
return false;
}
if( new_url )
request.item.url = *new_url;
// !! is tested in createthread once
CheckGetPostTimes();
if( new_subject )
request.item.subject = *new_subject;
if( request.item.subject.empty() )
if( request.session->spam_score > 0 )
{
request.item.subject = request.dir_table.back()->subject;
request.item.subject += "_msg_";
request.item.subject += ToStr(db.Size(request.dir_table.back()->id, Item::file));
request.status = Error::spam;
request.session->done = (adding)? Done::added_item : Done::edited_item;
request.session->done_status = Error::spam;
log << log1 << "Content: ignoring due to suspected spamming" << logend;
return false;
}
// if request.item.url is empty then it will be set from request.item.subject
PrepareUrl(request.item);
return with_url;
return true;
}
void Content::SetContentType()
void Content::PostFunEmacsModifyMountPoint(bool adding)
{
request.item.content_type = Item::ct_formatted_text; // formatted text default
request.PostVar("contenttype", temp);
if( temp == "text" )
request.item.content_type = Item::ct_text;
else
if( temp == "formatted text" )
request.item.content_type = Item::ct_formatted_text;
if( !request.session->puser )
return;
long user_id = request.session->puser->id;
if( temp == "html" )
if( data.mounts.pmount->type == Mount::thread )
{
if( request.CanUseHtml(user_id) )
request.item.content_type = Item::ct_html;
if( adding )
db.EditThreadAddItem(request.dir_table.back()->id, request.item.id);
RedirectToLastDir();
}
else
if( temp == "bbcode" )
if( data.mounts.pmount->type == Mount::ticket )
{
if( request.CanUseBBCode(user_id) )
request.item.content_type = Item::ct_bbcode;
RedirectToLastDir();
}
else
if( temp == "raw" )
{
if( request.CanUseRaw(user_id) )
request.item.content_type = Item::ct_raw;
// Mount::cms
RedirectTo(request.item);
}
}
@@ -170,103 +123,47 @@ void Content::SetContentType()
void Content::PostFunEmacs()
{
bool adding = !request.is_item;
if( !FunEmacsCheckAccess() )
return;
try
bool adding = !request.is_item;
bool edit_with_url = ReadItem(request.item, Item::file);
request.session->done_status = Error::ok;
if( !PostEmacsCheckAbuse(adding) )
return;
if( adding )
{
bool with_url = PostFunSetUrlSubject();
request.PostVar("content", request.item.content);
SetContentType();
if( !CheckRebus() )
{
request.status = Error::spam;
SetUser(request.item);
request.session->done = (adding)? Done::added_item : Done::edited_item;
request.session->done_status = Error::incorrect_rebus;
return;
}
// !! is tested in createthread once
CheckGetPostTimes();
if( request.session->spam_score > 0 )
{
request.status = Error::spam;
SetUser(request.item);
request.session->done = (adding)? Done::added_item : Done::edited_item;
request.session->done_status = Error::spam;
log << log1 << "Content: ignoring due to suspected spamming" << logend;
return;
}
if( adding )
PostFunEmacsAdd();
else
PostFunEmacsEdit(with_url);
CheckSpecialFile();
request.is_item = true;
request.item.privileges = 0644; // !! tymczasowo, bedzie uzyte umask
PostFunEmacsAdd();
}
catch(const Error & e)
else
{
request.session->done_status = e;
PostFunEmacsEdit(edit_with_url);
}
if( request.session->done_status == Error::ok )
{
request.session->item = request.item;
if( data.mounts.CurrentMountType() == Mount::thread )
{
if( adding )
db.EditThreadAddItem(request.dir_table.back()->id, request.item.id);
// request.session->item = request.item;
// request.session->done_timer = 2;
RedirectTo(*request.dir_table.back());
}
else
{
request.session->item = request.item;
request.session->done_timer = 2;
RedirectTo(request.item);
}
PostFunEmacsModifyMountPoint(adding);
CheckSpecialFile();
}
else
{
log << log1 << "Content: PostFunEmacs: Error: " << request.session->done_status << logend;
log << log1 << "Content: PostFunEmacs: Error: "
<< request.session->done_status << logend;
}
}
void Content::FunEmacs()
{
if( !request.is_item )
{
// adding a new item
if( !request.CanUseEmacs(*request.dir_table.back()) )
request.status = Error::permission_denied;
return;
}
// editing an existing item
if( !request.CanUseEmacs(request.item) )
{
request.status = Error::permission_denied;
return;
}
FunEmacsCheckAccess();
}