/**
  * Edit members of particular group
  *
  * Values set in template:
  *  + memberlist      - below
  *  + groupname       - name of group being modified
  *  + deleteForm      - Form for deleting members
  *
  * Sample contents of $t['memberlist']:
  * <pre>
  * array (
  *   0 => array ( 
  *          'title' => 'Username'
  *          'objectid' => 1287432
  *          'member_delete' => checkbox for deletion from group
  *        )
  * )
  * </pre>
  *
  * @static
  * @global array Specifies table information for user persistance.
  * @param smdoc $foowd Reference to the foowd environment object.
  * @param string className The name of the class.
  */
 function class_edit(&$foowd, $className)
 {
     $foowd->track('smdoc_group->class_edit');
     include_once INPUT_DIR . 'input.querystring.php';
     include_once INPUT_DIR . 'input.form.php';
     include_once INPUT_DIR . 'input.checkbox.php';
     $id_q = new input_querystring('id', REGEX_TITLE, NULL);
     if (empty($id_q->value)) {
         $_SESSION['error'] = OBJECT_NOT_FOUND;
         $foowd->loc_forward(getURI(NULL, FALSE));
         exit;
     }
     $group = $id_q->value;
     global $GROUP_USER_SOURCE;
     global $USER_SOURCE;
     /*
      * Set up combined source for JOIN query
      */
     $source['table'] = $USER_SOURCE['table'] . ', ' . $GROUP_USER_SOURCE['table'];
     $source['table_create'] = NULL;
     // Select objectid, and title from the user table
     $index[] = $USER_SOURCE['table'] . '.objectid AS objectid';
     $index[] = $USER_SOURCE['table'] . '.title AS title';
     // Select only those records that match the current group
     $where[$GROUP_USER_SOURCE['table'] . '.title'] = $group;
     // and that match object id's between the user table and the group table
     $where['match']['index'] = $GROUP_USER_SOURCE['table'] . '.objectid';
     $where['match']['op'] = '=';
     $where['match']['field'] = $USER_SOURCE['table'] . '.objectid';
     // order by user title
     $order = $USER_SOURCE['table'] . '.title';
     // Fetch users belonging to specified group, order by user name,
     // no limit, only fetch array, and don't bother with workspaces.
     $members =& $foowd->getObjList($index, $source, $where, $order, NULL, FALSE, FALSE);
     $deleteForm = new input_form('memberDeleteForm', NULL, SQ_POST, _("Delete Group Member"));
     if (!empty($members)) {
         foreach ($members as $idx => $userArray) {
             $deleteBox = new input_checkbox($userArray['objectid'], $deleteForm, FALSE, 'Delete');
             if ($deleteForm->submitted() && $deleteBox->checked) {
                 $foowd->groups->removeUser($userArray['objectid'], $group);
                 $user =& $foowd->getObj(array('objectid' => $userArray['objectid'], 'classid' => USER_CLASS_ID));
                 if ($user) {
                     $user->removeFromGroup($group);
                 }
                 unset($members[$idx]);
             } else {
                 // Add box to form and array
                 $deleteForm->addObject($deleteBox);
                 $members[$idx]['member_delete'] =& $deleteForm->objects[$userArray['objectid']];
             }
         }
     }
     $foowd->template->assign_by_ref('memberlist', $members);
     $foowd->template->assign_by_ref('deleteForm', $deleteForm);
     $foowd->template->assign('groupname', $foowd->groups->getDisplayName($group));
     $foowd->track();
 }
예제 #2
0
 /**
  * Call a class method.
  *
  * @static
  * @param smdoc $foowd Reference to the foowd environment object.
  * @param string $className Name of the class to call the method upon.
  * @param string $methodName Name of the method to call.
  * @return bool Success or failure
  */
 function classMethod(&$foowd, $className, $methodName = NULL)
 {
     $foowd->track('foowd_object->classMethod', $className, $methodName);
     // make sure method exists
     $classMethods = get_class_methods($className);
     $classMethodName = 'class_' . $methodName;
     if ($methodName == NULL || !in_array($classMethodName, $classMethods)) {
         $_SESSION['error'] = INVALID_METHOD;
         $foowd->loc_forward(getURI(NULL, FALSE));
         exit;
     }
     $permission = $foowd->hasPermission($className, $methodName, 'class');
     if (!$permission) {
         $_SESSION['error'] = USER_NO_PERMISSION;
         $foowd->loc_forward(getURI(NULL, FALSE));
         exit;
     }
     $foowd->template->assign('className', $className);
     $foowd->template->assign('method', $methodName);
     call_user_func(array($className, $classMethodName), &$foowd, $className);
     // call method
     $foowd->track();
     return TRUE;
 }