You are here

public function CKEditor::getMetadata in Quick Edit 7

Implements QuickEditInPlaceEditorInterface::getMetadata().

Overrides QuickEditInPlaceEditorInterface::getMetadata

See also

Drupal 8's \Drupal\editor\Plugin\quickedit\editor\Editor::getMetadata().

File

InPlaceEditors/CKEditor.php, line 50

Class

CKEditor
Defines the CKEditor in-place editor.

Code

public function getMetadata(array $instance, array $items) {
  $format_id = $items[0]['format'];
  $metadata['format'] = $format_id;
  $metadata['formatHasTransformations'] = (bool) count(array_intersect(array(
    FILTER_TYPE_TRANSFORM_REVERSIBLE,
    FILTER_TYPE_TRANSFORM_IRREVERSIBLE,
  ), filter_get_filter_types_by_format($format_id)));

  // This part does not exist in the equivalent Drupal 8 code, because in Drupal
  // 8 we leverage the new Text Editor module, which takes care of all of this
  // for us. We could send this information in the attachments callback (like in
  // Drupal 8), but this makes the metadata for each field nicely contained,
  // which is simpler.
  // @todo Consider moving this to the attachments callback.
  module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
  if ($settings = ckeditor_profiles_compile($format_id)) {

    // CKEditor.module stores the toolbar configuration as a non-standard JSON
    // serialization. In case they one day fix that, we check if it is indeed
    // still serialized.
    // See http://drupal.org/node/1906490.
    if (is_string($settings['toolbar'])) {

      // This bizarre code comes from ckeditor_admin_profile_form_validate().
      $toolbar = $settings['toolbar'];
      $toolbar = str_replace("'", '"', $toolbar);
      $toolbar = preg_replace('/(\\w*)\\s*\\:/', '"${1}":', $toolbar);
      $settings['toolbar'] = json_decode($toolbar);
    }

    // For some reasons when ckeditor is in profiles/libraries ckeditor module
    // defaults to the kama skin that doesn't exists in CKEditor 4 standard.
    // @todo remove? might be too brutal.
    if ($settings['skin'] == 'kama') {
      $settings['skin'] = 'moono';
    }

    //[#1473010]

    // @todo see if this is needed.
    $field = field_info_field($instance['field_name']);
    if (isset($settings['scayt_sLang'])) {
      $settings['scayt_language'] = $settings['scayt_sLang'];
      unset($settings['scayt_sLang']);
    }
    elseif (!empty($field["#language"]) && $field["#language"] != LANGUAGE_NONE) {
      $settings['scayt_language'] = ckeditor_scayt_langcode($field["#language"]);
    }

    // Set the collected metadata.
    $metadata['ckeditorSettings'] = $settings;
  }
  return $metadata;
}