removed from Item: update() and save() methods which take the 'url_was_changed' argument
and added ItemModelData (based on morm::ModelData) class which has 'prepare_unique_url' field, an object of this class is passed to update(), insert() and save() methods fixed: Dirs::CheckRootDir(): update should update childs too (privileges) WIP: #4
This commit is contained in:
@@ -52,6 +52,8 @@ Item::Item()
|
||||
|
||||
void Item::map_fields()
|
||||
{
|
||||
//ItemModelData * item_model_data = dynamic_cast<ItemModelData>(get_model_data());
|
||||
|
||||
int type_helper = static_cast<int>(type);
|
||||
|
||||
field(L"id", id, false, false, true);
|
||||
@@ -87,7 +89,14 @@ void Item::after_insert()
|
||||
|
||||
bool Item::insert(morm::ModelData * model_data, bool update_whole_tree)
|
||||
{
|
||||
bool url_prepared_correctly = prepare_url();
|
||||
ItemModelData * item_model_data = dynamic_cast<ItemModelData*>(model_data);
|
||||
bool url_prepared_correctly = true;
|
||||
|
||||
if( !item_model_data || item_model_data->prepare_unique_url )
|
||||
{
|
||||
url_prepared_correctly = prepare_url();
|
||||
}
|
||||
|
||||
bool insert_status = morm::Model::insert(model_data, update_whole_tree);
|
||||
|
||||
if( insert_status )
|
||||
@@ -95,7 +104,7 @@ bool Item::insert(morm::ModelData * model_data, bool update_whole_tree)
|
||||
if( !url_prepared_correctly )
|
||||
{
|
||||
PT::Toa(id, url);
|
||||
morm::Model::update(model_data, false);
|
||||
insert_status = morm::Model::update(model_data, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,36 +112,23 @@ bool Item::insert(morm::ModelData * model_data, bool update_whole_tree)
|
||||
}
|
||||
|
||||
|
||||
bool Item::insert(morm::ModelData & model_data, bool update_whole_tree)
|
||||
{
|
||||
return insert(&model_data, update_whole_tree);
|
||||
}
|
||||
|
||||
|
||||
bool Item::insert(bool update_whole_tree)
|
||||
{
|
||||
return insert(nullptr, update_whole_tree);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* this can be done better
|
||||
* instead of calculating if more than zero items are in a directory
|
||||
* just get the one item (should be one in normal circumstances)
|
||||
* and compare its 'id' with 'this.id' and if these ids are different
|
||||
* then prepare a new url
|
||||
*
|
||||
*
|
||||
*/
|
||||
bool Item::update(morm::ModelData * model_data, bool url_was_changed, bool update_whole_tree)
|
||||
bool Item::update(morm::ModelData * model_data, bool update_whole_tree)
|
||||
{
|
||||
ItemModelData * item_model_data = dynamic_cast<ItemModelData*>(model_data);
|
||||
bool url_prepared_correctly = true;
|
||||
|
||||
if( url_was_changed )
|
||||
if( !item_model_data || item_model_data->prepare_unique_url )
|
||||
{
|
||||
url_prepared_correctly = prepare_url();
|
||||
CalcItemsHelper helper = calc_items_by_url(parent_id, url);
|
||||
|
||||
if( helper.size == 1 && helper.item_id == id )
|
||||
{
|
||||
// the same item
|
||||
}
|
||||
else
|
||||
{
|
||||
url_prepared_correctly = prepare_url();
|
||||
}
|
||||
}
|
||||
|
||||
bool update_status = morm::Model::update(model_data, update_whole_tree);
|
||||
@@ -142,7 +138,7 @@ bool Item::update(morm::ModelData * model_data, bool url_was_changed, bool updat
|
||||
if( !url_prepared_correctly )
|
||||
{
|
||||
PT::Toa(id, url);
|
||||
morm::Model::update(model_data, false);
|
||||
update_status = morm::Model::update(model_data, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,54 +146,6 @@ bool Item::update(morm::ModelData * model_data, bool url_was_changed, bool updat
|
||||
}
|
||||
|
||||
|
||||
bool Item::update(morm::ModelData & model_data, bool url_was_changed, bool update_whole_tree)
|
||||
{
|
||||
return update(&model_data, url_was_changed, update_whole_tree);
|
||||
}
|
||||
|
||||
|
||||
bool Item::update(bool url_was_changed, bool update_whole_tree)
|
||||
{
|
||||
return update(nullptr, url_was_changed, update_whole_tree);
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool Item::save(morm::ModelData * model_data, bool url_was_changed, bool save_whole_tree)
|
||||
{
|
||||
bool url_prepared_correctly = true;
|
||||
|
||||
if( save_mode == DO_INSERT_ON_SAVE || (save_mode == DO_UPDATE_ON_SAVE && url_was_changed) )
|
||||
{
|
||||
url_prepared_correctly = prepare_url();
|
||||
}
|
||||
|
||||
bool save_status = morm::Model::save(model_data, save_whole_tree);
|
||||
|
||||
if( save_status )
|
||||
{
|
||||
if( !url_prepared_correctly )
|
||||
{
|
||||
PT::Toa(id, url);
|
||||
morm::Model::save(model_data, false);
|
||||
}
|
||||
}
|
||||
|
||||
return save_status;
|
||||
}
|
||||
|
||||
bool Item::save(morm::ModelData & model_data, bool url_was_changed, bool save_whole_tree)
|
||||
{
|
||||
return save(&model_data, url_was_changed, save_whole_tree);
|
||||
}
|
||||
|
||||
|
||||
bool Item::save(bool url_was_changed, bool save_whole_tree)
|
||||
{
|
||||
return save(nullptr, url_was_changed, save_whole_tree);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void Item::Clear()
|
||||
@@ -213,19 +161,19 @@ void Item::Clear()
|
||||
}
|
||||
|
||||
|
||||
long Item::calc_items_by_url(long parent_id, const std::wstring & url)
|
||||
CalcItemsHelper Item::calc_items_by_url(long parent_id, const std::wstring & url)
|
||||
{
|
||||
morm::Finder<CalcItemsHelper> finder(model_connector);
|
||||
|
||||
CalcItemsHelper helper = finder.
|
||||
prepare_to_select().
|
||||
raw("select count(id) as size from core.item").
|
||||
raw("select count(id) as size, min(id) as item_id from core.item").
|
||||
where().
|
||||
eq(L"parent_id", parent_id).
|
||||
eq(L"url", url).
|
||||
get();
|
||||
|
||||
return helper.size;
|
||||
return helper;
|
||||
}
|
||||
|
||||
|
||||
@@ -236,8 +184,8 @@ bool Item::prepare_url()
|
||||
{
|
||||
std::wstring temp_url;
|
||||
bool is_that_url;
|
||||
int index = 1;
|
||||
const int max_index = 99;
|
||||
size_t index = 1;
|
||||
std::wstring postfix;
|
||||
|
||||
// only root dir may not have the url
|
||||
@@ -255,9 +203,9 @@ std::wstring postfix;
|
||||
|
||||
PrepareNewFileName(url, postfix, temp_url);
|
||||
|
||||
long size = calc_items_by_url(parent_id, temp_url);
|
||||
CalcItemsHelper helper = calc_items_by_url(parent_id, temp_url);
|
||||
|
||||
if( size > 0 )
|
||||
if( helper.size > 0 )
|
||||
{
|
||||
is_that_url = true;
|
||||
}
|
||||
@@ -292,6 +240,10 @@ void Item::do_migration(morm::ModelConnector * model_connector)
|
||||
|
||||
}
|
||||
|
||||
void Item::propagate_connector()
|
||||
{
|
||||
item_content.set_connector(model_connector);
|
||||
}
|
||||
|
||||
|
||||
} // namespace Winix
|
||||
|
@@ -50,20 +50,31 @@ public:
|
||||
|
||||
long size;
|
||||
|
||||
/*
|
||||
* add an id of an item and compare it in 'update' method
|
||||
* (in a case size==1)
|
||||
*
|
||||
*/
|
||||
long item_id;
|
||||
|
||||
void map_fields()
|
||||
{
|
||||
field(L"size", size);
|
||||
field(L"item_id", item_id);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
// IMPROVEME rename me and move to a better place
|
||||
class ItemModelData : public morm::ModelData
|
||||
{
|
||||
public:
|
||||
|
||||
ItemModelData()
|
||||
{
|
||||
prepare_unique_url = true;
|
||||
}
|
||||
|
||||
bool prepare_unique_url;
|
||||
};
|
||||
|
||||
|
||||
class Item : public morm::Model
|
||||
{
|
||||
public:
|
||||
@@ -139,18 +150,11 @@ public:
|
||||
bool prepare_url();
|
||||
|
||||
|
||||
using morm::Model::insert;
|
||||
using morm::Model::update;
|
||||
|
||||
bool insert(morm::ModelData * model_data, bool update_whole_tree = true);
|
||||
bool insert(morm::ModelData & model_data, bool update_whole_tree = true);
|
||||
bool insert(bool update_whole_tree = true);
|
||||
|
||||
bool update(morm::ModelData * model_data, bool url_was_changed, bool update_whole_tree = true);
|
||||
bool update(morm::ModelData & model_data, bool url_was_changed, bool update_whole_tree = true);
|
||||
bool update(bool url_was_changed, bool update_whole_tree = true);
|
||||
|
||||
bool save(morm::ModelData * model_data, bool url_was_changed, bool save_whole_tree = true);
|
||||
bool save(morm::ModelData & model_data, bool url_was_changed, bool save_whole_tree = true);
|
||||
bool save(bool url_was_changed, bool save_whole_tree = true);
|
||||
bool update(morm::ModelData * model_data, bool update_whole_tree = true);
|
||||
|
||||
|
||||
/*
|
||||
@@ -166,9 +170,11 @@ public:
|
||||
*/
|
||||
static void do_migration(morm::ModelConnector * model_connector);
|
||||
|
||||
void propagate_connector();
|
||||
|
||||
protected:
|
||||
|
||||
long calc_items_by_url(long parent_id, const std::wstring & url);
|
||||
CalcItemsHelper calc_items_by_url(long parent_id, const std::wstring & url);
|
||||
|
||||
|
||||
};
|
||||
|
Reference in New Issue
Block a user