home | career | drupal | java | mac | mysql | perl | php | scala | uml | unix

Drupal example source code file (ckeditor.module)

This example Drupal source code file (ckeditor.module) is included in the DevDaily.com "Drupal Source Code Warehouse" project. The intent of this project is to help you "Learn Drupal by Example".

PHP - Drupal tags/keywords

access, arguments, array, ckeditor, description, element, file, function, if, page, php, return, title, type

The ckeditor.module Drupal example source code

<?php

/**
 * CKEditor - The text editor for the Internet - http://ckeditor.com
 * Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
 *
 * == BEGIN LICENSE ==
 *
 * Licensed under the terms of any of the following licenses at your
 * choice:
 *
 *  - GNU General Public License Version 2 or later (the "GPL")
 *    http://www.gnu.org/licenses/gpl.html
 *
 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
 *    http://www.gnu.org/licenses/lgpl.html
 *
 *  - Mozilla Public License Version 1.1 or later (the "MPL")
 *    http://www.mozilla.org/MPL/MPL-1.1.html
 *
 * == END LICENSE ==
 *
 * @file
 * CKEditor Module for Drupal 7.x
 *
 * This module allows Drupal to replace textarea fields with CKEditor.
 *
 * This HTML text editor brings to the web many of the powerful functionalities
 * of known desktop editors like Word. It's really  lightweight and doesn't
 * require any kind of installation on the client computer.
 */
/**
 * The name of simplified toolbar which should be forced
 * Be sure that this toolbar is defined in ckeditor.config.js or fckconfig.js
 */
define('CKEDITOR_FORCE_SIMPLE_TOOLBAR_NAME', 'DrupalBasic');
define('CKEDITOR_ENTERMODE_P', 1);
define('CKEDITOR_ENTERMODE_BR', 2);
define('CKEDITOR_ENTERMODE_DIV', 3);

global $_ckeditor_configuration;
global $_ckeditor_ids;

$_ckeditor_configuration = array();
$_ckeditor_ids = array();

/**
 * Implementation of hook_menu().
 */
function ckeditor_menu() {
    $items = array();

    $items['ckeditor/xss'] = array(
        'title' => 'XSS Filter',
        'description' => 'XSS Filter.',
        'page callback' => 'ckeditor_filter_xss',
        'file' => 'includes/ckeditor.page.inc',
        'access callback' => TRUE,
        'type' => MENU_CALLBACK,
    );

    $items['admin/config/content/ckeditor'] = array(
        'title' => 'CKEditor',
        'description' => 'Configure the rich text editor.',
        'page callback' => 'ckeditor_admin_main',
        'file' => 'includes/ckeditor.admin.inc',
        'access arguments' => array('administer ckeditor'),
        'type' => MENU_NORMAL_ITEM,
    );

    $items['admin/config/content/ckeditor/add'] = array(
        'title' => 'Add new CKEditor profile',
        'description' => 'Configure the rich text editor.',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('ckeditor_admin_profile_form'),
        'file' => 'includes/ckeditor.admin.inc',
        'access arguments' => array('administer ckeditor'),
        'type' => MENU_CALLBACK,
    );

    $items['admin/config/content/ckeditor/clone/%ckeditor_profile'] = array(
        'title' => 'Clone CKEditor profile',
        'description' => 'Configure the rich text editor.',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('ckeditor_admin_profile_clone_form', 5),
        'file' => 'includes/ckeditor.admin.inc',
        'access arguments' => array('administer ckeditor'),
        'type' => MENU_CALLBACK,
    );

    $items['admin/config/content/ckeditor/edit/%ckeditor_profile'] = array(
        'title' => 'Edit CKEditor profile',
        'description' => 'Configure the rich text editor.',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('ckeditor_admin_profile_form', 5),
        'file' => 'includes/ckeditor.admin.inc',
        'access arguments' => array('administer ckeditor'),
        'type' => MENU_CALLBACK,
    );

    $items['admin/config/content/ckeditor/delete/%ckeditor_profile'] = array(
        'title' => 'Delete CKEditor profile',
        'description' => 'Configure the rich text editor.',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('ckeditor_admin_profile_delete_form', 5),
        'file' => 'includes/ckeditor.admin.inc',
        'access arguments' => array('administer ckeditor'),
        'type' => MENU_CALLBACK,
    );

    $items['admin/config/content/ckeditor/addg'] = array(
        'title' => 'Add CKEditor Global profile',
        'description' => 'Configure the rich text editor.',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('ckeditor_admin_global_profile_form', 'add'),
        'file' => 'includes/ckeditor.admin.inc',
        'access arguments' => array('administer ckeditor'),
        'type' => MENU_CALLBACK,
    );

    $items['admin/config/content/ckeditor/editg'] = array(
        'title' => 'Edit CKEditor Global profile',
        'description' => 'Configure the rich text editor.',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('ckeditor_admin_global_profile_form', 'edit'),
        'file' => 'includes/ckeditor.admin.inc',
        'access arguments' => array('administer ckeditor'),
        'type' => MENU_CALLBACK,
    );

    return $items;
}

