Passed
Push — master ( 907961...621938 )
by William
03:29
created
dashboard/assets/grocery_crud/themes/dashboard/views/edit.php 2 patches
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -1,12 +1,12 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3
-	$this->set_css($this->default_theme_path.'/flexigrid/css/flexigrid.css');
3
+    $this->set_css($this->default_theme_path.'/flexigrid/css/flexigrid.css');
4 4
 
5 5
     $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.form.min.js');
6
-	$this->set_js_config($this->default_theme_path.'/flexigrid/js/flexigrid-edit.js');
6
+    $this->set_js_config($this->default_theme_path.'/flexigrid/js/flexigrid-edit.js');
7 7
 
8
-	$this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.noty.js');
9
-	$this->set_js_lib($this->default_javascript_path.'/jquery_plugins/config/jquery.noty.config.js');
8
+    $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.noty.js');
9
+    $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/config/jquery.noty.config.js');
10 10
 ?>
11 11
 <div class="flexigrid crud-form" style='width: 100%;' data-unique-hash="<?php echo $unique_hash; ?>">
12 12
 	<div class="mDiv">
@@ -24,12 +24,12 @@  discard block
 block discarded – undo
24 24
 	<?php echo form_open( $update_url, 'method="post" id="crudForm"  enctype="multipart/form-data"'); ?>
25 25
 	<div class='form-div'>
26 26
 		<?php
