Slightly more sophisticated profiles.
Summary: Test Plan: Reviewers: CC:
This commit is contained in:
parent
f0066ed742
commit
c457032645
|
@ -227,7 +227,7 @@ celerity_register_resource_map(array(
|
||||||
),
|
),
|
||||||
'phabricator-profile-css' =>
|
'phabricator-profile-css' =>
|
||||||
array(
|
array(
|
||||||
'uri' => '/res/c3c5c82e/rsrc/css/application/people/profile.css',
|
'uri' => '/res/259ad37f/rsrc/css/application/people/profile.css',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
'requires' =>
|
'requires' =>
|
||||||
array(
|
array(
|
||||||
|
|
|
@ -228,6 +228,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorPeopleEditController' => 'applications/people/controller/edit',
|
'PhabricatorPeopleEditController' => 'applications/people/controller/edit',
|
||||||
'PhabricatorPeopleListController' => 'applications/people/controller/list',
|
'PhabricatorPeopleListController' => 'applications/people/controller/list',
|
||||||
'PhabricatorPeopleProfileController' => 'applications/people/controller/profile',
|
'PhabricatorPeopleProfileController' => 'applications/people/controller/profile',
|
||||||
|
'PhabricatorPeopleProfileEditController' => 'applications/people/controller/profileedit',
|
||||||
'PhabricatorRemarkupRuleDifferential' => 'infrastructure/markup/remarkup/markuprule/differential',
|
'PhabricatorRemarkupRuleDifferential' => 'infrastructure/markup/remarkup/markuprule/differential',
|
||||||
'PhabricatorRemarkupRuleManiphest' => 'infrastructure/markup/remarkup/markuprule/maniphest',
|
'PhabricatorRemarkupRuleManiphest' => 'infrastructure/markup/remarkup/markuprule/maniphest',
|
||||||
'PhabricatorRepository' => 'applications/repository/storage/repository',
|
'PhabricatorRepository' => 'applications/repository/storage/repository',
|
||||||
|
@ -258,6 +259,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorTypeaheadDatasourceController' => 'applications/typeahead/controller/base',
|
'PhabricatorTypeaheadDatasourceController' => 'applications/typeahead/controller/base',
|
||||||
'PhabricatorUser' => 'applications/people/storage/user',
|
'PhabricatorUser' => 'applications/people/storage/user',
|
||||||
'PhabricatorUserDAO' => 'applications/people/storage/base',
|
'PhabricatorUserDAO' => 'applications/people/storage/base',
|
||||||
|
'PhabricatorUserProfile' => 'applications/people/storage/profile',
|
||||||
'PhabricatorUserSettingsController' => 'applications/people/controller/settings',
|
'PhabricatorUserSettingsController' => 'applications/people/controller/settings',
|
||||||
'PhabricatorXHProfController' => 'applications/xhprof/controller/base',
|
'PhabricatorXHProfController' => 'applications/xhprof/controller/base',
|
||||||
'PhabricatorXHProfProfileController' => 'applications/xhprof/controller/profile',
|
'PhabricatorXHProfProfileController' => 'applications/xhprof/controller/profile',
|
||||||
|
@ -457,6 +459,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorPeopleEditController' => 'PhabricatorPeopleController',
|
'PhabricatorPeopleEditController' => 'PhabricatorPeopleController',
|
||||||
'PhabricatorPeopleListController' => 'PhabricatorPeopleController',
|
'PhabricatorPeopleListController' => 'PhabricatorPeopleController',
|
||||||
'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
|
'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
|
||||||
|
'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleController',
|
||||||
'PhabricatorRemarkupRuleDifferential' => 'PhutilRemarkupRule',
|
'PhabricatorRemarkupRuleDifferential' => 'PhutilRemarkupRule',
|
||||||
'PhabricatorRemarkupRuleManiphest' => 'PhutilRemarkupRule',
|
'PhabricatorRemarkupRuleManiphest' => 'PhutilRemarkupRule',
|
||||||
'PhabricatorRepository' => 'PhabricatorRepositoryDAO',
|
'PhabricatorRepository' => 'PhabricatorRepositoryDAO',
|
||||||
|
@ -482,6 +485,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorTypeaheadDatasourceController' => 'PhabricatorController',
|
'PhabricatorTypeaheadDatasourceController' => 'PhabricatorController',
|
||||||
'PhabricatorUser' => 'PhabricatorUserDAO',
|
'PhabricatorUser' => 'PhabricatorUserDAO',
|
||||||
'PhabricatorUserDAO' => 'PhabricatorLiskDAO',
|
'PhabricatorUserDAO' => 'PhabricatorLiskDAO',
|
||||||
|
'PhabricatorUserProfile' => 'PhabricatorUserDAO',
|
||||||
'PhabricatorUserSettingsController' => 'PhabricatorPeopleController',
|
'PhabricatorUserSettingsController' => 'PhabricatorPeopleController',
|
||||||
'PhabricatorXHProfController' => 'PhabricatorController',
|
'PhabricatorXHProfController' => 'PhabricatorController',
|
||||||
'PhabricatorXHProfProfileController' => 'PhabricatorXHProfController',
|
'PhabricatorXHProfProfileController' => 'PhabricatorXHProfController',
|
||||||
|
|
|
@ -64,6 +64,9 @@ class AphrontDefaultApplicationConfiguration
|
||||||
'edit/(?:(?P<username>\w+)/)?$' => 'PhabricatorPeopleEditController',
|
'edit/(?:(?P<username>\w+)/)?$' => 'PhabricatorPeopleEditController',
|
||||||
),
|
),
|
||||||
'/p/(?P<username>\w+)/$' => 'PhabricatorPeopleProfileController',
|
'/p/(?P<username>\w+)/$' => 'PhabricatorPeopleProfileController',
|
||||||
|
'/profile/' => array(
|
||||||
|
'edit/$' => 'PhabricatorPeopleProfileEditController',
|
||||||
|
),
|
||||||
'/conduit/' => array(
|
'/conduit/' => array(
|
||||||
'$' => 'PhabricatorConduitConsoleController',
|
'$' => 'PhabricatorConduitConsoleController',
|
||||||
'method/(?P<method>[^/]+)$' => 'PhabricatorConduitConsoleController',
|
'method/(?P<method>[^/]+)$' => 'PhabricatorConduitConsoleController',
|
||||||
|
|
|
@ -35,13 +35,20 @@ class PhabricatorPeopleProfileController extends PhabricatorPeopleController {
|
||||||
return new Aphront404Response();
|
return new Aphront404Response();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$profile = id(new PhabricatorUserProfile())->loadOneWhere(
|
||||||
|
'userPHID = %s',
|
||||||
|
$user->getPHID());
|
||||||
|
if (!$profile) {
|
||||||
|
$profile = new PhabricatorUserProfile();
|
||||||
|
}
|
||||||
|
|
||||||
$links = array();
|
$links = array();
|
||||||
|
|
||||||
if ($user->getPHID() == $viewer->getPHID()) {
|
if ($user->getPHID() == $viewer->getPHID()) {
|
||||||
$links[] = phutil_render_tag(
|
$links[] = phutil_render_tag(
|
||||||
'a',
|
'a',
|
||||||
array(
|
array(
|
||||||
'href' => '/p/'.$user->getUsername().'/edit/',
|
'href' => '/profile/edit/',
|
||||||
),
|
),
|
||||||
'Edit Profile');
|
'Edit Profile');
|
||||||
}
|
}
|
||||||
|
@ -64,6 +71,8 @@ class PhabricatorPeopleProfileController extends PhabricatorPeopleController {
|
||||||
implode("\n", $links).
|
implode("\n", $links).
|
||||||
'</ul>';
|
'</ul>';
|
||||||
|
|
||||||
|
$title = nonempty($profile->getTitle(), 'Untitled Document');
|
||||||
|
|
||||||
$username_tag =
|
$username_tag =
|
||||||
'<h1 class="profile-username">'.
|
'<h1 class="profile-username">'.
|
||||||
phutil_escape_html($user->getUserName()).
|
phutil_escape_html($user->getUserName()).
|
||||||
|
@ -74,10 +83,13 @@ class PhabricatorPeopleProfileController extends PhabricatorPeopleController {
|
||||||
'</h2>';
|
'</h2>';
|
||||||
$title_tag =
|
$title_tag =
|
||||||
'<h2 class="profile-usertitle">'.
|
'<h2 class="profile-usertitle">'.
|
||||||
'Cool Title'.
|
phutil_escape_html($title).
|
||||||
'</h2>';
|
'</h2>';
|
||||||
|
|
||||||
$src_phid = $user->getProfileImagePHID();
|
$src_phid = $profile->getProfileImagePHID();
|
||||||
|
if (!$src_phid) {
|
||||||
|
$src_phid = $user->getProfileImagePHID();
|
||||||
|
}
|
||||||
$src = PhabricatorFileURI::getViewURIForPHID($src_phid);
|
$src = PhabricatorFileURI::getViewURIForPHID($src_phid);
|
||||||
|
|
||||||
$picture = phutil_render_tag(
|
$picture = phutil_render_tag(
|
||||||
|
@ -89,7 +101,14 @@ class PhabricatorPeopleProfileController extends PhabricatorPeopleController {
|
||||||
|
|
||||||
require_celerity_resource('phabricator-profile-css');
|
require_celerity_resource('phabricator-profile-css');
|
||||||
|
|
||||||
$blurb = 'just build marawdars dood';
|
$blurb = nonempty(
|
||||||
|
$profile->getBlurb(),
|
||||||
|
'//Nothing is known about this rare specimen.//');
|
||||||
|
|
||||||
|
$factory = new DifferentialMarkupEngineFactory();
|
||||||
|
$engine = $factory->newDifferentialCommentMarkupEngine();
|
||||||
|
|
||||||
|
$blurb = $engine->markupText($blurb);
|
||||||
|
|
||||||
$content =
|
$content =
|
||||||
'<div class="phabricator-profile-info-group">
|
'<div class="phabricator-profile-info-group">
|
||||||
|
|
|
@ -7,8 +7,10 @@
|
||||||
|
|
||||||
|
|
||||||
phutil_require_module('phabricator', 'aphront/response/404');
|
phutil_require_module('phabricator', 'aphront/response/404');
|
||||||
|
phutil_require_module('phabricator', 'applications/differential/parser/markup');
|
||||||
phutil_require_module('phabricator', 'applications/files/uri');
|
phutil_require_module('phabricator', 'applications/files/uri');
|
||||||
phutil_require_module('phabricator', 'applications/people/controller/base');
|
phutil_require_module('phabricator', 'applications/people/controller/base');
|
||||||
|
phutil_require_module('phabricator', 'applications/people/storage/profile');
|
||||||
phutil_require_module('phabricator', 'applications/people/storage/user');
|
phutil_require_module('phabricator', 'applications/people/storage/user');
|
||||||
phutil_require_module('phabricator', 'infrastructure/celerity/api');
|
phutil_require_module('phabricator', 'infrastructure/celerity/api');
|
||||||
phutil_require_module('phabricator', 'view/utils');
|
phutil_require_module('phabricator', 'view/utils');
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2011 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class PhabricatorPeopleProfileEditController
|
||||||
|
extends PhabricatorPeopleController {
|
||||||
|
|
||||||
|
public function processRequest() {
|
||||||
|
|
||||||
|
$request = $this->getRequest();
|
||||||
|
$user = $request->getUser();
|
||||||
|
|
||||||
|
$profile = id(new PhabricatorUserProfile())->loadOneWhere(
|
||||||
|
'userPHID = %s',
|
||||||
|
$user->getPHID());
|
||||||
|
if (!$profile) {
|
||||||
|
$profile = new PhabricatorUserProfile();
|
||||||
|
$profile->setUserPHID($user->getPHID());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($request->isFormPost()) {
|
||||||
|
$profile->setTitle($request->getStr('title'));
|
||||||
|
$profile->setBlurb($request->getStr('blurb'));
|
||||||
|
|
||||||
|
if (!empty($_FILES['image'])) {
|
||||||
|
$err = idx($_FILES['image'], 'error');
|
||||||
|
if ($err != UPLOAD_ERR_NO_FILE) {
|
||||||
|
$file = PhabricatorFile::newFromPHPUpload($_FILES['image']);
|
||||||
|
$profile->setProfileImagePHID($file->getPHID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$profile->save();
|
||||||
|
$response = id(new AphrontRedirectResponse())
|
||||||
|
->setURI('/p/'.$user->getUsername().'/');
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
$form = new AphrontFormView();
|
||||||
|
$form
|
||||||
|
->setUser($request->getUser())
|
||||||
|
->setAction('/profile/edit/')
|
||||||
|
->setEncType('multipart/form-data')
|
||||||
|
->appendChild(
|
||||||
|
id(new AphrontFormTextControl())
|
||||||
|
->setLabel('Title')
|
||||||
|
->setName('title')
|
||||||
|
->setValue($profile->getTitle())
|
||||||
|
->setCaption('Serious business title.'))
|
||||||
|
->appendChild(
|
||||||
|
'<p class="aphront-form-instructions">Write something about yourself! '.
|
||||||
|
'Make sure to include <strong>important information</strong> like '.
|
||||||
|
'your <strong>favorite pokemon</strong> and which '.
|
||||||
|
'<strong>Starcraft race</strong> you play.</p>')
|
||||||
|
->appendChild(
|
||||||
|
id(new AphrontFormTextAreaControl())
|
||||||
|
->setLabel('Blurb')
|
||||||
|
->setName('blurb')
|
||||||
|
->setValue($profile->getBlurb()))
|
||||||
|
->appendChild(
|
||||||
|
id(new AphrontFormFileControl())
|
||||||
|
->setLabel('Change Image')
|
||||||
|
->setName('image')
|
||||||
|
->setCaption('Upload a 280px-wide image.'))
|
||||||
|
->appendChild(
|
||||||
|
id(new AphrontFormSubmitControl())
|
||||||
|
->setValue('Save')
|
||||||
|
->addCancelButton('/p/'.$user->getUsername().'/'));
|
||||||
|
|
||||||
|
$panel = new AphrontPanelView();
|
||||||
|
$panel->setHeader('Edit Profile Details');
|
||||||
|
$panel->appendChild($form);
|
||||||
|
$panel->setWidth(AphrontPanelView::WIDTH_FORM);
|
||||||
|
|
||||||
|
return $this->buildStandardPageResponse(
|
||||||
|
$panel,
|
||||||
|
array(
|
||||||
|
'title' => 'Edit Profile',
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
20
src/applications/people/controller/profileedit/__init__.php
Normal file
20
src/applications/people/controller/profileedit/__init__.php
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is automatically generated. Lint this module to rebuild it.
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_module('phabricator', 'aphront/response/redirect');
|
||||||
|
phutil_require_module('phabricator', 'applications/files/storage/file');
|
||||||
|
phutil_require_module('phabricator', 'applications/people/controller/base');
|
||||||
|
phutil_require_module('phabricator', 'applications/people/storage/profile');
|
||||||
|
phutil_require_module('phabricator', 'view/form/base');
|
||||||
|
phutil_require_module('phabricator', 'view/form/control/submit');
|
||||||
|
phutil_require_module('phabricator', 'view/layout/panel');
|
||||||
|
|
||||||
|
phutil_require_module('phutil', 'utils');
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_source('PhabricatorPeopleProfileEditController.php');
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2011 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class PhabricatorUserProfile extends PhabricatorUserDAO {
|
||||||
|
|
||||||
|
protected $userPHID;
|
||||||
|
protected $title;
|
||||||
|
protected $blurb;
|
||||||
|
protected $profileImagePHID;
|
||||||
|
|
||||||
|
}
|
12
src/applications/people/storage/profile/__init__.php
Normal file
12
src/applications/people/storage/profile/__init__.php
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is automatically generated. Lint this module to rebuild it.
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_module('phabricator', 'applications/people/storage/base');
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_source('PhabricatorUserProfile.php');
|
Loading…
Reference in a new issue