/**
 * Implementation of hook_permission()
 *
 * People -> Permissions
 */
function ckeditor_permission() {
    $arr = array();
    $arr['administer ckeditor'] = array(
            'title' => t('Administer CKEditor access'),
            'description' => t('Allow users to change CKEditor settings')
        );

    $arr['customize ckeditor'] = array(
            'title' => t('Customize CKEditor appearance'),
            'description' => t('Allow users to customize CKEditor appearance')
        );

    if (file_exists(drupal_get_path('module', 'ckeditor') . "/ckfinder")) {
        $arr['allow CKFinder file uploads'] = array(
            'title' => t('CKFinder access'),
            'description' => t('Allow users to use CKFinder')
        );
    }
    return $arr;
}

/**
 * Implementation of hook_help().
 *
 * This function delegates execution to ckeditor_help_delegate() in includes/ckeditor.page.inc to
 * lower the amount of code in ckeditor.module
 */
function ckeditor_help($path, $arg) {
    module_load_include('inc', 'ckeditor', 'includes/ckeditor.page');
    return module_invoke('ckeditor', 'help_delegate', $path, $arg);
}

/**
 * Implementation of hook_init().
 */
function ckeditor_init() {
    drupal_add_css(drupal_get_path('module', 'ckeditor') . '/ckeditor.css');
}

/**
 * Implementation of hook_form_alter()
 */
function ckeditor_form_alter(&$form, $form_state, $form_id) {
    module_load_include('inc', 'ckeditor', 'includes/ckeditor.user');
    if ( $form_id == 'user_profile_form') {
        ckeditor_user_customize($form, $form_state, $form_id);
    }
}

/**
 * Implementation of hook_element_info_alter().
 *
 * Replace textarea with CKEditor using callback function (ckeditor_pre_render_text_format)
 */
function ckeditor_element_info_alter(&$types) {
    $types['text_format']['#pre_render'][] = 'ckeditor_pre_render_text_format';
}

/**
 * This function create the HTML objects required for the CKEditor
 *
 * @param $element
 *   A fully populated form element to add the editor to
 * @return
 *   The same $element with extra CKEditor markup and initialization
 */
function ckeditor_pre_render_text_format($element) {
    static $init = FALSE;

    if (!isset($element['#format'])) {
        return $element;
    }
    
    module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
    if ( $init === FALSE ) {
        $input_formats = ckeditor_profiles_compile();
        drupal_add_js(array('ckeditor' => array('input_formats' => $input_formats)), 'setting');
        $init = TRUE;
    }
    
    if (isset($element['value'])) {
        if (isset($element['summary'])) {
            $element['value'] = ckeditor_load_by_field($element['value'], $element['#format'], TRUE, $element['summary']['#id']);
            $element['summary'] = ckeditor_load_by_field($element['summary'], $element['#format'], FALSE);
        }
        else {
            $element['value'] = ckeditor_load_by_field($element['value'], $element['#format']);
        }
    }
    else {
        $element = ckeditor_load_by_field($element, $element['#format']);
    }

    return $element;
}

/**
 * Implementation of hook_user().
 *
 * This function delegates execution to ckeditor_user_delegate() in includes/ckeditor.user.inc to
 * lower the amount of code in ckeditor.module
 */
