$t('cURL'), 'value' => $has_curl ? $t('Enabled') : $t('Not found'), ); if (!$has_curl) { $requirements['uc_stripe_curl']['severity'] = REQUIREMENT_ERROR; $requirements['uc_stripe_curl']['description'] = $t("The Stripe API requires the PHP cURL library.", array('!curl_url' => 'http://php.net/manual/en/curl.setup.php')); } // libraries_info() doesn't work until the module is installed, so allow to be // installed without the library. Then warn at that point. if ($phase != 'install') { $php_api_version = _uc_stripe_load_library(); $requirements['uc_stripe_api'] = array( 'title' => $t('Stripe PHP Library'), 'value' => $t('Version !version', array('!version' => $php_api_version)), ); if (empty($php_api_version)) { $requirements['uc_stripe_api']['value'] = $t('Not installed or wrong version'); $requirements['uc_stripe_api']['severity'] = REQUIREMENT_ERROR; $requirements['uc_stripe_api']['description'] = $t('Please install a compatible version of the Stripe PHP Library versions as described in the README.txt'); } } $requirements['uc_stripe_keys'] = array( 'title' => $t('Stripe API Keys'), 'value' => $t('Configured'), ); if ($phase == 'runtime' && !_uc_stripe_check_api_keys()) { $requirements['uc_stripe_keys']['title'] = $t('Stripe API Keys.'); $requirements['uc_stripe_keys']['value'] = $t('Not configured'); $requirements['uc_stripe_keys']['severity'] = REQUIREMENT_ERROR; $requirements['uc_stripe_keys']['description'] = $t('The Stripe API keys are not fully configured.'); } // Make sure they don't enable the "Check credit" if ($phase == 'runtime' && variable_get('uc_credit_validate_numbers', FALSE)) { $requirements['uc_stripe_validate_numbers'] = array( 'title' => t('Stripe Credit Card Validation'), 'value' => t('Enabled'), 'severity' => REQUIREMENT_ERROR, 'description' => t("uc_credit's 'Validate credit card numbers at checkout' option must be disabled when using uc_stripe, as uc_credit never sees the card number."), ); } return $requirements; } /** * Load the PHP API * * @return Stripe version number as string or FALSE if failed to load */ function _uc_stripe_load_library() { module_load_include('module', 'uc_stripe'); if (($library = libraries_load('stripe')) && !empty($library['loaded']) && class_exists('\Stripe\Stripe')) { return \Stripe\Stripe::VERSION; } watchdog('uc_stripe', 'Stripe PHP Library not installed or wrong version'); return FALSE; } /** * Implements hook_install(). */ function uc_stripe_install() { // This turns ON the uc_recurring cron task to renew. We want this // ON because the renewal payments are handled by uc_recurring and NOT the stripe gateway variable_set('uc_recurring_trigger_renewals', TRUE); // Stripe does cc validation, so uc_credit must not... especially because // uc_credit gets a bogus cc number. variable_set('uc_credit_validate_numbers', FALSE); } /** * Implements hook_uninstall(). */ function uc_stripe_uninstall() { variable_del('uc_stripe_authenticaiton_required_email'); } /** * Implements hook_schema(). */ function uc_stripe_schema() { $schema['uc_stripe_pending_auth'] = array( 'description' => 'Ubercart Stripe - Track orders pending authentication', 'fields' => array( 'id' => array( 'description' => 'id of entry', 'type' => 'serial', 'not null' => TRUE ), 'order_id' => array( 'description' => 'Order Id of pending order', 'type' => 'int', 'not null' => TRUE ), 'rfee_id' => array( 'description' => 'Recurring Fee Id of pending order', 'type' => 'int', 'not null' => TRUE ), 'completed' => array( 'description' => 'Competion status of this pending order', 'type' => 'int', 'not null' => TRUE ), 'hash' => array ( 'description' => 'The unqiue has of order and payment id', 'type' => 'varchar', 'length' => '100', 'not null' => TRUE ), ), 'unique keys' => array( 'hash' => array( 'hash' ) ), 'primary key' => array('id'), ); return $schema; } /** * Enable triggered renewals, as uc_recurring manages renewals with this version. */ function uc_stripe_update_7201(&$sandbox) { variable_set('uc_recurring_trigger_renewals', TRUE); variable_set('uc_credit_validate_numbers', FALSE); return 'Enabled uc_recurring triggered renewals (uc_recurring_trigger_renewals) and required uc_checkout_skip_review'; } /** * Move customer IDs from uc_recurring_stripe into account */ function uc_stripe_update_7202(&$sandbox) { $ret = array(); $sandbox['per_run'] = 100; // users per run $sandbox['#finished'] = 0; if (db_table_exists('uc_recurring_stripe')) { if (!isset($sandbox['progress'])) { $sandbox['progress'] = 0; $sandbox['max'] = db_query(' SELECT COUNT(DISTINCT(u.uid)) FROM {users} u JOIN {uc_recurring_stripe} urs ON (u.uid = urs.uid) WHERE urs.active = 1 ')->fetchField(); } _uc_stripe_move_customer_id($sandbox); return "Updated {$sandbox['progress']} of {$sandbox['max']} uc_recurring_stripe rows into user objects"; } else { return 'Old uc_recurring_stripe table did not exist, no action taken.'; } } /** * Make sure cached library information is not used. */ function uc_stripe_update_7203(&$sandbox) { cache_clear_all('stripe', 'cache_libraries'); } /** * Move customer ids from uc_recurring_stripe into user account */ function _uc_stripe_move_customer_id(&$sandbox) { // Find the users with stripe customer ids that are active $query = ' SELECT DISTINCT(urs.uid) FROM {users} u JOIN {uc_recurring_stripe} urs ON (u.uid = urs.uid) WHERE urs.active = 1'; $result = db_query_range($query, 0, $sandbox['per_run'], array(), array('fetch' => PDO::FETCH_ASSOC)); foreach ($result as $item) { $sandbox['progress']++; $stripe_customer_id = db_query_range(' SELECT urs.customer_id FROM {uc_recurring_stripe} urs WHERE urs.uid = :uid AND urs.active = 1 ORDER BY urs.rfid DESC ', 0, 1, array(':uid' => $item['uid']))->fetchField(); $account = user_load($item['uid']); // Set to inactive every subscription for this uid db_update('uc_recurring_stripe') ->fields( array('active' => 0) ) ->condition('uid', $item['uid']) ->execute(); if (empty($account->data['uc_stripe_customer_id'])) { user_save($account, array('data' => array('uc_stripe_customer_id' => $stripe_customer_id))); } } if ($sandbox['progress'] >= $sandbox['max'] || $result->rowCount() == 0) { $sandbox['#finished'] = 1; } else { $sandbox['#finished'] = $sandbox['progress'] / $sandbox['max']; } } /** * * create table to track orders that require extra authentication verification. */ function uc_stripe_update_7301() { $table = array( 'description' => 'Ubercart Stripe - Track orders pending authentication', 'fields' => array( 'id' => array( 'description' => 'id of entry', 'type' => 'serial', 'not null' => TRUE ), 'order_id' => array( 'description' => 'Order Id of pending order', 'type' => 'int', 'not null' => TRUE ), 'rfee_id' => array( 'description' => 'Recurring Fee Id of pending order', 'type' => 'int', 'not null' => TRUE ), 'completed' => array( 'description' => 'Competion status of this pending order', 'type' => 'int', 'not null' => TRUE ), 'hash' => array( 'description' => 'The unqiue has of order and payment id', 'type' => 'varchar', 'length' => '100', 'not null' => TRUE ) ), 'unique keys' => array( 'hash' => array( 'hash' ) ), 'primary key' => array( 'id' ) ); db_create_table('uc_stripe_pending_auth', $table); }