/**
  *
  * Generates a single group row for the ACL editing form.
  *
  * @access private
  * @param  String  $template       The row template
  * @param  array   $selectedGroups The groups, that are granted read, write and
  *                                 moderation access for the edited forum.
  * @param  Integer $parent         The parent group. NULL for no parent group.
  * @param  array   $parentList     A list of all parent groups.
  * @return String                  HTML content
  */
 function aclGetGroupRow($template, $selectedGroups, $parent = NULL, $parentList = array())
 {
     $where = $parent == NULL ? ' AND (subgroup="" OR subgroup IS NULL) ' : ' AND find_in_set(' . intval($parent) . ',subgroup) ';
     $res = $this->databaseHandle->exec_SELECTquery('*', 'fe_groups', 'deleted=0 ' . $this->p->getUserPidQuery('fe_groups') . $where);
     $content = '';
     while ($arr = $this->databaseHandle->sql_fetch_assoc($res)) {
         $groupMarker = array('###GROUP_NAME###' => $this->validator->specialChars($arr['title']), '###GROUP_UID###' => $arr['uid'], '###GROUP_INDENT###' => count($parentList) * 24, '###GROUP_ONCHECK_READ###' => '', '###GROUP_ONUNCHECK_READ###' => '', '###GROUP_ONCHECK_WRITE###' => '', '###GROUP_ONUNCHECK_WRITE###' => '', '###GROUP_ONCHECK_MOD###' => '', '###GROUP_ONUNCHECK_MOD###' => '');
         if ($this->p->getAdminGroup() == $arr['uid']) {
             $groupMarker['###GROUP_READ_CHECKED###'] = 'checked="checked" disabled="disabled"';
             $groupMarker['###GROUP_WRITE_CHECKED###'] = 'checked="checked" disabled="disabled"';
             $groupMarker['###GROUP_MOD_CHECKED###'] = 'checked="checked" disabled="disabled"';
         } else {
             $groupMarker['###GROUP_READ_CHECKED###'] = in_array($arr['uid'], $selectedGroups[0]) ? 'checked="checked"' : '';
             $groupMarker['###GROUP_WRITE_CHECKED###'] = in_array($arr['uid'], $selectedGroups[1]) ? 'checked="checked"' : '';
             $groupMarker['###GROUP_MOD_CHECKED###'] = in_array($arr['uid'], $selectedGroups[2]) ? 'checked="checked"' : '';
         }
         $children = array_filter(explode(',', $this->tools->getParentUserGroups($arr['uid'])), 'intval');
         foreach ($children as $child) {
             $groupMarker['###GROUP_ONCHECK_READ###'] .= 'checkACLFlag(\'read\', ' . $child . ');';
             $groupMarker['###GROUP_ONCHECK_WRITE###'] .= 'checkACLFlag(\'write\', ' . $child . ');';
             $groupMarker['###GROUP_ONCHECK_MOD###'] .= 'checkACLFlag(\'moderate\', ' . $child . ');';
         }
         foreach ($parentList as $parent) {
             $groupMarker['###GROUP_ONUNCHECK_READ###'] .= 'uncheckACLFlag(\'read\', ' . $parent . ');';
             $groupMarker['###GROUP_ONUNCHECK_WRITE###'] .= 'uncheckACLFlag(\'write\', ' . $parent . ');';
             $groupMarker['###GROUP_ONUNCHECK_MOD###'] .= 'uncheckACLFlag(\'moderate\', ' . $parent . ');';
         }
         $content .= $this->cObj->substituteMarkerArray($template, $groupMarker);
         $content .= $this->aclGetGroupRow($template, $selectedGroups, $arr['uid'], array_merge($parentList, array($arr['uid'])));
     }
     return $content;
 }