function ckeditor_user($type, $edit, &$user, $category = NULL) {
    if (($type == 'form' && $category == 'account') || $type == 'validate') {
        module_load_include('inc', 'ckeditor', 'includes/ckeditor.user');
        return ckeditor_user_delegate($type, $edit, $user, $category);
    }
    return NULL;
}

/**
 * Load all profiles. Just load one profile if $name is passed in.
 */
function ckeditor_profile_load($name = '', $clear = FALSE) {
    static $profiles = array();
    global $user;

    if (empty($profiles) || $clear === TRUE) {
        $result = db_select('ckeditor_settings', 's')->fields('s')->execute();
        foreach ($result as $data) {
            $data->settings = unserialize($data->settings);
            $data->input_formats = array();

            $profiles[$data->name] = $data;
        }
        $input_formats = filter_formats($user);
        $result = db_select('ckeditor_input_format', 'f')->fields('f')->execute();
        foreach ($result as $data) {
            if (isset($input_formats[$data->format])) {
                $profiles[$data->name]->input_formats[$data->format] = $input_formats[$data->format]->name;
            }
        }
        
    }

    return ($name ? (isset($profiles[urldecode($name)]) ? $profiles[urldecode($name)] : FALSE) : $profiles);
}

/**
 * Read CKEditor path from Global profile
 *
 * @return
 *   path to CKEditor folder
 */
function ckeditor_path($local = FALSE, $refresh = FALSE) {
    static $cke_path;
    static $cke_local_path;

    if ($refresh || (!$cke_path)) {
        $mod_path = drupal_get_path('module', 'ckeditor');
        $global_profile = ckeditor_profile_load('CKEditor Global Profile', $refresh);

        //default: path to ckeditor subdirectory in the ckeditor module directory (starting from the document root)
        //e.g. for http://example.com/drupal it will be /drupal/sites/all/modules/ckeditor/ckeditor
        $cke_path = $mod_path . '/ckeditor';

        //default: path to ckeditor subdirectory in the ckeditor module directory (relative to index.php)
        //e.g.: sites/all/modules/ckeditor/ckeditor
        $cke_local_path = $mod_path . '/ckeditor';

        if ($global_profile) {
            $gs = $global_profile->settings;

            if (isset($gs['ckeditor_path'])) {
                $tmp_path = $gs['ckeditor_path'];
                $tmp_path = strtr($tmp_path, array("%m" => $mod_path, "%l" => 'sites/all/libraries'));
                $tmp_path = str_replace('\\', '/', $tmp_path);
                $tmp_path = str_replace('//', '/', $tmp_path);
                $cke_path = $tmp_path;

                if (empty($gs['ckeditor_local_path'])) {
                    //fortunately wildcards are used, we can easily get the right server path
                    if (FALSE !== strpos($gs['ckeditor_path'], "%m")) {
                        $gs['ckeditor_local_path'] = strtr($gs['ckeditor_path'], array("%m" => $mod_path));
                    }
                    if (FALSE !== strpos($gs['ckeditor_path'], "%l")) {
                        $gs['ckeditor_local_path'] = strtr($gs['ckeditor_path'], array("%l" => 'sites/all/libraries'));
                    }
                }
            }
            
            //ckeditor_path is defined, but wildcards are not used, we need to try to find out where is
            //the document root located and append ckeditor_path to it.
            if (!empty($gs['ckeditor_local_path'])) {
                $cke_local_path = $gs['ckeditor_local_path'];
            }
            elseif (!empty($gs['ckeditor_path'])) {
                module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
                $local_path = ckeditor_resolve_url($gs['ckeditor_path'] . "/");
                if (FALSE !== $local_path) {
                    $cke_local_path = $local_path;
                }
            }
        }
    }
    if ($local) {
        return $cke_local_path;
    }
    else {
        return $cke_path;
    }
}

Other Drupal examples (source code examples)

Here is a short list of links related to this Drupal ckeditor.module source code file:

new blog posts

"Drupal" is a registered trademark of Dries Buytaert.

my drupal tutorials and examples  

Copyright 1998-2016 Alvin Alexander, alvinalexander.com
All Rights Reserved.

Beginning in 2016, a portion of the proceeds from pages under the '/drupal-code-examples/' URI will be donated to charity.