diff --git a/winixd/core/timezone.cpp b/winixd/core/timezone.cpp index 1164ace..7345e03 100644 --- a/winixd/core/timezone.cpp +++ b/winixd/core/timezone.cpp @@ -258,9 +258,10 @@ bool TimeZone::SetTzDst(pt::Space & year) Dst dst; int year_int = 0; + std::wstring * year_name = year.find_child_space_name(); - if( year.name ) - year_int = Toi(*year.name); + if( year_name ) + year_int = Toi(*year_name); if( year_int < 1970 || year_int > 10000 ) return false; @@ -296,8 +297,10 @@ bool TimeZone::SetTz(pt::Space & space) bool result = true; name.clear(); - if( space.name ) - name = *space.name; + std::wstring * space_name = space.find_child_space_name(); + + if( space_name ) + name = *space_name; id = space.to_int(L"id", -1); offset = GetOffset(space); @@ -308,21 +311,24 @@ bool TimeZone::SetTz(pt::Space & space) pt::Space * dst = space.find_child_space(L"dst"); - if( dst && dst->child_spaces ) + if( dst ) { - for(size_t i=0 ; ichild_spaces->size() ; ++i) - { - pt::Space & year = *(*dst->child_spaces)[i]; + pt::Space::TableType * child_table = dst->find_child_space_table(); - if( !SetTzDst(year) ) + if( child_table ) + { + for(pt::Space * year : *child_table) { - result = false; - break; + if( !SetTzDst(*year) ) + { + result = false; + break; + } } } } -return result; + return result; } diff --git a/winixd/core/timezones.cpp b/winixd/core/timezones.cpp index cd441a7..bfb50ec 100644 --- a/winixd/core/timezones.cpp +++ b/winixd/core/timezones.cpp @@ -123,14 +123,15 @@ bool TimeZones::Empty() const void TimeZones::ParseZones() { - if( temp_space.child_spaces ) + pt::Space::TableType * child_table = temp_space.find_child_space_table(); + + if( child_table ) { - for(size_t i=0 ; isize() ; ++i) + for(pt::Space * zone : *child_table) { - pt::Space & zone = *((*temp_space.child_spaces)[i]); temp_zone.Clear(); - if( temp_zone.SetTz(zone) ) + if( temp_zone.SetTz(*zone) ) { if( !HasZone(temp_zone.id) ) { @@ -154,7 +155,7 @@ void TimeZones::ParseZones() else { log << log1 << "System: problem with reading time zone info from time zone: " - << zone.name << " (skipping) " << logend; + << zone->get_child_space_name() << " (skipping) " << logend; } } } diff --git a/winixd/plugins/export/exportinfo.cpp b/winixd/plugins/export/exportinfo.cpp index 832632d..1a42dc7 100644 --- a/winixd/plugins/export/exportinfo.cpp +++ b/winixd/plugins/export/exportinfo.cpp @@ -330,20 +330,20 @@ void ExportInfo::SendAllFilesFromDir(long dir_id) void ExportInfo::AdditionalExport(const Item & item) { - if( item.item_content.meta.child_spaces ) - { - for(size_t i=0 ; isize() ; ++i) - { - pt::Space & child = *(*item.item_content.meta.child_spaces)[i]; + const pt::Space::TableType * child_table = item.item_content.meta.find_child_space_table(); - if( child.name && *child.name == L"export" ) - AdditionalExport(item, child); + if( child_table ) + { + for(const pt::Space * child : *child_table) + { + if( child->is_child_space_name(L"export") ) + AdditionalExport(item, *child); } } } -void ExportInfo::AdditionalExport(const Item & item, pt::Space & meta) +void ExportInfo::AdditionalExport(const Item & item, const pt::Space & meta) { meta.to_list(L"additional_export", additional_export); diff --git a/winixd/plugins/export/exportinfo.h b/winixd/plugins/export/exportinfo.h index 1cc240f..f4d5cfe 100644 --- a/winixd/plugins/export/exportinfo.h +++ b/winixd/plugins/export/exportinfo.h @@ -103,7 +103,7 @@ private: bool SkipDir(long dir_id, std::wstring & dir); void AdditionalExport(const Item & item); - void AdditionalExport(const Item & item, pt::Space & meta); + void AdditionalExport(const Item & item, const pt::Space & meta); void AdditionalExport(const std::wstring & path); bool HasRecurrenceId(long id); diff --git a/winixd/plugins/group/groups.cpp b/winixd/plugins/group/groups.cpp index 92139fe..75df073 100644 --- a/winixd/plugins/group/groups.cpp +++ b/winixd/plugins/group/groups.cpp @@ -59,24 +59,27 @@ void Groups::Reindex() group_index_tab.clear(); size_t seti = 0; - if( space.child_spaces ) - { - while( seti < space.child_spaces->size() ) - { - pt::Space & sp = *(*space.child_spaces)[seti]; + pt::Space::TableType * child_table = space.find_child_space_table(); - if( sp.name ) + if( child_table ) + { + while( seti < child_table->size() ) + { + pt::Space & sp = *(*child_table)[seti]; + std::wstring * name = sp.get_wstr(pt::Space::child_spaces_name); + + if( name ) { - if( set_index.find(*sp.name) == set_index.end() ) + if( set_index.find(*name) == set_index.end() ) { - set_index[*sp.name] = seti; + set_index[*name] = seti; group_index_tab.push_back(GroupIndex()); ReindexGroups(group_index_tab.back(), sp); seti += 1; } else { - slog << logerror << "set: " << sp.name << " already defined (skipping)" << logend; + slog << logerror << "set: " << name << " already defined (skipping)" << logend; space.remove_child_space(seti); } } @@ -87,25 +90,22 @@ void Groups::Reindex() void Groups::ReindexGroups(GroupIndex & group_index, pt::Space & set) { -size_t i, v; + size_t i, v; + pt::Space::TableType * child_table = set.find_child_space_table(); - if( set.child_spaces ) + if( child_table ) { - // loop through all groups in the set - for( i=0 ; i < set.child_spaces->size() ; ++i ) + for( i=0 ; i < child_table->size() ; ++i ) { - pt::Space & group = *(*set.child_spaces)[i]; - // !! IMPROVE ME will be safer to copy the value out - // if we used accidently the group.Text later the key - // would be overwritten - std::wstring key = group.to_wstr(L"key", L"value"); + pt::Space * group = (*child_table)[i]; + std::wstring key = group->to_wstr(L"key", L"value"); + pt::Space::TableType * group_child_table = group->find_child_space_table(); - if( group.child_spaces ) + if( group_child_table ) { - // loop through all values in the group - for(v=0 ; vsize() ; ) + for(v=0 ; v < group_child_table->size() ; ) { - std::wstring * vali = (*group.child_spaces)[v]->get_wstr(key.c_str()); + std::wstring * vali = (*group_child_table)[v]->get_wstr(key.c_str()); if( vali ) { @@ -118,24 +118,26 @@ size_t i, v; } else { - slog << logwarning << "set: " << set.name << " has a group with a duplicated value: " + slog << logwarning << "set: " << group->get_child_space_name() + << " has a group with a duplicated value: " << *vali << " (skipping)" << logend; - group.remove_child_space(v); + group->remove_child_space(v); } } else { log << log1 << "key: " << key << " was not found" << logend; - slog << logwarning << "set: " << set.name - << " has a group without a value (skipping)" << logend; + + slog << logwarning << "set: " << group->get_child_space_name() + << " has a group without a value (skipping)" << logend; - group.remove_child_space(v); + group->remove_child_space(v); } } } - SortValues(group); + SortValues(*group); } } } @@ -146,10 +148,12 @@ void Groups::SortValues(pt::Space & group) sort_by = group.to_wstr(L"sort_by"); sort_asc = group.is_equal(L"sort_asc", L"true"); - if( !sort_by.empty() && group.child_spaces ) + pt::Space::TableType * child_table = group.find_child_space_table(); + + if( !sort_by.empty() && child_table ) { group.to_list(L"sort", sort_value, true); - std::sort(group.child_spaces->begin(), group.child_spaces->end(), SortFunHelper(this)); + std::sort(child_table->begin(), child_table->end(), SortFunHelper(this)); } } @@ -206,26 +210,27 @@ return false; const std::wstring & Groups::GetOption(size_t seti, size_t groupi, size_t valuei, const wchar_t * option) { - if( space.child_spaces && seti < space.child_spaces->size() ) + pt::Space * groups = space.find_child_space(seti); + + if( groups ) { - pt::Space & groups = *(*space.child_spaces)[seti]; + pt::Space * value = groups->find_child_space(groupi); - if( groups.child_spaces && groupi < groups.child_spaces->size() ) + if( value ) { - pt::Space & value = *(*groups.child_spaces)[groupi]; + pt::Space * value_child = value->find_child_space(valuei); - if( value.child_spaces && valuei < value.child_spaces->size() ) + if( value_child ) { - const std::wstring * res = (*value.child_spaces)[valuei]->get_wstr(option); + const std::wstring * res = value_child->get_wstr(option); if( res ) return *res; } - } } -return empty_str; + return empty_str; } @@ -237,15 +242,17 @@ const std::wstring & Groups::GetOption(size_t seti, size_t groupi, size_t valuei size_t Groups::Size(size_t seti, size_t groupi) { - if( space.child_spaces && seti < space.child_spaces->size() ) - { - pt::Space & groups = *(*space.child_spaces)[seti]; + pt::Space * groups = space.find_child_space(seti); - if( groups.child_spaces && groupi < groups.child_spaces->size() ) - return (*groups.child_spaces)[groupi]->child_spaces->size(); + if( groups ) + { + pt::Space * group = groups->find_child_space(groupi); + + if( group ) + return group->child_spaces_size(); } -return 0; + return 0; } diff --git a/winixd/plugins/ticket/sessiondata.cpp b/winixd/plugins/ticket/sessiondata.cpp index 2175352..421c3a0 100644 --- a/winixd/plugins/ticket/sessiondata.cpp +++ b/winixd/plugins/ticket/sessiondata.cpp @@ -144,14 +144,14 @@ void SessionData::BuildFileList(std::vector & file_tab, pt::Space & space) { file_tab.clear(); - if( space.child_spaces ) - { - for(size_t i=0 ; isize() ; ++i) - { - pt::Space & sp = *(*space.child_spaces)[i]; + pt::Space::TableType * child_table = space.find_child_space_table(); - if( sp.name && (*sp.name) == L"param" ) - CheckFile(file_tab, sp); + if( child_table ) + { + for(pt::Space * sp : *child_table) + { + if( sp->is_child_space_name(L"param") ) + CheckFile(file_tab, *sp); } } } @@ -159,21 +159,15 @@ void SessionData::BuildFileList(std::vector & file_tab, pt::Space & space) void SessionData::CheckFile(std::vector & file_tab, pt::Space & space) { - if( space.child_spaces ) + pt::Space::TableType * child_table = space.find_child_space_table(); + + if( child_table ) { - for(size_t i=0 ; isize() ; ++i) + for(pt::Space * sp : *child_table) { - pt::Space & subsp = *(*space.child_spaces)[i]; - - if( subsp.name && *subsp.name == L"file" ) + if( sp->is_child_space_name(L"file") ) { - std::wstring * file_id_str = subsp.get_wstr(L"itemid"); - - if( file_id_str ) - { - long file_id = Tol(*file_id_str); - file_tab.push_back(file_id); - } + file_tab.push_back(sp->to_long(L"itemid")); } } } diff --git a/winixd/plugins/ticket/templates.cpp b/winixd/plugins/ticket/templates.cpp index c6ac87e..22034b8 100644 --- a/winixd/plugins/ticket/templates.cpp +++ b/winixd/plugins/ticket/templates.cpp @@ -171,24 +171,18 @@ return false; */ pt::Space * find_ticket_param(long param_id, pt::Space & meta) { -wchar_t param_id_str[50]; + pt::Space::TableType * child_table = meta.find_child_space_table(); - if( meta.child_spaces ) + if( child_table ) { - // for performane - // should be a little faster in each loop comparing only just text - Toa(param_id, param_id_str, sizeof(param_id_str)/sizeof(wchar_t)); - - for(size_t i=0 ; isize() ; ++i) + for(pt::Space * sp : *child_table) { - pt::Space & sp = *(*meta.child_spaces)[i]; - - if( sp.name && *sp.name == L"param" && sp.is_equal(L"id", param_id_str) ) - return &sp; + if( sp->is_child_space_name(L"param") && sp->to_long(L"id") == param_id ) + return sp; } } -return 0; + return nullptr; } @@ -249,15 +243,15 @@ size_t par_index; void ticket_print_value_select(Info & i, TicketValue & value) { - if( value.is_param && value.is_value && value.config_par->child_spaces ) + if( value.is_param && value.is_value ) { - for(size_t a=0 ; achild_spaces->size() ; ++a) - { - pt::Space & sp = *(*value.config_par->child_spaces)[a]; + pt::Space::TableType * child_table = value.config_par->find_child_space_table(); - if( sp.name && *sp.name == L"option" && sp.to_long(L"id") == value.ticket_par->intv ) + for(pt::Space * sp : *child_table) + { + if( sp->is_child_space_name(L"option") && sp->to_long(L"id") == value.ticket_par->intv ) { - std::wstring * val = sp.get_wstr(L"value"); + std::wstring * val = sp->get_wstr(L"value"); if( val ) i.out << *val; @@ -336,22 +330,21 @@ void ticket_param_value_for_param_id(Info & i) { value_for_param_id.Clear(); - size_t conf_index = 0; pt::Space & space = *ticket_info.cur_conf; int id = Toi(i.par); - if( space.child_spaces ) - { - for( ; conf_index < space.child_spaces->size() ; ++conf_index) - { - pt::Space & sp = *(*space.child_spaces)[conf_index]; + pt::Space::TableType * child_table = space.find_child_space_table(); - if( sp.name && *sp.name == L"param" && sp.to_int(L"id") == id ) + if( child_table ) + { + for(pt::Space * sp : *child_table) + { + if( sp->is_child_space_name(L"param") && sp->to_int(L"id") == id ) { value_for_param_id.Clear(); value_for_param_id.is_param = true; - value_for_param_id.config_par = &sp; - value_for_param_id.param_id = sp.to_long(L"id"); + value_for_param_id.config_par = sp; + value_for_param_id.param_id = sp->to_long(L"id"); if( ticket_info.ticket && ticket_info.item ) { @@ -371,24 +364,22 @@ void ticket_does_param_id_have_value(Info & i) { value_for_param_id.Clear(); - size_t conf_index = 0; pt::Space & space = *ticket_info.cur_conf; + pt::Space::TableType * child_table = space.find_child_space_table(); - if( i.params.size() == 2 && space.child_spaces ) + if( i.params.size() == 2 && child_table ) { long id = Tol(i.params[0].str); long id2 = Tol(i.params[1].str); - for( ; conf_index < space.child_spaces->size() ; ++conf_index) + for(pt::Space * sp : *child_table) { - pt::Space & sp = *(*space.child_spaces)[conf_index]; - - if( sp.name && *sp.name == L"param" && sp.to_long(L"id") == id ) + if( sp->is_child_space_name(L"param") && sp->to_long(L"id") == id ) { value_for_param_id.Clear(); value_for_param_id.is_param = true; - value_for_param_id.config_par = &sp; - value_for_param_id.param_id = sp.to_long(L"id"); + value_for_param_id.config_par = sp; + value_for_param_id.param_id = sp->to_long(L"id"); if( ticket_info.ticket && ticket_info.item ) { @@ -637,23 +628,21 @@ void tickets_tab_param_value_for_param_id(Info & i) if( tickets_value.is_ticket ) { - size_t param_index = 0; pt::Space & space = *ticket_info.cur_conf; long id = Tol(i.par); - if( space.child_spaces ) - { - for( ; param_index < space.child_spaces->size() ; ++param_index) - { - pt::Space & sp = *(*space.child_spaces)[param_index]; + pt::Space::TableType * child_table = space.find_child_space_table(); - if( sp.name && *sp.name == L"param" && - sp.to_long(L"id") == id ) + if( child_table ) + { + for(pt::Space * sp : *child_table) + { + if( sp->is_child_space_name(L"param") && sp->to_long(L"id") == id ) { value_for_param_id.Clear(); value_for_param_id.is_param = true; - value_for_param_id.config_par = &sp; - value_for_param_id.param_id = sp.to_long(L"id"); + value_for_param_id.config_par = sp; + value_for_param_id.param_id = sp->to_long(L"id"); find_ticket_value(value_for_param_id, tickets_value.ticket->par_tab, tickets_value.item->item_content.meta); ticket_print_value(i, value_for_param_id); @@ -674,23 +663,22 @@ void tickets_tab_does_param_id_have_value(Info & i) if( tickets_value.is_ticket && i.params.size() == 2 ) { - size_t param_index = 0; pt::Space & space = *ticket_info.cur_conf; long id = Toi(i.params[0].str); long id2 = Toi(i.params[1].str); - if( space.child_spaces ) - { - for( ; param_index < space.child_spaces->size() ; ++param_index) - { - pt::Space & sp = *(*space.child_spaces)[param_index]; + pt::Space::TableType * child_table = space.find_child_space_table(); - if( sp.name && *sp.name == L"param" && sp.to_long(L"id") == id ) + if( child_table ) + { + for(pt::Space * sp : *child_table) + { + if( sp->is_child_space_name(L"param") && sp->to_long(L"id") == id ) { value_for_param_id.Clear(); value_for_param_id.is_param = true; - value_for_param_id.config_par = &sp; - value_for_param_id.param_id = sp.to_long(L"id"); + value_for_param_id.config_par = sp; + value_for_param_id.param_id = sp->to_long(L"id"); find_ticket_value(value_for_param_id, tickets_value.ticket->par_tab, tickets_value.item->item_content.meta); @@ -725,24 +713,26 @@ void tickets_tab_conf_tab(Info & i) conf_index = i.iter; pt::Space & space = *ticket_info.cur_conf; - if( space.child_spaces ) - { - while( conf_index < space.child_spaces->size() ) - { - pt::Space & sp = *(*space.child_spaces)[conf_index]; + pt::Space::TableType * child_table = space.find_child_space_table(); - if( sp.name && *sp.name == L"param" ) + if( child_table ) + { + while( conf_index < child_table->size() ) + { + pt::Space & sp = *(*child_table)[conf_index]; + + if( sp.is_child_space_name(L"param") ) break; conf_index += 1; } - i.res = conf_index < space.child_spaces->size(); + i.res = conf_index < child_table->size(); if( i.res ) { value.is_param = true; - value.config_par = (*space.child_spaces)[conf_index]; + value.config_par = (*child_table)[conf_index]; value.param_id = value.config_par->to_long(L"id"); find_ticket_value(value, tickets_value.ticket->par_tab, tickets_value.item->item_content.meta); } @@ -841,20 +831,21 @@ void tickets_tab_conf_tab_file_tab(Info & i) tickets_file_number = 0; pt::Space & mt = *value.value_meta; + pt::Space::TableType * child_table = mt.find_child_space_table(); - if( mt.child_spaces ) + if( child_table ) { - while( tickets_file_index < mt.child_spaces->size() ) + while( tickets_file_index < child_table->size() ) { - pt::Space & sp = *(*mt.child_spaces)[tickets_file_index]; + pt::Space & sp = *(*child_table)[tickets_file_index]; - if( sp.name && *sp.name == L"file" ) + if( sp.is_child_space_name(L"file") ) break; tickets_file_index += 1; } - i.res = (tickets_file_index < mt.child_spaces->size()); + i.res = (tickets_file_index < child_table->size()); if( i.res && i.iter > 0 ) tickets_file_number += 1; @@ -871,7 +862,7 @@ void tickets_tab_conf_tab_file_tab_index(Info & i) { pt::Space & mt = *value.value_meta; - if( mt.child_spaces && tickets_file_index < mt.child_spaces->size() ) + if( mt.find_child_space(tickets_file_index) ) i.out << tickets_file_number; } } @@ -885,9 +876,10 @@ void tickets_tab_conf_tab_file_tab_path(Info & i) if( value.is_value && !value.is_in_ticket_par ) { pt::Space & mt = *value.value_meta; + pt::Space * sp = mt.find_child_space(tickets_file_index); - if( mt.child_spaces && tickets_file_index < mt.child_spaces->size() ) - i.out << (*mt.child_spaces)[tickets_file_index]->to_wstr(L"path"); + if( sp ) + i.out << sp->to_wstr(L"path"); } } @@ -899,9 +891,10 @@ void tickets_tab_conf_tab_file_tab_itemid(Info & i) if( value.is_value && !value.is_in_ticket_par ) { pt::Space & mt = *value.value_meta; + pt::Space * sp = mt.find_child_space(tickets_file_index); - if( mt.child_spaces && tickets_file_index < mt.child_spaces->size() ) - i.out << (*mt.child_spaces)[tickets_file_index]->to_wstr(L"itemid"); + if( sp ) + i.out << sp->to_long(L"itemid"); } } @@ -913,9 +906,10 @@ void tickets_tab_conf_tab_file_tab_meta(Info & i) if( value.is_value && !value.is_in_ticket_par ) { pt::Space & mt = *value.value_meta; + pt::Space * sp = mt.find_child_space(tickets_file_index); - if( mt.child_spaces && tickets_file_index < mt.child_spaces->size() ) - space_value(i, *(*mt.child_spaces)[tickets_file_index]); + if( sp ) + space_value(i, *sp); } } @@ -954,26 +948,27 @@ void ticket_tab(Info & i) value.Clear(); conf_index = i.iter; - pt::Space & space = *ticket_info.cur_conf; + pt::Space & space = *ticket_info.cur_conf; // CHECKME is ticket_info.cur_conf always set? + pt::Space::TableType * child_table = space.find_child_space_table(); - if( space.child_spaces ) + if( child_table ) { - while( conf_index < space.child_spaces->size() ) + while( conf_index < child_table->size() ) { - pt::Space & sp = *(*space.child_spaces)[conf_index]; + pt::Space & sp = *(*child_table)[conf_index]; - if( sp.name && *sp.name == L"param" ) + if( sp.is_child_space_name(L"param") ) break; conf_index += 1; } - i.res = conf_index < space.child_spaces->size(); + i.res = conf_index < child_table->size(); if( i.res ) { value.is_param = true; - value.config_par = (*space.child_spaces)[conf_index]; + value.config_par = (*child_table)[conf_index]; value.param_id = value.config_par->to_long(L"id"); if( ticket_info.ticket && ticket_info.item ) @@ -1072,21 +1067,21 @@ void ticket_tab_select_tab(Info & i) if( value.is_param ) { select_index = i.iter; - pt::Space & sp = *value.config_par; + pt::Space::TableType * child_table = value.config_par->find_child_space_table(); - if( sp.child_spaces ) + if( child_table ) { - while( select_index < sp.child_spaces->size() ) + while( select_index < child_table->size() ) { - pt::Space & sp_child = *(*sp.child_spaces)[select_index]; + pt::Space & sp = *(*child_table)[select_index]; - if( sp_child.name && *sp_child.name == L"option" ) + if( sp.is_child_space_name(L"option") ) break; select_index += 1; } - i.res = (select_index < sp.child_spaces->size()); + i.res = (select_index < child_table->size()); } } } @@ -1098,13 +1093,13 @@ void ticket_tab_select_tab_is_selected(Info & i) if( value.is_param ) { - pt::Space & sp = *value.config_par; + pt::Space::TableType * child_table = value.config_par->find_child_space_table(); - if( sp.child_spaces && select_index < sp.child_spaces->size() ) + if( child_table && select_index < child_table->size() ) { - pt::Space & sp_child = *(*sp.child_spaces)[select_index]; + pt::Space & sp = *(*child_table)[select_index]; - long id = sp_child.to_long(L"id"); + long id = sp.to_long(L"id"); if( value.is_value ) { @@ -1126,10 +1121,10 @@ void ticket_tab_select_tab_name(Info & i) if( value.is_param ) { - pt::Space & sp = *value.config_par; + pt::Space * sp = value.config_par->find_child_space(select_index); - if( sp.child_spaces && select_index < sp.child_spaces->size() ) - i.out << (*sp.child_spaces)[select_index]->to_wstr(L"value"); + if( sp ) + i.out << sp->to_wstr(L"value"); } } @@ -1140,10 +1135,10 @@ void ticket_tab_select_tab_id(Info & i) if( value.is_param ) { - pt::Space & sp = *value.config_par; + pt::Space * sp = value.config_par->find_child_space(select_index); - if( sp.child_spaces && select_index < sp.child_spaces->size() ) - i.out << (*sp.child_spaces)[select_index]->to_wstr(L"id"); + if( sp ) + i.out << sp->to_wstr(L"id"); } } @@ -1153,10 +1148,10 @@ void ticket_tab_select_tab_meta(Info & i) if( value.is_param ) { - pt::Space & sp = *value.config_par; + pt::Space * sp = value.config_par->find_child_space(select_index); - if( sp.child_spaces && select_index < sp.child_spaces->size() ) - space_value(i, *(*sp.child_spaces)[select_index]); + if( sp ) + space_value(i, *sp); } } @@ -1173,21 +1168,21 @@ void ticket_tab_file_tab(Info & i) if( i.iter == 0 ) ticket_file_number = 0; - pt::Space & mt = *value.value_meta; + pt::Space::TableType * child_table = value.value_meta->find_child_space_table(); - if( mt.child_spaces ) + if( child_table ) { - while( ticket_file_index < mt.child_spaces->size() ) + while( ticket_file_index < child_table->size() ) { - pt::Space & sp = *(*mt.child_spaces)[ticket_file_index]; + pt::Space & sp = *(*child_table)[ticket_file_index]; - if( sp.name && *sp.name == L"file" ) + if( sp.is_child_space_name(L"file") ) break; ticket_file_index += 1; } - i.res = (ticket_file_index < mt.child_spaces->size()); + i.res = (ticket_file_index < child_table->size()); if( i.res && i.iter > 0 ) ticket_file_number += 1; @@ -1202,9 +1197,9 @@ void ticket_tab_file_tab_index(Info & i) if( value.is_value && !value.is_in_ticket_par ) { - pt::Space & mt = *value.value_meta; + pt::Space * sp = value.value_meta->find_child_space(ticket_file_index); - if( mt.child_spaces && ticket_file_index < mt.child_spaces->size() ) + if( sp ) i.out << ticket_file_number; } } @@ -1216,10 +1211,10 @@ void ticket_tab_file_tab_path(Info & i) if( value.is_value && !value.is_in_ticket_par ) { - pt::Space & mt = *value.value_meta; + pt::Space * sp = value.value_meta->find_child_space(ticket_file_index); - if( mt.child_spaces && ticket_file_index < mt.child_spaces->size() ) - i.out << (*mt.child_spaces)[ticket_file_index]->to_wstr(L"path"); + if( sp ) + i.out << sp->to_wstr(L"path"); } } @@ -1229,10 +1224,10 @@ void ticket_tab_file_tab_itemid(Info & i) if( value.is_value && !value.is_in_ticket_par ) { - pt::Space & mt = *value.value_meta; + pt::Space * sp = value.value_meta->find_child_space(ticket_file_index); - if( mt.child_spaces && ticket_file_index < mt.child_spaces->size() ) - i.out << (*mt.child_spaces)[ticket_file_index]->to_wstr(L"itemid"); + if( sp ) + i.out << sp->to_long(L"itemid"); } } @@ -1242,10 +1237,10 @@ void ticket_tab_file_tab_meta(Info & i) if( value.is_value && !value.is_in_ticket_par ) { - pt::Space & mt = *value.value_meta; + pt::Space * sp = value.value_meta->find_child_space(ticket_file_index); - if( mt.child_spaces && ticket_file_index < mt.child_spaces->size() ) - space_value(i, *(*mt.child_spaces)[ticket_file_index]); + if( sp ) + space_value(i, *sp); } } diff --git a/winixd/plugins/ticket/ticketinfo.cpp b/winixd/plugins/ticket/ticketinfo.cpp index a858101..fb8f3c7 100644 --- a/winixd/plugins/ticket/ticketinfo.cpp +++ b/winixd/plugins/ticket/ticketinfo.cpp @@ -302,14 +302,19 @@ void TicketInfo::CheckMinMaxValue(pt::Space & space, Ticket::TicketParam & par) else if( *type == L"select" ) { - if( space.child_spaces ) - { - for(size_t a=0 ; asize() ; ++a) - { - pt::Space & sp = *(*space.child_spaces)[a]; + pt::Space::TableType * child_table = space.find_child_space_table(); - if( sp.name && *sp.name == L"option" && sp.to_long(L"id") == par.intv ) - return; + if( child_table ) + { + for(pt::Space * sp : *child_table) + { + if( sp->is_child_space_name(L"option") ) + { + if( sp->to_long(L"id") == par.intv ) + { + return; + } + } } } @@ -324,21 +329,26 @@ void TicketInfo::CheckMinMaxValue(pt::Space & space, Ticket::TicketParam & par) pt::Space & TicketInfo::FindAddMetaByParam(pt::Space & meta, long param) { - if( meta.child_spaces ) - { - for(size_t i=0 ; isize() ; ++i) - { - pt::Space & sp = *(*meta.child_spaces)[i]; + pt::Space::TableType * child_table = meta.find_child_space_table(); - if( sp.name && *sp.name == L"param" && sp.to_long(L"id") == param ) - return sp; + if( child_table ) + { + for(pt::Space * sp : *child_table) + { + if( sp->is_child_space_name(L"param") ) + { + if( sp->to_long(L"id") == param ) + { + return *sp; + } + } } } pt::Space & sp = meta.add_child_space(L"param"); sp.add(L"id", param); -return sp; + return sp; } @@ -484,15 +494,15 @@ void TicketInfo::ReadTicketParam(Ticket & ticket, long param_id, const std::wstr { ticket_param.Clear(); - if( cur_conf->child_spaces ) - { - for(size_t i=0 ; ichild_spaces->size() ; ++i) - { - pt::Space & space = *(*cur_conf->child_spaces)[i]; + pt::Space::TableType * child_table = cur_conf->find_child_space_table(); - if( space.name && *space.name == L"param" && space.to_long(L"id") == param_id ) + if( child_table ) + { + for(pt::Space * space : *child_table) + { + if( space->is_child_space_name(L"param") && space->to_long(L"id") == param_id ) { - ReadTicketParam(space, ticket, param_id, value, meta); + ReadTicketParam(*space, ticket, param_id, value, meta); return; } } @@ -505,16 +515,19 @@ void TicketInfo::ReadTicketParam(Ticket & ticket, long param_id, const std::wstr // always adds a new parameter void TicketInfo::ReadTicketParam(long param_id, const PostFile & value, pt::Space & meta) { - if( cur_conf->child_spaces ) - { - for(size_t i=0 ; ichild_spaces->size() ; ++i) - { - pt::Space & space = *(*cur_conf->child_spaces)[i]; + pt::Space::TableType * child_table = cur_conf->find_child_space_table(); - if( space.name && *space.name == L"param" && space.to_long(L"id") == param_id ) + if( child_table ) + { + for(pt::Space * sp : *child_table) + { + if( sp->is_child_space_name(L"param") ) { - ReadTicketValue(space, param_id, value, meta); - return; + if( sp->to_long(L"id") == param_id ) + { + ReadTicketValue(*sp, param_id, value, meta); + return; + } } } } @@ -528,39 +541,38 @@ void TicketInfo::ReadTicketParam(long param_id, const PostFile & value, pt::Spac bool TicketInfo::DeleteTicketFile(Ticket & ticket, long file_id, pt::Space & meta) { - if( meta.child_spaces ) + pt::Space::TableType * meta_child_table = meta.find_child_space_table(); + + if( meta_child_table ) { - for(size_t i=0 ; isize() ; ++i) + for(pt::Space * param : *meta_child_table) { - pt::Space & param = *(*meta.child_spaces)[i]; + pt::Space::TableType * param_child_table = param->find_child_space_table(); - if( param.name && *param.name == L"param" && param.child_spaces ) + if( param_child_table && param->is_child_space_name(L"param") ) { - for(size_t z=0 ; zsize() ; ++z) + for(size_t z=0 ; z < param_child_table->size() ; ++z) { - pt::Space & file = *(*param.child_spaces)[z]; + pt::Space * file = (*param_child_table)[z]; - if( file.name && *file.name == L"file" ) + if( file->is_child_space_name(L"file") && file->to_long(L"itemid") == file_id ) { - if( file.to_long(L"itemid") == file_id ) - { - param.remove_child_space(z); + param->remove_child_space(z); - // !! IMPROVE ME - // temporarily we delete the file here - // but it should be really deleted when the user will press - // the submit button - //functions->fun_rm.RemoveFileOrSymlink(file_id, true); + // !! IMPROVE ME + // temporarily we delete the file here + // but it should be really deleted when the user will press + // the submit button + //functions->fun_rm.RemoveFileOrSymlink(file_id, true); - return true; - } + return true; } } } } } -return false; + return false; } diff --git a/winixd/templates/miscspace.cpp b/winixd/templates/miscspace.cpp index 8a3d180..2cab147 100644 --- a/winixd/templates/miscspace.cpp +++ b/winixd/templates/miscspace.cpp @@ -75,18 +75,18 @@ void copy_space(const std::vector & params, std::vector pt::Space * find_space(const std::vector & params, pt::Space & space, size_t level = 0) { - if( level + 1 < params.size() && space.child_spaces ) - { - for(size_t i=0 ; isize() ; ++i) - { - pt::Space & child = *(*space.child_spaces)[i]; + pt::Space::TableType * child_table = space.find_child_space_table(); - if( child.name && *child.name == params[level].str ) - return find_space(params, child, level+1); + if( level + 1 < params.size() && child_table ) + { + for(pt::Space * child : *child_table) + { + if( child->is_child_space_name(params[level].str.c_str()) ) + return find_space(params, *child, level+1); } // there is no such a space - return 0; + return nullptr; } else {