/* * 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. * */ #include "templates.h" #include "../core/data.h" #include "../core/request.h" #include "../core/misc.h" namespace TemplatesFunctions { static std::vector priv_user_table; static size_t priv_user_index; static size_t priv_user_reqid = 0; void priv_user_tab_init() { priv_user_reqid = request.id; priv_user_table.clear(); if( !request.session->puser ) { // not logged priv_user_table.push_back(request.item.user_id); } else if( request.session->puser->super_user ) { // super user is allowed to change to any user for(size_t i=0 ; iname); else i.out << "user_id: " << uid; } else { HtmlEscape(i.out, data.priv_no_user); } } } void priv_user_tab_isdefault(Info & i) { if( priv_user_index < priv_user_table.size() ) { long uid = priv_user_table[priv_user_index]; if( uid == request.item.user_id ) i.result = true; } } static std::vector priv_group_table; static size_t priv_group_index; static size_t priv_group_reqid = 0; void priv_group_tab_init() { priv_group_reqid = request.id; priv_group_table.clear(); if( !request.session->puser ) { // not logged priv_group_table.push_back(request.item.group_id); } else if( request.session->puser->super_user ) { // super user is allowed to change to any group for(size_t i=0 ; ipuser->id == request.item.user_id ) { bool was_current_group = false; // owner of the item -- is allowed to change only to a group in which he belongs to for(size_t i=0 ; ipuser->groups.size() ; ++i) { priv_group_table.push_back( request.session->puser->groups[i] ); if( request.item.group_id == request.session->puser->groups[i] ) was_current_group = true; } // we're showing the item.group_id if it's different if( !was_current_group ) priv_group_table.push_back(request.item.group_id); // switching to -1 is allowed too priv_group_table.push_back(-1); } else { // not the owner and not a super user -- the same as not logged priv_group_table.push_back(request.item.group_id); } } void priv_group_tab(Info & i) { if( priv_group_reqid != request.id ) priv_group_tab_init(); priv_group_index = i.iter; i.result = priv_group_index < priv_group_table.size(); } void priv_group_tab_name(Info & i) { if( priv_group_index < priv_group_table.size() ) { long gid = priv_group_table[priv_group_index]; if( gid != -1 ) { Group * pgroup = data.groups.GetGroup( gid ); if( pgroup ) HtmlEscape(i.out, pgroup->name); else i.out << "group_id: " << gid; } else { HtmlEscape(i.out, data.priv_no_group); } } } void priv_group_tab_isdefault(Info & i) { if( priv_group_index < priv_group_table.size() ) { long gid = priv_group_table[priv_group_index]; if( gid == request.item.group_id ) i.result = true; } } } // namespace TemplatesFunctions