/** * * 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; }