private function parseContentTree($nodeTree, $userGroupType, $arrDynamicPermissionIdsOfGroup, $cssRowClassNr = 1, $level = 0)
 {
     global $_ARRAYLANG;
     foreach ($nodeTree as $nodeData) {
         $pages = $nodeData['data'];
         // remove non-existent pages
         foreach ($pages as $idx => $pageData) {
             if (!$pageData['attr']['id']) {
                 unset($pages[$idx]);
             }
         }
         $numberOfPages = count($pages);
         foreach ($pages as $idx => $pageData) {
             // TODO: handle broken pages differently
             if ($pageData['attr']['id'] == 'broken') {
                 //continue;
             }
             $rowCssClass = array();
             if ($idx == 0) {
                 $rowCssClass[] = 'rowFirst';
             }
             if ($idx + 1 == $numberOfPages) {
                 $rowCssClass[] = 'rowLast';
             }
             $protected = $userGroupType == 'backend' && $pageData['attr']['locked'] || $userGroupType == 'frontend' && $pageData['attr']['protected'];
             if ($protected) {
                 $rowCssClass[] = 'active';
             }
             $published = $nodeData['metadata'][$pageData['attr']['id']]['publishing'] == 'published';
             $this->_objTpl->setVariable(array('ACCESS_PAGE_ID' => $pageData['attr']['id'], 'ACCESS_NODE_ID' => $nodeData['attr']['rel_id'], 'ACCESS_NODE_LANG' => $pageData['language'], 'ACCESS_WEBPAGE_CSS_CLASS' => join(' ', $rowCssClass), 'ACCESS_PAGE_SELECTION_DISPLAY' => $protected ? '' : 'none', 'ACCESS_PAGE_PUBLISHING' => $published ? 'published' : 'unpublished', 'ACCESS_PAGE_PROTECTED' => $protected ? 'locked' : '', 'ACCESS_PAGE_PROTECT_BACKEND' => $userGroupType == 'backend' ? 1 : 0, 'ACCESS_WEBPAGE_TEXT_INDENT' => $level * 20, 'ACCESS_WEBPAGE_NAME' => contrexx_raw2xhtml($pageData['title']) . ' [' . $pageData['language'] . ']', 'ACCESS_PAGE_CHECKED' => $protected && in_array($pageData['attr'][$userGroupType . '_access_id'], $arrDynamicPermissionIdsOfGroup) ? 'checked="checked"' : '', 'ACCESS_CLICK_TO_CHANGE_PROTECTION_TXT' => $userGroupType == 'backend' ? $protected ? $_ARRAYLANG['TXT_ACCESS_CLICK_UNLOCK_PAGE_MODIF'] : $_ARRAYLANG['TXT_ACCESS_CLICK_LOCK_PAGE_MODIFY'] : ($protected ? $_ARRAYLANG['TXT_ACCESS_CLICK_UNLOCK_PAGE_ACCESS'] : $_ARRAYLANG['TXT_ACCESS_CLICK_LOCK_PAGE_ACCESS'])));
             if ($published) {
                 $this->_objTpl->setVariable('ACCESS_WEBPAGE_LINK', \Cx\Core\Routing\URL::fromPageId($pageData['attr']['id']));
                 $this->_objTpl->parse('access_permission_webpage_preview');
             } else {
                 $this->_objTpl->hideBlock('access_permission_webpage_preview');
             }
             $this->_objTpl->parse('access_permission_website');
         }
         if (isset($nodeData['children'])) {
             $this->parseContentTree($nodeData['children'], $userGroupType, $arrDynamicPermissionIdsOfGroup, $cssRowClassNr, $level + 1);
         }
     }
 }