/** * Retrieve singleton instance of storage object * @static * @param smdoc $foowd Reference to the foowd environment object. * @return Reference to singleton object */ function &getInstance(&$foowd, $className, $classid, $objectid) { $foowd->track('smdoc_storage::getInstance', $className, $classid, $objectid); // Where conditions for the singleton namelookup object instance $where['classid'] = $classid; $where['objectid'] = $objectid; $where['version'] = 0; $where['workspaceid'] = 0; // get Object - use where clause, no special source, skip workspace check, skip version stuff $obj =& $foowd->getObj($where, NULL, FALSE, FALSE); // If object couldn't be found, build a new one if ($obj == NULL) { $obj = new $className($foowd); // If save failed, try retrieve again (maybe someone beat you to it..) if (!$obj->save()) { $obj =& $foowd->getObj($where, NULL, FALSE, FALSE); if ($obj == NULL) { trigger_error('Unable to retrieve object from database: ' . $where['objectid'], E_USER_ERROR); } } } $foowd->track(); return $obj; }
/** * Fetch the News * * @global array Specifies table information for news persistance. * @param smdoc $foowd Reference to the foowd environment object. * @param mixed newsArray Array containing news information (objectid). * @return retrieved news or FALSE on failure. */ function &fetchNews(&$foowd, $newsArray = NULL) { global $NEWS_SOURCE; $foowd->track('smdoc_news::fetchNews', $newsArray); if (isset($newsArray['objectid'])) { $where['objectid'] = $newsArray['objectid']; } else { return FALSE; } $news =& $foowd->getObj($where, $NEWS_SOURCE, NULL, FALSE, FALSE); $foowd->track(); return $news; }
/** * 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(); }
/** * Fetch Foowd User * * @global array Specifies table information for user persistance. * @param smdoc $foowd Reference to the foowd environment object. * @param mixed userArray Array containing user information (userid, password). * @return retrieved foowd user or FALSE on failure. */ function &fetchUser(&$foowd, $userArray = NULL) { global $USER_SOURCE; $foowd->track('base_user::fetchUser', $userArray); if (isset($userArray['objectid'])) { $where['objectid'] = $userArray['objectid']; } elseif (isset($userArray['username'])) { $where['title'] = $userArray['username']; } else { return FALSE; } $user =& $foowd->getObj($where, $USER_SOURCE, NULL, FALSE, FALSE); $foowd->track(); return $user; }