/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2008-2010, Tomasz Sowa * All rights reserved. * */ #ifndef headerfilecmslucoredb #define headerfilecmslucoredb #include #include #include #include #include #include #include #include #include "item.h" #include "user.h" #include "group.h" #include "thread.h" #include "error.h" #include "dircontainer.h" #include "ugcontainer.h" #include "ticket.h" class Db { public: Db(bool close_at_end_ = true); ~Db(); // !! przerobic tak aby GetItem zwracalo wszystkie pozycja // !! GetFile tylko dla plikow // !! GetDir tylko dla katalogow // !! GetFile i GetDir beda uzywac GetItem void Init(const std::string & database, const std::string & user, const std::string & pass); bool CheckUser(std::string & login, std::string & password, long & user_id); Error AddUser(User & user, const std::string & password); Error AddItem(Item & item); Error EditItemById(Item & item, bool with_url = true); Error EditItemByUrl(Item & item, bool with_url = true); void CheckAllUrlSubject(); struct ItemQuery { // id is selected always bool sel_parent_id; // parent_id bool sel_user_id; // user_id, modification_user_id bool sel_group_id; // group_id bool sel_guest_name; // guest_name bool sel_privileges; // privileges bool sel_date; // date_creation, date_modification bool sel_subject; // subject bool sel_content; // content, content_type, (content_id) bool sel_url; // url bool sel_type; // type (dir, file, none) bool sel_default_item; // default_item bool sel_auth; // auth, auth_path bool where_id; // bool where_parent_id; // bool where_type; bool where_auth; long id; // if where_id is true long parent_id; // if where_parent_id is true Item::Type type; Item::Auth auth; bool auth_equal; // if true means auth should be equal bool sort_asc; void SetAllSel(bool sel) { sel_parent_id = sel; sel_user_id = sel; sel_group_id = sel; sel_guest_name = sel; sel_privileges = sel; sel_date = sel; sel_subject = sel; sel_content = sel; sel_url = sel; sel_type = sel; sel_default_item= sel; sel_auth = sel; } void SetAllWhere(bool where_) { where_id = where_; where_parent_id = where_; where_type = where_; where_auth = where_; } void SetAll(bool sel, bool where_) { SetAllSel(sel); SetAllWhere(where_); } void WhereId(long id_) { where_id = true; id = id_; } void WhereParentId(long parent_id_) { where_parent_id = true; parent_id = parent_id_; } void WhereType(Item::Type type_) { where_type = true; type = type_; } void WhereAuth(Item::Auth st, bool equal = true) { where_auth = true; auth = st; auth_equal = equal; } ItemQuery() { sort_asc = true; auth_equal = true; SetAll(true, false); id = -1; parent_id = -1; type = Item::none; auth = Item::auth_none; } }; void GetItems(std::vector & item_tab, const ItemQuery & item_query); void GetItems(std::vector & item_tab, const ItemQuery & item_query); // !! pobiera tylko jeden item (cos wymyslec innego z nazwa albo argumentem) void GetItem(std::vector & item_tab, long id); bool GetPriv(Item & item, long id); Error EditPrivById(Item & item, long id); Error EditParentUrlById(Item & item, long id); Error EditAuthById(Item & item, long id); Error DelDirById(long id); Error EditSubjectById(Item & item, long id); bool DelItem(const Item & item); void GetDirs(DirContainer & dir_tab); void GetUsers(UGContainer & user_tab); void GetGroups(UGContainer & group_tab); // !! nowy interfejs long Size(long parent_id, Item::Type type = Item::none); Error GetItemById(long item_id, Item & item); Error GetItem(long parent_id, const std::string & url, Item & item); Error EditDefaultItem(long id, long new_default_item); long GetItemId(long parent_id, const std::string & url, Item::Type type); long GetFileId(long parent_id, const std::string & url); long GetDirId(long parent_id, const std::string & url); static tm ConvertTime(const char * str); static const char * ConvertTime(const tm & t); PGconn * GetPGconn(); virtual void Connect(); Error AddThread(Thread & thread); Error GetThreadByDirId(long dir_id, Thread & thread); Error GetThreads(long parent_id, std::vector & thread_tab); Error EditThreadAddItem(long dir_id, long item_id); Error EditThreadRemoveItem(long dir_id); Error RemoveThread(long dir_id); Error GetTicketByDirId(long dir_id, Ticket & ticket); Error GetTickets(long parent_id, std::vector & ticket_tab); //bool IsTicket(long dir_id); Error AddTicket(Ticket & ticket); Error EditTicketById(Ticket & ticket); Error EditTicketRemoveItem(long item_id); Error RemoveTicket(long dir_id); protected: PGconn * pg_conn; std::string db_database, db_user, db_pass; bool close_at_end; void SetDbParameters(); void Close(); void AssertConnection(); std::string Escape(const std::string & s); std::string Escape(const char * s); PGresult * AssertQuery(const std::string & q); void AssertResultStatus(PGresult * r, ExecStatusType t); static int AssertColumn(PGresult * r, const char * column_name); static const char * AssertValue(PGresult * r, int row, int col); void ClearResult(PGresult * r); long AssertCurrval(const char * table); bool AddItemCreateUrlSubject(Item & item); Error AddItemIntoContent(Item & item); Error AddItemIntoItem(Item & item); Error EditItemInItem(Item & item, bool with_url); Error EditItemInContent(Item & item); Error EditItemGetId(Item & item); Error EditItemGetContentId(Item & item); void CheckAllUrlSubjectModifyItem(Item & item); PGresult * GetItemsQuery(const ItemQuery & iq, bool skip_other_sel = false); bool DelItemDelItem(const Item & item); void DelItemDelContent(const Item & item); Error DelItemCountContents(const Item & item, long & contents); struct ItemColumns { int id, user_id, group_id, privileges, date_creation, date_modification, url, type, parent_id, content_id, default_item, subject, content, content_type, guest_name, auth, auth_path, modification_user_id; void SetColumns(PGresult * r); void SetItem(PGresult * r, long row, Item & item); }; struct TicketColumns { int id, dir_id, parent_id, type, status, priority, category, expected, progress, item_id; void SetColumns(PGresult * r); void SetTicket(PGresult * r, long row, Ticket & ticket); }; }; // class Db #endif