/* * This file is a part of CMSLU -- Content Management System like Unix * and is not publicly distributed * * Copyright (c) 2008-2009, 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" 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 AddItem(Item & item); Error EditItemById(Item & item, bool with_subject = true); Error EditItemByUrl(Item & item, bool with_subject = true); void CheckAllUrlSubject(); void GetItems(std::vector & item_table, Item & item_ref, bool asc = true); void GetItem(std::vector & item_table, long id); bool GetPriv(Item & item, long id); Error EditPrivById(Item & item, long id); Error DelDirById(long id); bool DelItem(const Item & item); void GetDirs(DirContainer & dir_table); void GetUsers(UGContainer & user_table); void GetGroups(UGContainer & group_table); // !! nowy interfejs 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); 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_subject); Error EditItemInContent(Item & item); Error EditItemGetId(Item & item); Error EditItemGetContentId(Item & item); void CheckAllUrlSubjectModifyItem(Item & item); PGresult * GetItemsQuery(Item & item_ref, bool asc = true); 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; void SetColumns(PGresult * r); void SetItem(PGresult * r, long row, Item & item); }; }; // class Db extern Db db; #endif