PageRenderTime 61ms CodeModel.GetById 29ms RepoModel.GetById 1ms app.codeStats 0ms

/htdocs/modify_member_form.php

https://bitbucket.org/dereckson/phpldapadmin
PHP | 178 lines | 111 code | 40 blank | 27 comment | 12 complexity | 25bbc176293acf9c4e4bf720c31981c8 MD5 | raw file
Possible License(s): GPL-2.0
  1. <?php
  2. /**
  3. * Displays a form to allow the user to modify group members.
  4. *
  5. * @package phpLDAPadmin
  6. * @subpackage Page
  7. */
  8. /**
  9. */
  10. require './common.php';
  11. # The DN we are working with
  12. $request = array();
  13. $request['dn'] = get_request('dn','GET');
  14. $request['attr'] = get_request('attr','GET');
  15. $request['page'] = new TemplateRender($app['server']->getIndex(),get_request('template','REQUEST',false,null));
  16. $request['page']->setDN($request['dn']);
  17. $request['page']->accept(true);
  18. $request['template'] = $request['page']->getTemplate();
  19. if (! is_null($request['dn']))
  20. $rdn = get_rdn($request['dn']);
  21. else
  22. $rdn = null;
  23. # Get all current group members
  24. $current_members = $app['server']->getDNAttrValue($request['dn'],$request['attr']);
  25. usort($current_members,'pla_compare_dns');
  26. # Loop through all base dn's and search possible member entries
  27. $query = array();
  28. # Get all entries that can be added to the group
  29. if (preg_match("/^".$request['attr']."$/i",$_SESSION[APPCONFIG]->getValue('modify_member','posixgroupattr'))) {
  30. $query['filter'] = $_SESSION[APPCONFIG]->getValue('modify_member','posixfilter');
  31. $attr = $_SESSION[APPCONFIG]->getValue('modify_member','posixattr');
  32. } else {
  33. $query['filter'] = $_SESSION[APPCONFIG]->getValue('modify_member','filter');
  34. $attr = $_SESSION[APPCONFIG]->getValue('modify_member','attr');
  35. }
  36. $query['attrs'] = array($attr);
  37. $possible_values = array();
  38. foreach ($app['server']->getBaseDN() as $base) {
  39. $query['base'] = $base;
  40. $possible_values = array_merge($possible_values,$app['server']->query($query,null));
  41. }
  42. usort($possible_values,'pla_compare_dns');
  43. $request['page']->drawTitle(sprintf('%s <b>%s</b>',_('Modify group'),get_rdn($request['dn'])));
  44. $request['page']->drawSubTitle();
  45. printf('%s <b>%s</b> %s <b>%s</b>:',
  46. _('There are'),count($current_members),_('members in group'),htmlspecialchars(get_rdn($request['dn'])));
  47. $possible_members = array();
  48. for ($i=0;$i<count($possible_values);$i++) {
  49. if (preg_match("/^".$request['attr']."$/i",$_SESSION[APPCONFIG]->getValue('modify_member','posixgroupattr')))
  50. $possible_members[$i] = $possible_values[$i][$_SESSION[APPCONFIG]->getValue('modify_member','posixattr')][0];
  51. else
  52. $possible_members[$i] = $possible_values[$i][$_SESSION[APPCONFIG]->getValue('modify_member','attr')];
  53. }
  54. # Show only user that are not already in group.
  55. $possible_members = array_diff($possible_members,$current_members);
  56. usort($possible_members,'pla_compare_dns');
  57. /* Draw form with select boxes, left for all possible members and
  58. * right one for those that belong to group */
  59. # Modifications will be sent to update_confirm which takes care of rest of the processing
  60. echo '<br />';
  61. echo '<br />';
  62. echo '<form action="cmd.php" method="post" class="add_value" id="member">';
  63. echo '<div>';
  64. if ($_SESSION[APPCONFIG]->getValue('confirm','update'))
  65. echo '<input type="hidden" name="cmd" value="update_confirm" />';
  66. else
  67. echo '<input type="hidden" name="cmd" value="update" />';
  68. echo '</div>';
  69. echo '<table class="modify_members">';
  70. echo '<tr>';
  71. printf('<td><img src="%s/ldap-user.png" alt="Users" /> %s</td>',IMGDIR,_('Available members'));
  72. printf('<td><img src="%s/ldap-uniquegroup.png" alt="Members" /> %s</td>',IMGDIR,_('Group members'));
  73. echo '</tr>';
  74. # Generate select box from all possible members
  75. echo '<tr>';
  76. echo '<td>';
  77. echo '<select name="notmembers" size="10" multiple="multiple">';
  78. switch ($request['attr']) {
  79. case 'nisnetgrouptriple':
  80. foreach ($possible_members as $possible) {
  81. // Added for output formating
  82. $matches = preg_split('/[=,]/',$possible);
  83. $possible = sprintf('(,%s,)',$matches[1]);
  84. if (! in_array($possible,$current_members))
  85. printf('<option>%s</option>',$possible);
  86. }
  87. break;
  88. case ('memberuid' || 'member' || 'uniquemember'):
  89. foreach ($possible_members as $possible) {
  90. if (! in_array($possible,$current_members))
  91. printf('<option>%s</option>',$possible);
  92. }
  93. break;
  94. }
  95. echo '</select>';
  96. echo '</td>';
  97. # Generate select box from all current members
  98. echo '<td>';
  99. echo '<select name="members" size="10" multiple="multiple">';
  100. foreach ($current_members as $current)
  101. printf('<option>%s</option>',htmlspecialchars($current));
  102. echo '</select>';
  103. echo '</td>';
  104. echo '</tr>';
  105. # Show buttons which move users from left to right and vice versa
  106. echo '<tr>';
  107. echo '<td>';
  108. printf('<input type="button" onclick="one2two()" value="%s >>" />&nbsp;<input type="button" onclick="all2two()" value="%s >>" />',
  109. _('Add selected'),_('Add all'));
  110. echo '</td>';
  111. echo '<td>';
  112. printf('<input type="button" onclick="two2one()" value="<< %s" />&nbsp;<input type="button" onclick="all2one()" value="<< %s" />',
  113. _('Remove selected'),('Remove all'));
  114. echo '</td>';
  115. echo '</tr>';
  116. echo '<tr><td colspan="2">';
  117. # Hidden attributes for update_confirm.php
  118. printf('<input type="hidden" name="server_id" value="%s" />',$app['server']->getIndex());
  119. printf('<input type="hidden" name="dn" value="%s" />',rawurlencode($request['dn']));
  120. printf('<input type="hidden" name="attr" value="%s" />',$request['attr']);
  121. /* Generate array of input text boxes from current members.
  122. * update_confirm.php will see this as old_values[member-attribute][item] */
  123. for ($i=0; $i<count($current_members); $i++)
  124. printf('<input type="hidden" name="old_values[%s][%s]" value="%s" />',
  125. htmlspecialchars($request['attr']),$i,htmlspecialchars($current_members[$i]));
  126. /* Javascript generates array of input text boxes from new members.
  127. * update_confirm.php will see this as new_values[member-attribute][item]
  128. * Input text boxes will be generated to div=dnu */
  129. echo '<div id="dnu">';
  130. printf('<input type="hidden" name="new_values[%s][]" value="" />',htmlspecialchars($request['attr']));
  131. echo '</div>';
  132. # Submit values to update_confirm.php and when clicked, run addSelected
  133. printf('<input type="submit" name="save" value="%s" onclick="update_new_values(\'%s\')" />',_('Save changes'),$request['attr']);
  134. echo '</td></tr>';
  135. echo '</table>';
  136. echo '</form>';
  137. printf('<script type="text/javascript" src="%smodify_member.js"></script>',JSDIR);
  138. ?>