27
-		$counter = 0;
28
-			foreach($fields as $field)
29
-			{
30
-				$even_odd = $counter % 2 == 0 ? 'odd' : 'even';
31
-				$counter++;
32
-		?>
27
+        $counter = 0;
28
+            foreach($fields as $field)
29
+            {
30
+                $even_odd = $counter % 2 == 0 ? 'odd' : 'even';
31
+                $counter++;
32
+        ?>
33 33
 			<div class='form-field-box <?php echo $even_odd?>' id="<?php echo $field->field_name; ?>_field_box">
34 34
 				<div class='form-display-as-box' id="<?php echo $field->field_name; ?>_display_as_box">
35 35
 					<?php echo $input_fields[$field->field_name]->display_as?><?php echo ($input_fields[$field->field_name]->required)? "<span class='required'>*</span> " : ""?> :
@@ -43,10 +43,10 @@  discard block
 block discarded – undo
43 43
 		<?php if(!empty($hidden_fields)){?>
44 44
 		<!-- Start of hidden inputs -->
45 45
 			<?php
46
-				foreach($hidden_fields as $hidden_field){
47
-					echo $hidden_field->input;
48
-				}
49
-			?>
46
+                foreach($hidden_fields as $hidden_field){
47
+                    echo $hidden_field->input;
48
+                }
49
+            ?>
50 50
 		<!-- End of hidden inputs -->
51 51
 		<?php }?>
52 52
 		<?php if ($is_ajax) { ?><input type="hidden" name="is_ajax" value="true" /><?php }?>
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -16,23 +16,23 @@  discard block
 block discarded – undo
16 16
 			</div>
17 17
 			<div class='clear'></div>
18 18
 		</div>
19
-		<div title="<?php echo $this->l('minimize_maximize');?>" class="ptogtitle">
19
+		<div title="<?php echo $this->l('minimize_maximize'); ?>" class="ptogtitle">
20 20
 			<span></span>
21 21
 		</div>
22 22
 	</div>
23 23
 <div id='main-table-box'>
24
-	<?php echo form_open( $update_url, 'method="post" id="crudForm"  enctype="multipart/form-data"'); ?>
24
+	<?php echo form_open($update_url, 'method="post" id="crudForm"  enctype="multipart/form-data"'); ?>
25 25
 	<div class='form-div'>
26 26
 		<?php
27 27
 		$counter = 0;
28
-			foreach($fields as $field)
28
+			foreach ($fields as $field)
29 29
 			{
30 30
 				$even_odd = $counter % 2 == 0 ? 'odd' : 'even';
31 31
 				$counter++;
32 32
 		?>
33 33
 			<div class='form-field-box <?php echo $even_odd?>' id="<?php echo $field->field_name; ?>_field_box">
34 34
 				<div class='form-display-as-box' id="<?php echo $field->field_name; ?>_display_as_box">
35
-					<?php echo $input_fields[$field->field_name]->display_as?><?php echo ($input_fields[$field->field_name]->required)? "<span class='required'>*</span> " : ""?> :
35
+					<?php echo $input_fields[$field->field_name]->display_as?><?php echo ($input_fields[$field->field_name]->required) ? "<span class='required'>*</span> " : ""?> :
36 36
 				</div>
37 37
 				<div class='form-input-box' id="<?php echo $field->field_name; ?>_input_box">
38 38
 					<?php echo $input_fields[$field->field_name]->input?>
@@ -40,10 +40,10 @@  discard block
 block discarded – undo
40 40
 				<div class='clear'></div>
41 41
 			</div>
42 42
 		<?php }?>
43
-		<?php if(!empty($hidden_fields)){?>
43
+		<?php if (!empty($hidden_fields)) {?>
44 44
 		<!-- Start of hidden inputs -->
45 45
 			<?php
46
-				foreach($hidden_fields as $hidden_field){
46
+				foreach ($hidden_fields as $hidden_field) {
47 47
 					echo $hidden_field->input;
48 48
 				}
49 49
 			?>
@@ -57,7 +57,7 @@  discard block
 block discarded – undo
57 57
 		<div class='form-button-box'>
58 58
 			<input  id="form-button-save" type='submit' value='<?php echo $this->l('form_update_changes'); ?>' class="btn btn-large"/>
59 59
 		</div>
60
-<?php 	if(!$this->unset_back_to_list) { ?>
60
+<?php 	if (!$this->unset_back_to_list) { ?>
61 61
 		<div class='form-button-box'>
62 62
 			<input type='button' value='<?php echo $this->l('form_update_and_go_back'); ?>' id="save-and-go-back-button" class="btn btn-large"/>
63 63
 		</div>
Please login to merge, or discard this patch.
dashboard/assets/grocery_crud/themes/dashboard/views/read.php 2 patches
Indentation   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -1,11 +1,11 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3
-	$this->set_css($this->default_theme_path.'/flexigrid/css/flexigrid.css');
4
-	$this->set_js_lib($this->default_theme_path.'/flexigrid/js/jquery.form.js');
5
-	$this->set_js_config($this->default_theme_path.'/flexigrid/js/flexigrid-edit.js');
3
+    $this->set_css($this->default_theme_path.'/flexigrid/css/flexigrid.css');
4
+    $this->set_js_lib($this->default_theme_path.'/flexigrid/js/jquery.form.js');
5
+    $this->set_js_config($this->default_theme_path.'/flexigrid/js/flexigrid-edit.js');
6 6
 
7
-	$this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.noty.js');
8
-	$this->set_js_lib($this->default_javascript_path.'/jquery_plugins/config/jquery.noty.config.js');
7
+    $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.noty.js');
8
+    $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/config/jquery.noty.config.js');
9 9
 ?>
10 10
 <div class="flexigrid crud-form" style='width: 100%;' data-unique-hash="<?php echo $unique_hash; ?>">
11 11
 	<div class="mDiv">
@@ -23,12 +23,12 @@  discard block
 block discarded – undo
23 23
 	<?php echo form_open( $read_url, 'method="post" id="crudForm"  enctype="multipart/form-data"'); ?>
24 24
 	<div class='form-div'>
25 25
 		<?php
26
-		$counter = 0;
27
-			foreach($fields as $field)
28
-			{
29
-				$even_odd = $counter % 2 == 0 ? 'odd' : 'even';
30
-				$counter++;
31
-		?>
26
+        $counter = 0;
27
+            foreach($fields as $field)
28
+            {
29
+                $even_odd = $counter % 2 == 0 ? 'odd' : 'even';
30
+                $counter++;
31
+        ?>
32 32
 			<div class='form-field-box <?php echo $even_odd?>' id="<?php echo $field->field_name; ?>_field_box">
33 33
 				<div class='form-display-as-box' id="<?php echo $field->field_name; ?>_display_as_box">
34 34
 					<?php echo $input_fields[$field->field_name]->display_as?><?php echo ($input_fields[$field->field_name]->required)? "<span class='required'>*</span> " : ""?> :
@@ -42,10 +42,10 @@  discard block
 block discarded – undo
42 42
 		<?php if(!empty($hidden_fields)){?>
43 43
 		<!-- Start of hidden inputs -->
44 44
 			<?php
45
-				foreach($hidden_fields as $hidden_field){
46
-					echo $hidden_field->input;
47
-				}
48
-			?>
45
+                foreach($hidden_fields as $hidden_field){
46
+                    echo $hidden_field->input;
47
+                }
48
+            ?>
49 49
 		<!-- End of hidden inputs -->
50 50
 		<?php }?>
51 51
 		<?php if ($is_ajax) { ?><input type="hidden" name="is_ajax" value="true" /><?php }?>
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -15,23 +15,23 @@  discard block
 block discarded – undo
15 15
 			</div>
16 16
 			<div class='clear'></div>
17 17
 		</div>
18
-		<div title="<?php echo $this->l('minimize_maximize');?>" class="ptogtitle">
18
+		<div title="<?php echo $this->l('minimize_maximize'); ?>" class="ptogtitle">
19 19
 			<span></span>
20 20
 		</div>
21 21
 	</div>
22 22
 <div id='main-table-box'>
23
-	<?php echo form_open( $read_url, 'method="post" id="crudForm"  enctype="multipart/form-data"'); ?>
23
+	<?php echo form_open($read_url, 'method="post" id="crudForm"  enctype="multipart/form-data"'); ?>
24 24
 	<div class='form-div'>
25 25
 		<?php
26 26
 		$counter = 0;
27
-			foreach($fields as $field)
27
+			foreach ($fields as $field)
28 28
 			{
29 29
 				$even_odd = $counter % 2 == 0 ? 'odd' : 'even';
30 30
 				$counter++;
31 31
 		?>
32 32
 			<div class='form-field-box <?php echo $even_odd?>' id="<?php echo $field->field_name; ?>_field_box">
33 33
 				<div class='form-display-as-box' id="<?php echo $field->field_name; ?>_display_as_box">
34
-					<?php echo $input_fields[$field->field_name]->display_as?><?php echo ($input_fields[$field->field_name]->required)? "<span class='required'>*</span> " : ""?> :
34
+					<?php echo $input_fields[$field->field_name]->display_as?><?php echo ($input_fields[$field->field_name]->required) ? "<span class='required'>*</span> " : ""?> :
35 35
 				</div>
36 36
 				<div class='form-input-box' id="<?php echo $field->field_name; ?>_input_box">
37 37
 					<?php echo $input_fields[$field->field_name]->input?>
@@ -39,10 +39,10 @@  discard block
 block discarded – undo
39 39
 				<div class='clear'></div>
40 40
 			</div>
41 41
 		<?php }?>
42
-		<?php if(!empty($hidden_fields)){?>
42
+		<?php if (!empty($hidden_fields)) {?>
43 43
 		<!-- Start of hidden inputs -->
44 44
 			<?php
45
-				foreach($hidden_fields as $hidden_field){
45
+				foreach ($hidden_fields as $hidden_field) {
46 46
 					echo $hidden_field->input;
47 47
 				}
48 48
 			?>
Please login to merge, or discard this patch.
dashboard/assets/grocery_crud/themes/dashboard/views/add.php 2 patches
Indentation   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -1,12 +1,12 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3
-	$this->set_css($this->default_theme_path.'/flexigrid/css/flexigrid.css');
4
-	$this->set_js_lib($this->default_theme_path.'/flexigrid/js/jquery.form.js');
3
+    $this->set_css($this->default_theme_path.'/flexigrid/css/flexigrid.css');
4
+    $this->set_js_lib($this->default_theme_path.'/flexigrid/js/jquery.form.js');
5 5
     $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.form.min.js');
6
-	$this->set_js_config($this->default_theme_path.'/flexigrid/js/flexigrid-add.js');
6
+    $this->set_js_config($this->default_theme_path.'/flexigrid/js/flexigrid-add.js');
7 7
 
8
-	$this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.noty.js');
9
-	$this->set_js_lib($this->default_javascript_path.'/jquery_plugins/config/jquery.noty.config.js');
8
+    $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.noty.js');
9
+    $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/config/jquery.noty.config.js');
10 10
 ?>
11 11
 <div class="flexigrid crud-form" style='width: 100%;' data-unique-hash="<?php echo $unique_hash; ?>">
12 12
 	<div class="mDiv">
@@ -24,12 +24,12 @@  discard block
 block discarded – undo
24 24
 	<?php echo form_open( $insert_url, 'method="post" id="crudForm"  enctype="multipart/form-data"'); ?>
25 25
 		<div class='form-div'>
26 26
 			<?php
27
-			$counter = 0;
28
-				foreach($fields as $field)
29
-				{
30
-					$even_odd = $counter % 2 == 0 ? 'odd' : 'even';
31
-					$counter++;
32
-			?>
27
+            $counter = 0;
28
+                foreach($fields as $field)
29
+                {
30
+                    $even_odd = $counter % 2 == 0 ? 'odd' : 'even';
31
+                    $counter++;
32
+            ?>
33 33
 			<div class='form-field-box <?php echo $even_odd?>' id="<?php echo $field->field_name; ?>_field_box">
34 34
 				<div class='form-display-as-box' id="<?php echo $field->field_name; ?>_display_as_box">
35 35
 					<?php echo $input_fields[$field->field_name]->display_as; ?><?php echo ($input_fields[$field->field_name]->required)? "<span class='required'>*</span> " : ""; ?> :
@@ -42,10 +42,10 @@  discard block
 block discarded – undo
42 42
 			<?php }?>
43 43
 			<!-- Start of hidden inputs -->
44 44
 				<?php
45
-					foreach($hidden_fields as $hidden_field){
46
-						echo $hidden_field->input;
47
-					}
48
-				?>
45
+                    foreach($hidden_fields as $hidden_field){
46
+                        echo $hidden_field->input;
47
+                    }
48
+                ?>
49 49
 			<!-- End of hidden inputs -->
50 50
 			<?php if ($is_ajax) { ?><input type="hidden" name="is_ajax" value="true" /><?php }?>
51 51
 
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -16,23 +16,23 @@  discard block
 block discarded – undo
16 16
 			</div>
17 17
 			<div class='clear'></div>
18 18
 		</div>
19
-		<div title="<?php echo $this->l('minimize_maximize');?>" class="ptogtitle">
19
+		<div title="<?php echo $this->l('minimize_maximize'); ?>" class="ptogtitle">
20 20
 			<span></span>
21 21
 		</div>
22 22
 	</div>
23 23
 <div id='main-table-box'>
24
-	<?php echo form_open( $insert_url, 'method="post" id="crudForm"  enctype="multipart/form-data"'); ?>
24
+	<?php echo form_open($insert_url, 'method="post" id="crudForm"  enctype="multipart/form-data"'); ?>
25 25
 		<div class='form-div'>
26 26
 			<?php
27 27
 			$counter = 0;
28
-				foreach($fields as $field)
28
+				foreach ($fields as $field)
29 29
 				{
30 30
 					$even_odd = $counter % 2 == 0 ? 'odd' : 'even';
31 31
 					$counter++;
32 32
 			?>
33 33
 			<div class='form-field-box <?php echo $even_odd?>' id="<?php echo $field->field_name; ?>_field_box">
34 34
 				<div class='form-display-as-box' id="<?php echo $field->field_name; ?>_display_as_box">
35
-					<?php echo $input_fields[$field->field_name]->display_as; ?><?php echo ($input_fields[$field->field_name]->required)? "<span class='required'>*</span> " : ""; ?> :
35
+					<?php echo $input_fields[$field->field_name]->display_as; ?><?php echo ($input_fields[$field->field_name]->required) ? "<span class='required'>*</span> " : ""; ?> :
36 36
 				</div>
37 37
 				<div class='form-input-box' id="<?php echo $field->field_name; ?>_input_box">
38 38
 					<?php echo $input_fields[$field->field_name]->input?>
@@ -42,7 +42,7 @@  discard block
 block discarded – undo
42 42
 			<?php }?>
43 43
 			<!-- Start of hidden inputs -->
44 44
 				<?php
45
-					foreach($hidden_fields as $hidden_field){
45
+					foreach ($hidden_fields as $hidden_field) {
46 46
 						echo $hidden_field->input;
47 47
 					}
48 48
 				?>
@@ -56,7 +56,7 @@  discard block
 block discarded – undo
56 56
 			<div class='form-button-box'>
57 57
 				<input id="form-button-save" type='submit' value='<?php echo $this->l('form_save'); ?>'  class="btn btn-large"/>
58 58
 			</div>
59
-<?php 	if(!$this->unset_back_to_list) { ?>
59
+<?php 	if (!$this->unset_back_to_list) { ?>
60 60
 			<div class='form-button-box'>
61 61
 				<input type='button' value='<?php echo $this->l('form_save_and_go_back'); ?>' id="save-and-go-back-button"  class="btn btn-large"/>
62 62
 			</div>
Please login to merge, or discard this patch.
dashboard/assets/grocery_crud/texteditor/ckeditor/ckeditor.php 3 patches
Indentation   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -24,6 +24,6 @@
 block discarded – undo
24 24
  */
25 25
 
26 26
 if ( !function_exists('version_compare') || version_compare( phpversion(), '5', '<' ) )
27
-	include_once( 'ckeditor_php4.php' ) ;
27
+    include_once( 'ckeditor_php4.php' ) ;
28 28
 else
29
-	include_once( 'ckeditor_php5.php' ) ;
29
+    include_once( 'ckeditor_php5.php' ) ;
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -23,7 +23,7 @@
 block discarded – undo
23 23
  * @endcode
24 24
  */
25 25
 
26
-if ( !function_exists('version_compare') || version_compare( phpversion(), '5', '<' ) )
27
-	include_once( 'ckeditor_php4.php' ) ;
26
+if (!function_exists('version_compare') || version_compare(phpversion(), '5', '<'))
27
+	include_once('ckeditor_php4.php');
28 28
 else
29
-	include_once( 'ckeditor_php5.php' ) ;
29
+	include_once('ckeditor_php5.php');
Please login to merge, or discard this patch.
Braces   +5 added lines, -4 removed lines patch added patch discarded remove patch
@@ -23,7 +23,8 @@
 block discarded – undo
23 23
  * @endcode
24 24
  */
25 25
 
26
-if ( !function_exists('version_compare') || version_compare( phpversion(), '5', '<' ) )
27
-	include_once( 'ckeditor_php4.php' ) ;
28
-else
29
-	include_once( 'ckeditor_php5.php' ) ;
26
+if ( !function_exists('version_compare') || version_compare( phpversion(), '5', '<' ) ) {
27
+	include_once( 'ckeditor_php4.php' ) ;
28
+} else {
29
+	include_once( 'ckeditor_php5.php' ) ;
30
+}
Please login to merge, or discard this patch.
dashboard/assets/grocery_crud/texteditor/ckeditor/ckeditor_php5.php 3 patches
Indentation   +536 added lines, -536 removed lines patch added patch discarded remove patch
@@ -17,540 +17,540 @@
 block discarded – undo
17 17
  */
18 18
 class CKEditor
19 19
 {
20
-	/**
21
-	 * The version of %CKEditor.
22
-	 */
23
-	const version = '3.6.5';
24
-	/**
25
-	 * A constant string unique for each release of %CKEditor.
26
-	 */
27
-	const timestamp = 'C9A85WF';
28
-
29
-	/**
30
-	 * URL to the %CKEditor installation directory (absolute or relative to document root).
31
-	 * If not set, CKEditor will try to guess it's path.
32
-	 *
33
-	 * Example usage:
34
-	 * @code
35
-	 * $CKEditor->basePath = '/ckeditor/';
36
-	 * @endcode
37
-	 */
38
-	public $basePath;
39
-	/**
40
-	 * An array that holds the global %CKEditor configuration.
41
-	 * For the list of available options, see http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html
42
-	 *
43
-	 * Example usage:
44
-	 * @code
45
-	 * $CKEditor->config['height'] = 400;
46
-	 * // Use @@ at the beggining of a string to ouput it without surrounding quotes.
47
-	 * $CKEditor->config['width'] = '@@screen.width * 0.8';
48
-	 * @endcode
49
-	 */
50
-	public $config = array();
51
-	/**
52
-	 * A boolean variable indicating whether CKEditor has been initialized.
53
-	 * Set it to true only if you have already included
54
-	 * &lt;script&gt; tag loading ckeditor.js in your website.
55
-	 */
56
-	public $initialized = false;
57
-	/**
58
-	 * Boolean variable indicating whether created code should be printed out or returned by a function.
59
-	 *
60
-	 * Example 1: get the code creating %CKEditor instance and print it on a page with the "echo" function.
61
-	 * @code
62
-	 * $CKEditor = new CKEditor();
63
-	 * $CKEditor->returnOutput = true;
64
-	 * $code = $CKEditor->editor("editor1", "<p>Initial value.</p>");
65
-	 * echo "<p>Editor 1:</p>";
66
-	 * echo $code;
67
-	 * @endcode
68
-	 */
69
-	public $returnOutput = false;
70
-	/**
71
-	 * An array with textarea attributes.
72
-	 *
73
-	 * When %CKEditor is created with the editor() method, a HTML &lt;textarea&gt; element is created,
74
-	 * it will be displayed to anyone with JavaScript disabled or with incompatible browser.
75
-	 */
76
-	public $textareaAttributes = array( "rows" => 8, "cols" => 60 );
77
-	/**
78
-	 * A string indicating the creation date of %CKEditor.
79
-	 * Do not change it unless you want to force browsers to not use previously cached version of %CKEditor.
80
-	 */
81
-	public $timestamp = "C9A85WF";
82
-	/**
83
-	 * An array that holds event listeners.
84
-	 */
85
-	private $events = array();
86
-	/**
87
-	 * An array that holds global event listeners.
88
-	 */
89
-	private $globalEvents = array();
90
-
91
-	/**
92
-	 * Main Constructor.
93
-	 *
94
-	 *  @param $basePath (string) URL to the %CKEditor installation directory (optional).
95
-	 */
96
-	function __construct($basePath = null) {
97
-		if (!empty($basePath)) {
98
-			$this->basePath = $basePath;
99
-		}
100
-	}
101
-
102
-	/**
103
-	 * Creates a %CKEditor instance.
104
-	 * In incompatible browsers %CKEditor will downgrade to plain HTML &lt;textarea&gt; element.
105
-	 *
106
-	 * @param $name (string) Name of the %CKEditor instance (this will be also the "name" attribute of textarea element).
107
-	 * @param $value (string) Initial value (optional).
108
-	 * @param $config (array) The specific configurations to apply to this editor instance (optional).
109
-	 * @param $events (array) Event listeners for this editor instance (optional).
110
-	 *
111
-	 * Example usage:
112
-	 * @code
113
-	 * $CKEditor = new CKEditor();
114
-	 * $CKEditor->editor("field1", "<p>Initial value.</p>");
115
-	 * @endcode
116
-	 *
117
-	 * Advanced example:
118
-	 * @code
119
-	 * $CKEditor = new CKEditor();
120
-	 * $config = array();
121
-	 * $config['toolbar'] = array(
122
-	 *     array( 'Source', '-', 'Bold', 'Italic', 'Underline', 'Strike' ),
123
-	 *     array( 'Image', 'Link', 'Unlink', 'Anchor' )
124
-	 * );
125
-	 * $events['instanceReady'] = 'function (ev) {
126
-	 *     alert("Loaded: " + ev.editor.name);
127
-	 * }';
128
-	 * $CKEditor->editor("field1", "<p>Initial value.</p>", $config, $events);
129
-	 * @endcode
130
-	 */
131
-	public function editor($name, $value = "", $config = array(), $events = array())
132
-	{
133
-		$attr = "";
134
-		foreach ($this->textareaAttributes as $key => $val) {
135
-			$attr.= " " . $key . '="' . str_replace('"', '&quot;', $val) . '"';
136
-		}
137
-		$out = "<textarea name=\"" . $name . "\"" . $attr . ">" . htmlspecialchars($value) . "</textarea>\n";
138
-		if (!$this->initialized) {
139
-			$out .= $this->init();
140
-		}
141
-
142
-		$_config = $this->configSettings($config, $events);
143
-
144
-		$js = $this->returnGlobalEvents();
145
-		if (!empty($_config))
146
-			$js .= "CKEDITOR.replace('".$name."', ".$this->jsEncode($_config).");";
147
-		else
148
-			$js .= "CKEDITOR.replace('".$name."');";
149
-
150
-		$out .= $this->script($js);
151
-
152
-		if (!$this->returnOutput) {
153
-			print $out;
154
-			$out = "";
155
-		}
156
-
157
-		return $out;
158
-	}
159
-
160
-	/**
161
-	 * Replaces a &lt;textarea&gt; with a %CKEditor instance.
162
-	 *
163
-	 * @param $id (string) The id or name of textarea element.
164
-	 * @param $config (array) The specific configurations to apply to this editor instance (optional).
165
-	 * @param $events (array) Event listeners for this editor instance (optional).
166
-	 *
167
-	 * Example 1: adding %CKEditor to &lt;textarea name="article"&gt;&lt;/textarea&gt; element:
168
-	 * @code
169
-	 * $CKEditor = new CKEditor();
170
-	 * $CKEditor->replace("article");
171
-	 * @endcode
172
-	 */
173
-	public function replace($id, $config = array(), $events = array())
174
-	{
175
-		$out = "";
176
-		if (!$this->initialized) {
177
-			$out .= $this->init();
178
-		}
179
-
180
-		$_config = $this->configSettings($config, $events);
181
-
182
-		$js = $this->returnGlobalEvents();
183
-		if (!empty($_config)) {
184
-			$js .= "CKEDITOR.replace('".$id."', ".$this->jsEncode($_config).");";
185
-		}
186
-		else {
187
-			$js .= "CKEDITOR.replace('".$id."');";
188
-		}
189
-		$out .= $this->script($js);
190
-
191
-		if (!$this->returnOutput) {
192
-			print $out;
193
-			$out = "";
194
-		}
195
-
196
-		return $out;
197
-	}
198
-
199
-	/**
200
-	 * Replace all &lt;textarea&gt; elements available in the document with editor instances.
201
-	 *
202
-	 * @param $className (string) If set, replace all textareas with class className in the page.
203
-	 *
204
-	 * Example 1: replace all &lt;textarea&gt; elements in the page.
205
-	 * @code
206
-	 * $CKEditor = new CKEditor();
207
-	 * $CKEditor->replaceAll();
208
-	 * @endcode
209
-	 *
210
-	 * Example 2: replace all &lt;textarea class="myClassName"&gt; elements in the page.
211
-	 * @code
212
-	 * $CKEditor = new CKEditor();
213
-	 * $CKEditor->replaceAll( 'myClassName' );
214
-	 * @endcode
215
-	 */
216
-	public function replaceAll($className = null)
217
-	{
218
-		$out = "";
219
-		if (!$this->initialized) {
220
-			$out .= $this->init();
221
-		}
222
-
223
-		$_config = $this->configSettings();
224
-
225
-		$js = $this->returnGlobalEvents();
226
-		if (empty($_config)) {
227
-			if (empty($className)) {
228
-				$js .= "CKEDITOR.replaceAll();";
229
-			}
230
-			else {
231
-				$js .= "CKEDITOR.replaceAll('".$className."');";
232
-			}
233
-		}
234
-		else {
235
-			$classDetection = "";
236
-			$js .= "CKEDITOR.replaceAll( function(textarea, config) {\n";
237
-			if (!empty($className)) {
238
-				$js .= "	var classRegex = new RegExp('(?:^| )' + '". $className ."' + '(?:$| )');\n";
239
-				$js .= "	if (!classRegex.test(textarea.className))\n";
240
-				$js .= "		return false;\n";
241
-			}
242
-			$js .= "	CKEDITOR.tools.extend(config, ". $this->jsEncode($_config) .", true);";
243
-			$js .= "} );";
244
-
245
-		}
246
-
247
-		$out .= $this->script($js);
248
-
249
-		if (!$this->returnOutput) {
250
-			print $out;
251
-			$out = "";
252
-		}
253
-
254
-		return $out;
255
-	}
256
-
257
-	/**
258
-	 * Adds event listener.
259
-	 * Events are fired by %CKEditor in various situations.
260
-	 *
261
-	 * @param $event (string) Event name.
262
-	 * @param $javascriptCode (string) Javascript anonymous function or function name.
263
-	 *
264
-	 * Example usage:
265
-	 * @code
266
-	 * $CKEditor->addEventHandler('instanceReady', 'function (ev) {
267
-	 *     alert("Loaded: " + ev.editor.name);
268
-	 * }');
269
-	 * @endcode
270
-	 */
271
-	public function addEventHandler($event, $javascriptCode)
272
-	{
273
-		if (!isset($this->events[$event])) {
274
-			$this->events[$event] = array();
275
-		}
276
-		// Avoid duplicates.
277
-		if (!in_array($javascriptCode, $this->events[$event])) {
278
-			$this->events[$event][] = $javascriptCode;
279
-		}
280
-	}
281
-
282
-	/**
283
-	 * Clear registered event handlers.
284
-	 * Note: this function will have no effect on already created editor instances.
285
-	 *
286
-	 * @param $event (string) Event name, if not set all event handlers will be removed (optional).
287
-	 */
288
-	public function clearEventHandlers($event = null)
289
-	{
290
-		if (!empty($event)) {
291
-			$this->events[$event] = array();
292
-		}
293
-		else {
294
-			$this->events = array();
295
-		}
296
-	}
297
-
298
-	/**
299
-	 * Adds global event listener.
300
-	 *
301
-	 * @param $event (string) Event name.
302
-	 * @param $javascriptCode (string) Javascript anonymous function or function name.
303
-	 *
304
-	 * Example usage:
305
-	 * @code
306
-	 * $CKEditor->addGlobalEventHandler('dialogDefinition', 'function (ev) {
307
-	 *     alert("Loading dialog: " + ev.data.name);
308
-	 * }');
309
-	 * @endcode
310
-	 */
311
-	public function addGlobalEventHandler($event, $javascriptCode)
312
-	{
313
-		if (!isset($this->globalEvents[$event])) {
314
-			$this->globalEvents[$event] = array();
315
-		}
316
-		// Avoid duplicates.
317
-		if (!in_array($javascriptCode, $this->globalEvents[$event])) {
318
-			$this->globalEvents[$event][] = $javascriptCode;
319
-		}
320
-	}
321
-
322
-	/**
323
-	 * Clear registered global event handlers.
324
-	 * Note: this function will have no effect if the event handler has been already printed/returned.
325
-	 *
326
-	 * @param $event (string) Event name, if not set all event handlers will be removed (optional).
327
-	 */
328
-	public function clearGlobalEventHandlers($event = null)
329
-	{
330
-		if (!empty($event)) {
331
-			$this->globalEvents[$event] = array();
332
-		}
333
-		else {
334
-			$this->globalEvents = array();
335
-		}
336
-	}
337
-
338
-	/**
339
-	 * Prints javascript code.
340
-	 *
341
-	 * @param string $js
342
-	 */
343
-	private function script($js)
344
-	{
345
-		$out = "<script type=\"text/javascript\">";
346
-		$out .= "//<![CDATA[\n";
347
-		$out .= $js;
348
-		$out .= "\n//]]>";
349
-		$out .= "</script>\n";
350
-
351
-		return $out;
352
-	}
353
-
354
-	/**
355
-	 * Returns the configuration array (global and instance specific settings are merged into one array).
356
-	 *
357
-	 * @param $config (array) The specific configurations to apply to editor instance.
358
-	 * @param $events (array) Event listeners for editor instance.
359
-	 */
360
-	private function configSettings($config = array(), $events = array())
361
-	{
362
-		$_config = $this->config;
363
-		$_events = $this->events;
364
-
365
-		if (is_array($config) && !empty($config)) {
366
-			$_config = array_merge($_config, $config);
367
-		}
368
-
369
-		if (is_array($events) && !empty($events)) {
370
-			foreach ($events as $eventName => $code) {
371
-				if (!isset($_events[$eventName])) {
372
-					$_events[$eventName] = array();
373
-				}
374
-				if (!in_array($code, $_events[$eventName])) {
375
-					$_events[$eventName][] = $code;
376
-				}
377
-			}
378
-		}
379
-
380
-		if (!empty($_events)) {
381
-			foreach($_events as $eventName => $handlers) {
382
-				if (empty($handlers)) {
383
-					continue;
384
-				}
385
-				else if (count($handlers) == 1) {
386
-					$_config['on'][$eventName] = '@@'.$handlers[0];
387
-				}
388
-				else {
389
-					$_config['on'][$eventName] = '@@function (ev){';
390
-					foreach ($handlers as $handler => $code) {
391
-						$_config['on'][$eventName] .= '('.$code.')(ev);';
392
-					}
393
-					$_config['on'][$eventName] .= '}';
394
-				}
395
-			}
396
-		}
397
-
398
-		return $_config;
399
-	}
400
-
401
-	/**
402
-	 * Return global event handlers.
403
-	 */
404
-	private function returnGlobalEvents()
405
-	{
406
-		static $returnedEvents;
407
-		$out = "";
408
-
409
-		if (!isset($returnedEvents)) {
410
-			$returnedEvents = array();
411
-		}
412
-
413
-		if (!empty($this->globalEvents)) {
414
-			foreach ($this->globalEvents as $eventName => $handlers) {
415
-				foreach ($handlers as $handler => $code) {
416
-					if (!isset($returnedEvents[$eventName])) {
417
-						$returnedEvents[$eventName] = array();
418
-					}
419
-					// Return only new events
420
-					if (!in_array($code, $returnedEvents[$eventName])) {
421
-						$out .= ($code ? "\n" : "") . "CKEDITOR.on('". $eventName ."', $code);";
422
-						$returnedEvents[$eventName][] = $code;
423
-					}
424
-				}
425
-			}
426
-		}
427
-
428
-		return $out;
429
-	}
430
-
431
-	/**
432
-	 * Initializes CKEditor (executed only once).
433
-	 */
434
-	private function init()
435
-	{
436
-		static $initComplete;
437
-		$out = "";
438
-
439
-		if (!empty($initComplete)) {
440
-			return "";
441
-		}
442
-
443
-		if ($this->initialized) {
444
-			$initComplete = true;
445
-			return "";
446
-		}
447
-
448
-		$args = "";
449
-		$ckeditorPath = $this->ckeditorPath();
450
-
451
-		if (!empty($this->timestamp) && $this->timestamp != "%"."TIMESTAMP%") {
452
-			$args = '?t=' . $this->timestamp;
453
-		}
454
-
455
-		// Skip relative paths...
456
-		if (strpos($ckeditorPath, '..') !== 0) {
457
-			$out .= $this->script("window.CKEDITOR_BASEPATH='". $ckeditorPath ."';");
458
-		}
459
-
460
-		$out .= "<script type=\"text/javascript\" src=\"" . $ckeditorPath . 'ckeditor.js' . $args . "\"></script>\n";
461
-
462
-		$extraCode = "";
463
-		if ($this->timestamp != self::timestamp) {
464
-			$extraCode .= ($extraCode ? "\n" : "") . "CKEDITOR.timestamp = '". $this->timestamp ."';";
465
-		}
466
-		if ($extraCode) {
467
-			$out .= $this->script($extraCode);
468
-		}
469
-
470
-		$initComplete = $this->initialized = true;
471
-
472
-		return $out;
473
-	}
474
-
475
-	/**
476
-	 * Return path to ckeditor.js.
477
-	 */
478
-	private function ckeditorPath()
479
-	{
480
-		if (!empty($this->basePath)) {
481
-			return $this->basePath;
482
-		}
483
-
484
-		/**
485
-		 * The absolute pathname of the currently executing script.
486
-		 * Note: If a script is executed with the CLI, as a relative path, such as file.php or ../file.php,
487
-		 * $_SERVER['SCRIPT_FILENAME'] will contain the relative path specified by the user.
488
-		 */
489
-		if (isset($_SERVER['SCRIPT_FILENAME'])) {
490
-			$realPath = dirname($_SERVER['SCRIPT_FILENAME']);
491
-		}
492
-		else {
493
-			/**
494
-			 * realpath - Returns canonicalized absolute pathname
495
-			 */
496
-			$realPath = realpath( './' ) ;
497
-		}
498
-
499
-		/**
500
-		 * The filename of the currently executing script, relative to the document root.
501
-		 * For instance, $_SERVER['PHP_SELF'] in a script at the address http://example.com/test.php/foo.bar
502
-		 * would be /test.php/foo.bar.
503
-		 */
504
-		$selfPath = dirname($_SERVER['PHP_SELF']);
505
-		$file = str_replace("\\", "/", __FILE__);
506
-
507
-		if (!$selfPath || !$realPath || !$file) {
508
-			return "/ckeditor/";
509
-		}
510
-
511
-		$documentRoot = substr($realPath, 0, strlen($realPath) - strlen($selfPath));
512
-		$fileUrl = substr($file, strlen($documentRoot));
513
-		$ckeditorUrl = str_replace("ckeditor_php5.php", "", $fileUrl);
514
-
515
-		return $ckeditorUrl;
516
-	}
517
-
518
-	/**
519
-	 * This little function provides a basic JSON support.
520
-	 *
521
-	 * @param mixed $val
522
-	 * @return string
523
-	 */
524
-	private function jsEncode($val)
525
-	{
526
-		if (is_null($val)) {
527
-			return 'null';
528
-		}
529
-		if (is_bool($val)) {
530
-			return $val ? 'true' : 'false';
531
-		}
532
-		if (is_int($val)) {
533
-			return $val;
534
-		}
535
-		if (is_float($val)) {
536
-			return str_replace(',', '.', $val);
537
-		}
538
-		if (is_array($val) || is_object($val)) {
539
-			if (is_array($val) && (array_keys($val) === range(0,count($val)-1))) {
540
-				return '[' . implode(',', array_map(array($this, 'jsEncode'), $val)) . ']';
541
-			}
542
-			$temp = array();
543
-			foreach ($val as $k => $v){
544
-				$temp[] = $this->jsEncode("{$k}") . ':' . $this->jsEncode($v);
545
-			}
546
-			return '{' . implode(',', $temp) . '}';
547
-		}
548
-		// String otherwise
549
-		if (strpos($val, '@@') === 0)
550
-			return substr($val, 2);
551
-		if (strtoupper(substr($val, 0, 9)) == 'CKEDITOR.')
552
-			return $val;
553
-
554
-		return '"' . str_replace(array("\\", "/", "\n", "\t", "\r", "\x08", "\x0c", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'), $val) . '"';
555
-	}
20
+    /**
21
+     * The version of %CKEditor.
22
+     */
23
+    const version = '3.6.5';
24
+    /**
25
+     * A constant string unique for each release of %CKEditor.
26
+     */
27
+    const timestamp = 'C9A85WF';
28
+
29
+    /**
30
+     * URL to the %CKEditor installation directory (absolute or relative to document root).
31
+     * If not set, CKEditor will try to guess it's path.
32
+     *
33
+     * Example usage:
34
+     * @code
35
+     * $CKEditor->basePath = '/ckeditor/';
36
+     * @endcode
37
+     */
38
+    public $basePath;
39
+    /**
40
+     * An array that holds the global %CKEditor configuration.
41
+     * For the list of available options, see http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html
42
+     *
43
+     * Example usage:
44
+     * @code
45
+     * $CKEditor->config['height'] = 400;
46
+     * // Use @@ at the beggining of a string to ouput it without surrounding quotes.
47
+     * $CKEditor->config['width'] = '@@screen.width * 0.8';
48
+     * @endcode
49
+     */
50
+    public $config = array();
51
+    /**
52
+     * A boolean variable indicating whether CKEditor has been initialized.
53
+     * Set it to true only if you have already included
54
+     * &lt;script&gt; tag loading ckeditor.js in your website.
55
+     */
56
+    public $initialized = false;
57
+    /**
58
+     * Boolean variable indicating whether created code should be printed out or returned by a function.
59
+     *
60
+     * Example 1: get the code creating %CKEditor instance and print it on a page with the "echo" function.
61
+     * @code
62
+     * $CKEditor = new CKEditor();
63
+     * $CKEditor->returnOutput = true;
64
+     * $code = $CKEditor->editor("editor1", "<p>Initial value.</p>");
65
+     * echo "<p>Editor 1:</p>";
66
+     * echo $code;
67
+     * @endcode
68
+     */
69
+    public $returnOutput = false;
70
+    /**
71
+     * An array with textarea attributes.
72
+     *
73
+     * When %CKEditor is created with the editor() method, a HTML &lt;textarea&gt; element is created,
74
+     * it will be displayed to anyone with JavaScript disabled or with incompatible browser.
75
+     */
76
+    public $textareaAttributes = array( "rows" => 8, "cols" => 60 );
77
+    /**
78
+     * A string indicating the creation date of %CKEditor.
79
+     * Do not change it unless you want to force browsers to not use previously cached version of %CKEditor.
80
+     */
81
+    public $timestamp = "C9A85WF";
82
+    /**
83
+     * An array that holds event listeners.
84
+     */
85
+    private $events = array();
86
+    /**
87
+     * An array that holds global event listeners.
88
+     */
89
+    private $globalEvents = array();
90
+
91
+    /**
92
+     * Main Constructor.
93
+     *
94
+     *  @param $basePath (string) URL to the %CKEditor installation directory (optional).
95
+     */
96
+    function __construct($basePath = null) {
97
+        if (!empty($basePath)) {
98
+            $this->basePath = $basePath;
99
+        }
100
+    }
101
+
102
+    /**
103
+     * Creates a %CKEditor instance.
104
+     * In incompatible browsers %CKEditor will downgrade to plain HTML &lt;textarea&gt; element.
105
+     *
106
+     * @param $name (string) Name of the %CKEditor instance (this will be also the "name" attribute of textarea element).
107
+     * @param $value (string) Initial value (optional).
108
+     * @param $config (array) The specific configurations to apply to this editor instance (optional).
109
+     * @param $events (array) Event listeners for this editor instance (optional).
110
+     *
111
+     * Example usage:
112
+     * @code
113
+     * $CKEditor = new CKEditor();
114
+     * $CKEditor->editor("field1", "<p>Initial value.</p>");
115
+     * @endcode
116
+     *
117
+     * Advanced example:
118
+     * @code
119
+     * $CKEditor = new CKEditor();
120
+     * $config = array();
121
+     * $config['toolbar'] = array(
122
+     *     array( 'Source', '-', 'Bold', 'Italic', 'Underline', 'Strike' ),
123
+     *     array( 'Image', 'Link', 'Unlink', 'Anchor' )
124
+     * );
125
+     * $events['instanceReady'] = 'function (ev) {
126
+     *     alert("Loaded: " + ev.editor.name);
127
+     * }';
128
+     * $CKEditor->editor("field1", "<p>Initial value.</p>", $config, $events);
129
+     * @endcode
130
+     */
131
+    public function editor($name, $value = "", $config = array(), $events = array())
132
+    {
133
+        $attr = "";
134
+        foreach ($this->textareaAttributes as $key => $val) {
135
+            $attr.= " " . $key . '="' . str_replace('"', '&quot;', $val) . '"';
136
+        }
137
+        $out = "<textarea name=\"" . $name . "\"" . $attr . ">" . htmlspecialchars($value) . "</textarea>\n";
138
+        if (!$this->initialized) {
139
+            $out .= $this->init();
140
+        }
141
+
142
+        $_config = $this->configSettings($config, $events);
143
+
144
+        $js = $this->returnGlobalEvents();
145
+        if (!empty($_config))
146
+            $js .= "CKEDITOR.replace('".$name."', ".$this->jsEncode($_config).");";
147
+        else
148
+            $js .= "CKEDITOR.replace('".$name."');";
149
+
150
+        $out .= $this->script($js);
151
+
152
+        if (!$this->returnOutput) {
153
+            print $out;
154
+            $out = "";
155
+        }
156
+
157
+        return $out;
158
+    }
159
+
160
+    /**
161
+     * Replaces a &lt;textarea&gt; with a %CKEditor instance.
162
+     *
163
+     * @param $id (string) The id or name of textarea element.
164
+     * @param $config (array) The specific configurations to apply to this editor instance (optional).
165
+     * @param $events (array) Event listeners for this editor instance (optional).
166
+     *
167
+     * Example 1: adding %CKEditor to &lt;textarea name="article"&gt;&lt;/textarea&gt; element:
168
+     * @code
169
+     * $CKEditor = new CKEditor();
170
+     * $CKEditor->replace("article");
171
+     * @endcode
172
+     */
173
+    public function replace($id, $config = array(), $events = array())
174
+    {
175
+        $out = "";
176
+        if (!$this->initialized) {
177
+            $out .= $this->init();
178
+        }
179
+
180
+        $_config = $this->configSettings($config, $events);
181
+
182
+        $js = $this->returnGlobalEvents();
183
+        if (!empty($_config)) {
184
+            $js .= "CKEDITOR.replace('".$id."', ".$this->jsEncode($_config).");";
185
+        }
186
+        else {
187
+            $js .= "CKEDITOR.replace('".$id."');";
188
+        }
189
+        $out .= $this->script($js);
190
+
191
+        if (!$this->returnOutput) {
192
+            print $out;
193
+            $out = "";
194
+        }
195
+
196
+        return $out;
197
+    }
198
+
199
+    /**
200
+     * Replace all &lt;textarea&gt; elements available in the document with editor instances.
201
+     *
202
+     * @param $className (string) If set, replace all textareas with class className in the page.
203
+     *
204
+     * Example 1: replace all &lt;textarea&gt; elements in the page.
205
+     * @code
206
+     * $CKEditor = new CKEditor();
207
+     * $CKEditor->replaceAll();
208
+     * @endcode
209
+     *
210
+     * Example 2: replace all &lt;textarea class="myClassName"&gt; elements in the page.
211
+     * @code
212
+     * $CKEditor = new CKEditor();
213
+     * $CKEditor->replaceAll( 'myClassName' );
214
+     * @endcode
215
+     */
216
+    public function replaceAll($className = null)
217
+    {
218
+        $out = "";
219
+        if (!$this->initialized) {
220
+            $out .= $this->init();
221
+        }
222
+
223
+        $_config = $this->configSettings();
224
+
225
+        $js = $this->returnGlobalEvents();
226
+        if (empty($_config)) {
227
+            if (empty($className)) {
228
+                $js .= "CKEDITOR.replaceAll();";
229
+            }
230
+            else {
231
+                $js .= "CKEDITOR.replaceAll('".$className."');";
232
+            }
233
+        }
234
+        else {
235
+            $classDetection = "";
236
+            $js .= "CKEDITOR.replaceAll( function(textarea, config) {\n";
237
+            if (!empty($className)) {
238
+                $js .= "	var classRegex = new RegExp('(?:^| )' + '". $className ."' + '(?:$| )');\n";
239
+                $js .= "	if (!classRegex.test(textarea.className))\n";
240
+                $js .= "		return false;\n";
241
+            }
242
+            $js .= "	CKEDITOR.tools.extend(config, ". $this->jsEncode($_config) .", true);";
243
+            $js .= "} );";
244
+
245
+        }
246
+
247
+        $out .= $this->script($js);
248
+
249
+        if (!$this->returnOutput) {
250
+            print $out;
251
+            $out = "";
252
+        }
253
+
254
+        return $out;
255
+    }
256
+
257
+    /**
258
+     * Adds event listener.
259
+     * Events are fired by %CKEditor in various situations.
260
+     *
261
+     * @param $event (string) Event name.
262
+     * @param $javascriptCode (string) Javascript anonymous function or function name.
263
+     *
264
+     * Example usage:
265
+     * @code
266
+     * $CKEditor->addEventHandler('instanceReady', 'function (ev) {
267
+     *     alert("Loaded: " + ev.editor.name);
268
+     * }');
269
+     * @endcode
270
+     */
271
+    public function addEventHandler($event, $javascriptCode)
272
+    {
273
+        if (!isset($this->events[$event])) {
274
+            $this->events[$event] = array();
275
+        }
276
+        // Avoid duplicates.
277
+        if (!in_array($javascriptCode, $this->events[$event])) {
278
+            $this->events[$event][] = $javascriptCode;
279
+        }
280
+    }
281
+
282
+    /**
283
+     * Clear registered event handlers.
284
+     * Note: this function will have no effect on already created editor instances.
285
+     *
286
+     * @param $event (string) Event name, if not set all event handlers will be removed (optional).
287
+     */
288
+    public function clearEventHandlers($event = null)
289
+    {
290
+        if (!empty($event)) {
291
+            $this->events[$event] = array();
292
+        }
293
+        else {
294
+            $this->events = array();
295
+        }
296
+    }
297
+
298
+    /**
299
+     * Adds global event listener.
300
+     *
301
+     * @param $event (string) Event name.
302
+     * @param $javascriptCode (string) Javascript anonymous function or function name.
303
+     *
304
+     * Example usage:
305
+     * @code
306
+     * $CKEditor->addGlobalEventHandler('dialogDefinition', 'function (ev) {
307
+     *     alert("Loading dialog: " + ev.data.name);
308
+     * }');
309
+     * @endcode
310
+     */
311
+    public function addGlobalEventHandler($event, $javascriptCode)
312
+    {
313
+        if (!isset($this->globalEvents[$event])) {
314
+            $this->globalEvents[$event] = array();
315
+        }
316
+        // Avoid duplicates.
317
+        if (!in_array($javascriptCode, $this->globalEvents[$event])) {
318
+            $this->globalEvents[$event][] = $javascriptCode;
319
+        }
320
+    }
321
+
322
+    /**
323
+     * Clear registered global event handlers.
324
+     * Note: this function will have no effect if the event handler has been already printed/returned.
325
+     *
326
+     * @param $event (string) Event name, if not set all event handlers will be removed (optional).
327
+     */
328
+    public function clearGlobalEventHandlers($event = null)
329
+    {
330
+        if (!empty($event)) {
331
+            $this->globalEvents[$event] = array();
332
+        }
333
+        else {
334
+            $this->globalEvents = array();
335
+        }
336
+    }
337
+
338
+    /**
339
+     * Prints javascript code.
340
+     *
341
+     * @param string $js
342
+     */
343
+    private function script($js)
344
+    {
345
+        $out = "<script type=\"text/javascript\">";
346
+        $out .= "//<![CDATA[\n";
347
+        $out .= $js;
348
+        $out .= "\n//]]>";
349
+        $out .= "</script>\n";
350
+
351
+        return $out;
352
+    }
353
+
354
+    /**
355
+     * Returns the configuration array (global and instance specific settings are merged into one array).
356
+     *
357
+     * @param $config (array) The specific configurations to apply to editor instance.
358
+     * @param $events (array) Event listeners for editor instance.
359
+     */
360
+    private function configSettings($config = array(), $events = array())
361
+    {
362
+        $_config = $this->config;
363
+        $_events = $this->events;
364
+
365
+        if (is_array($config) && !empty($config)) {
366
+            $_config = array_merge($_config, $config);
367
+        }
368
+
369
+        if (is_array($events) && !empty($events)) {
370
+            foreach ($events as $eventName => $code) {
371
+                if (!isset($_events[$eventName])) {
372
+                    $_events[$eventName] = array();
373
+                }
374
+                if (!in_array($code, $_events[$eventName])) {
375
+                    $_events[$eventName][] = $code;
376
+                }
377
+            }
378
+        }
379
+
380
+        if (!empty($_events)) {
381
+            foreach($_events as $eventName => $handlers) {
382
+                if (empty($handlers)) {
383
+                    continue;
384
+                }
385
+                else if (count($handlers) == 1) {
386
+                    $_config['on'][$eventName] = '@@'.$handlers[0];
387
+                }
388
+                else {
389
+                    $_config['on'][$eventName] = '@@function (ev){';
390
+                    foreach ($handlers as $handler => $code) {
391
+                        $_config['on'][$eventName] .= '('.$code.')(ev);';
392
+                    }
393
+                    $_config['on'][$eventName] .= '}';
394
+                }
395
+            }
396
+        }
397
+
398
+        return $_config;
399
+    }
400
+
401
+    /**
402
+     * Return global event handlers.
403
+     */
404
+    private function returnGlobalEvents()
405
+    {
406
+        static $returnedEvents;
407
+        $out = "";
408
+
409
+        if (!isset($returnedEvents)) {
410
+            $returnedEvents = array();
411
+        }
412
+
413
+        if (!empty($this->globalEvents)) {
414
+            foreach ($this->globalEvents as $eventName => $handlers) {
415
+                foreach ($handlers as $handler => $code) {
416
+                    if (!isset($returnedEvents[$eventName])) {
417
+                        $returnedEvents[$eventName] = array();
418
+                    }
419
+                    // Return only new events
420
+                    if (!in_array($code, $returnedEvents[$eventName])) {
421
+                        $out .= ($code ? "\n" : "") . "CKEDITOR.on('". $eventName ."', $code);";
422
+                        $returnedEvents[$eventName][] = $code;
423
+                    }
424
+                }
425
+            }
426
+        }
427
+
428
+        return $out;
429
+    }
430
+
431
+    /**
432
+     * Initializes CKEditor (executed only once).
433
+     */
434
+    private function init()
435
+    {
436
+        static $initComplete;
437
+        $out = "";
438
+
439
+        if (!empty($initComplete)) {
440
+            return "";
441
+        }
442
+
443
+        if ($this->initialized) {
444
+            $initComplete = true;
445
+            return "";
446
+        }
447
+
448
+        $args = "";
449
+        $ckeditorPath = $this->ckeditorPath();
450
+
451
+        if (!empty($this->timestamp) && $this->timestamp != "%"."TIMESTAMP%") {
452
+            $args = '?t=' . $this->timestamp;
453
+        }
454
+
455
+        // Skip relative paths...
456
+        if (strpos($ckeditorPath, '..') !== 0) {
457
+            $out .= $this->script("window.CKEDITOR_BASEPATH='". $ckeditorPath ."';");
458
+        }
459
+
460
+        $out .= "<script type=\"text/javascript\" src=\"" . $ckeditorPath . 'ckeditor.js' . $args . "\"></script>\n";
461
+
462
+        $extraCode = "";
463
+        if ($this->timestamp != self::timestamp) {
464
+            $extraCode .= ($extraCode ? "\n" : "") . "CKEDITOR.timestamp = '". $this->timestamp ."';";
465
+        }
466
+        if ($extraCode) {
467
+            $out .= $this->script($extraCode);
468
+        }
469
+
470
+        $initComplete = $this->initialized = true;
471
+
472
+        return $out;
473
+    }
474
+
475
+    /**
476
+     * Return path to ckeditor.js.
477
+     */
478
+    private function ckeditorPath()
479
+    {
480
+        if (!empty($this->basePath)) {
481
+            return $this->basePath;
482
+        }
483
+
484
+        /**
485
+         * The absolute pathname of the currently executing script.
486
+         * Note: If a script is executed with the CLI, as a relative path, such as file.php or ../file.php,
487
+         * $_SERVER['SCRIPT_FILENAME'] will contain the relative path specified by the user.
488
+         */
489
+        if (isset($_SERVER['SCRIPT_FILENAME'])) {
490
+            $realPath = dirname($_SERVER['SCRIPT_FILENAME']);
491
+        }
492
+        else {
493
+            /**
494
+             * realpath - Returns canonicalized absolute pathname
495
+             */
496
+            $realPath = realpath( './' ) ;
497
+        }
498
+
499
+        /**
500
+         * The filename of the currently executing script, relative to the document root.
501
+         * For instance, $_SERVER['PHP_SELF'] in a script at the address http://example.com/test.php/foo.bar
502
+         * would be /test.php/foo.bar.
503
+         */
504
+        $selfPath = dirname($_SERVER['PHP_SELF']);
505
+        $file = str_replace("\\", "/", __FILE__);
506
+
507
+        if (!$selfPath || !$realPath || !$file) {
508
+            return "/ckeditor/";
509
+        }
510
+
511
+        $documentRoot = substr($realPath, 0, strlen($realPath) - strlen($selfPath));
512
+        $fileUrl = substr($file, strlen($documentRoot));
513
+        $ckeditorUrl = str_replace("ckeditor_php5.php", "", $fileUrl);
514
+
515
+        return $ckeditorUrl;
516
+    }
517
+
518
+    /**
519
+     * This little function provides a basic JSON support.
520
+     *
521
+     * @param mixed $val
522
+     * @return string
523
+     */
524
+    private function jsEncode($val)
525
+    {
526
+        if (is_null($val)) {
527
+            return 'null';
528
+        }
529
+        if (is_bool($val)) {
530
+            return $val ? 'true' : 'false';
531
+        }
532
+        if (is_int($val)) {
533
+            return $val;
534
+        }
535
+        if (is_float($val)) {
536
+            return str_replace(',', '.', $val);
537
+        }
538
+        if (is_array($val) || is_object($val)) {
539
+            if (is_array($val) && (array_keys($val) === range(0,count($val)-1))) {
540
+                return '[' . implode(',', array_map(array($this, 'jsEncode'), $val)) . ']';
541
+            }
542
+            $temp = array();
543
+            foreach ($val as $k => $v){
544
+                $temp[] = $this->jsEncode("{$k}") . ':' . $this->jsEncode($v);
545
+            }
546
+            return '{' . implode(',', $temp) . '}';
547
+        }
548
+        // String otherwise
549
+        if (strpos($val, '@@') === 0)
550
+            return substr($val, 2);
551
+        if (strtoupper(substr($val, 0, 9)) == 'CKEDITOR.')
552
+            return $val;
553
+
554
+        return '"' . str_replace(array("\\", "/", "\n", "\t", "\r", "\x08", "\x0c", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'), $val) . '"';
555
+    }
556 556
 }
Please login to merge, or discard this patch.
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -73,7 +73,7 @@  discard block
 block discarded – undo
73 73
 	 * When %CKEditor is created with the editor() method, a HTML &lt;textarea&gt; element is created,
74 74
 	 * it will be displayed to anyone with JavaScript disabled or with incompatible browser.
75 75
 	 */
76
-	public $textareaAttributes = array( "rows" => 8, "cols" => 60 );
76
+	public $textareaAttributes = array("rows" => 8, "cols" => 60);
77 77
 	/**
78 78
 	 * A string indicating the creation date of %CKEditor.
79 79
 	 * Do not change it unless you want to force browsers to not use previously cached version of %CKEditor.
@@ -132,9 +132,9 @@  discard block
 block discarded – undo
132 132
 	{
133 133
 		$attr = "";
134 134
 		foreach ($this->textareaAttributes as $key => $val) {
135
-			$attr.= " " . $key . '="' . str_replace('"', '&quot;', $val) . '"';
135
+			$attr .= " ".$key.'="'.str_replace('"', '&quot;', $val).'"';
136 136
 		}
137
-		$out = "<textarea name=\"" . $name . "\"" . $attr . ">" . htmlspecialchars($value) . "</textarea>\n";
137
+		$out = "<textarea name=\"".$name."\"".$attr.">".htmlspecialchars($value)."</textarea>\n";
138 138
 		if (!$this->initialized) {
139 139
 			$out .= $this->init();
140 140
 		}
@@ -235,11 +235,11 @@  discard block
 block discarded – undo
235 235
 			$classDetection = "";
236 236
 			$js .= "CKEDITOR.replaceAll( function(textarea, config) {\n";
237 237
 			if (!empty($className)) {
238
-				$js .= "	var classRegex = new RegExp('(?:^| )' + '". $className ."' + '(?:$| )');\n";
238
+				$js .= "	var classRegex = new RegExp('(?:^| )' + '".$className."' + '(?:$| )');\n";
239 239
 				$js .= "	if (!classRegex.test(textarea.className))\n";
240 240
 				$js .= "		return false;\n";
241 241
 			}
242
-			$js .= "	CKEDITOR.tools.extend(config, ". $this->jsEncode($_config) .", true);";
242
+			$js .= "	CKEDITOR.tools.extend(config, ".$this->jsEncode($_config).", true);";
243 243
 			$js .= "} );";
244 244
 
245 245
 		}
@@ -378,7 +378,7 @@  discard block
 block discarded – undo
378 378
 		}
379 379
 
380 380
 		if (!empty($_events)) {
381
-			foreach($_events as $eventName => $handlers) {
381
+			foreach ($_events as $eventName => $handlers) {
382 382
 				if (empty($handlers)) {
383 383
 					continue;
384 384
 				}
@@ -418,7 +418,7 @@  discard block
 block discarded – undo
418 418
 					}
419 419
 					// Return only new events
420 420
 					if (!in_array($code, $returnedEvents[$eventName])) {
421
-						$out .= ($code ? "\n" : "") . "CKEDITOR.on('". $eventName ."', $code);";
421
+						$out .= ($code ? "\n" : "")."CKEDITOR.on('".$eventName."', $code);";
422 422
 						$returnedEvents[$eventName][] = $code;
423 423
 					}
424 424
 				}
@@ -449,19 +449,19 @@  discard block
 block discarded – undo
449 449
 		$ckeditorPath = $this->ckeditorPath();
450 450
 
451 451
 		if (!empty($this->timestamp) && $this->timestamp != "%"."TIMESTAMP%") {
452
-			$args = '?t=' . $this->timestamp;
452
+			$args = '?t='.$this->timestamp;
453 453
 		}
454 454
 
455 455
 		// Skip relative paths...
456 456
 		if (strpos($ckeditorPath, '..') !== 0) {
457
-			$out .= $this->script("window.CKEDITOR_BASEPATH='". $ckeditorPath ."';");
457
+			$out .= $this->script("window.CKEDITOR_BASEPATH='".$ckeditorPath."';");
458 458
 		}
459 459
 
460
-		$out .= "<script type=\"text/javascript\" src=\"" . $ckeditorPath . 'ckeditor.js' . $args . "\"></script>\n";
460
+		$out .= "<script type=\"text/javascript\" src=\"".$ckeditorPath.'ckeditor.js'.$args."\"></script>\n";
461 461
 
462 462
 		$extraCode = "";
463 463
 		if ($this->timestamp != self::timestamp) {
464
-			$extraCode .= ($extraCode ? "\n" : "") . "CKEDITOR.timestamp = '". $this->timestamp ."';";
464
+			$extraCode .= ($extraCode ? "\n" : "")."CKEDITOR.timestamp = '".$this->timestamp."';";
465 465
 		}
466 466
 		if ($extraCode) {
467 467
 			$out .= $this->script($extraCode);
@@ -493,7 +493,7 @@  discard block
 block discarded – undo
493 493
 			/**
494 494
 			 * realpath - Returns canonicalized absolute pathname
495 495
 			 */
496
-			$realPath = realpath( './' ) ;
496
+			$realPath = realpath('./');
497 497
 		}
498 498
 
499 499
 		/**
@@ -536,14 +536,14 @@  discard block
 block discarded – undo
536 536
 			return str_replace(',', '.', $val);
537 537
 		}
538 538
 		if (is_array($val) || is_object($val)) {
539
-			if (is_array($val) && (array_keys($val) === range(0,count($val)-1))) {
540
-				return '[' . implode(',', array_map(array($this, 'jsEncode'), $val)) . ']';
539
+			if (is_array($val) && (array_keys($val) === range(0, count($val) - 1))) {
540
+				return '['.implode(',', array_map(array($this, 'jsEncode'), $val)).']';
541 541
 			}
542 542
 			$temp = array();
543
-			foreach ($val as $k => $v){
544
-				$temp[] = $this->jsEncode("{$k}") . ':' . $this->jsEncode($v);
543
+			foreach ($val as $k => $v) {
544
+				$temp[] = $this->jsEncode("{$k}").':'.$this->jsEncode($v);
545 545
 			}
546
-			return '{' . implode(',', $temp) . '}';
546
+			return '{'.implode(',', $temp).'}';
547 547
 		}
548 548
 		// String otherwise
549 549
 		if (strpos($val, '@@') === 0)
@@ -551,6 +551,6 @@  discard block
 block discarded – undo
551 551
 		if (strtoupper(substr($val, 0, 9)) == 'CKEDITOR.')
552 552
 			return $val;
553 553
 
554
-		return '"' . str_replace(array("\\", "/", "\n", "\t", "\r", "\x08", "\x0c", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'), $val) . '"';
554
+		return '"'.str_replace(array("\\", "/", "\n", "\t", "\r", "\x08", "\x0c", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'), $val).'"';
555 555
 	}
556 556
 }
Please login to merge, or discard this patch.
Braces   +19 added lines, -24 removed lines patch added patch discarded remove patch
@@ -142,10 +142,11 @@  discard block
 block discarded – undo
142 142
 		$_config = $this->configSettings($config, $events);
143 143
 
144 144
 		$js = $this->returnGlobalEvents();
145
-		if (!empty($_config))
146
-			$js .= "CKEDITOR.replace('".$name."', ".$this->jsEncode($_config).");";
147
-		else
148
-			$js .= "CKEDITOR.replace('".$name."');";
145
+		if (!empty($_config)) {
146
+					$js .= "CKEDITOR.replace('".$name."', ".$this->jsEncode($_config).");";
147
+		} else {
148
+					$js .= "CKEDITOR.replace('".$name."');";
149
+		}
149 150
 
150 151
 		$out .= $this->script($js);
151 152
 
@@ -182,8 +183,7 @@  discard block
 block discarded – undo
182 183
 		$js = $this->returnGlobalEvents();
183 184
 		if (!empty($_config)) {
184 185
 			$js .= "CKEDITOR.replace('".$id."', ".$this->jsEncode($_config).");";
185
-		}
186
-		else {
186
+		} else {
187 187
 			$js .= "CKEDITOR.replace('".$id."');";
188 188
 		}
189 189
 		$out .= $this->script($js);
@@ -226,12 +226,10 @@  discard block
 block discarded – undo
226 226
 		if (empty($_config)) {
227 227
 			if (empty($className)) {
228 228
 				$js .= "CKEDITOR.replaceAll();";
229
-			}
230
-			else {
229
+			} else {
231 230
 				$js .= "CKEDITOR.replaceAll('".$className."');";
232 231
 			}
233
-		}
234
-		else {
232
+		} else {
235 233
 			$classDetection = "";
236 234
 			$js .= "CKEDITOR.replaceAll( function(textarea, config) {\n";
237 235
 			if (!empty($className)) {
@@ -289,8 +287,7 @@  discard block
 block discarded – undo
289 287
 	{
290 288
 		if (!empty($event)) {
291 289
 			$this->events[$event] = array();
292
-		}
293
-		else {
290
+		} else {
294 291
 			$this->events = array();
295 292
 		}
296 293
 	}
@@ -329,8 +326,7 @@  discard block
 block discarded – undo
329 326
 	{
330 327
 		if (!empty($event)) {
331 328
 			$this->globalEvents[$event] = array();
332
-		}
333
-		else {
329
+		} else {
334 330
 			$this->globalEvents = array();
335 331
 		}
336 332
 	}
@@ -381,11 +377,9 @@  discard block
 block discarded – undo
381 377
 			foreach($_events as $eventName => $handlers) {
382 378
 				if (empty($handlers)) {
383 379
 					continue;
384
-				}
385
-				else if (count($handlers) == 1) {
380
+				} else if (count($handlers) == 1) {
386 381
 					$_config['on'][$eventName] = '@@'.$handlers[0];
387
-				}
388
-				else {
382
+				} else {
389 383
 					$_config['on'][$eventName] = '@@function (ev){';
390 384
 					foreach ($handlers as $handler => $code) {
391 385
 						$_config['on'][$eventName] .= '('.$code.')(ev);';
@@ -488,8 +482,7 @@  discard block
 block discarded – undo
488 482
 		 */
489 483
 		if (isset($_SERVER['SCRIPT_FILENAME'])) {
490 484
 			$realPath = dirname($_SERVER['SCRIPT_FILENAME']);
491
-		}
492
-		else {
485
+		} else {
493 486
 			/**
494 487
 			 * realpath - Returns canonicalized absolute pathname
495 488
 			 */
@@ -546,10 +539,12 @@  discard block
 block discarded – undo
546 539
 			return '{' . implode(',', $temp) . '}';
547 540
 		}
548 541
 		// String otherwise
549
-		if (strpos($val, '@@') === 0)
550
-			return substr($val, 2);
551
-		if (strtoupper(substr($val, 0, 9)) == 'CKEDITOR.')
552
-			return $val;
542
+		if (strpos($val, '@@') === 0) {
543
+					return substr($val, 2);
544
+		}
545
+		if (strtoupper(substr($val, 0, 9)) == 'CKEDITOR.') {
546
+					return $val;
547
+		}
553 548
 
554 549
 		return '"' . str_replace(array("\\", "/", "\n", "\t", "\r", "\x08", "\x0c", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'), $val) . '"';
555 550
 	}
Please login to merge, or discard this patch.