'fieldset', '#title' => 'Konto', '#collapsible' => false, '#asaf_area' => 'account', ]; $form['account']['messages'] = [ '#markup' => '
', ]; $form['account']['name'] = [ '#type' => 'textfield', '#title' => 'Brugernavn', '#default_value' => $accountWrapper->value()->name, ]; $form['account']['mail'] = [ '#type' => 'textfield', '#title' => 'Email adresse', '#default_value' => $accountWrapper->value()->mail, ]; $form['account']['first_name'] = [ '#type' => 'textfield', '#title' => 'Fornavn', '#default_value' => $accountWrapper->field_first_name->value(), ]; $form['account']['last_name'] = [ '#type' => 'textfield', '#title' => 'Efternavn', '#default_value' => $accountWrapper->field_last_name->value(), ]; $form['account']['actions'] = [ '#type' => 'actions', ]; $form['account']['actions']['save'] = [ '#type' => 'submit', '#value' => 'gem ændringer', '#submit' => ['mkbh_account_page_form_account_account_save_submit'], '#validate' => ['mkbh_account_page_form_account_account_save_validate'], '#name' => 'mkbh_account_page_form_account_account_save_button', '#asaf_target_area' => 'account', ]; $form['security'] = [ '#type' => 'fieldset', '#title' => 'Sikkerhed', '#collapsible' => false, '#asaf_area' => 'security', ]; $form['security']['messages'] = [ '#markup' => '
', ]; $usedOneTimeLink = (boolean)isset($_SESSION['pass_reset_' . $accountWrapper->getIdentifier()]); if (!$usedOneTimeLink) { $form['security']['current_password'] = [ '#type' => 'password', '#title' => 'Nuværende adgangskode', ]; } $form['security']['new_password'] = [ '#type' => 'password', '#title' => 'Ny adgangskode', ]; $form['security']['new_password_repeat'] = [ '#type' => 'password', '#title' => 'Gentag adgangskode', ]; $form['security']['actions'] = [ '#type' => 'actions', ]; $form['security']['actions']['save'] = [ '#type' => 'submit', '#value' => 'gem ændringer', '#submit' => ['mkbh_account_page_form_account_security_save_submit'], '#validate' => ['mkbh_account_page_form_account_security_save_validate'], '#name' => 'mkbh_account_page_form_account_security_save_button', '#asaf_target_area' => 'security', ]; $form['#attributes']['class'] = ['mkbh-account-page-form-account']; if (module_exists('asaf')) { asaf_prepare_form($form, $form_state); } return $form; } /** * Account Page: Account: Account Validation. * * @param $form * @param $form_state * * @throws Exception */ function mkbh_account_page_form_account_account_save_validate($form, &$form_state) { $accountWrapper = $form_state['storage']['account_wrapper']; $data = [ 'name' => trim($form_state['values']['name']), 'mail' => trim($form_state['values']['mail']), 'first_name' => trim($form_state['values']['first_name']), 'last_name' => trim($form_state['values']['last_name']), ]; if ($accountWrapper->getIdentifier() == 0) { form_set_error('Brugerkonto kunne ikke indlæses, prøv venligst igen.'); } if (!_mkbh_account_page_user_username_available($data['name'], $accountWrapper->value())) { form_set_error('name', 'Brugernavn er ikke tilgængelig.'); } if (!_mkbh_account_page_user_mail_available($data['mail'], $accountWrapper->value())) { form_set_error('mail', 'E-mail er ikke tilgængelig.'); } if (!valid_email_address($data['mail'])) { form_set_error('mail', 'Angiv venligst korrekte e-mail-adresse.'); } $existingStripeCustomer = db_query("SELECT msc.* FROM mkbh_stripe_customers msc WHERE msc.user_email = :newMail AND msc.user_email <> :oldMail AND msc.environment = :env", [ ':newMail' => $data['mail'], ':oldMail' => $accountWrapper->value()->mail, ':env' => MKBH_STRIPE_ENVIRONMENT, ])->fetchAssoc(); if (!empty($existingStripeCustomer)) { form_set_error('mail', 'E-mail-adressen er allerede blevet brugt til betalinger med en anden bruger. Brug venligst en anden e-mail-adresse eller kontakt support.'); } $form_state['asaf_ajax_commands'][] = ajax_command_html('#mkbh-account-page-form-account-account-messages', theme('status_messages')); } /** * Account Page: Account: Account Submit. * * @param $form * @param $form_state * * @throws Exception */ function mkbh_account_page_form_account_account_save_submit($form, &$form_state) { $accountWrapper = $form_state['storage']['account_wrapper']; $form_state['rebuild'] = true; $data = [ 'name' => trim($form_state['values']['name']), 'mail' => trim($form_state['values']['mail']), 'first_name' => trim($form_state['values']['first_name']), 'last_name' => trim($form_state['values']['last_name']), ]; try { $accountWrapper->value()->name = $data['name']; $accountWrapper->value()->mail = $data['mail']; $accountWrapper->field_first_name->set($data['first_name']); $accountWrapper->field_last_name->set($data['last_name']); $accountWrapper->save(); drupal_set_message('Ændringer er blevet gemt.'); } catch (Exception $e) { drupal_set_message('Ups! Noget gik galt. Opdater venligst siden og prøv igen.', 'error'); } $form_state['asaf_ajax_commands'][] = ajax_command_html('#mkbh-account-page-form-account-account-messages', theme('status_messages')); } /** * Account Page: Account: Security Validation. * * @param $form * @param $form_state * * @throws Exception */ function mkbh_account_page_form_account_security_save_validate($form, &$form_state) { $accountWrapper = $form_state['storage']['account_wrapper']; require_once DRUPAL_ROOT . '/includes/password.inc'; $data = [ 'current_password' => trim($form_state['values']['current_password']), 'new_password' => trim($form_state['values']['new_password']), 'new_password_repeat' => trim($form_state['values']['new_password_repeat']), ]; if ($accountWrapper->getIdentifier() == 0) { form_set_error('', 'Brugerkonto kunne ikke indlæses, prøv venligst igen.'); } $usedOneTimeLink = (boolean)isset($_SESSION['pass_reset_' . $accountWrapper->getIdentifier()]); if (!$usedOneTimeLink) { if (empty($data['current_password']) || empty($data['new_password']) || empty($data['new_password_repeat'])) { form_set_error('', 'Udfyld venligst alle tre felter for at ændre din adgangskode.'); form_set_error('current_password'); form_set_error('new_password'); form_set_error('new_password_repeat'); } if (!user_check_password($data['current_password'], $accountWrapper->value())) { form_set_error('current_password', 'Angiv venligst den korrekte, nuværende adgangskode.'); } } if ($data['new_password'] != $data['new_password_repeat']) { form_set_error('', 'Ny adgangskode og bekræftelse stemmer ikke overens.'); form_set_error('new_password'); form_set_error('new_password_repeat'); } $form_state['asaf_ajax_commands'][] = ajax_command_html('#mkbh-account-page-form-account-security-messages', theme('status_messages')); } /** * Account Page: Account: Account Submit. * * @param $form * @param $form_state * * @throws Exception */ function mkbh_account_page_form_account_security_save_submit($form, &$form_state) { $accountWrapper = $form_state['storage']['account_wrapper']; require_once DRUPAL_ROOT . '/includes/password.inc'; // $form_state['rebuild'] = true; $data = [ 'current_password' => trim($form_state['values']['current_password']), 'new_password' => trim($form_state['values']['new_password']), 'new_password_repeat' => trim($form_state['values']['new_password_repeat']), ]; try { $accountWrapper->value()->pass = user_hash_password($data['new_password']); $accountWrapper->save(); $token = drupal_get_token($form['#token']); $form_state['asaf_ajax_commands'][] = ajax_command_invoke('.mkbh-account-page-form-account input[name="form_token"]', 'val', [$token]); drupal_set_message('Ændringer er blevet gemt.'); } catch (Exception $e) { drupal_set_message('Ups! Noget gik galt. Opdater venligst siden og prøv igen.', 'error'); } $form_state['asaf_ajax_commands'][] = ajax_command_html('#mkbh-account-page-form-account-security-messages', theme('status_messages')); } /** * Account Page: Newsletter. * * @param $form * @param $form_state * * @return mixed * @throws Mailchimp_HttpError */ function mkbh_account_page_form_newsletter($form, &$form_state) { global $user; $form_state['storage']['account_wrapper'] = entity_metadata_wrapper('user', $user); if (arg(0) == 'user' && is_numeric(arg(1)) && ($userArgument = user_load(arg(1)))) { $form_state['storage']['account_wrapper'] = entity_metadata_wrapper('user', $userArgument); } $form['newsletter'] = [ '#type' => 'fieldset', '#title' => 'Nyhedsbrev', '#collapsible' => false, ]; $form['newsletter']['messages'] = [ '#markup' => '
', ]; $mcListID = variable_get('mkbh_mailchimp_list'); $mcAPIKey = variable_get('mailchimp_api_key'); $mcClient = new DrupalMailchimp($mcAPIKey); try { $memberInfo = $mcClient->lists->getMemberInfo($mcListID, $user->mail); } catch (\Exception $e) { $memberInfo = null; } $form['newsletter']['subscriptions'] = [ '#type' => 'checkbox', '#title' => 'Jeg ønsker at modtage Magasinet KBHs ugentlige nyhedsbrev', '#default_value' => (boolean)!empty($memberInfo) && $memberInfo->status == 'subscribed', '#asaf_control' => 'subscriptions', '#asaf_target_area' => 'form', '#executes_submit_callback' => true, ]; $form['newsletter']['subscriptions_resubscribe'] = [ '#markup' => format_string('

Hvis du afmelder dig nyhedsbrevet, og senere vil abonnere igen, kan du gøre det via !link.

', [ '!link' => l('dette link', 'http://magasinetkbh.us1.list-manage.com/subscribe?u=b17428ef6ae53ca06329fe602&id=77fa7e9efa', [ 'attributes' => [ 'target' => '_blank', ], ]), ]), ]; $form['#attributes']['class'] = ['mkbh-account-page-form-newsletter']; if (module_exists('asaf')) { asaf_prepare_form($form, $form_state); } return $form; } /** * Account Page: Newsletter: Submit. * * @param $form * @param $form_state * * @throws Exception */ function mkbh_account_page_form_newsletter_submit($form, &$form_state) { $accountWrapper = $form_state['storage']['account_wrapper']; $form_state['rebuild'] = true; $mcListID = variable_get('mkbh_mailchimp_list'); $mcAPIKey = variable_get('mailchimp_api_key'); $mcClient = new DrupalMailchimp($mcAPIKey); try { if ($form_state['values']['subscriptions'] == 0) { $result = $mcClient->lists->removeMember($mcListID, $accountWrapper->value()->mail); } else { $result = $mcClient->lists->addOrUpdateMember($mcListID, $accountWrapper->value()->mail, [ 'status' => 'subscribed', ]); } if (!empty($result->error)) { throw new Exception($result->error); } drupal_set_message('Din abonnement-indstilling er blevet opdateret.'); } catch (Exception $e) { drupal_set_message('Ups! Noget gik galt. Opdater venligst siden og prøv igen.', 'error'); } $form_state['asaf_ajax_commands'][] = ajax_command_html('#mkbh-account-page-form-newsletter-messages', theme('status_messages')); } /** * @param $form * @param $form_state * * @return mixed * @throws \EntityMetadataWrapperException * @throws \Exception */ function mkbh_account_page_form_membership($form, &$form_state) { global $user; $accountWrapper = $form_state['storage']['account_wrapper'] = entity_metadata_wrapper('user', $user); if (arg(0) == 'user' && is_numeric(arg(1)) && ($userArgument = user_load(arg(1)))) { $accountWrapper = $form_state['storage']['account_wrapper'] = entity_metadata_wrapper('user', $userArgument); } $form['#attributes']['autocomplete'] = 'new-password'; $form['membership'] = [ '#type' => 'fieldset', '#title' => 'Medlemskab ', '#collapsible' => false, ]; $form['membership']['messages'] = [ '#markup' => '
', ]; mkbh_general_stripe_initialization(); $data = [ 'source' => null, 'found' => false, 'customer' => null, 'subscription' => null, 'subscription_data' => [ 'quantity' => 1, 'plan' => [ 'id' => null, 'name' => null, ] ] ]; $manualPlans = mkbh_general_stripe_manual_plan_ids( $accountWrapper->value() ); if ($manualPlans->isNotEmpty()) { $data['source'] = 'manual'; $data['found'] = true; $manualPlan = $manualPlans->first(); $data['subscription_data']['plan']['id'] = $manualPlan; $data['subscription_data']['plan']['name'] = 'Offsite-abonnementsplan'; $data['subscription_data']['quantity'] = max((int)$accountWrapper->field_manual_membership_plan_qty->value(), 1); } else { $mobilePayRepository = container()->make(MobilePayRepository::class); if ($mobilePayRepository->existsForAccountInStatus($user, MobilePayAgreementStatusEnum::ACTIVE)) { $data['source'] = 'mobile-pay'; $data['found'] = true; } else { $data['source'] = 'stripe'; $mkbhCustomer = db_query("SELECT msc.* FROM mkbh_stripe_customers msc WHERE msc.user_email = :email AND msc.environment = :env", [':email' => $accountWrapper->value()->mail, ':env' => MKBH_STRIPE_ENVIRONMENT])->fetchObject(); if ($mkbhCustomer) { try { $stripeCustomer = Stripe\Customer::retrieve([ 'id' => $mkbhCustomer->customer_id, 'expand' => [ 'sources', 'subscriptions' ], ]); } catch (Exception $e) { $stripeCustomer = null; } $data['customer'] = $stripeCustomer; if ($data['customer']) { /** @var \Stripe\Subscription $subscription */ foreach ($stripeCustomer->subscriptions->data as $subscription) { if (in_array($subscription->plan->id, mkbh_general_stripe_plan_ids())) { $data['subscription'] = $subscription; $data['subscription_data']['quantity'] = $subscription->quantity; $data['subscription_data']['plan']['id'] = $subscription->plan->id; $data['subscription_data']['plan']['name'] = $subscription->plan->nickname; break; } } } } $data['found'] = $data['customer'] instanceof \Stripe\Customer && $data['subscription'] instanceof \Stripe\Subscription; } } if ($data['source'] && $data['found'] === true) { switch($data['source']) { case 'manual': case 'stripe': $form_state['storage']['data'] = $data; if (in_array($data['subscription_data']['plan']['id'], mkbh_general_stripe_business_plan_ids())) { $form['membership']['#title'] = 'Abonnement'; $form['membership']['subscription_sub_accounts'] = [ '#type' => 'container', '#attributes' => [ 'class' => ['subscription-sub-accounts'] ], ]; $form['membership']['subscription_sub_accounts']['sub_account__master'] = [ '#type' => 'textfield', '#title' => format_string('Du har @count aktive abonnementer:', [ '@count' => $data['subscription_data']['quantity'], ]), '#value' => $accountWrapper->value()->mail, '#default_value' => $accountWrapper->value()->mail, '#attributes' => [ 'readonly' => 'readonly' ], '#suffix' => 'Hvis du vil ændre email-addressen for dit master-abonnement, så skal du gøre det herover under "Konto"' ]; $subAccounts = mkbh_general_stripe_business_get_sub_accounts($accountWrapper->value()); $subAccountEmails = $subAccounts->keys()->toArray(); $masterTakesSeat = mkbh_general_stripe_business_get_master_takes_seat($accountWrapper->value()); $availableSeatCount = $masterTakesSeat ? $data['subscription_data']['quantity'] : $data['subscription_data']['quantity'] + 1; for ($i = 1; $i < $availableSeatCount; $i++) { $form['membership']['subscription_sub_accounts']["sub_account__employee_{$i}"] = [ '#type' => 'textfield', '#default_value' => null, '#attributes' => [ 'placeholder' => ["Medarbejder #{$i} email adresse"], 'class' => ['form-item-sub-account--employee'], 'data-delta' => $i, 'autocomplete' => 'new-password' ], ]; if ($subAccountEmail = array_shift($subAccountEmails)) { $form['membership']['subscription_sub_accounts']["sub_account__employee_{$i}"]['#default_value'] = $subAccountEmail; $form['membership']['subscription_sub_accounts']["sub_account__employee_{$i}"]['#attributes']['readonly'] = 'readonly'; $actions = [ '#markup' => implode('', [ '', '', ]) ]; $form['membership']['subscription_sub_accounts']["sub_account__employee_{$i}"]['#field_suffix'] = render($actions); } } $form['membership']['subscription_sub_accounts']['actions'] = [ '#type' => 'actions' ]; $form['membership']['subscription_sub_accounts']['actions']['hint_1'] = [ '#markup' => 'Du kan frit ændre hvilke øvrige brugere der skal have adgang til Magasinet KBH som del af dit abonnement.
Brugerprofilen som der logges ind med, skal blot være registreret med samme email som herover.
', ]; $form['membership']['subscription_sub_accounts']['actions']["subscription_sub_accounts_save"] = array( '#type' => 'submit', '#value' => 'gem medarbejderkonti', '#submit' => ['mkbh_account_page_form_membership_save_business_employee_accounts_submit'], ); $form['membership']['separator_1'] = [ '#markup' => '
', ]; $form['membership']['subscription'] = [ '#type' => 'select', '#title' => 'Ændre dit abonnement:', '#options' => MKBH_DONATE_BUSINESS_PLANS_UNITS_OPTIONS[$data['subscription_data']['plan']['id']], '#default_value' => [min($data['subscription_data']['quantity'], 5)], ]; $form['membership']['subscription_quantity'] = [ '#type' => 'textfield', '#attributes' => array( ' type' => 'number', ), '#title' => 'Antal medarbejdere:', '#default_value' => [max($data['subscription_data']['quantity'], 5)], '#states' => array( 'visible' => array( 'form.mkbh-account-page-form-membership select[name="subscription"]' => ['value' => 5], ), ), ]; } else { $planPricing = [ MKBH_DONATE_PERSONAL_BASIS_PLAN_ID => '29,-', MKBH_DONATE_PERSONAL_BASIS_YEAR_PLAN_ID => '324,-', MKBH_DONATE_PERSONAL_PLUS_PLAN_ID => '69,-', MKBH_DONATE_PERSONAL_PLUS_YEAR_PLAN_ID => '768,-', ]; $form['membership']['status'] = [ '#markup' => "

Du er tilmeldt '{$data['subscription_data']['plan']['name']}' medlemskab til {$planPricing[$data['subscription_data']['plan']['id']]} kr. om måneden.

", ]; if ($data['source'] === 'stripe') { $options = [ MKBH_DONATE_PERSONAL_BASIS_PLAN_ID => "Medlem Basis ({$planPricing[MKBH_DONATE_PERSONAL_BASIS_PLAN_ID]} kr.)", MKBH_DONATE_PERSONAL_BASIS_YEAR_PLAN_ID => "Medlem Basis / År ({$planPricing[MKBH_DONATE_PERSONAL_BASIS_YEAR_PLAN_ID]} kr.)", MKBH_DONATE_PERSONAL_PLUS_PLAN_ID => "Medlem Plus ({$planPricing[MKBH_DONATE_PERSONAL_PLUS_PLAN_ID]} kr.)", MKBH_DONATE_PERSONAL_PLUS_YEAR_PLAN_ID => "Medlem Plus / År ({$planPricing[MKBH_DONATE_PERSONAL_PLUS_YEAR_PLAN_ID]} kr.)", ]; $form['membership']['subscription'] = [ '#type' => 'select', '#title' => 'Ændre dit medlemskab:', '#options' => array_merge($options, [ '---' => str_repeat('-', 32), 'cancel' => 'Annuller medlemskab', ]), '#default_value' => [$data['subscription_data']['plan']['id'] ?? 'cancel'], ]; } elseif($data['source'] === 'manual') { $form['membership']['subscription_manual_notice'] = [ '#markup' => '

Du abonnerer offsite, så du kan ikke ændre dit abonnement via denne grænseflade.

' ]; } } if ($data['customer']) { try { $defaultPaymentMethod = \Stripe\PaymentMethod::retrieve( $data['customer']->invoice_settings->default_payment_method ?? $data['customer']['default_source'] ?? $data['subscription']['default_source'] ); $currentCard = $defaultPaymentMethod->card; if ($currentCard) { $form['membership']['update_payment_details'] = [ '#type' => '#container', '#attributes' => [ 'class' => ['update-payment-details'], ], '#weight' => 512, ]; $form['membership']['update_payment_details']['current_card'] = [ '#markup' => '

Du betaler med kort ' . strtoupper($currentCard->brand) . ' XXXX-XXXX-XXXX-' . $currentCard->last4 . '

', ]; $form['membership']['update_payment_details']['update_card'] = [ '#theme' => 'mkbh_general_stripe_update_payment_details_button', '#customer' => $data['customer'], ]; } } catch (\Exception $e) { drupal_set_message($e->getMessage(), 'error'); } } break; case 'mobile-pay': $form['membership']['mobile_pay_status'] = [ '#markup' => '

Du har et aktivt abonnement med MobilePay.

' ]; break; } } else { $form['membership']['status'] = [ '#markup' => '

Du har ingen aktive medlemskaber eller abonnementer.

Du kan blive medlem på medlems-siden.

Du kan tegne erhvervsabonnement på abonnements-siden.

', ]; $masterEmployeeRelation = database()->table('mkbh_business_sub_accounts')->where('sub_uid', '=', $accountWrapper->getIdentifier())->first(); if ($masterEmployeeRelation !== null && $masterAccount = user_load($masterEmployeeRelation->master_uid)) { $form['membership']['status'] = [ '#markup' => "

Dit abonnement forvaltes af virksomhedskonto {$masterAccount->mail}

", ]; } } if (isset($form['membership']['subscription'])) { $form['membership']['actions'] = [ '#type' => 'actions', ]; $form['membership']['actions']['save'] = [ '#type' => 'submit', '#value' => 'gem ændringer', '#submit' => ['mkbh_account_page_form_membership_change_subscription_submit'], '#name' => 'mkbh_account_page_form_membership_change_subscription_button', '#asaf_target_area' => 'form', ]; } $form['#attributes']['class'] = ['mkbh-account-page-form-membership']; if (module_exists('asaf')) { asaf_prepare_form($form, $form_state); } return $form; } function mkbh_account_page_form_membership_save_business_employee_accounts_submit($form, &$form_state) { $form_state['rebuild'] = true; try { mkbh_general_stripe_initialization(); $masterAccountWrapper = $form_state['storage']['account_wrapper']; $data = $form_state['storage']['data']; $subAccounts = mkbh_general_stripe_business_get_sub_accounts( $masterAccountWrapper->value() ); $formEmails = collect($form_state['values'])->filter(function ($value, $key) { return str_is('sub_account__employee_*', $key) && trim($value) !== '' && filter_var($value, FILTER_VALIDATE_EMAIL); }); /** @var \Illuminate\Support\Collection $emailsToAdd */ $emailsToAdd = $formEmails->values()->map(function ($email) use ($masterAccountWrapper) { $account = user_load_by_mail($email); if ($account === false) { $password = user_password(8); $fields = [ 'name' => email_registration_unique_username(explode("@", $email)[0]), 'mail' => $email, 'init' => $email, 'pass' => $password, 'status' => true, 'roles' => [ DRUPAL_AUTHENTICATED_RID => 'authenticated user', ], ]; $account = user_save(null, $fields); $account->password = $fields['pass']; rules_invoke_event( 'mkbh_donate_business_employee_created', trim($masterAccountWrapper->value()->mail), trim($email), $fields['pass'], user_pass_reset_url($account) ); $account = user_load_by_mail($email); $account->employee_notified = true; } return $account; }); $emailsToAdd->each(function ($account) use ($masterAccountWrapper, $subAccounts, $data) { if ($data['customer'] && $data['subscription']) { mkbh_general_stripe_create_local_business_employee_subscription($data['customer'], $data['subscription'], $account); } mkbh_general_stripe_business_link_sub_account($masterAccountWrapper->value(), $account); if (data_get($account, 'employee_notified', false) === false && !$subAccounts->has($account->mail)) { rules_invoke_event( 'mkbh_donate_business_employee_attached', $masterAccountWrapper->value()->mail, $account->mail ); } }); $subAccounts->keys()->diff($formEmails)->values()->each(function ($email) use ($masterAccountWrapper) { if ($account = user_load_by_mail($email)) { mkbh_general_stripe_delete_local_subscription($account); mkbh_general_stripe_business_unlink_sub_account($masterAccountWrapper->value(), $account); rules_invoke_event( 'mkbh_donate_business_employee_detached', $masterAccountWrapper->value()->mail, $account->mail ); } }); drupal_set_message('Medarbejderkonti er blevet gemt.'); } catch (Exception $e) { drupal_set_message('Ups! Noget gik galt. Opdater venligst siden og prøv igen.', 'error'); watchdog('mkbh_general', $e->getMessage(), [], WATCHDOG_ERROR); } $form_state['asaf_ajax_commands'][] = ajax_command_html('#mkbh-account-page-form-membership-messages', theme('status_messages')); } function mkbh_account_page_form_membership_change_subscription_submit($form, &$form_state) { $form_state['rebuild'] = true; try { mkbh_general_stripe_initialization(); $accountWrapper = $form_state['storage']['account_wrapper']; $data = $form_state['storage']['data']; if ($data['customer'] && $data['subscription']) { $newPlan = $form_state['values']['subscription']; if ($data['subscription']) { if ($newPlan == 'cancel') { $data['subscription']->cancel(); drupal_set_message('Dit medlemskab er blevet afmeldt.'); if ($accountWrapper->getIdentifier() > 0) { rules_invoke_event('stripe_subscription_cancel', $accountWrapper->value()); } database()->table('mkbh_stripe_subscriptions')->where('customer_id', '=', $data['customer']->id)->delete(); } elseif ($newPlan != '---') { if (is_numeric($newPlan)) { if ($newPlan < 5) { $quantity = (int)$newPlan; } else { $quantity = (int)$form_state['values']['subscription_quantity']; } $subAccounts = mkbh_general_stripe_business_get_sub_accounts($accountWrapper->value()); if ($quantity < $subAccounts->count()) { throw new OutOfBoundsException(); } \Stripe\Subscription::update($data['subscription']->id, [ 'cancel_at_period_end' => false, 'proration_behavior' => 'always_invoice', 'items' => [ [ 'id' => $data['subscription']->items->data[0]->id, 'price' => $data['subscription']->plan->id, 'quantity' => $quantity, ], ], ]); database()->table('mkbh_stripe_subscriptions')->where('customer_id', '=', $data['customer']->id)->update([ 'subscription_id' => $data['subscription']->id, 'plan_id' => $data['subscription']->plan->id, 'plan_name' => $data['subscription']->plan->nickname, 'frequency' => $data['subscription']->plan->interval, 'quantity' => $data['subscription']->quantity, ]); drupal_set_message('Antal ansatte i abonnement er ændret til ' . $newPlan); } else { $stripePlan = \Stripe\Plan::retrieve($newPlan); \Stripe\Subscription::update($data['subscription']->id, [ 'cancel_at_period_end' => false, 'proration_behavior' => 'always_invoice', 'items' => [ [ 'id' => $data['subscription']->items->data[0]->id, 'price' => $stripePlan->id, ], ], ]); database()->table('mkbh_stripe_subscriptions')->where('customer_id', '=', $data['customer']->id)->update([ 'subscription_id' => $data['subscription']->id, 'plan_id' => $stripePlan->id, 'plan_name' => $stripePlan->nickname, 'frequency' => $stripePlan->interval, ]); drupal_set_message('Dit medlemskab er blevet ændret til ' . $stripePlan->nickname); } } } else { throw new Exception('Trying to change plan on empty subscription.'); } } } catch (OutOfBoundsException $e) { drupal_set_message('Ups! Fjern venligst medarbejdere før nedgradering af dit abonnement.', 'warning'); } catch (Exception $e) { drupal_set_message('Ups! Noget gik galt. Opdater venligst siden og prøv igen.', 'error'); watchdog('mkbh_general', 'Stripe Error: ' . $e->getMessage(), [], WATCHDOG_ERROR); } $form_state['asaf_ajax_commands'][] = ajax_command_html('#mkbh-account-page-form-membership-messages', theme('status_messages')); }