Source of file MemberProfileViewer.php
Size: 3,418 Bytes - Last Modified: 2021-12-23T10:32:51+00:00
/var/www/docs.ssmods.com/process/src/code/controllers/MemberProfileViewer.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | <?php /** * Handles displaying member's public profiles. * * @package silverstripe-memberprofiles * @subpackage controllers */ class MemberProfileViewer extends Page_Controller { private static $url_handlers = array( '' => 'handleList', '$MemberID!' => 'handleView' ); private static $allowed_actions = array( 'handleList', 'handleView' ); protected $parent, $name; /** * @param RequestHandler $parent * @param string $name */ public function __construct($parent, $name) { $this->parent = $parent; $this->name = $name; parent::__construct(); } /** * Displays a list of all members on the site that belong to the selected * groups. * * @return string */ public function handleList($request) { $fields = $this->parent->Fields()->filter('MemberListVisible', true); $members = $this->parent->Groups()->relation('Members'); $members = new PaginatedList($members, $request); $list = new PaginatedList(new ArrayList(), $request); $list->setLimitItems(false); $list->setTotalItems($members->getTotalItems()); foreach($members as $member) { $cols = new ArrayList(); $public = $member->getPublicFields(); $link = $this->Link($member->ID); foreach($fields as $field) { if( $field->PublicVisibility == 'MemberChoice' && !in_array($field->MemberField, $public) ) { $value = null; } else { $value = $member->{$field->MemberField}; } $cols->push(new ArrayData(array( 'Name' => $field->MemberField, 'Title' => $field->Title, 'Value' => $value, 'Sortable' => $member->hasDatabaseField($field->MemberField), 'Link' => $link ))); } $list->push($member->customise(array( 'Fields' => $cols ))); } $this->data()->Title = _t('MemberProfiles.MEMBERLIST', 'Member List'); $this->data()->Parent = $this->parent; $controller = $this->customise(array( 'Members' => $list )); return $controller->renderWith(array( 'MemberProfileViewer_list', 'MemberProfileViewer', 'Page' )); } /** * Handles viewing an individual user's profile. * * @return string */ public function handleView($request) { $id = $request->param('MemberID'); if(!ctype_digit($id)) { $this->httpError(404); } $member = Member::get()->byID($id); $groups = $this->parent->Groups(); if(!$member->inGroups($groups)) { $this->httpError(403); } $sections = $this->parent->Sections(); $sectionsList = new ArrayList(); foreach($sections as $section) { $sectionsList->push($section); $section->setMember($member); } $this->data()->Title = sprintf( _t('MemberProfiles.MEMBERPROFILETITLE', "%s's Profile"), $member->getName() ); $this->data()->Parent = $this->parent; $controller = $this->customise(array( 'Member' => $member, 'Sections' => $sectionsList, 'IsSelf' => $member->ID == Member::currentUserID() )); return $controller->renderWith(array( 'MemberProfileViewer_view', 'MemberProfileViewer', 'Page' )); } /** * @return int */ public function getPaginationStart() { if ($start = $this->request->getVar('start')) { if (ctype_digit($start) && (int) $start > 0) return (int) $start; } return 0; } /** * @return string */ public function Link($action = null) { return Controller::join_links($this->parent->Link(), $this->name, $action); } } |