diff --git a/lib/Drupal/profile2/ProfileFormController.php b/lib/Drupal/profile2/ProfileFormController.php index dd765be..0913f6a 100644 --- a/lib/Drupal/profile2/ProfileFormController.php +++ b/lib/Drupal/profile2/ProfileFormController.php @@ -20,7 +20,7 @@ class ProfileFormController extends EntityFormController { protected function actionsElement(array $form, array &$form_state) { $element = parent::actionsElement($form, $form_state); - if (!user_access('administer profiles')) { + if (!profile2_access('delete', $this->getEntity($form_state))) { unset($element['delete']); } @@ -42,4 +42,13 @@ class ProfileFormController extends EntityFormController { } } + /** + * Overrides Drupal\Core\Entity\EntityFormController::delete(). + */ + public function delete(array $form, array &$form_state) { + $profile = $this->getEntity($form_state); + // Redirect to the deletion confirmation form. + $form_state['redirect'] = 'user/' . $profile->uid . '/edit/' . $profile->bundle() . '/delete'; + } + } diff --git a/profile2.module b/profile2.module index c03b57c..71a5230 100644 --- a/profile2.module +++ b/profile2.module @@ -161,6 +161,16 @@ function profile2_menu() { 'page arguments' => array(3), 'type' => MENU_LOCAL_TASK, ); + $items['user/%user/edit/%profile2_menu/delete'] = array( + 'load arguments' => array('%map', 'edit'), + 'title' => 'Delete profile', + 'access callback' => 'profile2_access', + 'access arguments' => array('delete', 3), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('profile2_delete_confirm_form', 3), + 'type' => MENU_CALLBACK, + 'file' => 'profile2.pages.inc', + ); return $items; } @@ -292,6 +302,12 @@ function profile2_permission() { "view any $type_name profile" => array( 'title' => t('%type_name: View any profile', array('%type_name' => $type->label())), ), + "delete own $type_name profile" => array( + 'title' => t('%type_name: Delete own profile', array('%type_name' => $type->label())), + ), + "delete any $type_name profile" => array( + 'title' => t('%type_name: Delete any profile', array('%type_name' => $type->label())), + ), ); } return $permissions; diff --git a/profile2.pages.inc b/profile2.pages.inc new file mode 100644 index 0000000..96aaba8 --- /dev/null +++ b/profile2.pages.inc @@ -0,0 +1,31 @@ + $profile->label())); + return confirm_form($form, $confirm_question, $profile->uri()); +} + +/** + * Submit handler for deleting a profile. + */ +function profile2_delete_confirm_form_submit(array $form, array &$form_state) { + $form_state['profile']->delete(); + // @todo Work out a good deletion message. + drupal_set_message(t('Deleted %label.', array('%label' => $form_state['profile']->label()))); + + // Redirect to the user page. + $uri = entity_load('user', $form_state['profile']->uid)->uri(); + $form_state['redirect'] = $uri['path']; +}