draw('Title', $entry); $this->draw('Subtitle', $entry); echo "\n"; // menu $this->draw('Menu', $entry); } protected function drawEntryTitle($entry) {} protected function drawEntrySubtitle($entry) {} protected function drawEntryMenu($entry) {} protected function drawEntryJavascript($entry) { if (isset($_SESSION[APPCONFIG])) { echo ''; } echo ''; echo ''; echo ''; echo ''; for ($i = 0; $i < count($this->shown_attributes); $i++) { $this->draw('Javascript', $this->shown_attributes[$i]); } echo ''; } /********************************/ /* Paint a DefaultCreatingEntry */ /********************************/ public function visitDefaultCreatingEntryStart($entry) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); // init $this->visit('Entry::Start', $entry); // check $container = $entry->getContainer(); $container_ok = true; $objectclasses_ok = true; if ($this->step != 1) { if (!$container || !$this->ldapserver->dnExists($container)) { $container_ok = false; $this->step = 1; } if (!$entry->getAttributes()) { $objectclasses_ok = false; $this->step = 1; } } // header $this->draw('Header', $entry); // errors if (!$container_ok) { pla_error(sprintf(_('The container you specified (%s) does not exist.'),htmlspecialchars($container)), null, -1, false); echo '
'; } if (!$objectclasses_ok) { pla_error(_('You did not select any objectClasses for this object.'), null, -1, false); echo '
'; } } public function visitDefaultCreatingEntryEnd($entry) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); $this->draw('StepTitle', $entry, $this->step); $this->draw('StepFormStart', $entry, $this->step); $this->draw('StepForm', $entry, $this->step); $this->draw('StepFormEnd', $entry, $this->step); } protected function initDefaultCreatingEntryVisit($entry) { parent::initDefaultCreatingEntryVisit($entry); $this->step = 1; $step = get_request('step','REQUEST'); if ($step) $this->step = $step; } protected function drawDefaultCreatingEntryTitle($entry) { printf('

%s

',_('Create Object')); } protected function drawDefaultCreatingEntrySubtitle($entry) { printf('

%s%s %s

', _('Server'),_(':'),$this->ldapserver->name); } protected function drawDefaultCreatingEntryStepTitle($entry, $step) { if ($step == 1) { echo '

'; printf(_('Step %s of %s'), '1', '2'); echo _(':'); echo ' '; echo _('Container and ObjectClass(es)'); echo '

'; } else { echo '

'; printf(_('Step %s of %s'), '2', '2'); echo _(':'); echo ' '; echo _('Specify attributes and values'); echo '

'; } } public function drawDefaultCreatingEntryStepFormStart($entry, $step) { if ($step == 1) { echo '
'; } else { echo ''; } } public function drawDefaultCreatingEntryStepForm($entry, $step) { $container = $entry->getContainer(); if ($step == 1) { printf('', $this->ldapserver->server_id); printf('', $step + 1); echo ''; $this->draw('ContainerChooser', $entry, $container); $this->draw('ObjectClassChooser', $entry); $this->draw('StepFormSubmitButton', $entry, $step); echo '
'; } else { printf('', htmlspecialchars($container)); printf('', $this->ldapserver->server_id); printf('', $step + 1); echo ''; $this->draw('RdnChooser', $entry); $this->draw('ShownAttributes', $entry); $this->draw('StepFormSubmitButton', $entry, $step); echo '
'; $this->draw('HiddenAttributes', $entry); } } public function drawDefaultCreatingEntryStepFormSubmitButton($entry, $step) { if ($step == 1) { echo ' '; printf('', _('Proceed >>')); echo ''; } else { echo '
'; printf('', _('Create Object')); echo '
'; } } public function drawDefaultCreatingEntryStepFormEnd($entry, $step) { echo '
'; // javascript $this->draw('Javascript', $entry); } protected function drawDefaultCreatingEntryContainerChooser($entry, $default_container) { echo ''; printf('%s', _('Container')); printf('', htmlspecialchars($default_container)); draw_chooser_link('entry_form.container'); echo ''; echo ''; } protected function drawDefaultCreatingEntryObjectClassChooser($entry) { $oclasses = $this->ldapserver->SchemaObjectClasses(); if (!$oclasses) $oclasses = array(); elseif (!is_array($oclasses)) $oclasses = array($oclasses); echo ''; printf('%s', _('ObjectClasses')); echo ''; echo ''; echo ''; if ($_SESSION[APPCONFIG]->GetValue('appearance', 'show_hints')) { echo ' Hint'; echo _('Hint: You must choose exactly one structural objectClass (shown in bold above)'); echo '
'; } } protected function drawDefaultCreatingEntryRdnChooser($entry) { $attrs = $entry->getAttributes(); $rdn_attr = $entry->getRdnAttribute(); printf('%s', 'RDN'); echo ''; } protected function drawDefaultCreatingEntryShownAttributes($entry) { $attrs = array(); // put required attributes first foreach ($this->shown_attributes as $sa) { if ($sa->isRequired()) $attrs[] = $sa; } foreach ($this->shown_attributes as $sa) { if (!$sa->isRequired()) $attrs[] = $sa; } $has_required_attrs = false; $has_optional_attrs = false; foreach ($attrs as $attr) { if ($attr->isRequired()) { if (!$has_required_attrs) { printf('%s', _('Required Attributes')); $has_required_attrs = true; } } else { if (!$has_optional_attrs) { if (!$has_required_attrs) { printf('%s', _('Required Attributes')); printf('
(%s)
', _('none')); } printf('%s', _('Optional Attributes')); $has_optional_attrs = true; } } $this->draw('', $attr); echo "\n"; } if (!$has_optional_attrs) { printf('%s', _('Optional Attributes')); printf('
(%s)
', _('none')); } } protected function drawDefaultCreatingEntryHiddenAttributes($entry) { foreach ($this->hidden_attributes as $attr) { $this->draw('', $attr); echo "\n"; } } protected function drawDefaultCreatingEntryJavascript($entry) { $this->draw('Entry::Javascript', $entry); } /*******************************/ /* Paint a DefaultEditingEntry */ /*******************************/ public function visitDefaultEditingEntryStart($entry) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); // init $this->visit('Entry::Start', $entry); // header $this->draw('Header', $entry); // form start if (! $entry->isReadOnly()) { echo '
'; printf('',$this->ldapserver->server_id); printf('',htmlspecialchars($entry->getDn())); } echo '
'."\n\n"; echo ''; } public function visitDefaultEditingEntryEnd($entry) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); // draw internal attributes if (get_request('show_internal_attrs','REQUEST')) { $this->draw('InternalAttributes', $entry); echo "\n\n"; } // draw visible attributes $this->draw('ShownAttributes', $entry); // form end if (! $entry->isReadOnly()) { $this->draw('FormSubmitButton', $entry); echo '
'; // draw hidden attributes $this->draw('HiddenAttributes', $entry); printf('
'); } else { printf(''); } // javascript $this->draw('Javascript', $entry); } protected function initDefaultEditingEntryVisit($entry) { parent::initDefaultEditingEntryVisit($entry); $this->url_base = sprintf('cmd.php?server_id=%s&dn=%s', $this->ldapserver->server_id, rawurlencode($entry->getDn())); $this->hint_layout = ''._('Hint').'%s'; $this->action_layout = '%s%s'; } protected function drawDefaultEditingEntryTitle($entry) { $dn = $entry->getDn(); $rdn = get_rdn($dn); printf('

%s

',htmlspecialchars($rdn)); } protected function drawDefaultEditingEntrySubtitle($entry) { echo '

'; echo _('Server'); echo _(':'); echo ' '; echo $this->ldapserver->name; echo '     '; echo _('Distinguished Name'); echo _(':'); echo ' '; echo htmlspecialchars($entry->getDn()); echo '

