You are here

function fb_admin_application_edit_form_validate in Drupal for Facebook 7.4

Form validation.

TODO: this function may be calling fb_graph too often. fb_token_save may be inefficient.

File

./fb.admin.inc, line 950

Code

function fb_admin_application_edit_form_validate($form, &$form_state) {
  $fb_app = $form_state['values'];
  if ($form_state['values']['op'] != t('Delete application')) {
    try {
      if (!empty($fb_app['secret'])) {
        $fb_app['data']['access_token'] = fb_admin_get_app_token($fb_app['fba'], $fb_app['secret']);
      }
      else {

        // Allow id and secret in one field.
        list($fba, $secret, $token) = _fb_admin_parse_textfield($fb_app['fba']);
        $fb_app['fba'] = $fba;
        $fb_app['secret'] = $secret;
        $fb_app['data']['access_token'] = $token;
      }

      // Change form values before submit.
      foreach (array(
        'fba',
        'secret',
        'data',
      ) as $key) {
        form_set_value($form[$key], $fb_app[$key], $form_state);
      }
      if (!empty($fb_app['secret']) && empty($fb_app['data']['access_token'])) {
        form_set_error('secret', t('Unable to get an application token.  Are you sure your ID (%id) and Secret are correct?', array(
          '%id' => $fb_app['fba'],
        )));
      }
      else {
        $graph = fb_graph($fb_app['fba'], $fb_app['data']['access_token'], FB_CACHE_STORE) + array(
          // Defaults for values that Facebook might not return.
          'namespace' => NULL,
        );
        $form_state['fb']['graph'] = $graph;

        // Populate form with up-to-date values from facebook.
        $fb_app['data']['logo_url'] = $graph['logo_url'];
        form_set_value($form['data'], $fb_app['data'], $form_state);
        form_set_value($form['title'], $graph['name'], $form_state);
        form_set_value($form['namespace'], $graph['namespace'], $form_state);

        // If default checkbox selected, we need graph data during submit.
        form_set_value($form['fb_app_data'], array(
          'client_id' => $graph['id'],
          'name' => $graph['name'],
          'namespace' => $graph['namespace'],
        ), $form_state);
      }
    } catch (exception $e) {
      $msg = t('Failed to confirm application data with facebook. (%fba)', array(
        '%fba' => $fb_app['fba'],
      ));
      fb_log_exception($e, $msg);
      form_set_error('fba', $msg);

      // TODO: figure out why this happens.
      if ($e
        ->getCode() == 100) {
        drupal_set_message(t('Hint: Error code 100 may mean that an application has "social discovery" disabled.'), 'error');
      }
    }
  }
}