/* * This file is a part of Winix * and is distributed under the 2-Clause BSD licence. * Author: Tomasz Sowa */ /* * Copyright (c) 2008-2014, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */ #ifndef headerfile_winix_db_db #define headerfile_winix_db_db #include #include #include #include #include #include "dbbase.h" #include "dbitemquery.h" #include "dbitemcolumns.h" #include "core/item.h" #include "core/user.h" #include "core/group.h" #include "core/dircontainer.h" #include "core/ugcontainer.h" namespace Winix { class Db : public DbBase { public: // !! przerobic tak aby GetItem zwracalo wszystkie pozycja // !! GetFile tylko dla plikow // !! GetDir tylko dla katalogow // !! GetFile i GetDir beda uzywac GetItem Db() : item_cols(*this) { } bool GetUserPass(const std::wstring & login, long & user_id, UserPass & up); Error AddUser(User & user, const UserPass & up); Error ChangeUserPass(long user_id, const UserPass & up); Error ChangeUserEnv(long user_id, const PT::Space & space); Error ChangeUserAdminEnv(long user_id, const PT::Space & space); Error ChangeUserStatus(long user_id, int status); Error ChangeUserEmail(long user_id, const std::wstring & email); Error ChangeUserLocale(long user_id, size_t locale_id); Error ChangeUserTimeZone(long user_id, size_t time_zone_id); Error RemoveUser(long user_id); Error AddItem(Item & item); Error EditItemById(Item & item, bool with_url = true); Error EditItemByUrl(Item & item, bool with_url = true); // !! nie zwracac zadnych kodow bledow? void GetItems(std::vector & item_tab, const DbItemQuery & item_query); void GetItems(std::vector & item_tab, const DbItemQuery & item_query); Error GetItem(Item & item, const DbItemQuery & item_query); bool GetPriv(Item & item, long id); Error EditPrivById(Item & item, long id); // !! dlaczego tu nie ma const? Error EditParentUrlById(Item & item, long id); Error EditFileById(const Item & item, long id); // file_path, file_fs, file_type Error EditHasThumbById(bool has_thumb, long id); Error EditMetaById(const PT::Space & meta, long id); Error EditAdminMetaById(const PT::Space & meta, long id); Error DelDirById(long id); Error DelFileById(long file_id); Error DelSymlinkById(long symlink_id); Error EditSubjectById(Item & item, long id); Error 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::wstring & url, Item & item); Error EditLinkItem(long id, const std::wstring & link_to, int link_redirect); Error EditTemplateItemById(long id, const std::wstring & new_html_template); long GetItemId(long parent_id, const std::wstring & url, Item::Type type); long GetFileId(long parent_id, const std::wstring & url); long GetDirId(long parent_id, const std::wstring & url); Error AddHardLink(Item & item); Error EditSortIndexItemById(long id, int sort_index); protected: DbTextStream query, query_create_url; std::wstring temp_url; Item dir_temp; Item get_item_temp; std::wstring iq_id_list; DbItemColumns item_cols; bool AddItemCreateUrlSubject(Item & item); Error AddItemIntoContent(Item & item); Error AddItemIntoItem(Item & item); Error EditItemInItem(Item & item, bool with_url); Error EditItemInContent(Item & item); Error EditItemGetIdsByUrl(Item & item); long GetContentId(long item_id); Error DelItemDelItem(long item_id, int type); Error DelItemDelContent(long content_id); Error IncrementContentRef(long content_id); Error DecrementContentRef(long content_id); void GetItemsQuerySelect(const DbItemQuery & iq, DbTextStream & query, bool skip_other_sel); void GetItemsQueryJoin(const DbItemQuery & iq, DbTextStream & query); void GetItemsQueryWhere(const DbItemQuery & iq, DbTextStream & query); void GetItemsQueryOrder(const DbItemQuery & iq, DbTextStream & query); void GetItemsQueryLimit(const DbItemQuery & iq, DbTextStream & query); PGresult * GetItemsQuery(const DbItemQuery & iq, DbTextStream & query, bool skip_other_sel = false); PGresult * GetItemsQuery(const DbItemQuery & iq, bool skip_other_sel = false); }; } // namespace Winix #endif