public function indexAction()
 {
     $user = App::user();
     $userprofile = App::module('bixie/userprofile');
     if (!$user->isAuthenticated()) {
         return App::redirect('@user/login', ['redirect' => App::url()->current()]);
     }
     return ['$view' => ['title' => __('Your Profile'), 'name' => 'bixie/userprofile/profile.php'], '$data' => ['config' => $userprofile->config('default'), 'fields' => Field::getProfileFields(), 'profilevalues' => Profilevalue::getUserProfilevalues($user), 'user' => ['id' => $user->id, 'username' => $user->username, 'name' => $user->name, 'email' => $user->email]]];
 }
 /**
  * @Route("/{id}", methods="DELETE", requirements={"id"="\d+"})
  * @Request({"id": "int"}, csrf=true)
  */
 public function deleteAction($id)
 {
     if ($field = Field::find($id)) {
         foreach (Profilevalue::where(['field_id = :id'], [':id' => $id])->get() as $profilevalue) {
             $profilevalue->delete();
         }
         $field->delete();
     }
     return ['message' => 'success'];
 }
 /**
  * @Route("/ajax", methods="POST")
  * @Request({"field_id": "int", "action": "string"})
  */
 public function ajaxAction($field_id, $action)
 {
     if (!($field = Field::find($field_id))) {
         App::abort(400, __('Field not found.'));
     }
     $fieldValue = Profilevalue::create()->setField($field);
     $fieldType = $fieldValue->getFieldType();
     if (method_exists($fieldType, $action)) {
         return call_user_func([$fieldType, $action], $fieldValue);
     }
     return 'No response';
 }
 /**
  * @Route("/", methods="GET")
  * @Route("/{id}", methods="GET", requirements={"id"="\d+"})
  */
 public function indexAction($id = 0)
 {
     $self = App::user();
     $userprofile = App::module('bixie/userprofile');
     $id = $id ?: $self->id;
     if (!$self->hasAccess('user: manage users') && $id != $self->id) {
         App::abort(403, 'Insufficient permissions.');
     }
     if (!($user = User::find($id))) {
         App::abort(404, 'User not found.');
     }
     return ['config' => $userprofile->config(), 'fields' => Field::getProfileFields(), 'profilevalues' => Profilevalue::getUserProfilevalues($user), 'user' => ['id' => $user->id, 'username' => $user->username, 'name' => $user->name, 'email' => $user->email]];
 }
 /**
  * @param User|null $user
  * @param bool      $asArray
  * @param bool      $checkAccess
  * @return array|bool
  */
 public function getProfile(User $user = null, $asArray = true, $checkAccess = true)
 {
     $profile = [];
     if (!$this->framework) {
         return $profile;
     }
     if ($user = $user ?: App::user() and $user->id > 0) {
         $profileValues = Profilevalue::getUserProfilevalues($user);
     }
     foreach (Field::getProfileFields($checkAccess) as $field) {
         $fieldValue = isset($profileValues[$field->id]) ? $profileValues[$field->id] : Profilevalue::create(['field_id' => $field->id, 'user_id' => $user->id, 'multiple' => $field->get('multiple') == 1 ? 1 : 0, 'data' => $field->get('data')])->setField($field)->setValue($field->get('value'));
         if ($asArray) {
             $profile[$field->slug] = $fieldValue->setField($field)->toFormattedArray(['id' => $fieldValue->id]);
         } else {
             $profile[$field->slug] = $fieldValue->setField($field);
         }
     }
     return $profile;
 }
 /**
  * @param      $event
  * @param User $user
  */
 public function onUserDeleted($event, User $user)
 {
     foreach (Profilevalue::where(['user_id = :id'], [':id' => $user->id])->get() as $profilevalue) {
         $profilevalue->delete();
     }
 }