'; } protected function drawDefaultEditingEntryMenu($entry) { $i = 0; $item = ''; echo ''; echo ''; $menuitem_number = 0; while (($item = $this->get('MenuItem', $entry, $i)) !== false) { if ($item) { $endofrow = 0; $it = ''; // menu item $ms = ''; // item message if (is_array($item)) { if (count($item) > 0) { $it = $item[0]; if (count($item) > 1) $ms = $item[1]; } } else { $it = $item; } if ($it) { $menuitem_number++; echo $it; if ($ms) { if (($menuitem_number % 2) == 1) { $menuitem_number++; echo ''; $endofrow = 0; } if ($endofrow) print $ms; else echo "$ms"; echo ""; $endofrow = 1; } else { if ($menuitem_number > 1 && ($menuitem_number % 2) == 0) { echo ''; $endofrow = 1; } } } elseif ($ms) { if (($menuitem_number % 2) == 1) { $menuitem_number++; echo ''; $endofrow = 0; } if ($endofrow) print $ms; else echo "$ms"; echo ""; $endofrow = 1; } } $i++; } if (($menuitem_number % 2) == 1) echo ''; else echo ''; echo ''; echo '
  
  
      
'; } protected function getDefaultEditingEntryMenuItem($entry, $i) { $config = $_SESSION[APPCONFIG]; switch ($i) { case IdEntryRefreshMenuItem : if ($config->isCommandAvailable('entry_refresh')) return $this->get('RefreshMenuItem', $entry); else return ''; case IdEntryExportBaseMenuItem : if ($config->isCommandAvailable('export')) return $this->get('ExportBaseMenuItem', $entry); else return ''; case IdEntryMoveMenuItem : if (!$entry->isReadOnly() && $config->isCommandAvailable('entry_move')) return $this->get('MoveMenuItem', $entry); else return ''; case IdEntryInternalAttributesMenuItem : if ($config->isCommandAvailable('entry_internal_attributes_show')) return $this->get('InternalAttributesMenuItem', $entry); else return ''; case IdEntryDeleteMenuItem : if (!$entry->isReadOnly() && $config->isCommandAvailable('entry_delete', 'simple_delete')) return $this->get('DeleteMenuItem', $entry); else return ''; case IdEntryRenameMenuItem : if (!$entry->isReadOnly() && $config->isCommandAvailable('entry_rename')) { $rdnAttr = $entry->getAttribute($entry->getRdnAttributeName()); if ($rdnAttr && $rdnAttr->isVisible() && !$rdnAttr->isReadOnly()) { return $this->get('RenameMenuItem', $entry); } else { return ''; } } else return ''; case IdEntryDeleteAttributeMessage : if ($config->GetValue('appearance', 'show_hints') && $config->isCommandAvailable('attribute_delete')) return array('', $this->get('DeleteAttributeMessage', $entry)); else return ''; case IdEntryCompareMenuItem : if (!$entry->isReadOnly() && $config->isCommandAvailable('entry_compare')) return $this->get('CompareMenuItem', $entry); else return ''; case IdEntryCreateMenuItem : if (!$entry->isReadOnly() && !$entry->isLeaf() && $config->isCommandAvailable('entry_create')) return $this->get('CreateMenuItem', $entry); else return ''; case IdEntryAddAttributeMenuItem : if (!$entry->isReadOnly() && $config->isCommandAvailable('attribute_add')) return $this->get('AddAttributeMenuItem', $entry); else return ''; case IdEntryShowChildrenMenuItem : case IdEntryExportSubMenuItem : static $children_count = false; static $more_children = false; if ($children_count === false) { // visible children in the tree $children_count = $entry->getChildrenNumber(); // is there filtered children ? $more_children = $entry->isSizeLimited(); if (!$more_children) { // all children in ldap $all_children = $this->ldapserver->getContainerContents( $entry->getDn(), $children_count + 1, '(objectClass=*)', $config->GetValue('deref','view')); $more_children = (count($all_children) > $children_count); } } if ($children_count > 0 || $more_children) { if ($children_count <= 0) $children_count = ''; if ($more_children) $children_count .= '+'; if ($i == IdEntryShowChildrenMenuItem) { return $this->get('ShowChildrenMenuItem', $entry, $children_count); } elseif ($i == IdEntryExportSubMenuItem && $config->isCommandAvailable('export')) { return $this->get('ExportSubMenuItem', $entry); } else { return ''; } } else { return ''; } case IdEntryViewSchemaMessage : if ($config->GetValue('appearance', 'show_hints') && $config->isCommandAvailable('schema')) return array('', $this->get('ViewSchemaMessage', $entry)); else return ''; case IdEntryReadOnlyMessage : if ($entry->isReadOnly()) return array('', $this->get('ReadOnlyMessage', $entry)); else return ''; case IdEntryModifiedAttributesMessage : $modified_attrs = array(); foreach ($entry->getAttributes() as $attr) { if ($attr->hasBeenModified()) $modified_attrs[] = $attr->getFriendlyName(); } if ($modified_attrs) { return array('', $this->get('ModifiedAttributesMessage', $entry, $modified_attrs)); } else return ''; default : return false; } } protected function getDefaultEditingEntryRefreshMenuItem($entry) { $href = $this->url_base.'&cmd=template_engine&junk='.random_junk(); return sprintf($this->action_layout,'refresh.png',_('Refresh'), htmlspecialchars($href),_('Refresh this entry'),_('Refresh')); } protected function getDefaultEditingEntryExportBaseMenuItem($entry) { $href = $this->url_base.'&cmd=export_form&scope=base'; return sprintf($this->action_layout,'save.png',_('Save'), htmlspecialchars($href),_('Save a dump of this object'),_('Export')); } protected function getDefaultEditingEntryMoveMenuItem($entry) { $href = $this->url_base.'&cmd=copy_form'; return sprintf($this->action_layout,'cut.png',_('Cut'),htmlspecialchars($href), _('Copy this object to another location,a new DN, or another server'), _('Copy or move this entry')); } protected function getDefaultEditingEntryInternalAttributesMenuItem($entry) { if (get_request('show_internal_attrs','REQUEST')) { $href = $this->url_base.'&cmd=template_engine&junk='.random_junk(); return sprintf($this->action_layout,'tools-no.png',_('Hide'), htmlspecialchars($href),'',_('Hide internal attributes')); } else { $href = $this->url_base.'&cmd=template_engine&show_internal_attrs=true'; return sprintf($this->action_layout,'tools.png',_('Show'), htmlspecialchars($href),'',_('Show internal attributes')); } } protected function getDefaultEditingEntryDeleteMenuItem($entry) { $href = $this->url_base.'&cmd=delete_form'; return sprintf($this->action_layout,'trash.png',_('Trash'),htmlspecialchars($href), _('You will be prompted to confirm this decision'),_('Delete this entry')); } protected function getDefaultEditingEntryRenameMenuItem($entry) { $href = $this->url_base.'&cmd=rename_form'; return sprintf($this->action_layout,'rename.png',_('Rename'),htmlspecialchars($href),'',_('Rename')); } protected function getDefaultEditingEntryCompareMenuItem($entry) { $href = $this->url_base.'&cmd=compare_form'; return sprintf($this->action_layout,'compare.png',_('Compare'), htmlspecialchars($href),'',_('Compare with another entry')); } protected function getDefaultEditingEntryCreateMenuItem($entry) { $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&container=%s', $this->ldapserver->server_id,rawurlencode($entry->getDn())); return sprintf($this->action_layout,'star.png',_('Create'),htmlspecialchars($href),'',_('Create a child entry')); } protected function getDefaultEditingEntryAddAttributeMenuItem($entry) { $href = $this->url_base.'&cmd=add_attr_form'; return sprintf($this->action_layout,'add.png',_('Add'),htmlspecialchars($href),'',_('Add new attribute')); } protected function getDefaultEditingEntryShowChildrenMenuItem($entry,$children_count) { $href = sprintf('cmd.php?cmd=search&server_id=%s&search=true&filter=%s&base_dn=%s&form=advanced&scope=one', $this->ldapserver->server_id,rawurlencode('objectClass=*'),rawurlencode($entry->getDn())); return sprintf($this->action_layout,'children.png',_('Children'),htmlspecialchars($href),'', ($children_count == 1) ? _('View 1 child') : sprintf(_('View %s children'),$children_count)); } protected function getDefaultEditingEntryExportSubMenuItem($entry) { $href = sprintf('%s&cmd=export_form&scope=%s',$this->url_base,'sub'); return sprintf($this->action_layout,'save.png',_('Save'),htmlspecialchars($href), _('Save a dump of this object and all of its children'),_('Export subtree')); } protected function getDefaultEditingEntryDeleteAttributeMessage($entry) { if ($_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete_value')) return sprintf($this->hint_layout,_('Hint: To delete an attribute, empty the text field and click save.')); else return ''; } protected function getDefaultEditingEntryViewSchemaMessage($entry) { return sprintf($this->hint_layout,_('Hint: To view the schema for an attribute, click the attribute name.')); } protected function getDefaultEditingEntryReadOnlyMessage($entry) { return sprintf($this->hint_layout,_('Viewing entry in read-only mode.')); } protected function getDefaultEditingEntryModifiedAttributesMessage($entry,&$modified_attributes) { return sprintf($this->hint_layout, (count($modified_attributes) == 1) ? sprintf(_('An attribute (%s) was modified and is highlighted below.'),implode('',$modified_attributes)) : sprintf(_('Some attributes (%s) were modified and are highlighted below.'),implode(', ',$modified_attributes))); } protected function drawDefaultEditingEntryInternalAttributes($entry) { $counter = 0; foreach ($this->internal_attributes as $attr) { $this->draw('',$attr); $counter++; echo "\n"; } if ($counter == 0) { echo '('; echo _('No internal attributes'); echo ')'; } } protected function drawDefaultEditingEntryShownAttributes($entry) { foreach ($this->shown_attributes as $attr) { $this->draw('',$attr); echo "\n"; } } protected function drawDefaultEditingEntryHiddenAttributes($entry) { foreach ($this->hidden_attributes as $attr) { $this->draw('',$attr); echo "\n"; } } protected function drawDefaultEditingEntryFormSubmitButton($entry) { echo '
'; } protected function drawDefaultEditingEntryJavascript($entry) { $this->draw('Entry::Javascript', $entry); } /*********************************/ /* Paint a TemplateCreatingEntry */ /*********************************/ public function visitTemplateCreatingEntryStart($entry) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); $template = get_request('template','REQUEST'); $step = get_request('step','REQUEST'); if ($template) { if ($template == 'none') { $this->visit('DefaultCreatingEntry::Start', $entry); return; } else { $entry->setSelectedTemplateName($template); } } elseif ($step && $step > 0) { $this->visit('DefaultCreatingEntry::Start', $entry); return; } if ($entry->getSelectedTemplateName()) { # if we already choose an creation template, use it to display the entry $this->visit('DefaultCreatingEntry::Start', $entry); } elseif ($entry->getTemplatesCount() <= 0) { # if no template is available for this entry, draws it # to the parent manner $this->visit('DefaultCreatingEntry::Start', $entry); } elseif (($entry->getTemplatesCount() == 1) && !$entry->hasDefaultTemplate()) { $templates = &$entry->getTemplates(); $template_names = array_keys($templates); $entry->setSelectedTemplateName($template_names[0]); $this->visit('DefaultCreatingEntry::Start', $entry); } else { $this->visit_attributes = false; # propose the template choice $this->draw('TemplateChoice', $entry); } } public function visitTemplateCreatingEntryEnd($entry) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); if ($this->visit_attributes) { foreach ($this->shown_attributes as $attr) { $page = 1; if ($attr->hasProperty('page')) { $page = $attr->getProperty('page'); } else { $attr->setProperty('page', 1); } if ($page && $page > $this->laststep) { $this->laststep = $page; } } $this->visit('DefaultCreatingEntry::End', $entry); $entry->setSelectedTemplateName(''); } } protected function initTemplateCreatingEntryVisit($entry) { $this->init('DefaultCreatingEntry::Visit', $entry); $this->laststep = 1; } protected function drawTemplateCreatingEntryRdnChooser($entry) { $rdn_attr = $entry->getRdnAttribute(); if (!$rdn_attr) { $this->draw('DefaultCreatingEntry::RdnChooser', $entry); } else { printf('', htmlspecialchars($rdn_attr->getName())); } } protected function drawTemplateCreatingEntryStepTitle($entry, $step) { if (!$entry->getSelectedTemplateName()) { $this->draw('DefaultCreatingEntry::StepTitle', $entry, $step); } else if ($entry->hasProperty('description')) { echo '

'; echo $entry->getProperty('description'); echo ' '; echo _('('); printf(_('step %s of %s'), $step, $this->laststep); echo _(')'); echo '

'; } } public function drawTemplateCreatingEntryStepFormStart($entry, $step) { if ($entry->getSelectedTemplateName()) { if ($step < $this->laststep) { echo '
'; } else { // Patch 1539633 // default action is create.php // you can change this behavior by setting myscript.php in template header echo ''; printf('', $entry->hasProperty('action') ? rawurlencode($entry->getProperty('action')) : 'create'); } } else { $this->draw('DefaultCreatingEntry::StepFormStart', $entry, $step); } } public function drawTemplateCreatingEntryStepForm($entry, $step) { if (!$entry->getSelectedTemplateName()) { $this->draw('DefaultCreatingEntry::StepForm', $entry, $step); return; } $container = $entry->getContainer(); printf('', htmlspecialchars($container)); printf('', $this->ldapserver->server_id); printf('', $entry->getSelectedTemplateName()); printf('', $step + 1); echo ''; $this->draw('RdnChooser', $entry); // draw attributes $this->draw('ShownAttributes', $entry); $this->draw('StepFormSubmitButton', $entry, $step); echo '
'; $this->draw('HiddenAttributes', $entry); } protected function drawTemplateCreatingEntryStepFormSubmitButton($entry, $step) { if ($step < $this->laststep) $this->draw('DefaultCreatingEntry::StepFormSubmitButton', $entry, 1); else $this->draw('DefaultCreatingEntry::StepFormSubmitButton', $entry, 2); } protected function drawTemplateCreatingEntryTemplateChoice($entry) { $this->draw('Title', $entry); $this->draw('Subtitle', $entry); echo "\n"; printf('

%s

',_('Select a template for the creation process')); $href = sprintf('cmd.php?%s', array_to_query_string($_GET,array('meth'),false)); echo ''; foreach ($_POST as $p => $v) { echo ""; } echo ''; $server_menu_html = server_select_list($this->ldapserver->server_id, true); printf('', _('Server'), _(':'), $server_menu_html); echo ''; printf('', _('Templates'), _(':')); echo ''; echo '
%s%s%s
%s%s'; echo ''; echo '
'; echo ''; $i = -1; $templates = &$entry->getTemplates(); $nb_templates = count($templates); if ($entry->hasDefaultTemplate()) $nb_templates++; foreach ($templates as $template_name => $template_attrs) { $i++; # If the template doesnt have a title, we'll use the desc field. $template_attrs['desc'] = isset($template_attrs['title']) ? $template_attrs['title'] : $template_attrs['desc']; # Balance the columns properly if (($nb_templates % 2 == 0 && $i == intval($nb_templates / 2)) || ($nb_templates % 2 == 1 && $i == intval($nb_templates / 2) + 1)) { echo '
'; } echo ''; if (isset($template_attrs['invalid']) && $template_attrs['invalid']) { echo ''; } else { printf('', htmlspecialchars($template_name), htmlspecialchars($template_name)); } printf('', htmlspecialchars($template_name), $template_attrs['icon']); printf(''; } # Default template if ($entry->hasDefaultTemplate()) { $i++; if (($nb_templates % 2 == 0 && $i == intval($nb_templates / 2)) || ($nb_templates % 2 == 1 && $i == intval($nb_templates / 2) + 1)) { echo '
Error
'; } echo '' .'' .'' .''; } echo '
'; echo '
'; echo '
'; echo '
'; } protected function drawTemplateCreatingEntryShownAttributes($entry) { if (!$entry->getSelectedTemplateName()) { $this->draw('DefaultCreatingEntry::ShownAttributes', $entry); return; } foreach ($this->shown_attributes as $attr) { $page = $attr->getProperty('page'); if ($page == $this->step) { $this->draw('', $attr); echo "\n"; //} elseif ($page < $this->step) { } else { // the displayed attributes are the visible attributes in shown_attributes list $attr->hide(); $this->hidden_attributes[] = $attr; } } } protected function drawTemplateCreatingEntryHiddenAttributes($entry) { if (!$entry->getSelectedTemplateName()) { $this->draw('DefaultCreatingEntry::HiddenAttributes', $entry); return; } foreach ($this->hidden_attributes as $attr) { //$page = $attr->hasProperty('page') ? $attr->getProperty('page') : -1; //if ($page <= $this->step) { $this->draw('', $attr); echo "\n"; //} } } protected function drawTemplateCreatingEntryJavascript($entry) { $this->draw('DefaultCreatingEntry::Javascript', $entry); $templates = new Templates($this->ldapserver->server_id); foreach ($entry->getAttributes() as $attribute) { if ($attribute->hasProperty('onchange')) { $onchange = $attribute->getProperty('onchange'); if (is_array($onchange)) { foreach ($onchange as $value) $templates->OnChangeAdd($this->ldapserver,$attribute->getName(),$value); } else { $templates->OnChangeAdd($this->ldapserver,$attribute->getName(),$onchange); } } } $hash = $templates->getJsHash(); echo ''; } /********************************/ /* Paint a TemplateEditingEntry */ /********************************/ public function visitTemplateEditingEntryStart($entry) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); $template = get_request('template','REQUEST'); if ($template) { if ($template == 'none') { $this->visit('DefaultEditingEntry::Start', $entry); return; } else { $entry->setSelectedTemplateName($template); } } if ($entry->getSelectedTemplateName()) { # if we already choose an editing template, use it to display the entry $this->visit('DefaultEditingEntry::Start', $entry); } elseif ($entry->getTemplatesCount() <= 0) { # if no template is available for this entry, draws it # to the parent manner $this->visit('DefaultEditingEntry::Start', $entry); } elseif (($entry->getTemplatesCount() == 1) && !$entry->hasDefaultTemplate()) { $templates = &$entry->getTemplates(); $template_names = array_keys($templates); $entry->setSelectedTemplateName($template_names[0]); $this->visit('DefaultEditingEntry::Start', $entry); } else { $this->visit_attributes = false; # propose the template choice $this->draw('TemplateChoice', $entry); } } public function visitTemplateEditingEntryEnd($entry) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); if ($this->visit_attributes) { $this->visit('DefaultEditingEntry::End', $entry); $entry->setSelectedTemplateName(''); } } protected function drawTemplateEditingEntryTemplateChoice($entry) { $this->draw('Title', $entry); $this->draw('Subtitle', $entry); echo "\n"; printf('

%s

',_('Select a template to edit the entry')); $href = sprintf('cmd.php?%s', array_to_query_string($_GET,array('meth'),false)); echo '
'; foreach ($_POST as $p => $v) { echo ""; } echo ''; echo ''; printf('',_('Templates'), _(':')); echo ''; echo '
%s%s'; echo ''; echo '
'; echo ''; $i = -1; $templates = &$entry->getTemplates(); $nb_templates = count($templates); if ($entry->hasDefaultTemplate()) $nb_templates++; foreach ($templates as $template_name => $template_attrs) { $i++; # If the template doesnt have a title, we'll use the desc field. $template_attrs['desc'] = isset($template_attrs['title']) ? $template_attrs['title'] : $template_attrs['desc']; # Balance the columns properly if (($nb_templates % 2 == 0 && $i == intval($nb_templates / 2)) || ($nb_templates % 2 == 1 && $i == intval($nb_templates / 2) + 1)) { echo '
'; } echo ''; printf('', htmlspecialchars($template_name), htmlspecialchars($template_name)); printf('', htmlspecialchars($template_name), $template_attrs['icon']); printf(''; } # Default template if ($entry->hasDefaultTemplate()) { $i++; if (($nb_templates % 2 == 0 && $i == intval($nb_templates / 2)) || ($nb_templates % 2 == 1 && $i == intval($nb_templates / 2) + 1)) { echo '
'; } echo '' .'' .'' .''; } echo '
'; echo '
'; echo '
'; echo '
'; } protected function drawTemplateEditingEntryShownAttributes($entry) { foreach ($this->shown_attributes as $attr) { // @todo if this->page == attr->page $this->draw('', $attr); echo "\n"; } } protected function drawTemplateEditingEntryHiddenAttributes($entry) { printf('', $entry->getSelectedTemplateName()); $this->draw('DefaultEditingEntry::HiddenAttributes', $entry); } protected function drawTemplateEditingEntryJavascript($entry) { $this->draw('DefaultEditingEntry::Javascript', $entry); $templates = new Templates($this->ldapserver->server_id); foreach ($entry->getAttributes() as $attribute) { if ($attribute->hasProperty('onchange')) { $onchange = $attribute->getProperty('onchange'); if (is_array($onchange)) { foreach ($onchange as $value) $templates->OnChangeAdd($this->ldapserver,$attribute->getName(),$value); } else { $templates->OnChangeAdd($this->ldapserver,$attribute->getName(),$onchange); } } } $hash = $templates->getJsHash(); echo ''; } /**************************/ /* Paint an Attribute */ /**************************/ protected function drawAttribute($attribute) { if ($attribute->isVisible()) $this->draw('Informations', $attribute); $this->draw('Values', $attribute); } protected function drawAttributeJavascript($attribute) { echo ''; } protected function drawAttributeFocusJavascript($attribute, $component) { $entry = $attribute->getEntry(); if ($entry) echo $this->get('AttributeFocusJavascript', $entry, $attribute, $component); } protected function drawAttributeBlurJavascript($attribute, $component) { $entry = $attribute->getEntry(); if ($entry) echo $this->get('AttributeBlurJavascript', $entry, $attribute, $component); } protected function drawAttributeValidateJavascript($attribute, $component, $silence, $var_valid) { if ($attribute->isRequired()) { echo 'var vals = getAttributeValues("new", "'.$attribute->getName().'"); if (vals.length <= 0) { '.$var_valid.' = false; alertError("'._('This attribute is required')._(':').' '.$attribute->getFriendlyName().'", '.$silence.'); }'; echo 'var comp = getAttributeComponents("new", "'.$attribute->getName().'"); for (var i = 0; i < comp.length; i++) { comp[i].style.backgroundColor = '.$var_valid.' ? "white" : \'#ffffba\'; }'; } } protected function getEntryAttributeFocusJavascript($entry, $attribute, $component) { return ''; } protected function getEntryAttributeBlurJavascript($entry, $attribute, $component) { return ''; } protected function getDefaultCreatingEntryAttributeBlurJavascript($entry, $attribute, $component) { return "\n\t\t\t\t\t\t".'validate_'.$attribute->getName().'('.$component.', false);'."\n"; } protected function getTemplateCreatingEntryAttributeBlurJavascript($entry, $attribute, $component) { $j = 'fill('.$component.'.id, pla_getComponentValue('.$component.'));'; //$j .= $this->get('DefaultCreatingEntry::AttributeBlurJavascript',$entry, $attribute, $component); return $j; } protected function getDefaultEditingEntryAttributeBlurJavascript($entry, $attribute, $component) { return "\n\t\t\t\t\t\t".'validate_'.$attribute->getName().'('.$component.', false);'."\n"; } protected function getTemplateEditingEntryAttributeBlurJavascript($entry, $attribute, $component) { $j = 'fill('.$component.'.id, pla_getComponentValue('.$component.'));'; //$j .= $this->get('DefaultEditingEntry::AttributeBlurJavascript',$entry, $attribute, $component); return $j; } protected function drawAttributeFillJavascript($attribute, $component_id, $component_value) { echo "\n\t\t\t\t\t\t".'validate_'.$attribute->getName().'(pla_getComponentById('.$component_id.'), false);'."\n"; } protected function drawAttributeInformations($attribute) { if (($this->context == ENTRY_WRITER_EDITING_CONTEXT) && $attribute->hasBeenModified()) echo ''; else echo ''; echo ''; $this->draw('Name', $attribute); echo ''; echo ''; # Setup the $attr_note, which will be displayed to the right of the attr name (if any) if ($_SESSION[APPCONFIG]->GetValue('appearance', 'show_attribute_notes')) { $this->draw('Notes', $attribute); } echo ''; echo ''; } protected function drawAttributeNotes($attribute) { $attr_note = ''; $alias_note = $this->get('AliasNote', $attribute); if ($alias_note) { if (trim($attr_note)) $attr_note .= ', '; $attr_note .= $alias_note; } $required_note = $this->get('RequiredNote', $attribute); if ($required_note) { if (trim($attr_note)) $attr_note .= ', '; $attr_note .= $required_note; } $rdn_note = $this->get('RdnNote', $attribute); if ($rdn_note) { if (trim($attr_note)) $attr_note .= ', '; $attr_note .= $rdn_note; } if ($attr_note) printf('%s', $attr_note); if ($attribute->isReadOnly() && $this->ldapserver->isAttrReadOnly($attribute->getName())) { printf('(%s)', _('This attribute has been flagged as read only by the phpLDAPadmin administrator'), _('read only')); } } protected function drawAttributeValues($attribute) { if ($attribute->isVisible()) $this->draw('StartValueLine', $attribute); # draws values $value_count = $attribute->getValueCount(); $i = 0; for (; $i < $value_count; $i++) { $this->draw('Value', $attribute, $i); } if ($this->context == ENTRY_WRITER_CREATION_CONTEXT) { $blankvalue_count = $attribute->getMaxValueCount(); if ($blankvalue_count < 0) $blankvalue_count = 1; else $blankvalue_count -= $value_count; for ($j = 0; $j < $blankvalue_count; $j++) { $this->draw('BlankValue', $attribute, $i + $j); } } if ($attribute->isVisible()) { $this->draw('Menu', $attribute); $this->draw('EndValueLine', $attribute); } } protected function drawAttributeMenu($attribute) { $i = 0; $item = ''; while (($item = $this->get('MenuItem', $attribute, $i)) !== false) { if ($item) { echo '
'.$item.'
'; } $i++; } } protected function getAttributeMenuItem($attribute, $i) { if ($this->context != ENTRY_WRITER_EDITING_CONTEXT) return false; switch ($i) { case IdAttributeAddValueMenuItem : if ($attribute->isVisible() && !$attribute->isReadOnly() && !$attribute->isRdn() && $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value')) { if ($attribute->getMaxValueCount() < 0 || $attribute->getValueCount() < $attribute->getMaxValueCount()) { return $this->get('AddValueMenuItem', $attribute); } } return ''; case IdAttributeModifyMemberMenuItem : if (in_array($attribute->getName(), $_SESSION[APPCONFIG]->GetValue('modify_member','groupattr'))) { if ($attribute->isVisible() && !$attribute->isReadOnly() && !$attribute->isRdn() && ($_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value') || $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete_value'))) { return $this->get('ModifyMemberMenuItem', $attribute); } } return ''; case IdAttributeRenameMenuItem : if ($attribute->isVisible() && $attribute->isRdn() && !$attribute->isReadOnly() && $_SESSION[APPCONFIG]->isCommandAvailable('entry_rename')) { return $this->get('RenameMenuItem', $attribute); } return ''; default : return false; } } protected function drawAttributeStartValueLine($attribute) { if (($this->context == ENTRY_WRITER_EDITING_CONTEXT) && $attribute->hasBeenModified()) { echo ''; } else { echo ''; } echo ''; } protected function drawAttributeEndValueLine($attribute) { echo ''; echo ''; if (($this->context == ENTRY_WRITER_EDITING_CONTEXT) && $attribute->hasBeenModified()) { echo ''; } } protected function drawAttributeValue($attribute, $i) { if (DEBUG_ENABLED) debug_log('Entered with (%s, %d)',1,__FILE__,__LINE__,__METHOD__,$attribute->getName(),$i); $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($attribute->isVisible()) { echo '
'; $this->draw('Icon', $attribute, $val); echo ''; } $this->draw('OldValue', $attribute, $i); $this->draw('NewValue', $attribute, $i); if ($attribute->isVisible()) { echo ''; if (($i == 0) && $attribute->isRequired() && $attribute->getEntry() && !$attribute->getEntry()->isReadOnly()) { echo ' '; $this->draw('RequiredSymbol', $attribute); } echo '
'; } } /** * Save the current value to detect changes */ protected function drawAttributeOldValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; printf('', htmlspecialchars($attribute->getName()), $i, htmlspecialchars($val)); } /** * Display the current value */ protected function drawAttributeNewValue($attribute, $i) { if (!$attribute->isVisible()) { $this->draw('HiddenValue', $attribute, $i); } elseif ($attribute->isReadOnly() || ($attribute->getEntry() && $attribute->getEntry()->getDn() && $attribute->isRdn())) { $this->draw('ReadOnlyValue', $attribute, $i); } else { $this->draw('ReadWriteValue', $attribute, $i); } } protected function drawAttributeBlankValue($attribute, $i) { $this->draw('Value', $attribute, $i); } protected function drawAttributeHiddenValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; printf('', htmlspecialchars($attribute->getName()), $i, htmlspecialchars($attribute->getName()), $i, htmlspecialchars($val)); } protected function drawAttributeReadOnlyValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; printf('
', htmlspecialchars($attribute->getName()), $i, htmlspecialchars($attribute->getName()), $i, htmlspecialchars($val), ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : ''); } protected function drawAttributeReadWriteValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; if ($attribute->hasProperty('helper')) { echo '
'; } /* We smack an id="..." tag in here that doesn't have [][] in it to allow the * draw_chooser_link() to identify it after the user clicks. */ $id = sprintf('new_values_%s_%s', htmlspecialchars($attribute->getName()), $i); printf('', htmlspecialchars($attribute->getName()), $i, $id, htmlspecialchars($val), $attribute->getName(), $attribute->getName(), ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); if ($attribute->hasProperty('helper')) { echo ''; $this->draw('Helper', $attribute, $i); echo '
'; } } protected function drawAttributeHelper($attribute, $i) { $params = $attribute->getProperty('helper'); if (!$params) $params = array(); elseif (!is_array($params)) $params = array($params); $id = isset($params['id']) ? $params['id'] : ''; if (is_array($id)) $id = (count($id) > 0 ? $id[0] : ''); $display = isset($params['display']) ? $params['display'] : ''; if (is_array($display)) $display = (count($display) > 0 ? $display[0] : ''); $vals = isset($params['value']) ? $params['value'] : array(); if (!is_array($vals)) $vals = array($vals); $opts = isset($params['option']) ? $params['option'] : array(); if (!is_array($opts)) $opts = array($opts); $dn = ''; if ($attribute->getEntry()) { if ($this->context == ENTRY_WRITER_CREATION_CONTEXT) { $dn = $attribute->getEntry()->getContainer(); } else { $dn = $attribute->getEntry()->getDn(); } } $arr1 = array(); foreach ($vals as $id_parval => $parval) { $arr2 = Templates::EvaluateDefault($this->ldapserver, $parval, $dn, null, null); if (is_array($arr2)) $arr1 = array_merge($arr1,$arr2); else $arr1[$id_parval] = $arr2; } $vals = $arr1; $arr1 = array(); foreach ($opts as $id_parval => $parval) { $arr2 = Templates::EvaluateDefault($this->ldapserver, $parval, $dn, null, null); if (is_array($arr2)) $arr1 = array_merge($arr1,$arr2); else $arr1[$id_parval] = $arr2; } $opts = $arr1; $default = (count($vals) > 0 ? $vals[0] : ''); if (!is_scalar($default)) $default = ''; if (!is_null($attribute->getValue($i)) && (strlen($default) <= 0)) { $default = $this->get('DefaultValueHelper', $attribute, $i); } if (count($opts) > 0) { $found = false; printf(''; } else { printf('', $id, htmlspecialchars($attribute->getName()), $i, $id, htmlspecialchars($attribute->getName()), $i, htmlspecialchars($default)); } if ($display) { echo '
'; echo ''.$display.''; echo '
'; } } protected function getAttributeDefaultValueHelper($attribute, $i) { $params = $attribute->getProperty('helper'); # Should only return 1 default entry. if (isset($params['value']) && ! is_array($params['value'])) return $params['value']; # If there are multiple values, return the first one. else if (isset($params['value']) && is_array($params['value'])) return array_shift($params['value']); # No default values, return a blank. else return ''; } protected function getAttributeRenameMenuItem($attribute) { $encoded_dn = ''; if ($attribute->getEntry()) $encoded_dn = rawurlencode($attribute->getEntry()->getDn()); if (!$encoded_dn) return; // creating entry $url_base = sprintf('cmd.php?server_id=%s&dn=%s', $this->ldapserver->server_id, $encoded_dn); $href = sprintf('%s&cmd=rename_form', $url_base); return sprintf('(%s)', htmlspecialchars($href), _('rename')); } protected function getAttributeAddValueMenuItem($attribute) { /* Draw the "add value" link under the list of values for this attributes */ $encoded_dn = ''; $template = ''; if ($attribute->getEntry()) { $encoded_dn = rawurlencode($attribute->getEntry()->getDn()); if (method_exists($attribute->getEntry(), 'getSelectedTemplateName')) $template = $attribute->getEntry()->getSelectedTemplateName(); } if (!$encoded_dn) return; // creating entry $href = sprintf('cmd.php?cmd=add_value_form&server_id=%s&dn=%s%s&attr=%s', $this->ldapserver->server_id, $encoded_dn, $template ? "&template=$template" : '', rawurlencode($attribute->getName())); return sprintf('(%s)', htmlspecialchars($href), sprintf(_('Add an additional value to attribute \'%s\''), $attribute->getName()), _('add value')); } protected function getAttributeModifyMemberMenuItem($attribute) { $dn = ($attribute->getEntry()) ? $attribute->getEntry()->getDn() : ''; $encoded_dn = ($dn) ? rawurlencode($dn) : ''; if (!$encoded_dn) return; // creating entry $href = sprintf('cmd.php?cmd=modify_member_form&server_id=%s&dn=%s&attr=%s', $this->ldapserver->server_id, $encoded_dn, rawurlencode($attribute->getName())); return sprintf('(%s)', htmlspecialchars($href), sprintf(_('Modify members for \'%s\''), $dn), _('modify group members')); } protected function drawAttributeIcon($attribute, $val) { if (is_dn_string($val) || $this->ldapserver->isDNAttr($attribute->getName())) { $this->draw('DnValueIcon', $attribute, $val); } elseif (is_mail_string($val)) { $this->draw('MailValueIcon', $attribute, $val); } elseif (is_url_string($val)) { $this->draw('UrlValueIcon', $attribute, $val); } else { $icon = $attribute->getIcon(); if ($icon) printf('Icon ', $icon); } } protected function drawAttributeDnValueIcon($attribute, $val) { if (strlen($val) <= 0) { echo 'Go '; } elseif ($this->ldapserver->dnExists($val)) { $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$this->ldapserver->server_id,$val); printf('Go ',_('Go to'), htmlspecialchars($val), htmlspecialchars($href)); } else { printf('Go ',_('DN not available'),htmlspecialchars($val)); } } protected function drawAttributeMailValueIcon($attribute, $val) { $img = ''._('Mail').''; if (strlen($val) <= 0) echo $img; else printf(''.$img.'', htmlspecialchars($val)); echo ' '; } protected function drawAttributeUrlValueIcon($attribute, $val) { $img = ''._('URL').''; if (strlen($val) <= 0) echo $img; else printf(''.$img.'', htmlspecialchars($val)); echo ' '; } protected function drawAttributeName($attribute) { $config = $_SESSION[APPCONFIG]; $attr_display = $attribute->getFriendlyName(); if ($attribute->getEntry() && $attribute->getEntry()->getDn() // if not creating attribute && $config->isCommandAvailable('schema') ) { $href = sprintf('cmd.php?cmd=schema&server_id=%s&view=attributes&viewvalue=%s', $this->ldapserver->server_id, real_attr_name($attribute->getName())); printf('%s', $attribute->getName(), htmlspecialchars($href), $attr_display); } else { printf('%s', $attr_display); } } protected function getAttributeAliasNote($attribute) { # is there a user-friendly translation available for this attribute? $friendly_name = $attribute->getFriendlyName(); if ($friendly_name != $attribute->getName()) { return sprintf('%s',_('Note'),$friendly_name,_('is an alias for'),$attribute->getName(),_('alias')); } else { return ''; } } protected function getAttributeRequiredNote($attribute) { # is this attribute required by an objectClass ? $required_by = ''; if ($attribute->getEntry()) { $schema_attr = $this->ldapserver->getSchemaAttribute($attribute->getName(),$attribute->getEntry()->getDn()); if ($schema_attr) { $entry_attributes = $attribute->getEntry()->getAttributes(); $objectclass_attribute = null; foreach ($entry_attributes as $entry_attribute) { # It seems that some LDAP servers (Domino) returns attributes in lower case? if ($entry_attribute->getName() == 'objectClass' || $entry_attribute->getName() == 'objectclass') { $objectclass_attribute = $entry_attribute; break; } } if ($objectclass_attribute) { $classes = arrayLower($objectclass_attribute->getValues()); foreach ($schema_attr->getRequiredByObjectClasses() as $required) { if (in_array(strtolower($required), $classes)) { $required_by .= $required . ' '; } } } } } if ($required_by) { return "" . _('required') . ""; } else { return ''; } } protected function getAttributeRdnNote($attribute) { # is this attribute required because its the RDN if ($attribute->isRdn()) { return "" . 'rdn' . " "; } else { return ''; } } protected function drawAttributeRequiredSymbol($attribute) { echo '*'; } /***************************/ /* Paint a BinaryAttribute */ /***************************/ protected function drawBinaryAttributeValues($attribute) { $valcount = $attribute->getValueCount(); if ($attribute->isVisible()) { $this->draw('StartValueLine', $attribute); echo ''; echo _('Binary value'); if ($valcount > 0) { if (strcasecmp($attribute->getName(), 'objectSid') == 0) { printf(' (%s)', binSIDtoText($attribute->getValue(0))); } } echo '
'; if ($valcount > 0) { if ($attribute->getEntry() && $attribute->getEntry()->getDn()) { $href = sprintf('download_binary_attr.php?server_id=%s&dn=%s&attr=%s', $this->ldapserver->server_id, rawurlencode($attribute->getEntry()->getDn()), $attribute->getName()); if ($valcount > 1) { for ($i=1; $i<=$valcount; $i++) { printf('Save %s(%s)
', htmlspecialchars($href), $i, _('download value'), $i); } } else { printf('Save %s
', htmlspecialchars($href),_('download value')); } } if (! $attribute->isReadOnly() && $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete')) { printf(''. 'Trash %s', $attribute->getName(), $attribute->getFriendlyName(), _('delete attribute')); } } elseif ($attribute->isReadOnly() || ! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value')) { printf('
', _("[no value]")); } else { $i = 0; $val = ''; $id = sprintf('new_values_%s_%s', htmlspecialchars($attribute->getName()), $i); printf('
', htmlspecialchars($attribute->getName()), $i, $id, htmlspecialchars($val), $attribute->getName(), $attribute->getName(), ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); } echo '
'; $this->draw('EndValueLine', $attribute); } else { for ($i=0; $i<$valcount; $i++) { $n = $attribute->getFileName($i); $p = $attribute->getFilePath($i); if ($n && $p) { printf('', htmlspecialchars($attribute->getName()), $i, md5("$n|$p")); printf('', htmlspecialchars($attribute->getName()), $i, md5("$n|$p")); } } } } protected function drawBinaryAttributeJavascript($attribute) { $this->draw('Attribute::Javascript', $attribute); $dn = ''; if ($attribute->getEntry()) $dn = $attribute->getEntry()->getDn(); if (!$dn) return; static $already_draw = false; if ($already_draw) return; else $already_draw = true; echo '
'; echo ' '; } protected function drawBinaryAttributeBlurJavascript($attribute, $component) { } /***************************/ /* Paint a DateAttribute */ /***************************/ protected function drawDateAttributeReadWriteValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; printf(' ', $attribute->getName(), $i, htmlspecialchars($attribute->getName()), $i, htmlspecialchars($val), $attribute->getName(), $attribute->getName(), ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); draw_date_selector_link($attribute->getName().'_'.$i); echo ''; } protected function drawDateAttributeJavascript($attribute) { $this->draw('Attribute::Javascript', $attribute); $entry['date'] = $_SESSION[APPCONFIG]->GetValue('appearance','date_attrs'); $entry['time'] = $_SESSION[APPCONFIG]->GetValue('appearance','date_attrs_showtime'); $entry['format'] = $_SESSION[APPCONFIG]->GetValue('appearance', 'date'); if (isset($entry['date'][$attribute->getName()])) $entry['format'] = $entry['date'][$attribute->getName()]; //included in class page to avoid multiple inclusions //printf('','../htdocs/'.JSDIR); printf('','../htdocs/'.JSDIR); printf('','../htdocs/'.JSDIR); printf('','../htdocs/'.JSDIR); for ($i = 0; $i <= $attribute->getValueCount(); $i++) { printf('',$attribute->getName(),$i,$entry['format']); if (in_array_ignore_case($attribute->getName(),array_keys($entry['time'])) && ($entry['time'][$attribute->getName()])) printf('',$attribute->getName(),$i,'true'); } } /***************************/ /* Paint a DnAttribute */ /***************************/ protected function drawDnAttributeReadWriteValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; if ($attribute->hasProperty('helper')) { echo '
'; } $input_name = sprintf('new_values[%s][%s]', htmlspecialchars($attribute->getName()), $i); $input_id = sprintf('new_values_%s_%s', htmlspecialchars($attribute->getName()), $i); printf(' ', $input_name, $input_id, htmlspecialchars($val), $attribute->getName(), $attribute->getName(), ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); /* draw a link for popping up the entry browser if this is the type of attribute * that houses DNs. */ draw_chooser_link("entry_form.$input_id", false); echo ''; if ($attribute->hasProperty('helper')) { echo ''; $this->draw('Helper', $attribute, $i); echo '
'; } } protected function drawDnAttributeIcon($attribute, $val) { $this->draw('DnValueIcon', $attribute, $val); } /***************************/ /* Paint a GidAttribute */ /***************************/ protected function drawGidAttributeReadWriteValue($attribute, $i) { $this->draw('Attribute::ReadWriteValue', $attribute, $i); $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; $dn = ''; if ($attribute->getEntry()) $dn = $attribute->getEntry()->getDn(); # If this is a gidNumber on a non-PosixGroup entry, lookup its name and description for convenience if (! in_array_ignore_case('posixGroup', $this->ldapserver->getDNAttr($dn, 'objectClass'))) { $gid_number = $val; $search_group_filter = "(&(objectClass=posixGroup)(gidNumber=$val))"; $group = $this->ldapserver->search(null, null, $search_group_filter,array('dn','description')); if (count($group) > 0) { echo '
'; $group = array_pop($group); $group_dn = $group['dn']; $group_name = explode('=',get_rdn($group_dn)); $group_name = $group_name[1]; $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s', $this->ldapserver->server_id, rawurlencode($group_dn)); echo ''; printf('%s', htmlspecialchars($href), htmlspecialchars($group_name)); $description = isset($group['description']) ? $group['description'] : null; if (is_array($description)) { foreach ($description as $item) printf(' (%s)',htmlspecialchars($item)); } else { printf(' (%s)',htmlspecialchars($description)); } echo ''; } } } /***************************/ /* Paint a JpegAttribute */ /***************************/ protected function drawJpegAttributeValues($attribute) { if ($attribute->isVisible()) { $this->draw('StartValueLine', $attribute); $value_count = $attribute->getValueCount(); if ($value_count > 0) { /* Don't draw the delete buttons if there is more than one jpegPhoto * (phpLDAPadmin can't handle this case yet) */ if ($attribute->getEntry() && $attribute->getEntry()->getDn()) { draw_jpeg_photos($this->ldapserver, $attribute->getEntry()->getDn(), $attribute->getName(), ! $attribute->isReadOnly() && $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete')); } } elseif ($attribute->isReadOnly() || ! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value')) { printf('
',_('[no value]')); } else { $i = 0; $val = ''; $id = sprintf('new_values_%s_%s', htmlspecialchars($attribute->getName()), $i); printf('
', htmlspecialchars($attribute->getName()), $i, $id, htmlspecialchars($val), $attribute->getName(), $attribute->getName(), ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); } $this->draw('EndValueLine', $attribute); } else { $this->draw('BinaryAttribute::Values', $attribute); } } /******************************/ /* Paint a MultiLineAttribute */ /******************************/ protected function drawMultiLineAttributeReadOnlyValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; printf('
', ($attribute->getRows() > 0) ? 'rows="'.$attribute->getRows().'"' : '', ($attribute->getCols() > 0) ? 'cols="'.$attribute->getCols().'"' : '', htmlspecialchars($attribute->getName()), $i, htmlspecialchars($attribute->getName()), $i, htmlspecialchars($val)); } protected function drawMultiLineAttributeReadWriteValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; printf('', ($attribute->getRows() > 0) ? 'rows="'.$attribute->getRows().'"' : '', ($attribute->getCols() > 0) ? 'cols="'.$attribute->getCols().'"' : '', htmlspecialchars($attribute->getName()), $i, htmlspecialchars($attribute->getName()), $i, $attribute->getName(), $attribute->getName(), htmlspecialchars($val)); } /********************************/ /* Paint a ObjectClassAttribute */ /********************************/ protected function drawObjectClassAttributeNewValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; $schema_object = ($val) ? $this->ldapserver->getSchemaObjectClass($val) : false; $structural = (is_object($schema_object) && $schema_object->getType() == 'structural'); if (!$attribute->isVisible()) { $this->draw('HiddenValue', $attribute, $i); } elseif ($structural) { # Is this value is a structural objectClass, make it read-only printf('', htmlspecialchars($attribute->getName()), $i, htmlspecialchars($attribute->getName()), $i, htmlspecialchars($val)); printf(' (%s)
', _('This is a structural ObjectClass and cannot be removed.'), _('structural')); } else { $this->draw('Attribute::NewValue', $attribute, $i); } } protected function drawObjectClassAttributeIcon($attribute, $val) { if (strlen($val) > 0) { $href = htmlspecialchars(sprintf('cmd.php?cmd=schema&server_id=%s&view=objectClasses&viewvalue=%s', $this->ldapserver->server_id, $val)); printf('Info ', _('View the schema description for this objectClass'), htmlspecialchars($href)); } } /*****************************/ /* Paint a PasswordAttribute */ /*****************************/ protected function drawPasswordAttributeOldValue($attribute, $i) { //if ($this->context == ENTRY_WRITER_CREATION_CONTEXT) { $this->draw('Attribute::OldValue', $attribute, $i); //} } protected function drawPasswordAttributeHiddenValue($attribute, $i) { if ($this->context == ENTRY_WRITER_CREATION_CONTEXT) { $this->draw('Attribute::HiddenValue', $attribute, $i); } } protected function drawPasswordAttributeReadOnlyValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; $enc_type = get_enc_type($val); if ($val == '') $enc_type = get_default_hash($this->ldapserver->server_id); $obfuscate_password = obfuscate_password_display($enc_type); printf('
', ($obfuscate_password ? 'password' : 'text'), htmlspecialchars($attribute->getName()), $i, htmlspecialchars($attribute->getName()), $i, htmlspecialchars($val), ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : ''); if ($val != '') $this->draw('CheckLink', $attribute, 'new_values_'.htmlspecialchars($attribute->getName()).'_'.$i); } protected function drawPasswordAttributeReadWriteValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; $enc_type = get_enc_type($val); # Set the default hashing type if the password is blank (must be newly created) if ($val == '') { $enc_type = get_default_hash($this->ldapserver->server_id); } //printf('', $attribute->getName(), $i, htmlspecialchars($val)); //if (strlen($val) > 0) { // if (obfuscate_password_display($enc_type)) { // echo htmlspecialchars(preg_replace('/./','*', $val)); // } else { // echo htmlspecialchars($val); // } // echo '
'; //} echo '
'; $obfuscate_password = obfuscate_password_display($enc_type); $id = sprintf('new_values_%s_%s', htmlspecialchars($attribute->getName()), $i); printf('', ($obfuscate_password ? 'password' : 'text'), htmlspecialchars($attribute->getName()), $i, $id, htmlspecialchars($val), $attribute->getName(), $attribute->getName(), ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); echo ''; if ($attribute->hasProperty('helper')) { $this->draw('Helper', $attribute, $i); } echo '
'; if ($attribute->hasProperty('verify') && $attribute->getProperty('verify') && $obfuscate_password) { $id_v = sprintf('new_values_verify_%s_%s', htmlspecialchars($attribute->getName()), $i); printf('', htmlspecialchars($attribute->getName()), $i, $id_v, ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); echo ''; printf('(%s)', _('confirm')); echo '
'; } $this->draw('CheckLink', $attribute, $id); echo '
'; } protected function getPasswordAttributeDefaultValueHelper($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; $enc_type = get_enc_type($val); # Set the default hashing type if the password is blank (must be newly created) if ($val == '') { $enc_type = get_default_hash($this->ldapserver->server_id); } return $enc_type; } protected function drawPasswordAttributeCheckLink($attribute, $component_id) { printf('%s
', $component_id/*base64_encode($val)*/, _('Check password...')); } protected function drawPasswordAttributeJavascript($attribute) { $this->draw('Attribute::Javascript', $attribute); static $already_draw = false; if ($already_draw) return; else $already_draw = true; # add the javascript so we can call check password later. echo ' '; } /***********************************/ /* Paint a RandomPasswordAttribute */ /***********************************/ protected function drawRandomPasswordAttributeJavascript($attribute) { $this->draw('PasswordAttribute::Javascript', $attribute); $pwd = password_generate(); $pwd = str_replace("\\", "\\\\", $pwd); $pwd = str_replace("'", "\\'", $pwd); echo ''; } /******************************/ /* Paint a SelectionAttribute */ /******************************/ protected function drawSelectionAttributeValues($attribute) { if (!$attribute->isVisible() || !$attribute->isMultiple() || ($attribute->getValueCount() > 0)) { $this->draw('Attribute::Values', $attribute); } else { $this->draw('StartValueLine', $attribute); $this->draw('Value', $attribute, 0); $this->draw('Menu', $attribute); $this->draw('EndValueLine', $attribute); } } protected function drawSelectionAttributeReadOnlyValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; printf('', htmlspecialchars($attribute->getName()), $i, htmlspecialchars($attribute->getName()), $i, htmlspecialchars($val)); $select = $attribute->getSelection(); if (isset($select[$val])) $val = $select[$val]; echo htmlspecialchars($val).'
'; } protected function drawSelectionAttributeReadWriteValue($attribute, $i) { if ($attribute->isMultiple()) { // for multiple selection, we draw the component only one time if ($i > 0) return; if (($attribute->getSize() > 0) && ($attribute->getSize() < $attribute->getOptionCount())) { $selected = array(); printf(''; } else { $selected = array(); $vals = $attribute->getValues(); $j = 0; echo ''; foreach ($attribute->getSelection() as $value => $description) { if (in_array($value, $vals)) $selected[$value] = true; $id = 'new_values_'.htmlspecialchars($attribute->getName()).'_'.($j++); printf('', $id, htmlspecialchars($attribute->getName()), $value, $attribute->getName(), $attribute->getName(), isset($selected[$value]) ? 'checked' : '', " $description"); } foreach ($vals as $val) { if (!isset($selected[$val])) { $id = 'new_values_'.htmlspecialchars($attribute->getName()).'_'.($j++); printf('', $id, htmlspecialchars($attribute->getName()), $val, $attribute->getName(), $attribute->getName(), " $val"); } } echo '
%s
%s
'; } } else { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; if ($attribute->hasProperty('helper')) { echo '
'; } $found = false; $empty_value = false; $id = 'new_values_'.htmlspecialchars($attribute->getName()).'_'.$i; printf(''; if ($attribute->hasProperty('helper')) { echo ''; $this->draw('Helper', $attribute, $i); echo '
'; } } } protected function getSelectionAttributeMenuItem($attribute, $i) { switch ($i) { case IdAttributeAddValueMenuItem : if (!$attribute->isMultiple()) { return $this->get('Attribute::MenuItem', $attribute, $i); } return ''; case IdAttributeModifyMemberMenuItem : return ''; default : return $this->get('Attribute::MenuItem', $attribute, $i); } } protected function drawSelectionAttributeIcon($attribute, $val) { if (!$attribute->isMultiple() || $attribute->isReadOnly()) { $this->draw('Attribute::Icon', $attribute, $val); } } /***************************/ /* Paint a ShadowAttribute */ /***************************/ protected function drawShadowAttributeReadOnlyValue($attribute, $i) { $val = $attribute->getValue($i); if (!is_string($val)) $val = ''; if ($i < 0) $i = 0; printf('', htmlspecialchars($attribute->getName()), $i, htmlspecialchars($attribute->getName()), $i, htmlspecialchars($val)); $today = date('U'); $shadow_date = $today; if ($attribute->getEntry()) { $shadow_date = shadow_date($attribute->getEntry()->getAttributes(),$attribute->getName()); } echo htmlspecialchars($val).' '; echo ''; $this->draw('ShadowDate', $attribute, $shadow_date); echo '
'; } protected function drawShadowAttributeReadWriteValue($attribute, $i) { $this->draw('Attribute::ReadWriteValue', $attribute, $i); $val = $attribute->getValue($i); if (!is_string($val) || (strlen($val) <= 0)) return; $today = date('U'); $shadow_date = $today; if ($attribute->getEntry()) { $shadow_date = shadow_date($attribute->getEntry()->getAttributes(),$attribute->getName()); } # Show the dates for all the shadow attributes. if ($shadow_date !== false) { echo ''; $this->draw('ShadowDate', $attribute, $shadow_date); echo ''; echo '
'; } } protected function drawShadowAttributeShadowDate($attribute, $shadow_date) { $config = $_SESSION[APPCONFIG]; //$shadow_format_attrs = array_merge($shadow_before_today_attrs,$shadow_after_today_attrs); $shadow_before_today_attrs = arrayLower($attribute->shadow_before_today_attrs); $shadow_after_today_attrs = arrayLower($attribute->shadow_after_today_attrs); $today = date('U'); if (($today < $shadow_date) && in_array(strtolower($attribute->getName()),$shadow_before_today_attrs)) { echo '('; echo htmlspecialchars(strftime($config->GetValue('appearance', 'date'), $shadow_date)); echo ')'; } elseif (($today > $shadow_date) && in_array(strtolower($attribute->getName()),$shadow_after_today_attrs)) { echo '('; echo htmlspecialchars(strftime($config->GetValue('appearance', 'date'), $shadow_date)); echo ')'; } else { echo '('; echo htmlspecialchars(strftime($config->GetValue('appearance', 'date'), $shadow_date)); echo ')'; } } } ?>