Completed
Push — master ( 6e38a6...4ed690 )
by Christian
10:37
created
drupal/sites/all/themes/zen/template.php 2 patches
Doc Comments   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -32,7 +32,7 @@  discard block
 block discarded – undo
32 32
  * @param $breadcrumb
33 33
  *   An array containing the breadcrumb links.
34 34
  * @return
35
- *   A string containing the breadcrumb output.
35
+ string   A string containing the breadcrumb output.
36 36
  */
37 37
 function zen_breadcrumb($breadcrumb) {
38 38
   // Determine if we are to display the breadcrumb.
@@ -87,7 +87,7 @@  discard block
 block discarded – undo
87 87
  *   See http://juicystudio.com/article/screen-readers-display-none.php
88 88
  *   and http://www.w3.org/TR/WCAG-TECHS/H42.html for more information.
89 89
  * @return
90
- *   A string containing an unordered list of links.
90
+ string   A string containing an unordered list of links.
91 91
  */
92 92
 function zen_links($links, $attributes = array('class' => 'links'), $heading = '') {
93 93
   global $language;
@@ -600,10 +600,10 @@  discard block
 block discarded – undo
600 600
    * Do not pass one string containing multiple classes as they will be
601 601
    * incorrectly concatenated with dashes, i.e. "one two" will become "one-two".
602 602
    *
603
-   * @param $class
603
+   * @param string $class
604 604
    *   The class name to clean.
605 605
    * @return
606
-   *   The cleaned class name.
606
+   string   The cleaned class name.
607 607
    */
608 608
   function drupal_html_class($class) {
609 609
     // By default, we filter using Drupal's coding standards.
@@ -633,7 +633,7 @@  discard block
 block discarded – undo
633 633
    * @param $id
634 634
    *   The ID to clean.
635 635
    * @return
636
-   *   The cleaned ID.
636
+   string   The cleaned ID.
637 637
    */
638 638
   function drupal_html_id($id) {
639 639
     $id = strtr(drupal_strtolower($id), array(' ' => '-', '_' => '-', '[' => '-', ']' => ''));
Please login to merge, or discard this patch.
Indentation   +242 added lines, -242 removed lines patch added patch discarded remove patch
@@ -13,7 +13,7 @@  discard block
 block discarded – undo
13 13
 
14 14
 // Auto-rebuild the theme registry during theme development.
15 15
 if (theme_get_setting('zen_rebuild_registry')) {
16
-  drupal_rebuild_theme_registry();
16
+    drupal_rebuild_theme_registry();
17 17
 }
18 18
 
19 19
 
@@ -21,9 +21,9 @@  discard block
 block discarded – undo
21 21
  * Implements HOOK_theme().
22 22
  */
23 23
 function zen_theme(&$existing, $type, $theme, $path) {
24
-  // When #341140 is fixed, replace _zen_path() with drupal_get_path().
25
-  include_once './' . _zen_path() . '/zen-internals/template.theme-registry.inc';
26
-  return _zen_theme($existing, $type, $theme, $path);
24
+    // When #341140 is fixed, replace _zen_path() with drupal_get_path().
25
+    include_once './' . _zen_path() . '/zen-internals/template.theme-registry.inc';
26
+    return _zen_theme($existing, $type, $theme, $path);
27 27
 }
28 28
 
29 29
 /**
@@ -35,33 +35,33 @@  discard block
 block discarded – undo
35 35
  *   A string containing the breadcrumb output.
36 36
  */
37 37
 function zen_breadcrumb($breadcrumb) {
38
-  // Determine if we are to display the breadcrumb.
39
-  $show_breadcrumb = theme_get_setting('zen_breadcrumb');
40
-  if ($show_breadcrumb == 'yes' || $show_breadcrumb == 'admin' && arg(0) == 'admin') {
38
+    // Determine if we are to display the breadcrumb.
39
+    $show_breadcrumb = theme_get_setting('zen_breadcrumb');
40
+    if ($show_breadcrumb == 'yes' || $show_breadcrumb == 'admin' && arg(0) == 'admin') {
41 41
 
42 42
     // Optionally get rid of the homepage link.
43 43
     $show_breadcrumb_home = theme_get_setting('zen_breadcrumb_home');
44 44
     if (!$show_breadcrumb_home) {
45
-      array_shift($breadcrumb);
45
+        array_shift($breadcrumb);
46 46
     }
47 47
 
48 48
     // Return the breadcrumb with separators.
49 49
     if (!empty($breadcrumb)) {
50
-      $breadcrumb_separator = theme_get_setting('zen_breadcrumb_separator');
51
-      $trailing_separator = $title = '';
52
-      if (theme_get_setting('zen_breadcrumb_title')) {
50
+        $breadcrumb_separator = theme_get_setting('zen_breadcrumb_separator');
51
+        $trailing_separator = $title = '';
52
+        if (theme_get_setting('zen_breadcrumb_title')) {
53 53
         if ($title = drupal_get_title()) {
54
-          $trailing_separator = $breadcrumb_separator;
54
+            $trailing_separator = $breadcrumb_separator;
55 55
         }
56
-      }
57
-      elseif (theme_get_setting('zen_breadcrumb_trailing')) {
56
+        }
57
+        elseif (theme_get_setting('zen_breadcrumb_trailing')) {
58 58
         $trailing_separator = $breadcrumb_separator;
59
-      }
60
-      return '<div class="breadcrumb">' . implode($breadcrumb_separator, $breadcrumb) . "$trailing_separator$title</div>";
59
+        }
60
+        return '<div class="breadcrumb">' . implode($breadcrumb_separator, $breadcrumb) . "$trailing_separator$title</div>";
61 61
     }
62
-  }
63
-  // Otherwise, return an empty string.
64
-  return '';
62
+    }
63
+    // Otherwise, return an empty string.
64
+    return '';
65 65
 }
66 66
 
67 67
 /**
@@ -90,27 +90,27 @@  discard block
 block discarded – undo
90 90
  *   A string containing an unordered list of links.
91 91
  */
92 92
 function zen_links($links, $attributes = array('class' => 'links'), $heading = '') {
93
-  global $language;
94
-  $output = '';
93
+    global $language;
94
+    $output = '';
95 95
 
96
-  if (count($links) > 0) {
96
+    if (count($links) > 0) {
97 97
     // Treat the heading first if it is present to prepend it to the
98 98
     // list of links.
99 99
     if (!empty($heading)) {
100
-      if (is_string($heading)) {
100
+        if (is_string($heading)) {
101 101
         // Prepare the array that will be used when the passed heading
102 102
         // is a string.
103 103
         $heading = array(
104
-          'text' => $heading,
105
-          // Set the default level of the heading.
106
-          'level' => 'h2',
104
+            'text' => $heading,
105
+            // Set the default level of the heading.
106
+            'level' => 'h2',
107 107
         );
108
-      }
109
-      $output .= '<' . $heading['level'];
110
-      if (!empty($heading['class'])) {
108
+        }
109
+        $output .= '<' . $heading['level'];
110
+        if (!empty($heading['class'])) {
111 111
         $output .= drupal_attributes(array('class' => $heading['class']));
112
-      }
113
-      $output .= '>' . check_plain($heading['text']) . '</' . $heading['level'] . '>';
112
+        }
113
+        $output .= '>' . check_plain($heading['text']) . '</' . $heading['level'] . '>';
114 114
     }
115 115
 
116 116
     $output .= '<ul'. drupal_attributes($attributes) .'>';
@@ -119,89 +119,89 @@  discard block
 block discarded – undo
119 119
     $i = 1;
120 120
 
121 121
     foreach ($links as $key => $link) {
122
-      $class = $key;
122
+        $class = $key;
123 123
 
124
-      // Add first, last and active classes to the list of links to help out themers.
125
-      if ($i == 1) {
124
+        // Add first, last and active classes to the list of links to help out themers.
125
+        if ($i == 1) {
126 126
         $class .= ' first';
127
-      }
128
-      if ($i == $num_links) {
127
+        }
128
+        if ($i == $num_links) {
129 129
         $class .= ' last';
130
-      }
131
-      if (isset($link['href']) && ($link['href'] == $_GET['q'] || ($link['href'] == '<front>' && drupal_is_front_page()))
130
+        }
131
+        if (isset($link['href']) && ($link['href'] == $_GET['q'] || ($link['href'] == '<front>' && drupal_is_front_page()))
132 132
           && (empty($link['language']) || $link['language']->language == $language->language)) {
133 133
         $class .= ' active';
134
-      }
135
-      $output .= '<li'. drupal_attributes(array('class' => $class)) .'>';
134
+        }
135
+        $output .= '<li'. drupal_attributes(array('class' => $class)) .'>';
136 136
 
137
-      if (isset($link['href'])) {
137
+        if (isset($link['href'])) {
138 138
         // Pass in $link as $options, they share the same keys.
139 139
         $output .= l($link['title'], $link['href'], $link);
140
-      }
141
-      else if (!empty($link['title'])) {
140
+        }
141
+        else if (!empty($link['title'])) {
142 142
         // Some links are actually not links, but we wrap these in <span> for adding title and class attributes
143 143
         if (empty($link['html'])) {
144
-          $link['title'] = check_plain($link['title']);
144
+            $link['title'] = check_plain($link['title']);
145 145
         }
146 146
         $span_attributes = '';
147 147
         if (isset($link['attributes'])) {
148
-          $span_attributes = drupal_attributes($link['attributes']);
148
+            $span_attributes = drupal_attributes($link['attributes']);
149 149
         }
150 150
         $output .= '<span'. $span_attributes .'>'. $link['title'] .'</span>';
151
-      }
151
+        }
152 152
 
153
-      $i++;
154
-      $output .= "</li>\n";
153
+        $i++;
154
+        $output .= "</li>\n";
155 155
     }
156 156
 
157 157
     $output .= '</ul>';
158
-  }
158
+    }
159 159
 
160
-  return $output;
160
+    return $output;
161 161
 }
162 162
 
163 163
 /**
164 164
  * Implements theme_menu_item_link()
165 165
  */
166 166
 function zen_menu_item_link($link) {
167
-  if (empty($link['localized_options'])) {
167
+    if (empty($link['localized_options'])) {
168 168
     $link['localized_options'] = array();
169
-  }
169
+    }
170 170
 
171
-  // If an item is a LOCAL TASK, render it as a tab
172
-  if ($link['type'] & MENU_IS_LOCAL_TASK) {
171
+    // If an item is a LOCAL TASK, render it as a tab
172
+    if ($link['type'] & MENU_IS_LOCAL_TASK) {
173 173
     $link['title'] = '<span class="tab">' . check_plain($link['title']) . '</span>';
174 174
     $link['localized_options']['html'] = TRUE;
175
-  }
175
+    }
176 176
 
177
-  return l($link['title'], $link['href'], $link['localized_options']);
177
+    return l($link['title'], $link['href'], $link['localized_options']);
178 178
 }
179 179
 
180 180
 /**
181 181
  * Duplicate of theme_menu_local_tasks() but adds clearfix to tabs.
182 182
  */
183 183
 function zen_menu_local_tasks() {
184
-  $output = '';
184
+    $output = '';
185 185
 
186
-  // CTools requires a different set of local task functions.
187
-  if (module_exists('ctools')) {
186
+    // CTools requires a different set of local task functions.
187
+    if (module_exists('ctools')) {
188 188
     ctools_include('menu');
189 189
     $primary = ctools_menu_primary_local_tasks();
190 190
     $secondary = ctools_menu_secondary_local_tasks();
191
-  }
192
-  else {
191
+    }
192
+    else {
193 193
     $primary = menu_primary_local_tasks();
194 194
     $secondary = menu_secondary_local_tasks();
195
-  }
195
+    }
196 196
 
197
-  if ($primary) {
197
+    if ($primary) {
198 198
     $output .= '<ul class="tabs primary clearfix">' . $primary . '</ul>';
199
-  }
200
-  if ($secondary) {
199
+    }
200
+    if ($secondary) {
201 201
     $output .= '<ul class="tabs secondary clearfix">' . $secondary . '</ul>';
202
-  }
202
+    }
203 203
 
204
-  return $output;
204
+    return $output;
205 205
 }
206 206
 
207 207
 /**
@@ -218,32 +218,32 @@  discard block
 block discarded – undo
218 218
  * @see zen_show_blocks_discovery()
219 219
  */
220 220
 function zen_blocks($region, $show_blocks = NULL) {
221
-  // Since Drupal 6 doesn't pass $show_blocks to theme_blocks, we manually call
222
-  // theme('blocks', NULL, $show_blocks) so that this function can remember the
223
-  // value on later calls.
224
-  static $render_sidebars = TRUE;
225
-  if (!is_null($show_blocks)) {
221
+    // Since Drupal 6 doesn't pass $show_blocks to theme_blocks, we manually call
222
+    // theme('blocks', NULL, $show_blocks) so that this function can remember the
223
+    // value on later calls.
224
+    static $render_sidebars = TRUE;
225
+    if (!is_null($show_blocks)) {
226 226
     $render_sidebars = $show_blocks;
227
-  }
227
+    }
228 228
 
229
-  // If zen_blocks was called with a NULL region, its likely we were just
230
-  // setting the $render_sidebars static variable.
231
-  if ($region) {
229
+    // If zen_blocks was called with a NULL region, its likely we were just
230
+    // setting the $render_sidebars static variable.
231
+    if ($region) {
232 232
     $output = '';
233 233
 
234 234
     // If $renders_sidebars is FALSE, don't render any region whose name begins
235 235
     // with "sidebar_".
236 236
     if ($render_sidebars || (strpos($region, 'sidebar_') !== 0)) {
237
-      // Allow context module to set blocks.
238
-      if (function_exists('context_blocks')) {
237
+        // Allow context module to set blocks.
238
+        if (function_exists('context_blocks')) {
239 239
         $output = context_blocks($region);
240
-      }
241
-      else {
240
+        }
241
+        else {
242 242
         foreach (block_list($region) as $key => $block) {
243
-          // $key == module_delta
244
-          $output .= theme('block', $block);
243
+            // $key == module_delta
244
+            $output .= theme('block', $block);
245
+        }
245 246
         }
246
-      }
247 247
     }
248 248
 
249 249
     // Add any content assigned to this region through drupal_set_content() calls.
@@ -255,11 +255,11 @@  discard block
 block discarded – undo
255 255
     // Set the theme hook suggestions.
256 256
     $hook = array('region_' . $region);
257 257
     if (strpos($region, 'sidebar_') === 0) {
258
-      $hook[] = 'region_sidebar';
258
+        $hook[] = 'region_sidebar';
259 259
     }
260 260
     $hook[] = 'region';
261 261
     return $output ? theme($hook, $elements) : '';
262
-  }
262
+    }
263 263
 }
264 264
 
265 265
 /**
@@ -271,11 +271,11 @@  discard block
 block discarded – undo
271 271
  * @see zen_blocks()
272 272
  */
273 273
 function zen_show_blocks_discovery(&$vars) {
274
-  if ($vars['show_blocks'] == FALSE) {
274
+    if ($vars['show_blocks'] == FALSE) {
275 275
     // Allow zen_blocks() to statically cache the $show_blocks variable. A TRUE
276 276
     // value is assumed, so we only need to override when $show_blocks is FALSE.
277 277
     theme('blocks', NULL, FALSE);
278
-  }
278
+    }
279 279
 }
280 280
 
281 281
 /**
@@ -287,25 +287,25 @@  discard block
 block discarded – undo
287 287
  *   The name of the template being rendered.
288 288
  */
289 289
 function zen_preprocess(&$vars, $hook) {
290
-  // In D6, the page.tpl uses a different variable name to hold the classes.
291
-  $key = ($hook == 'page' || $hook == 'maintenance_page') ? 'body_classes' : 'classes';
290
+    // In D6, the page.tpl uses a different variable name to hold the classes.
291
+    $key = ($hook == 'page' || $hook == 'maintenance_page') ? 'body_classes' : 'classes';
292 292
 
293
-  // Create a D7-standard classes_array variable.
294
-  if (array_key_exists($key, $vars)) {
293
+    // Create a D7-standard classes_array variable.
294
+    if (array_key_exists($key, $vars)) {
295 295
     // Views (and possibly other modules) have templates with a $classes
296 296
     // variable that isn't a string, so we leave those variables alone.
297 297
     if (is_string($vars[$key])) {
298
-      $vars['classes_array'] = explode(' ', $hook . ' ' . $vars[$key]);
299
-      unset($vars[$key]);
298
+        $vars['classes_array'] = explode(' ', $hook . ' ' . $vars[$key]);
299
+        unset($vars[$key]);
300
+    }
300 301
     }
301
-  }
302
-  else {
302
+    else {
303 303
     $vars['classes_array'] = array($hook);
304
-  }
305
-  // Add support for Skinr
306
-  if (!empty($vars['skinr']) && array_key_exists('classes_array', $vars)) {
304
+    }
305
+    // Add support for Skinr
306
+    if (!empty($vars['skinr']) && array_key_exists('classes_array', $vars)) {
307 307
     $vars['classes_array'][] = $vars['skinr'];
308
-  }
308
+    }
309 309
 }
310 310
 
311 311
 /**
@@ -317,82 +317,82 @@  discard block
 block discarded – undo
317 317
  *   The name of the template being rendered ("page" in this case.)
318 318
  */
319 319
 function zen_preprocess_page(&$vars, $hook) {
320
-  // If the user is silly and enables Zen as the theme, add some styles.
321
-  if ($GLOBALS['theme'] == 'zen') {
320
+    // If the user is silly and enables Zen as the theme, add some styles.
321
+    if ($GLOBALS['theme'] == 'zen') {
322 322
     include_once './' . _zen_path() . '/zen-internals/template.zen.inc';
323 323
     _zen_preprocess_page($vars, $hook);
324
-  }
325
-  // Add conditional stylesheets.
326
-  elseif (!module_exists('conditional_styles')) {
324
+    }
325
+    // Add conditional stylesheets.
326
+    elseif (!module_exists('conditional_styles')) {
327 327
     $language = $GLOBALS['language']->direction == LANGUAGE_RTL ? '_rtl' : '';
328 328
     $vars['conditional_styles'] = variable_get('conditional_styles_' . $GLOBALS['theme'] . $language, '');
329 329
     $vars['styles'] .= $vars['conditional_styles'];
330
-  }
330
+    }
331 331
 
332
-  // Classes for body element. Allows advanced theming based on context
333
-  // (home page, node of certain type, etc.)
334
-  // Remove the mostly useless page-ARG0 class.
335
-  if ($index = array_search(preg_replace('![^abcdefghijklmnopqrstuvwxyz0-9-_]+!s', '', 'page-'. drupal_strtolower(arg(0))), $vars['classes_array'])) {
332
+    // Classes for body element. Allows advanced theming based on context
333
+    // (home page, node of certain type, etc.)
334
+    // Remove the mostly useless page-ARG0 class.
335
+    if ($index = array_search(preg_replace('![^abcdefghijklmnopqrstuvwxyz0-9-_]+!s', '', 'page-'. drupal_strtolower(arg(0))), $vars['classes_array'])) {
336 336
     unset($vars['classes_array'][$index]);
337
-  }
338
-  if (!$vars['is_front']) {
337
+    }
338
+    if (!$vars['is_front']) {
339 339
     // Add unique class for each page.
340 340
     $path = drupal_get_path_alias($_GET['q']);
341 341
     $vars['classes_array'][] = drupal_html_class('page-' . $path);
342 342
     // Add unique class for each website section.
343 343
     list($section, ) = explode('/', $path, 2);
344 344
     if (arg(0) == 'node') {
345
-      if (arg(1) == 'add') {
345
+        if (arg(1) == 'add') {
346 346
         $section = 'node-add';
347
-      }
348
-      elseif (is_numeric(arg(1)) && (arg(2) == 'edit' || arg(2) == 'delete')) {
347
+        }
348
+        elseif (is_numeric(arg(1)) && (arg(2) == 'edit' || arg(2) == 'delete')) {
349 349
         $section = 'node-' . arg(2);
350
-      }
350
+        }
351 351
     }
352 352
     $vars['classes_array'][] = drupal_html_class('section-' . $section);
353
-  }
354
-  if (theme_get_setting('zen_wireframes')) {
353
+    }
354
+    if (theme_get_setting('zen_wireframes')) {
355 355
     $vars['classes_array'][] = 'with-wireframes'; // Optionally add the wireframes style.
356
-  }
357
-  // We need to re-do the $layout and body classes because
358
-  // template_preprocess_page() assumes sidebars are named 'left' and 'right'.
359
-  $vars['layout'] = 'none';
360
-  if (!empty($vars['sidebar_first'])) {
356
+    }
357
+    // We need to re-do the $layout and body classes because
358
+    // template_preprocess_page() assumes sidebars are named 'left' and 'right'.
359
+    $vars['layout'] = 'none';
360
+    if (!empty($vars['sidebar_first'])) {
361 361
     $vars['layout'] = 'first';
362
-  }
363
-  if (!empty($vars['sidebar_second'])) {
362
+    }
363
+    if (!empty($vars['sidebar_second'])) {
364 364
     $vars['layout'] = ($vars['layout'] == 'first') ? 'both' : 'second';
365
-  }
366
-  // If the layout is 'none', then template_preprocess_page() will already have
367
-  // set a 'no-sidebars' class since it won't find a 'left' or 'right' sidebar.
368
-  if ($vars['layout'] != 'none') {
365
+    }
366
+    // If the layout is 'none', then template_preprocess_page() will already have
367
+    // set a 'no-sidebars' class since it won't find a 'left' or 'right' sidebar.
368
+    if ($vars['layout'] != 'none') {
369 369
     // Remove the incorrect 'no-sidebars' class.
370 370
     if ($index = array_search('no-sidebars', $vars['classes_array'])) {
371
-      unset($vars['classes_array'][$index]);
371
+        unset($vars['classes_array'][$index]);
372 372
     }
373 373
     // Set the proper layout body classes.
374 374
     if ($vars['layout'] == 'both') {
375
-      $vars['classes_array'][] = 'two-sidebars';
375
+        $vars['classes_array'][] = 'two-sidebars';
376 376
     }
377 377
     else {
378
-      $vars['classes_array'][] = 'one-sidebar';
379
-      $vars['classes_array'][] = 'sidebar-' . $vars['layout'];
378
+        $vars['classes_array'][] = 'one-sidebar';
379
+        $vars['classes_array'][] = 'sidebar-' . $vars['layout'];
380
+    }
380 381
     }
381
-  }
382
-  // Store the menu item since it has some useful information.
383
-  $vars['menu_item'] = menu_get_item();
384
-  switch ($vars['menu_item']['page_callback']) {
382
+    // Store the menu item since it has some useful information.
383
+    $vars['menu_item'] = menu_get_item();
384
+    switch ($vars['menu_item']['page_callback']) {
385 385
     case 'views_page':
386 386
       // Is this a Views page?
387 387
       $vars['classes_array'][] = 'page-views';
388
-      break;
388
+        break;
389 389
     case 'page_manager_page_execute':
390 390
     case 'page_manager_node_view':
391 391
     case 'page_manager_contact_site':
392 392
       // Is this a Panels page?
393 393
       $vars['classes_array'][] = 'page-panels';
394
-      break;
395
-  }
394
+        break;
395
+    }
396 396
 }
397 397
 
398 398
 /**
@@ -404,17 +404,17 @@  discard block
 block discarded – undo
404 404
  *   The name of the template being rendered ("maintenance_page" in this case.)
405 405
  */
406 406
 function zen_preprocess_maintenance_page(&$vars, $hook) {
407
-  // If Zen is the maintenance theme, add some styles.
408
-  if ($GLOBALS['theme'] == 'zen') {
407
+    // If Zen is the maintenance theme, add some styles.
408
+    if ($GLOBALS['theme'] == 'zen') {
409 409
     include_once './' . _zen_path() . '/zen-internals/template.zen.inc';
410 410
     _zen_preprocess_page($vars, $hook);
411
-  }
412
-  // Add conditional stylesheets.
413
-  elseif (!module_exists('conditional_styles')) {
411
+    }
412
+    // Add conditional stylesheets.
413
+    elseif (!module_exists('conditional_styles')) {
414 414
     $language = $GLOBALS['language']->direction == LANGUAGE_RTL ? '_rtl' : '';
415 415
     $vars['conditional_styles'] = variable_get('conditional_styles_' . $GLOBALS['theme'] . $language, '');
416 416
     $vars['styles'] .= $vars['conditional_styles'];
417
-  }
417
+    }
418 418
 }
419 419
 
420 420
 /**
@@ -426,67 +426,67 @@  discard block
 block discarded – undo
426 426
  *   The name of the template being rendered ("node" in this case.)
427 427
  */
428 428
 function zen_preprocess_node(&$vars, $hook) {
429
-  // Create the build_mode variable.
430
-  switch ($vars['node']->build_mode) {
429
+    // Create the build_mode variable.
430
+    switch ($vars['node']->build_mode) {
431 431
     case NODE_BUILD_NORMAL:
432 432
       if ($vars['node']->build_mode === NODE_BUILD_NORMAL) {
433 433
         $vars['build_mode'] = $vars['teaser'] ? 'teaser' : 'full';
434
-      }
435
-      else {
434
+        }
435
+        else {
436 436
         $vars['build_mode'] = $vars['node']->build_mode;
437
-      }
438
-      break;
437
+        }
438
+        break;
439 439
     case NODE_BUILD_PREVIEW:
440 440
       $vars['build_mode'] = 'preview';
441
-      break;
441
+        break;
442 442
     case NODE_BUILD_SEARCH_INDEX:
443 443
       $vars['build_mode'] = 'search_index';
444
-      break;
444
+        break;
445 445
     case NODE_BUILD_SEARCH_RESULT:
446 446
       $vars['build_mode'] = 'search_result';
447
-      break;
447
+        break;
448 448
     case NODE_BUILD_RSS:
449 449
       $vars['build_mode'] = 'rss';
450
-      break;
450
+        break;
451 451
     case NODE_BUILD_PRINT:
452 452
       $vars['build_mode'] = 'print';
453
-      break;
453
+        break;
454 454
     default:
455 455
       $vars['build_mode'] = $vars['node']->build_mode;
456
-  }
456
+    }
457 457
 
458
-  // Create the user_picture variable.
459
-  $vars['user_picture'] = $vars['picture'];
458
+    // Create the user_picture variable.
459
+    $vars['user_picture'] = $vars['picture'];
460 460
 
461
-  // Create the Drupal 7 $display_submitted variable.
462
-  $vars['display_submitted'] = theme_get_setting('toggle_node_info_' . $vars['node']->type);
461
+    // Create the Drupal 7 $display_submitted variable.
462
+    $vars['display_submitted'] = theme_get_setting('toggle_node_info_' . $vars['node']->type);
463 463
 
464
-  // Special classes for nodes.
465
-  // Class for node type: "node-type-page", "node-type-story", "node-type-my-custom-type", etc.
466
-  $vars['classes_array'][] = drupal_html_class('node-type-' . $vars['type']);
467
-  if ($vars['promote']) {
464
+    // Special classes for nodes.
465
+    // Class for node type: "node-type-page", "node-type-story", "node-type-my-custom-type", etc.
466
+    $vars['classes_array'][] = drupal_html_class('node-type-' . $vars['type']);
467
+    if ($vars['promote']) {
468 468
     $vars['classes_array'][] = 'node-promoted';
469
-  }
470
-  if ($vars['sticky']) {
469
+    }
470
+    if ($vars['sticky']) {
471 471
     $vars['classes_array'][] = 'node-sticky';
472
-  }
473
-  if (!$vars['status']) {
472
+    }
473
+    if (!$vars['status']) {
474 474
     $vars['classes_array'][] = 'node-unpublished';
475 475
     $vars['unpublished'] = TRUE;
476
-  }
477
-  else {
476
+    }
477
+    else {
478 478
     $vars['unpublished'] = FALSE;
479
-  }
480
-  if ($vars['uid'] && $vars['uid'] == $GLOBALS['user']->uid) {
479
+    }
480
+    if ($vars['uid'] && $vars['uid'] == $GLOBALS['user']->uid) {
481 481
     $vars['classes_array'][] = 'node-by-viewer'; // Node is authored by current user.
482
-  }
483
-  if ($vars['teaser']) {
482
+    }
483
+    if ($vars['teaser']) {
484 484
     $vars['classes_array'][] = 'node-teaser'; // Node is displayed as teaser.
485
-  }
486
-  if (isset($vars['preview'])) {
485
+    }
486
+    if (isset($vars['preview'])) {
487 487
     $vars['classes_array'][] = 'node-preview';
488
-  }
489
-  $vars['classes_array'][] = 'build-mode-' . $vars['build_mode'] ;
488
+    }
489
+    $vars['classes_array'][] = 'build-mode-' . $vars['build_mode'] ;
490 490
 }
491 491
 
492 492
 /**
@@ -498,8 +498,8 @@  discard block
 block discarded – undo
498 498
  *   The name of the template being rendered ("comment" in this case.)
499 499
  */
500 500
 function zen_preprocess_comment(&$vars, $hook) {
501
-  include_once './' . _zen_path() . '/zen-internals/template.comment.inc';
502
-  _zen_preprocess_comment($vars, $hook);
501
+    include_once './' . _zen_path() . '/zen-internals/template.comment.inc';
502
+    _zen_preprocess_comment($vars, $hook);
503 503
 }
504 504
 
505 505
 /**
@@ -511,18 +511,18 @@  discard block
 block discarded – undo
511 511
  * @see region.tpl.php
512 512
  */
513 513
 function zen_preprocess_region(&$vars, $hook) {
514
-  // Create the $content variable that templates expect.
515
-  $vars['content'] = $vars['elements']['#children'];
516
-  $vars['region'] = $vars['elements']['#region'];
514
+    // Create the $content variable that templates expect.
515
+    $vars['content'] = $vars['elements']['#children'];
516
+    $vars['region'] = $vars['elements']['#region'];
517 517
 
518
-  // Setup the default classes.
519
-  $vars['classes_array'] = array('region', 'region-' . str_replace('_', '-', $vars['region']));
518
+    // Setup the default classes.
519
+    $vars['classes_array'] = array('region', 'region-' . str_replace('_', '-', $vars['region']));
520 520
 
521
-  // Sidebar regions get a couple extra classes.
522
-  if (strpos($vars['region'], 'sidebar_') === 0) {
521
+    // Sidebar regions get a couple extra classes.
522
+    if (strpos($vars['region'], 'sidebar_') === 0) {
523 523
     $vars['classes_array'][] = 'column';
524 524
     $vars['classes_array'][] = 'sidebar';
525
-  }
525
+    }
526 526
 }
527 527
 
528 528
 /**
@@ -534,36 +534,36 @@  discard block
 block discarded – undo
534 534
  *   The name of the template being rendered ("block" in this case.)
535 535
  */
536 536
 function zen_preprocess_block(&$vars, $hook) {
537
-  $block = $vars['block'];
537
+    $block = $vars['block'];
538 538
 
539
-  // Drupal 7 uses a $content variable instead of $block->content.
540
-  $vars['content'] = $block->content;
541
-  // Drupal 7 should use a $title variable instead of $block->subject.
542
-  $vars['title'] = $block->subject;
539
+    // Drupal 7 uses a $content variable instead of $block->content.
540
+    $vars['content'] = $block->content;
541
+    // Drupal 7 should use a $title variable instead of $block->subject.
542
+    $vars['title'] = $block->subject;
543 543
 
544
-  // Special classes for blocks.
545
-  $vars['classes_array'][] = 'block-' . $block->module;
546
-  // Classes describing the position of the block within the region.
547
-  if ($vars['block_id'] == 1) {
544
+    // Special classes for blocks.
545
+    $vars['classes_array'][] = 'block-' . $block->module;
546
+    // Classes describing the position of the block within the region.
547
+    if ($vars['block_id'] == 1) {
548 548
     $vars['classes_array'][] = 'first';
549
-  }
550
-  if (!function_exists('context_blocks') && count(block_list($vars['block']->region)) == $vars['block_id']) {
549
+    }
550
+    if (!function_exists('context_blocks') && count(block_list($vars['block']->region)) == $vars['block_id']) {
551 551
     $vars['classes_array'][] = 'last';
552
-  }
553
-  $vars['classes_array'][] = 'region-' . $vars['block_zebra'];
554
-  $vars['classes_array'][] = $vars['zebra'];
555
-  $vars['classes_array'][] = 'region-count-' . $vars['block_id'];
556
-  $vars['classes_array'][] = 'count-' . $vars['id'];
552
+    }
553
+    $vars['classes_array'][] = 'region-' . $vars['block_zebra'];
554
+    $vars['classes_array'][] = $vars['zebra'];
555
+    $vars['classes_array'][] = 'region-count-' . $vars['block_id'];
556
+    $vars['classes_array'][] = 'count-' . $vars['id'];
557 557
 
558
-  // Create the block ID.
559
-  $vars['block_html_id'] = 'block-' . $block->module . '-' . $block->delta;
558
+    // Create the block ID.
559
+    $vars['block_html_id'] = 'block-' . $block->module . '-' . $block->delta;
560 560
 
561
-  $vars['edit_links_array'] = array();
562
-  if (theme_get_setting('zen_block_editing') && user_access('administer blocks')) {
561
+    $vars['edit_links_array'] = array();
562
+    if (theme_get_setting('zen_block_editing') && user_access('administer blocks')) {
563 563
     include_once './' . _zen_path() . '/zen-internals/template.block-editing.inc';
564 564
     zen_preprocess_block_editing($vars, $hook);
565 565
     $vars['classes_array'][] = 'with-block-editing';
566
-  }
566
+    }
567 567
 }
568 568
 
569 569
 /**
@@ -575,10 +575,10 @@  discard block
 block discarded – undo
575 575
  *   The name of the template being rendered.
576 576
  */
577 577
 function zen_process(&$vars, $hook) {
578
-  // Don't clobber Views 3 classes.
579
-  if (array_key_exists('classes_array', $vars) && !array_key_exists('classes', $vars)) {
578
+    // Don't clobber Views 3 classes.
579
+    if (array_key_exists('classes_array', $vars) && !array_key_exists('classes', $vars)) {
580 580
     $vars['classes'] = implode(' ', $vars['classes_array']);
581
-  }
581
+    }
582 582
 }
583 583
 
584 584
 /**
@@ -590,22 +590,22 @@  discard block
 block discarded – undo
590 590
  *   The name of the template being rendered ("block" in this case.)
591 591
  */
592 592
 function zen_process_block(&$vars, $hook) {
593
-  $vars['edit_links'] = !empty($vars['edit_links_array']) ? '<div class="edit">' . implode(' ', $vars['edit_links_array']) . '</div>' : '';
593
+    $vars['edit_links'] = !empty($vars['edit_links_array']) ? '<div class="edit">' . implode(' ', $vars['edit_links_array']) . '</div>' : '';
594 594
 }
595 595
 
596 596
 if (!function_exists('drupal_html_class')) {
597
-  /**
598
-   * Prepare a string for use as a valid class name.
599
-   *
600
-   * Do not pass one string containing multiple classes as they will be
601
-   * incorrectly concatenated with dashes, i.e. "one two" will become "one-two".
602
-   *
603
-   * @param $class
604
-   *   The class name to clean.
605
-   * @return
606
-   *   The cleaned class name.
607
-   */
608
-  function drupal_html_class($class) {
597
+    /**
598
+     * Prepare a string for use as a valid class name.
599
+     *
600
+     * Do not pass one string containing multiple classes as they will be
601
+     * incorrectly concatenated with dashes, i.e. "one two" will become "one-two".
602
+     *
603
+     * @param $class
604
+     *   The class name to clean.
605
+     * @return
606
+     *   The cleaned class name.
607
+     */
608
+    function drupal_html_class($class) {
609 609
     // By default, we filter using Drupal's coding standards.
610 610
     $class = strtr(drupal_strtolower($class), array(' ' => '-', '_' => '-', '/' => '-', '[' => '-', ']' => ''));
611 611
 
@@ -623,19 +623,19 @@  discard block
 block discarded – undo
623 623
     $class = preg_replace('/[^\x{002D}\x{0030}-\x{0039}\x{0041}-\x{005A}\x{005F}\x{0061}-\x{007A}\x{00A1}-\x{FFFF}]/u', '', $class);
624 624
 
625 625
     return $class;
626
-  }
626
+    }
627 627
 } /* End of drupal_html_class conditional definition. */
628 628
 
629 629
 if (!function_exists('drupal_html_id')) {
630
-  /**
631
-   * Prepare a string for use as a valid HTML ID and guarantee uniqueness.
632
-   *
633
-   * @param $id
634
-   *   The ID to clean.
635
-   * @return
636
-   *   The cleaned ID.
637
-   */
638
-  function drupal_html_id($id) {
630
+    /**
631
+     * Prepare a string for use as a valid HTML ID and guarantee uniqueness.
632
+     *
633
+     * @param $id
634
+     *   The ID to clean.
635
+     * @return
636
+     *   The cleaned ID.
637
+     */
638
+    function drupal_html_id($id) {
639 639
     $id = strtr(drupal_strtolower($id), array(' ' => '-', '_' => '-', '[' => '-', ']' => ''));
640 640
 
641 641
     // As defined in http://www.w3.org/TR/html4/types.html#type-name, HTML IDs can
@@ -647,7 +647,7 @@  discard block
 block discarded – undo
647 647
     $id = preg_replace('/[^A-Za-z0-9\-_]/', '', $id);
648 648
 
649 649
     return $id;
650
-  }
650
+    }
651 651
 } /* End of drupal_html_id conditional definition. */
652 652
 
653 653
 /**
@@ -657,12 +657,12 @@  discard block
 block discarded – undo
657 657
  * replace _zen_path() with drupal_get_path('theme', 'zen').
658 658
  */
659 659
 function _zen_path() {
660
-  static $path = FALSE;
661
-  if (!$path) {
660
+    static $path = FALSE;
661
+    if (!$path) {
662 662
     $matches = drupal_system_listing('zen\.info$', 'themes', 'name', 0);
663 663
     if (!empty($matches['zen']->filename)) {
664
-      $path = dirname($matches['zen']->filename);
664
+        $path = dirname($matches['zen']->filename);
665
+    }
665 666
     }
666
-  }
667
-  return $path;
667
+    return $path;
668 668
 }
Please login to merge, or discard this patch.
drupal/sites/default/boinc/modules/boincimport/boincimport.module 2 patches
Doc Comments   +2 added lines, -1 removed lines patch added patch discarded remove patch
@@ -132,7 +132,7 @@  discard block
 block discarded – undo
132 132
  * Set database connection for boincimport
133 133
  *
134 134
  * @return
135
- *   1 if can connect to BOINC database.
135
+ integer   1 if can connect to BOINC database.
136 136
  *
137 137
  * BEWARE: if you test using db_connect and the connection
138 138
  * fails, the process will die() which is a bit too much since we only
@@ -162,6 +162,7 @@  discard block
 block discarded – undo
162 162
 /**
163 163
  * Check if the module is enabled.
164 164
  * 
165
+ * @param string $module
165 166
  * @return array
166 167
  *    $out['html'] = formatted html.
167 168
  *    $out['result'] = boolean.
Please login to merge, or discard this patch.
Indentation   +1723 added lines, -1723 removed lines patch added patch discarded remove patch
@@ -19,9 +19,9 @@  discard block
 block discarded – undo
19 19
  * Implementation of hook_menu()
20 20
  */
21 21
 function boincimport_menu() {
22
-  $items = array();
22
+    $items = array();
23 23
   
24
-  $items['admin/boinc/import'] = array(
24
+    $items['admin/boinc/import'] = array(
25 25
     'title' => 'Environment: Data import',
26 26
     'description' => 'Overview of the BOINC data import process.',
27 27
     'access callback' => 'user_access',
@@ -29,8 +29,8 @@  discard block
 block discarded – undo
29 29
     'page callback' => 'boincimport_main',
30 30
     'file' => 'boincimport.pages.inc',
31 31
     'type' => MENU_NORMAL_ITEM,
32
-  );
33
-  $items['admin/boinc/import/post_configuration'] = array(
32
+    );
33
+    $items['admin/boinc/import/post_configuration'] = array(
34 34
     'title' => 'Post-migration configuration',
35 35
     'description' => 'Tie up a few odds and ends in the system configuration
36 36
       after data importation is complete.',
@@ -39,44 +39,44 @@  discard block
 block discarded – undo
39 39
     'page callback' => 'boincimport_post_configuration', 
40 40
     'file' => 'boincimport.pages.inc',
41 41
     'type' => MENU_CALLBACK,
42
-  );
43
-  $items['admin/boinc/import/cleanup'] = array(
42
+    );
43
+    $items['admin/boinc/import/cleanup'] = array(
44 44
     'title' => 'Cleanup',
45 45
     'access callback' => 'user_access',
46 46
     'access arguments' => array('import boinc data'),
47 47
     'page callback' => 'boincimport_cleanup', 
48 48
     'type' => MENU_CALLBACK,
49
-  );
50
-  $items['admin/boinc/import/complete/%'] = array(
49
+    );
50
+    $items['admin/boinc/import/complete/%'] = array(
51 51
     'title' => 'Complete',
52 52
     'access callback' => 'user_access',
53 53
     'access arguments' => array('import boinc data'),
54 54
     'page callback' => 'boincimport_complete',
55 55
     'page arguments' => array(4),
56 56
     'type' => MENU_CALLBACK,
57
-  );
58
-  $items['admin/boinc/import/process'] = array(
57
+    );
58
+    $items['admin/boinc/import/process'] = array(
59 59
     'title' => 'Execute migration',
60 60
     'access callback' => 'user_access',
61 61
     'access arguments' => array('import boinc data'),
62 62
     'page callback' => 'boincimport_process', 
63 63
     'type' => MENU_CALLBACK,
64
-  );
65
-  $items['admin/boinc/import/reset'] = array(
64
+    );
65
+    $items['admin/boinc/import/reset'] = array(
66 66
     'title' => 'Reset BOINC database URL',
67 67
     'access callback' => 'user_access',
68 68
     'access arguments' => array('import boinc data'),
69 69
     'page callback' => 'boincimport_reset',
70 70
     'type' => MENU_CALLBACK,
71
-  );
72
-  $items['admin/boinc/import/unlock'] = array(
71
+    );
72
+    $items['admin/boinc/import/unlock'] = array(
73 73
     'title' => 'Unlock BOINC import process',
74 74
     'access callback' => 'user_access',
75 75
     'access arguments' => array('import boinc data'),
76 76
     'page callback' => 'boincimport_unlock',
77 77
     'type' => MENU_CALLBACK,
78
-  );
79
-  $items['admin/boinc/import/settings'] = array(
78
+    );
79
+    $items['admin/boinc/import/settings'] = array(
80 80
     'title' => 'BOINC data import settings',
81 81
     'description' => 'Configure the BOINC data import process in preparation
82 82
       for pulling user accounts, teams, and forums into Drupal.',
@@ -86,37 +86,37 @@  discard block
 block discarded – undo
86 86
     'page arguments' => array('boincimport_admin_settings'),
87 87
     'file' => 'boincimport.pages.inc',
88 88
     'type' => MENU_CALLBACK,
89
-  );
90
-  return $items;
89
+    );
90
+    return $items;
91 91
 }
92 92
 
93 93
 /**
94 94
  * Implementation of hook_perm()
95 95
  */
96 96
 function boincimport_perm() {
97
-  return array('import boinc data');
97
+    return array('import boinc data');
98 98
 }
99 99
 
100 100
 /**
101 101
  * Callback admin/boinc/import/reset
102 102
  */
103 103
 function boincimport_reset() {
104
-  global $db_url;
105
-  $boinc_db_url = (is_array($db_url)) ? (isset($db_url['boinc']) ? $db_url['boinc'] : $db_url['default']) : $db_url;
106
-  variable_set('boincimport_db_url', $boinc_db_url);
107
-  variable_set('boincimport_ready', 0);
108
-  return '<p>'. t('The BOINC database URL has been reset. You may now <a href="@configlink">go back to the configuration page</a>.',
109
-      array('@configlink' => url('admin/boinc/import/settings'))) .'</p>';
104
+    global $db_url;
105
+    $boinc_db_url = (is_array($db_url)) ? (isset($db_url['boinc']) ? $db_url['boinc'] : $db_url['default']) : $db_url;
106
+    variable_set('boincimport_db_url', $boinc_db_url);
107
+    variable_set('boincimport_ready', 0);
108
+    return '<p>'. t('The BOINC database URL has been reset. You may now <a href="@configlink">go back to the configuration page</a>.',
109
+        array('@configlink' => url('admin/boinc/import/settings'))) .'</p>';
110 110
 }
111 111
 
112 112
 /**
113 113
  * Callback admin/boinc/import/unlock
114 114
  */
115 115
 function boincimport_unlock() {
116
-  variable_del('boincimport_process_locked');
117
-  return '<p>'. t('The BOINC data import process has been unlocked. You may
116
+    variable_del('boincimport_process_locked');
117
+    return '<p>'. t('The BOINC data import process has been unlocked. You may
118 118
     now !proceed_with_import.', array(
119
-      '!proceed_with_import' => l(t('proceed with the import'),
119
+        '!proceed_with_import' => l(t('proceed with the import'),
120 120
         'admin/boinc/import/process')
121 121
     )) .'</p>';
122 122
 }
@@ -125,7 +125,7 @@  discard block
 block discarded – undo
125 125
  * Callback admin/boinc/import/cleanup
126 126
  */
127 127
 function boincimport_cleanup() {
128
-  return boincimport_process_cleanup() .'<p>'. t('Drupal database cleaned.') .'</p>';
128
+    return boincimport_process_cleanup() .'<p>'. t('Drupal database cleaned.') .'</p>';
129 129
 }
130 130
 
131 131
 /**
@@ -139,23 +139,23 @@  discard block
 block discarded – undo
139 139
  * want to test. Therefore, the test part of the code is not used, now.
140 140
  */
141 141
 function _boincimport_db_connect($test= 0) {
142
-  global $db_url;
143
-  $db_ready = variable_get('boincimport_db_configured', 1);
144
-  if (!$db_ready) {
142
+    global $db_url;
143
+    $db_ready = variable_get('boincimport_db_configured', 1);
144
+    if (!$db_ready) {
145 145
     if (is_array($db_url)) {
146
-      $db_url2 = $db_url;
146
+        $db_url2 = $db_url;
147 147
     } else {
148
-      $db_url2['default'] = $db_url;
148
+        $db_url2['default'] = $db_url;
149 149
     }
150 150
     $db_url2['boinc'] = variable_get('boincimport_db_url', $db_url);
151 151
     $GLOBALS['db_url'] =& $db_url2;
152 152
     if ($test) {
153
-      if (!db_connect($db_url2['boinc'])) {
153
+        if (!db_connect($db_url2['boinc'])) {
154 154
         return 0;
155
-      }
155
+        }
156 156
     }
157
-  }
158
-  return 1;
157
+    }
158
+    return 1;
159 159
   
160 160
 }
161 161
 
@@ -167,17 +167,17 @@  discard block
 block discarded – undo
167 167
  *    $out['result'] = boolean.
168 168
  */
169 169
 function _boincimport_check_module($module) {
170
-  $out['html'] = '<ul>';
171
-  $result = module_exists($module);
172
-  $out['result'] = $result;
173
-  if ($result == 1) {
170
+    $out['html'] = '<ul>';
171
+    $result = module_exists($module);
172
+    $out['result'] = $result;
173
+    if ($result == 1) {
174 174
     $out['html'] .= '<li>'. t('Module %module is enabled. OK!', array('%module' => $module)) .'</li>';
175
-  }
176
-  else {
175
+    }
176
+    else {
177 177
     $out['html'] .= '<li><span class="marker">'. t('Module %module is disabled.', array('%module' => $module)) .'</span></li>';
178
-  }
179
-  $out['html'] .= '</ul>';
180
-  return $out;
178
+    }
179
+    $out['html'] .= '</ul>';
180
+    return $out;
181 181
 }
182 182
 
183 183
 /**
@@ -188,258 +188,258 @@  discard block
 block discarded – undo
188 188
  *   $out['result'] = boolean.
189 189
  */
190 190
 function _boincimport_check_tables($tables = array(), $db = 'default' , $prefix = 1) {
191
-  _boincimport_db_connect();
191
+    _boincimport_db_connect();
192 192
 
193
-  $out['html'] = '<ul>';
194
-  $out['result']= 1;
195
-  foreach ($tables as $table) {
193
+    $out['html'] = '<ul>';
194
+    $out['result']= 1;
195
+    foreach ($tables as $table) {
196 196
     if ($prefix) {
197
-      $table = db_prefix_tables('{'. $table .'}');
197
+        $table = db_prefix_tables('{'. $table .'}');
198 198
     }  
199 199
 
200 200
     db_set_active($db);
201 201
     if ($GLOBALS['db_type'] == 'pgsql') {
202
-      // adapt from db_table_exists in database.pgsql.inc
203
-      $result = (bool) db_result(db_query("SELECT COUNT(*) FROM pg_class WHERE relname = '%s'", $table));
202
+        // adapt from db_table_exists in database.pgsql.inc
203
+        $result = (bool) db_result(db_query("SELECT COUNT(*) FROM pg_class WHERE relname = '%s'", $table));
204 204
     }
205 205
     else {
206
-      // adapt from db_table_exists in database.mysql.inc
207
-      $result = (bool) db_fetch_object(db_query("SHOW TABLES LIKE '%s'", $table));
206
+        // adapt from db_table_exists in database.mysql.inc
207
+        $result = (bool) db_fetch_object(db_query("SHOW TABLES LIKE '%s'", $table));
208 208
     }
209 209
     db_set_active('default');
210 210
     if ($result) {
211
-      $out['html'] .= '<li>'. t('Table %table: OK!', array('%table' => $table)) .'</li>';
211
+        $out['html'] .= '<li>'. t('Table %table: OK!', array('%table' => $table)) .'</li>';
212 212
     }
213 213
     else {
214
-      $out['html'] .= '<li><span class="marker">'. t('Table <strong>%table</strong> does not exist!', array('%table' => $table)) .'</span></li>';
215
-      $out['result']= 0;
214
+        $out['html'] .= '<li><span class="marker">'. t('Table <strong>%table</strong> does not exist!', array('%table' => $table)) .'</span></li>';
215
+        $out['result']= 0;
216 216
     }
217
-  }
218
-  $out['html'] .= '</ul>';
219
-  return $out;
217
+    }
218
+    $out['html'] .= '</ul>';
219
+    return $out;
220 220
 }
221 221
 
222 222
 
223 223
 
224 224
 function boincimport_process() {
225
-  // Start with a quick sanity check on the BOINC environment
226
-  boinc_get_path();
225
+    // Start with a quick sanity check on the BOINC environment
226
+    boinc_get_path();
227 227
   
228
-  if (!variable_get('boincimport_ready', 0)) {
228
+    if (!variable_get('boincimport_ready', 0)) {
229 229
     return '<p>'. t('You cannot import the data now. Please <a href="@settings">complete the setup first</a>', array('@settings' => url('admin/boinc/import/settings'))) .'</p>';
230
-  }
230
+    }
231 231
 
232
-  $output = 'BOINC import process form';
233
-  $output .= drupal_get_form('boincimport_process_form');
234
-  return $output;
232
+    $output = 'BOINC import process form';
233
+    $output .= drupal_get_form('boincimport_process_form');
234
+    return $output;
235 235
 }
236 236
 
237 237
 function boincimport_process_form() {
238
-  $form = array();
239
-  _boincimport_db_connect() ;
240
-  // Causes problems with form api redirect
241
-  //ini_set('display_errors', TRUE);
238
+    $form = array();
239
+    _boincimport_db_connect() ;
240
+    // Causes problems with form api redirect
241
+    //ini_set('display_errors', TRUE);
242 242
 
243
-  // Adjust how long you want the script to run...
244
-  if (!ini_get('safe_mode')) {
243
+    // Adjust how long you want the script to run...
244
+    if (!ini_get('safe_mode')) {
245 245
     set_time_limit(variable_get('boincimport_time_limit', 0));
246
-  }
246
+    }
247 247
   
248
-  // Check for a lock on the import process
249
-  if (variable_get('boincimport_process_locked', 0)) {
248
+    // Check for a lock on the import process
249
+    if (variable_get('boincimport_process_locked', 0)) {
250 250
     drupal_set_message(t('The import process is locked. If you are sure that
251 251
       it is no longer running, you may !unlock_it', 
252
-      array('!unlock_it' => l(t('release the lock'),
252
+        array('!unlock_it' => l(t('release the lock'),
253 253
         'admin/boinc/import/unlock')
254
-      )), 'warning');
254
+        )), 'warning');
255 255
     watchdog('boincimport', 'The import process is locked. If you are sure that
256 256
       it is no longer running, you may !unlock_it', 
257
-      array('!unlock_it' => l(t('release the lock'),
257
+        array('!unlock_it' => l(t('release the lock'),
258 258
         'admin/boinc/import/unlock')
259
-      ), WATCHDOG_WARNING); 
260
-  }
261
-  else {
259
+        ), WATCHDOG_WARNING); 
260
+    }
261
+    else {
262 262
     $boincimport_functions = array(
263
-      'users' => t('Import users'),
264
-      'teams' => t('Import teams'),
265
-      'friends' => t('Import friendships'), 
266
-      'preferences' => t('Import user preferences'),
267
-      'private messages' => t('Import private messages'),
268
-      'categories' => t('Import forum containers'),
269
-      'topics' => t('Import topics'),
270
-      'posts' => t('Import posts'),
271
-      'team forums' => t('Import team forums'),
272
-      'team topics' => t('Import team topics'),
273
-      'team posts' => t('Import team posts'),
274
-      'url' => t('Transform URLs'),
263
+        'users' => t('Import users'),
264
+        'teams' => t('Import teams'),
265
+        'friends' => t('Import friendships'), 
266
+        'preferences' => t('Import user preferences'),
267
+        'private messages' => t('Import private messages'),
268
+        'categories' => t('Import forum containers'),
269
+        'topics' => t('Import topics'),
270
+        'posts' => t('Import posts'),
271
+        'team forums' => t('Import team forums'),
272
+        'team topics' => t('Import team topics'),
273
+        'team posts' => t('Import team posts'),
274
+        'url' => t('Transform URLs'),
275 275
     );
276 276
 
277 277
     $form['import'] = array(
278
-      '#type' => 'select',
279
-      '#title' => t('Next import to perform'),
280
-      '#default_value' => $_SESSION['boincimport_stage_selected'],
281
-      '#options' => $boincimport_functions,
278
+        '#type' => 'select',
279
+        '#title' => t('Next import to perform'),
280
+        '#default_value' => $_SESSION['boincimport_stage_selected'],
281
+        '#options' => $boincimport_functions,
282 282
     );
283 283
     $form[] = array(
284
-      '#type' => 'submit',
285
-      '#value' => t('Import'),
284
+        '#type' => 'submit',
285
+        '#value' => t('Import'),
286 286
     );
287
-  }
288
-  return $form;
287
+    }
288
+    return $form;
289 289
 }
290 290
 
291 291
 function boincimport_process_form_submit($form, $form_state) {
292 292
   
293
-  // Lock the import process
294
-  if (!variable_get('boincimport_process_locked', 0)) {
293
+    // Lock the import process
294
+    if (!variable_get('boincimport_process_locked', 0)) {
295 295
     variable_set('boincimport_process_locked', 1);
296
-  }
297
-  else {
296
+    }
297
+    else {
298 298
     watchdog('boincimport', 'The import process is locked, but another process
299 299
       is trying to access it...', array(), WATCHDOG_WARNING); 
300
-  }
300
+    }
301 301
   
302
-  switch ($form_state['values']['import']) {
302
+    switch ($form_state['values']['import']) {
303 303
     case 'users':
304 304
       boincimport_users();
305
-      break;
305
+        break;
306 306
 
307 307
     case 'teams':
308 308
       boincimport_teams();
309
-      if (!variable_get('boincimport_import_team_successful', 0)) {
309
+        if (!variable_get('boincimport_import_team_successful', 0)) {
310 310
         $_SESSION['boincimport_stage_selected'] = 'teams';
311
-      }
312
-      else {
311
+        }
312
+        else {
313 313
         $_SESSION['boincimport_stage_selected'] = 'friends';
314
-      }
315
-      break;
314
+        }
315
+        break;
316 316
 
317 317
     case 'friends':
318 318
       boincimport_friends();
319
-      if (!variable_get('boincimport_import_friend_successful', 0)) {
319
+        if (!variable_get('boincimport_import_friend_successful', 0)) {
320 320
         $_SESSION['boincimport_stage_selected'] = 'friends';
321
-      }
322
-      else {
321
+        }
322
+        else {
323 323
         $_SESSION['boincimport_stage_selected'] = 'preferences';
324
-      }
325
-      break;
324
+        }
325
+        break;
326 326
 
327 327
     case 'preferences':
328 328
       boincimport_preferences();
329
-      if (!variable_get('boincimport_import_preferences_successful', 0)) {
329
+        if (!variable_get('boincimport_import_preferences_successful', 0)) {
330 330
         $_SESSION['boincimport_stage_selected'] = 'preferences';
331
-      }
332
-      else {
331
+        }
332
+        else {
333 333
         $_SESSION['boincimport_stage_selected'] = 'private messages';
334
-      }
335
-      break;
334
+        }
335
+        break;
336 336
 
337 337
     case 'private messages':
338 338
       boincimport_private_msgs();
339
-      if (!variable_get('boincimport_import_private_msg_successful', 0)) {
339
+        if (!variable_get('boincimport_import_private_msg_successful', 0)) {
340 340
         $_SESSION['boincimport_stage_selected'] = 'private messages';
341
-      }
342
-      else {
341
+        }
342
+        else {
343 343
         $_SESSION['boincimport_stage_selected'] = 'categories';
344
-      }
345
-      break;
344
+        }
345
+        break;
346 346
 
347 347
     case 'categories':
348 348
       boincimport_forum_categories();
349
-      if (!variable_get('boincimport_import_category_successful', 0)) {
349
+        if (!variable_get('boincimport_import_category_successful', 0)) {
350 350
         $_SESSION['boincimport_stage_selected'] = 'categories';
351
-      }
352
-      else {
351
+        }
352
+        else {
353 353
         $_SESSION['boincimport_stage_selected'] = 'topics';
354
-      }
355
-      break;
354
+        }
355
+        break;
356 356
 
357 357
     case 'topics':      
358 358
       boincimport_forum_topics();
359
-      if (!variable_get('boincimport_import_topic_successful', 0)) {
359
+        if (!variable_get('boincimport_import_topic_successful', 0)) {
360 360
         $_SESSION['boincimport_stage_selected'] = 'topics';
361
-      }
362
-      else {
361
+        }
362
+        else {
363 363
         $_SESSION['boincimport_stage_selected'] = 'posts';
364
-      }
365
-      break;
364
+        }
365
+        break;
366 366
       
367 367
     case 'posts':
368 368
       boincimport_forum_posts();
369
-      if (!variable_get('boincimport_import_post_successful', 0)) {
369
+        if (!variable_get('boincimport_import_post_successful', 0)) {
370 370
         $_SESSION['boincimport_stage_selected'] = 'posts';
371
-      }
372
-      else {
371
+        }
372
+        else {
373 373
         $_SESSION['boincimport_stage_selected'] = 'url';
374
-      }
375
-      break;
374
+        }
375
+        break;
376 376
 
377 377
     case 'team forums':
378 378
       boincimport_team_forums();
379
-      if (!variable_get('boincimport_team_forum_successful', 0)) {
379
+        if (!variable_get('boincimport_team_forum_successful', 0)) {
380 380
         $_SESSION['boincimport_stage_selected'] = 'team forums';
381
-      }
382
-      else {
381
+        }
382
+        else {
383 383
         $_SESSION['boincimport_stage_selected'] = 'team topics';
384
-      }
385
-      break;
384
+        }
385
+        break;
386 386
 
387 387
     case 'team topics':      
388 388
       boincimport_team_forum_topics();
389
-      if (!variable_get('boincimport_team_topic_successful', 0)) {
389
+        if (!variable_get('boincimport_team_topic_successful', 0)) {
390 390
         $_SESSION['boincimport_stage_selected'] = 'team topics';
391
-      }
392
-      else {
391
+        }
392
+        else {
393 393
         $_SESSION['boincimport_stage_selected'] = 'team posts';
394
-      }
395
-      break;
394
+        }
395
+        break;
396 396
       
397 397
     case 'team posts':
398 398
       boincimport_team_forum_posts();
399
-      if (!variable_get('boincimport_team_post_successful', 0)) {
399
+        if (!variable_get('boincimport_team_post_successful', 0)) {
400 400
         $_SESSION['boincimport_stage_selected'] = 'team posts';
401
-      }
402
-      else {
401
+        }
402
+        else {
403 403
         $_SESSION['boincimport_stage_selected'] = 'url';
404
-      }
405
-      break;
404
+        }
405
+        break;
406 406
 
407 407
     case 'url':
408 408
       boincimport_replace_urls();
409
-      if (!variable_get('boincimport_replace_url_successful', 0)) {
409
+        if (!variable_get('boincimport_replace_url_successful', 0)) {
410 410
         $_SESSION['boincimport_stage_selected'] = 'url';
411
-      }
412
-      else {
411
+        }
412
+        else {
413 413
         drupal_set_message('Congratulations.  Import Finished');
414 414
         drupal_set_message('Please visit the '. l('Post migration configuration', 'admin/boinc/import/post_configuration') .' page');
415 415
         watchdog('boincimport', 'Import process is complete', array(), WATCHDOG_INFO); 
416 416
         unset($_SESSION['boincimport_stage_selected']);
417
-      }
418
-      break;
417
+        }
418
+        break;
419 419
     default:
420 420
       $_SESSION['boincimport_stage_selected'] = 'users';
421
-      break;
422
-  }
421
+        break;
422
+    }
423 423
 }
424 424
 
425 425
 function boincimport_complete($section) {
426
-  switch ($section) {
427
-  case 'users':
426
+    switch ($section) {
427
+    case 'users':
428 428
     // Set the user import successful flag in the variable table
429 429
     variable_set('boincimport_import_user_successful', '1');
430 430
     $_SESSION['boincimport_stage_selected'] = 'teams';
431 431
     break;
432
-  case 'teams':
432
+    case 'teams':
433 433
     
434 434
     break;
435 435
   
436
-  default:
436
+    default:
437 437
   }
438 438
   
439
-  // Release the lock on the import process
440
-  variable_del('boincimport_process_locked');
439
+    // Release the lock on the import process
440
+    variable_del('boincimport_process_locked');
441 441
   
442
-  drupal_goto('admin/boinc/import/process');
442
+    drupal_goto('admin/boinc/import/process');
443 443
 }
444 444
 
445 445
 
@@ -451,26 +451,26 @@  discard block
 block discarded – undo
451 451
  * Import users (at least those required for further data import)
452 452
  */
453 453
 function boincimport_users() {
454
-  // Check whether the user table has been successfully imported already
455
-  if (variable_get('boincimport_import_user_successful', 0)) {
454
+    // Check whether the user table has been successfully imported already
455
+    if (variable_get('boincimport_import_user_successful', 0)) {
456 456
     drupal_set_message(t('Note: user import has already run successfully'));
457 457
     watchdog(
458
-      'boincimport', 'Note: user import has already run successfully',
459
-      array(), WATCHDOG_INFO
458
+        'boincimport', 'Note: user import has already run successfully',
459
+        array(), WATCHDOG_INFO
460 460
     ); 
461
-  } 
461
+    } 
462 462
 
463
-  if (!variable_get('boincimport_import_user_started', 0)) {
463
+    if (!variable_get('boincimport_import_user_started', 0)) {
464 464
     // Could prepare database tables, if new fields are necessary, etc.
465 465
     variable_set('boincimport_import_user_started', 1);
466
-  }
466
+    }
467 467
 
468
-  $pre = variable_get('boincimport_table_prefix', '');
469
-  $import_lurkers = variable_get('boincimport_import_lurkers', 1);
468
+    $pre = variable_get('boincimport_table_prefix', '');
469
+    $import_lurkers = variable_get('boincimport_import_lurkers', 1);
470 470
 
471
-  // Determine which users need to be processed
472
-  db_set_active('boinc');
473
-  if ($import_lurkers) {
471
+    // Determine which users need to be processed
472
+    db_set_active('boinc');
473
+    if ($import_lurkers) {
474 474
     // Import all users, even those who have no community participation; other
475 475
     // users will be imported when they first try to log into the drupal site
476 476
     $boinc_accounts = db_query('
@@ -478,8 +478,8 @@  discard block
 block discarded – undo
478 478
       ORDER BY id ASC'
479 479
     );
480 480
     $user_count = mysql_num_rows($boinc_accounts);
481
-  }
482
-  else {
481
+    }
482
+    else {
483 483
     // Need to import any user who is currently ignored in order to keep them
484 484
     // ignored... not particularly clean (ignored users are stored in a string)
485 485
     $ignored_user_list = array(0);
@@ -490,7 +490,7 @@  discard block
 block discarded – undo
490 490
       ORDER BY userid ASC"
491 491
     );
492 492
     while ($ignoring_user = db_fetch_object($ignoring_users)) {
493
-      $ignored_user_list = $ignored_user_list + array_fill_keys(explode('|', trim($ignoring_user->ignorelist, '|')), 1);
493
+        $ignored_user_list = $ignored_user_list + array_fill_keys(explode('|', trim($ignoring_user->ignorelist, '|')), 1);
494 494
     }
495 495
     $ignored_user_list = array_keys($ignored_user_list);
496 496
     // Get IDs for all users who will need to be imported now
@@ -506,86 +506,86 @@  discard block
 block discarded – undo
506 506
         (SELECT DISTINCT userid FROM {private_messages}) UNION
507 507
         (SELECT DISTINCT senderid FROM {private_messages})
508 508
       ) AS usersToImport",
509
-      implode(',', $ignored_user_list)
509
+        implode(',', $ignored_user_list)
510 510
     );
511 511
     $user_count = mysql_num_rows($boinc_accounts);
512
-  }
513
-  db_set_active('default');
512
+    }
513
+    db_set_active('default');
514 514
   
515
-  if (!$user_count) {
515
+    if (!$user_count) {
516 516
     drupal_set_message(
517
-      t('There were no users found: Aborting script'), 'error'
517
+        t('There were no users found: Aborting script'), 'error'
518 518
     );
519 519
     watchdog('boincimport',
520
-      'There were no users found: Aborting script', array(), WATCHDOG_INFO
520
+        'There were no users found: Aborting script', array(), WATCHDOG_INFO
521 521
     );
522 522
     // Release the lock on the import process
523 523
     variable_del('boincimport_process_locked');
524 524
     return t('There were no users found: Aborting script.');
525
-  }
525
+    }
526 526
 
527
-  watchdog('boincimport',
527
+    watchdog('boincimport',
528 528
     'Found %user_count users: Beginning import',
529 529
     array('%user_count' => $user_count), WATCHDOG_INFO
530
-  ); 
531
-  
532
-  // User import relies on Drupal and BOINC APIs to manage data being read
533
-  // from one database and saved to the other. This approach keeps things
534
-  // clean and simple, but since a sizable user base will wreak havoc on system
535
-  // resources, the job is broken into batches here and each batch is processed
536
-  // by a separate process. 
537
-  
538
-  //$batch_size = variable_get('boincimport_user_batch_size', 50);
539
-  //$batch_count = $user_count - ($user_count % $batch_size) + $batch_size;
540
-  $operations = array();
541
-  $existing_users = array();
542
-  $duplicates = array();
543
-  
544
-  // Get the list of users already in Drupal to be sure we're not importing
545
-  // any twice
546
-  $result = db_query('
530
+    ); 
531
+  
532
+    // User import relies on Drupal and BOINC APIs to manage data being read
533
+    // from one database and saved to the other. This approach keeps things
534
+    // clean and simple, but since a sizable user base will wreak havoc on system
535
+    // resources, the job is broken into batches here and each batch is processed
536
+    // by a separate process. 
537
+  
538
+    //$batch_size = variable_get('boincimport_user_batch_size', 50);
539
+    //$batch_count = $user_count - ($user_count % $batch_size) + $batch_size;
540
+    $operations = array();
541
+    $existing_users = array();
542
+    $duplicates = array();
543
+  
544
+    // Get the list of users already in Drupal to be sure we're not importing
545
+    // any twice
546
+    $result = db_query('
547 547
     SELECT uid, boinc_id FROM {boincuser}'
548
-  );
549
-  while ($row = db_fetch_object($result)) {
548
+    );
549
+    while ($row = db_fetch_object($result)) {
550 550
     $existing_users[$row->boinc_id] = $row->uid;
551
-  }
551
+    }
552 552
   
553
-  // Create batches to process
554
-  while ($boinc_account = db_fetch_object($boinc_accounts)) {
555
-     if (isset($existing_users[$boinc_account->id])) {
556
-      // This user has already been imported
557
-      $duplicates[] = $boinc_account->id;
553
+    // Create batches to process
554
+    while ($boinc_account = db_fetch_object($boinc_accounts)) {
555
+        if (isset($existing_users[$boinc_account->id])) {
556
+        // This user has already been imported
557
+        $duplicates[] = $boinc_account->id;
558 558
     }
559 559
     else {
560
-      $operations[] = array(
560
+        $operations[] = array(
561 561
         'boincimport_users_op', array(
562
-          $boinc_account->id
562
+            $boinc_account->id
563 563
         )
564
-      );
564
+        );
565
+    }
565 566
     }
566
-  }
567 567
   
568
-  if ($duplicates) {
568
+    if ($duplicates) {
569 569
     drupal_set_message(t(
570
-      'Skipped @count accounts that were already imported',
571
-      array('@count' => count($duplicates))
570
+        'Skipped @count accounts that were already imported',
571
+        array('@count' => count($duplicates))
572 572
     ));
573 573
     watchdog('boincimport',
574
-      'Skipped @count accounts that were already imported',
575
-      array('@count' => count($duplicates)), WATCHDOG_INFO
574
+        'Skipped @count accounts that were already imported',
575
+        array('@count' => count($duplicates)), WATCHDOG_INFO
576 576
     ); 
577
-  }
577
+    }
578 578
   
579
-  $batch = array(
579
+    $batch = array(
580 580
     'operations' => $operations,
581 581
     'finished' => 'boincimport_users_finished',
582 582
     'title' => t('Importing users'),
583 583
     'init_message' => t('Beginning user import...'),
584 584
     'progress_message' => t('Processed @current out of @total users.'),
585 585
     'error_message' => t('User import has encountered an error.'),
586
-  );
586
+    );
587 587
   
588
-  batch_set($batch);
588
+    batch_set($batch);
589 589
 }
590 590
 
591 591
 /**
@@ -593,81 +593,81 @@  discard block
 block discarded – undo
593 593
  */
594 594
 function boincimport_users_op($boinc_id, &$context) {
595 595
   
596
-  // Use the $context['sandbox'] to store information needed to track progress
597
-  // between successive calls.
598
-  if (!isset($context['sandbox']['progress'])) {
596
+    // Use the $context['sandbox'] to store information needed to track progress
597
+    // between successive calls.
598
+    if (!isset($context['sandbox']['progress'])) {
599 599
     $context['sandbox']['progress'] = 0;
600 600
     $context['sandbox']['current_user'] = 0;
601 601
     $context['sandbox']['max'] = 1;
602
-  }
602
+    }
603 603
 
604
-  // Note about batch size: When a batch is processed, the batch update engine
605
-  // determines whether it should continue processing in the same request or
606
-  // provide progress feedback to the user and wait for the next request.
604
+    // Note about batch size: When a batch is processed, the batch update engine
605
+    // determines whether it should continue processing in the same request or
606
+    // provide progress feedback to the user and wait for the next request.
607 607
   
608
-  // Grab the BOINC user object and create a Drupal user from it
609
-  $account = boincuser_register_make_drupal_user($boinc_id);
610
-  $message = '';
611
-  if ($account) {
608
+    // Grab the BOINC user object and create a Drupal user from it
609
+    $account = boincuser_register_make_drupal_user($boinc_id);
610
+    $message = '';
611
+    if ($account) {
612 612
     // Store some result for post-processing in the finished callback.
613 613
     $context['results']['success'][] = $boinc_id;
614 614
     $message = "Successfully imported user {$boinc_id}";
615
-  }
616
-  else {
615
+    }
616
+    else {
617 617
     $context['results']['failure'][] = $boinc_id;
618 618
     $message = "Failed to import user {$boinc_id}!";
619 619
     watchdog('boincimport',
620
-      'Failed to import user @id!',
621
-      array('@id' => $boinc_id), WATCHDOG_WARNING
620
+        'Failed to import user @id!',
621
+        array('@id' => $boinc_id), WATCHDOG_WARNING
622 622
     ); 
623
-  }
623
+    }
624 624
   
625
-  // Update our progress information.
626
-  $context['sandbox']['progress']++;
627
-  $context['sandbox']['current_user'] = $boinc_id;
628
-  $context['message'] = $message;
625
+    // Update our progress information.
626
+    $context['sandbox']['progress']++;
627
+    $context['sandbox']['current_user'] = $boinc_id;
628
+    $context['message'] = $message;
629 629
 
630
-  // Update the progress for the batch engine
631
-  if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
630
+    // Update the progress for the batch engine
631
+    if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
632 632
     $context['finished'] = 1;
633
-  }
634
-  else {
633
+    }
634
+    else {
635 635
     $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
636
-  }
636
+    }
637 637
 }
638 638
 
639 639
 /**
640 640
  * Batch 'finished' callback
641 641
  */
642 642
 function boincimport_users_finished($success, $results, $operations) {
643
-  if ($success) {
643
+    if ($success) {
644 644
     // Let's count our successes
645 645
     $total_imported = count($results['success']);
646 646
     $total_failures = count($results['failure']);
647 647
     $message = t(
648
-      'Successfully imported @count users (@fail_count failures)',
649
-      array('@count' => $total_imported, '@fail_count' => $total_failures)
648
+        'Successfully imported @count users (@fail_count failures)',
649
+        array('@count' => $total_imported, '@fail_count' => $total_failures)
650 650
     );
651 651
     watchdog('boincimport',
652
-      'Successfully imported @count users (@fail_count failures).',
653
-      array('@count' => $total_imported, '@fail_count' => $total_failures),
654
-      WATCHDOG_INFO
652
+        'Successfully imported @count users (@fail_count failures).',
653
+        array('@count' => $total_imported, '@fail_count' => $total_failures),
654
+        WATCHDOG_INFO
655 655
     ); 
656 656
     // Set the user import successful flag in the variable table
657 657
     variable_set('boincimport_import_user_successful', '1');
658 658
     $_SESSION['boincimport_stage_selected'] = 'teams';
659
-  }
660
-  else {
659
+    }
660
+    else {
661 661
     // An error occurred.
662 662
     // $operations contains the operations that remained unprocessed.
663 663
     $error_operation = reset($operations);
664 664
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
665
-  }
666
-  drupal_set_message($message);
665
+    }
666
+    drupal_set_message($message);
667 667
   
668
-  // Release the lock on the import process
669
-  variable_del('boincimport_process_locked');
670
-  drupal_goto('admin/boinc/import/process');
668
+    // Release the lock on the import process
669
+    variable_del('boincimport_process_locked');
670
+    drupal_goto('admin/boinc/import/process');
671 671
 }
672 672
 
673 673
 
@@ -680,23 +680,23 @@  discard block
 block discarded – undo
680 680
  */
681 681
 function boincimport_teams() {
682 682
   
683
-  // Check whether the team table has been successfully imported already
684
-  if (variable_get('boincimport_import_team_successful', 0)) {
683
+    // Check whether the team table has been successfully imported already
684
+    if (variable_get('boincimport_import_team_successful', 0)) {
685 685
     drupal_set_message(t('Note: team import has already run successfully'));
686 686
     watchdog(
687
-      'boincimport', 'Note: team import has already run successfully',
688
-      array(), WATCHDOG_INFO
687
+        'boincimport', 'Note: team import has already run successfully',
688
+        array(), WATCHDOG_INFO
689 689
     ); 
690
-  }
690
+    }
691 691
 
692
-  if (!variable_get('boincimport_import_team_started', 0)) {
692
+    if (!variable_get('boincimport_import_team_started', 0)) {
693 693
     // Could prepare database tables, if new fields are necessary, etc.
694 694
     variable_set('boincimport_import_team_started', 1);
695
-  }
695
+    }
696 696
   
697
-  // Initialize the map of BOINC team types to taxonomy IDs, if needed
698
-  $team_type_map = variable_get('boincimport_team_types', array());
699
-  if (!$team_type_map) {
697
+    // Initialize the map of BOINC team types to taxonomy IDs, if needed
698
+    $team_type_map = variable_get('boincimport_team_types', array());
699
+    if (!$team_type_map) {
700 700
     // Import team types from BOINC to a Drupal vocabulary
701 701
     require_boinc('team_types');
702 702
     global $team_types;
@@ -704,112 +704,112 @@  discard block
 block discarded – undo
704 704
     // Create vocabulary if it isn't set
705 705
     $team_vid = db_result(db_query('SELECT vid FROM {vocabulary} WHERE name="%s"', 'Teams'));
706 706
     if (!$team_vid) {
707
-      $team_vocab = array(
707
+        $team_vocab = array(
708 708
         'name' => t('Teams'),
709 709
         'description' => t('Types of BOINC teams'),
710
-      );
711
-      taxonomy_save_vocabulary($team_vocab);
712
-      $team_vid = db_result(db_query('SELECT vid FROM {vocabulary} WHERE name="%s"', 'Teams'));
710
+        );
711
+        taxonomy_save_vocabulary($team_vocab);
712
+        $team_vid = db_result(db_query('SELECT vid FROM {vocabulary} WHERE name="%s"', 'Teams'));
713 713
     }
714 714
     
715 715
     foreach ($team_types as $boinc_type_id => $name) {
716
-      // Check for an existing term in the vocabulary
717
-      $team_type_id = db_result(db_query("SELECT tid FROM {term_data} WHERE vid = '{$team_vid}' AND LOWER(name) = LOWER('%s')", trim($name)));
718
-      if ($team_type_id) {
716
+        // Check for an existing term in the vocabulary
717
+        $team_type_id = db_result(db_query("SELECT tid FROM {term_data} WHERE vid = '{$team_vid}' AND LOWER(name) = LOWER('%s')", trim($name)));
718
+        if ($team_type_id) {
719 719
         $team_type = array(
720
-          'tid' => $team_type_id
720
+            'tid' => $team_type_id
721 721
         );
722
-      }
723
-      else {
722
+        }
723
+        else {
724 724
         if (!$name) continue;
725 725
         $team_type = array(
726
-          'name' => strip_tags($name),
727
-          'vid' => $team_vid,
728
-          'description' => '',
729
-          'parent' => 0
726
+            'name' => strip_tags($name),
727
+            'vid' => $team_vid,
728
+            'description' => '',
729
+            'parent' => 0
730 730
         );
731 731
         taxonomy_save_term($team_type);
732
-      }
733
-      // Note the taxonomy ID for mapping forums to categories
734
-      $team_type_map[$boinc_type_id] = $team_type['tid'];
732
+        }
733
+        // Note the taxonomy ID for mapping forums to categories
734
+        $team_type_map[$boinc_type_id] = $team_type['tid'];
735 735
     }
736 736
     variable_set('boincimport_team_types', $team_type_map);
737
-  }
737
+    }
738 738
   
739
-  $pre = variable_get('boincimport_table_prefix', '');
739
+    $pre = variable_get('boincimport_table_prefix', '');
740 740
 
741
-  // Get the list of teams to import
742
-  db_set_active('boinc');
743
-  $boinc_teams = db_query('
741
+    // Get the list of teams to import
742
+    db_set_active('boinc');
743
+    $boinc_teams = db_query('
744 744
     SELECT id, name, description, userid, create_time
745 745
     FROM %steam',
746 746
     $pre
747
-  );
748
-  $team_count = mysql_num_rows($boinc_teams);
749
-  db_set_active('default');
747
+    );
748
+    $team_count = mysql_num_rows($boinc_teams);
749
+    db_set_active('default');
750 750
 
751
-  if (!$team_count) {
751
+    if (!$team_count) {
752 752
     drupal_set_message(
753
-      t('There were no teams found: Aborting script'), 'error'
753
+        t('There were no teams found: Aborting script'), 'error'
754 754
     );
755 755
     watchdog('boincimport',
756
-      'There were no teams found: Aborting script', array(), WATCHDOG_INFO
756
+        'There were no teams found: Aborting script', array(), WATCHDOG_INFO
757 757
     );
758 758
     // Release the lock on the import process
759 759
     variable_del('boincimport_process_locked');
760 760
     return t('There were no teams found: Aborting script.');
761
-  }
761
+    }
762 762
 
763
-  watchdog('boincimport',
763
+    watchdog('boincimport',
764 764
     'Found %team_count teams: Beginning Import',
765 765
     array('%team_count' => $team_count), WATCHDOG_INFO
766
-  );
766
+    );
767 767
   
768
-  $operations = array();
769
-  $existing_teams = array();
770
-  $duplicates = array();
768
+    $operations = array();
769
+    $existing_teams = array();
770
+    $duplicates = array();
771 771
   
772
-  // Get the list of teams already in Drupal to be sure we're not importing
773
-  // any twice
774
-  $result = db_query('
772
+    // Get the list of teams already in Drupal to be sure we're not importing
773
+    // any twice
774
+    $result = db_query('
775 775
     SELECT nid, team_id FROM {boincteam}'
776
-  );
777
-  while ($row = db_fetch_object($result)) {
776
+    );
777
+    while ($row = db_fetch_object($result)) {
778 778
     $existing_teams[$row->team_id] = $row->nid;
779
-  }
779
+    }
780 780
   
781
-  // Create batches to process
782
-  while ($boinc_team = db_fetch_object($boinc_teams)) {
783
-     if (isset($existing_teams[$boinc_team->id])) {
784
-      // This team has already been imported
785
-      $duplicates[] = $boinc_team->id;
781
+    // Create batches to process
782
+    while ($boinc_team = db_fetch_object($boinc_teams)) {
783
+        if (isset($existing_teams[$boinc_team->id])) {
784
+        // This team has already been imported
785
+        $duplicates[] = $boinc_team->id;
786 786
     }
787 787
     else {
788
-      $operations[] = array(
788
+        $operations[] = array(
789 789
         'boincimport_teams_op', array(
790
-          $boinc_team
790
+            $boinc_team
791 791
         )
792
-      );
792
+        );
793
+    }
793 794
     }
794
-  }
795 795
   
796
-  if ($duplicates) {
796
+    if ($duplicates) {
797 797
     drupal_set_message(t(
798
-      'Skipped @count teams that were already imported',
799
-      array('@count' => count($duplicates))
798
+        'Skipped @count teams that were already imported',
799
+        array('@count' => count($duplicates))
800 800
     ));
801
-  }
801
+    }
802 802
   
803
-  $batch = array(
803
+    $batch = array(
804 804
     'operations' => $operations,
805 805
     'finished' => 'boincimport_teams_finished',
806 806
     'title' => t('Importing teams'),
807 807
     'init_message' => t('Beginning team import...'),
808 808
     'progress_message' => t('Processed @current out of @total teams.'),
809 809
     'error_message' => t('Team import has encountered an error.'),
810
-  );
810
+    );
811 811
   
812
-  batch_set($batch);
812
+    batch_set($batch);
813 813
 }
814 814
 
815 815
 /**
@@ -818,67 +818,67 @@  discard block
 block discarded – undo
818 818
  */
819 819
 function boincimport_teams_op($boincteam, &$context) {
820 820
   
821
-  $success = boincteam_import($boincteam);
821
+    $success = boincteam_import($boincteam);
822 822
   
823
-  $message = '';
824
-  if ($success) {
823
+    $message = '';
824
+    if ($success) {
825 825
     // Store some result for post-processing in the finished callback.
826 826
     $context['results']['success'][] = $boincteam->id;
827 827
     $message = "Successfully imported team {$boincteam->id}";
828
-  }
829
-  else {
828
+    }
829
+    else {
830 830
     $context['results']['failure'][] = $boincteam->id;
831 831
     $message = "Failed to import team {$boincteam->id}!";
832 832
     watchdog('boincimport',
833
-      'Failed to import team @id!',
834
-      array('@id' => $boincteam->id), WATCHDOG_WARNING
833
+        'Failed to import team @id!',
834
+        array('@id' => $boincteam->id), WATCHDOG_WARNING
835 835
     ); 
836
-  }
836
+    }
837 837
   
838
-  // Update our progress information.
839
-  $context['sandbox']['progress']++;
840
-  $context['sandbox']['current_team'] = $boincteam->id;
841
-  $context['message'] = $message;
838
+    // Update our progress information.
839
+    $context['sandbox']['progress']++;
840
+    $context['sandbox']['current_team'] = $boincteam->id;
841
+    $context['message'] = $message;
842 842
 
843
-  // Update the progress for the batch engine
844
-  if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
843
+    // Update the progress for the batch engine
844
+    if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
845 845
     $context['finished'] = 1;
846
-  }
847
-  else {
846
+    }
847
+    else {
848 848
     $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
849
-  }
849
+    }
850 850
 }
851 851
 
852 852
 /**
853 853
  * Batch 'finished' callback
854 854
  */
855 855
 function boincimport_teams_finished($success, $results, $operations) {
856
-  if ($success) {
856
+    if ($success) {
857 857
     // Let's count our successes
858 858
     $total_imported = count($results['success']);
859 859
     $message = t(
860
-      'Successfully imported @count teams',
861
-      array('@count' => $total_imported)
860
+        'Successfully imported @count teams',
861
+        array('@count' => $total_imported)
862 862
     );
863 863
     watchdog('boincimport',
864
-      'Successfully imported @count teams.',
865
-      array('@count' => $total_imported), WATCHDOG_INFO
864
+        'Successfully imported @count teams.',
865
+        array('@count' => $total_imported), WATCHDOG_INFO
866 866
     ); 
867 867
     // Set the team import successful flag in the variable table
868 868
     variable_set('boincimport_import_team_successful', '1');
869 869
     $_SESSION['boincimport_stage_selected'] = 'friends';
870
-  }
871
-  else {
870
+    }
871
+    else {
872 872
     // An error occurred.
873 873
     // $operations contains the operations that remained unprocessed.
874 874
     $error_operation = reset($operations);
875 875
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
876
-  }
877
-  drupal_set_message($message);
876
+    }
877
+    drupal_set_message($message);
878 878
   
879
-  // Release the lock on the import process
880
-  variable_del('boincimport_process_locked');
881
-  drupal_goto('admin/boinc/import/process');
879
+    // Release the lock on the import process
880
+    variable_del('boincimport_process_locked');
881
+    drupal_goto('admin/boinc/import/process');
882 882
 }
883 883
 
884 884
 
@@ -891,25 +891,25 @@  discard block
 block discarded – undo
891 891
  */
892 892
 function boincimport_friends() {
893 893
   
894
-  // Check whether friendships have been successfully imported already
895
-  if (variable_get('boincimport_import_friend_successful', 0)) {
894
+    // Check whether friendships have been successfully imported already
895
+    if (variable_get('boincimport_import_friend_successful', 0)) {
896 896
     drupal_set_message(t('Note: Friends import has already run successfully'));
897 897
     watchdog(
898
-      'boincimport', 'Note: Friends import has already run successfully',
899
-      array(), WATCHDOG_INFO
898
+        'boincimport', 'Note: Friends import has already run successfully',
899
+        array(), WATCHDOG_INFO
900 900
     ); 
901
-  }
901
+    }
902 902
 
903
-  if (!variable_get('boincimport_import_friend_started', 0)) {
903
+    if (!variable_get('boincimport_import_friend_started', 0)) {
904 904
     // Could prepare database tables, if new fields are necessary, etc.
905 905
     variable_set('boincimport_import_friend_started', 1);
906
-  }
906
+    }
907 907
   
908
-  $pre = variable_get('boincimport_table_prefix', '');
908
+    $pre = variable_get('boincimport_table_prefix', '');
909 909
 
910
-  // Get stuff to import
911
-  db_set_active('boinc');
912
-  $friendships = db_query('
910
+    // Get stuff to import
911
+    db_set_active('boinc');
912
+    $friendships = db_query('
913 913
     SELECT
914 914
       f1.user_src,
915 915
       f1.user_dest,
@@ -923,51 +923,51 @@  discard block
 block discarded – undo
923 923
       AND (f2.user_src IS NULL OR f1.create_time < f2.create_time)
924 924
     ORDER BY create_time',
925 925
     $pre, $pre
926
-  );
927
-  $friendship_count = mysql_num_rows($friendships);
928
-  db_set_active('default');
926
+    );
927
+    $friendship_count = mysql_num_rows($friendships);
928
+    db_set_active('default');
929 929
 
930
-  if (!$friendship_count) {
930
+    if (!$friendship_count) {
931 931
     drupal_set_message(
932
-      t('There were no friendships found: Aborting script'), 'error'
932
+        t('There were no friendships found: Aborting script'), 'error'
933 933
     );
934 934
     watchdog('boincimport',
935
-      'There were no friendships found: Aborting script', array(), WATCHDOG_INFO
935
+        'There were no friendships found: Aborting script', array(), WATCHDOG_INFO
936 936
     );
937 937
     // Release the lock on the import process
938 938
     variable_del('boincimport_process_locked');
939 939
     return t('There were no friendships found: Aborting script.');
940
-  }
940
+    }
941 941
 
942
-  watchdog('boincimport',
942
+    watchdog('boincimport',
943 943
     'Found %count friend relationships: Beginning Import',
944 944
     array('%count' => $friendship_count), WATCHDOG_INFO
945
-  );
945
+    );
946 946
   
947
-  $operations = array();
947
+    $operations = array();
948 948
   
949
-  // It doesn't matter if a friend relationship has already been imported, just
950
-  // do it again if so
949
+    // It doesn't matter if a friend relationship has already been imported, just
950
+    // do it again if so
951 951
   
952
-  // Create batches to process
953
-  while ($friendship = db_fetch_object($friendships)) {
952
+    // Create batches to process
953
+    while ($friendship = db_fetch_object($friendships)) {
954 954
     $operations[] = array(
955
-      'boincimport_friends_op', array(
955
+        'boincimport_friends_op', array(
956 956
         $friendship
957
-      )
957
+        )
958 958
     );
959
-  }
959
+    }
960 960
   
961
-  $batch = array(
961
+    $batch = array(
962 962
     'operations' => $operations,
963 963
     'finished' => 'boincimport_friends_finished',
964 964
     'title' => t('Importing friend relationships'),
965 965
     'init_message' => t('Beginning friend import...'),
966 966
     'progress_message' => t('Processed @current out of @total friendships.'),
967 967
     'error_message' => t('Friend import has encountered an error.'),
968
-  );
968
+    );
969 969
   
970
-  batch_set($batch);
970
+    batch_set($batch);
971 971
 }
972 972
 
973 973
 /**
@@ -976,83 +976,83 @@  discard block
 block discarded – undo
976 976
  */
977 977
 function boincimport_friends_op($friendship, &$context) {
978 978
   
979
-  $input_format = variable_get('boincimport_input_format', 0);
980
-  $success = FALSE;
981
-  $message = '';
979
+    $input_format = variable_get('boincimport_input_format', 0);
980
+    $success = FALSE;
981
+    $message = '';
982 982
   
983
-  // Convert BOINC friends to Drupal friends
984
-  $uid = boincuser_lookup_uid($friendship->user_src);
985
-  $friend_uid = boincuser_lookup_uid($friendship->user_dest);
986
-  if ($uid AND $friend_uid) {
983
+    // Convert BOINC friends to Drupal friends
984
+    $uid = boincuser_lookup_uid($friendship->user_src);
985
+    $friend_uid = boincuser_lookup_uid($friendship->user_dest);
986
+    if ($uid AND $friend_uid) {
987 987
     $success = db_query("
988 988
       INSERT IGNORE INTO {flag_friend}
989 989
       SET uid = '%d', friend_uid = '%d', created = '%d'",
990
-      $uid, $friend_uid, $friendship->create_time
990
+        $uid, $friend_uid, $friendship->create_time
991 991
     );
992
-  }
993
-  else {
992
+    }
993
+    else {
994 994
     $boinc_id = ($uid) ? $friendship->user_dest : $friendship->user_src;
995 995
     $message = "No Drupal account exists for BOINC user {$boinc_id}!";
996
-  }
996
+    }
997 997
   
998
-  if ($success) {
998
+    if ($success) {
999 999
     // Store some result for post-processing in the finished callback.
1000 1000
     $context['results']['success'][] = $uid;
1001 1001
     $message = "Successfully made users {$uid} and {$friend_uid} friends";
1002
-  }
1003
-  else {
1002
+    }
1003
+    else {
1004 1004
     $context['results']['failure'][] = $uid;
1005 1005
     if (!$message) {
1006
-      $message = "Failed to make users {$uid} and {$friend_uid} friends!";
1006
+        $message = "Failed to make users {$uid} and {$friend_uid} friends!";
1007 1007
     }
1008 1008
     watchdog('boincimport', $message, array(), WATCHDOG_WARNING);
1009
-  }
1009
+    }
1010 1010
   
1011
-  // Update our progress information.
1012
-  $context['sandbox']['progress']++;
1013
-  $context['sandbox']['current_user'] = $uid;
1014
-  $context['message'] = $message;
1011
+    // Update our progress information.
1012
+    $context['sandbox']['progress']++;
1013
+    $context['sandbox']['current_user'] = $uid;
1014
+    $context['message'] = $message;
1015 1015
 
1016
-  // Update the progress for the batch engine
1017
-  if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
1016
+    // Update the progress for the batch engine
1017
+    if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
1018 1018
     $context['finished'] = 1;
1019
-  }
1020
-  else {
1019
+    }
1020
+    else {
1021 1021
     $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
1022
-  }
1022
+    }
1023 1023
 }
1024 1024
 
1025 1025
 /**
1026 1026
  * Batch 'finished' callback
1027 1027
  */
1028 1028
 function boincimport_friends_finished($success, $results, $operations) {
1029
-  if ($success) {
1029
+    if ($success) {
1030 1030
     // Let's count our successes
1031 1031
     $total_imported = count($results['success']);
1032 1032
     $failures = count($results['failure']);
1033 1033
     $message = t(
1034
-      'Successfully imported @count friendships (@failed failures)',
1035
-      array(
1034
+        'Successfully imported @count friendships (@failed failures)',
1035
+        array(
1036 1036
         '@count' => $total_imported,
1037 1037
         '@failed' => $failures,
1038
-      )
1038
+        )
1039 1039
     );
1040 1040
     watchdog('boincimport', $message, array(), WATCHDOG_INFO); 
1041 1041
     // Set the friend import successful flag in the variable table
1042 1042
     variable_set('boincimport_import_friend_successful', '1');
1043 1043
     $_SESSION['boincimport_stage_selected'] = 'preferences';
1044
-  }
1045
-  else {
1044
+    }
1045
+    else {
1046 1046
     // An error occurred.
1047 1047
     // $operations contains the operations that remained unprocessed.
1048 1048
     $error_operation = reset($operations);
1049 1049
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
1050
-  }
1051
-  drupal_set_message($message);
1050
+    }
1051
+    drupal_set_message($message);
1052 1052
   
1053
-  // Release the lock on the import process
1054
-  variable_del('boincimport_process_locked');
1055
-  drupal_goto('admin/boinc/import/process');
1053
+    // Release the lock on the import process
1054
+    variable_del('boincimport_process_locked');
1055
+    drupal_goto('admin/boinc/import/process');
1056 1056
 }
1057 1057
 
1058 1058
 
@@ -1065,78 +1065,78 @@  discard block
 block discarded – undo
1065 1065
  */
1066 1066
 function boincimport_preferences() {
1067 1067
   
1068
-  // Check whether preferences have been successfully imported already
1069
-  if (variable_get('boincimport_import_preferences_successful', 0)) {
1068
+    // Check whether preferences have been successfully imported already
1069
+    if (variable_get('boincimport_import_preferences_successful', 0)) {
1070 1070
     drupal_set_message(t('Note: preferences import has already run successfully'));
1071 1071
     watchdog(
1072
-      'boincimport', 'Note: preferences import has already run successfully',
1073
-      array(), WATCHDOG_INFO
1072
+        'boincimport', 'Note: preferences import has already run successfully',
1073
+        array(), WATCHDOG_INFO
1074 1074
     ); 
1075
-  }
1075
+    }
1076 1076
 
1077
-  if (!variable_get('boincimport_import_preferences_started', 0)) {
1077
+    if (!variable_get('boincimport_import_preferences_started', 0)) {
1078 1078
     // Could prepare database tables, if new fields are necessary, etc.
1079 1079
     variable_set('boincimport_import_preferences_started', 1);
1080
-  }
1080
+    }
1081 1081
   
1082
-  $pre = variable_get('boincimport_table_prefix', '');
1082
+    $pre = variable_get('boincimport_table_prefix', '');
1083 1083
   
1084
-  // Currently the only preferences being imported are BOINC "filtered users"
1085
-  // This concept of users blocking other users when they don't get along maps
1086
-  // to the Drupal ignore users module
1084
+    // Currently the only preferences being imported are BOINC "filtered users"
1085
+    // This concept of users blocking other users when they don't get along maps
1086
+    // to the Drupal ignore users module
1087 1087
   
1088
-  // Find users who are involved in quarrels
1089
-  db_set_active('boinc');
1090
-  $quarrelers = db_query("
1088
+    // Find users who are involved in quarrels
1089
+    db_set_active('boinc');
1090
+    $quarrelers = db_query("
1091 1091
     SELECT userid, ignorelist
1092 1092
     FROM %sforum_preferences
1093 1093
     WHERE ignorelist <> ''",
1094 1094
     $pre
1095
-  );
1096
-  $quarreler_count = mysql_num_rows($quarrelers);
1097
-  db_set_active('default');
1095
+    );
1096
+    $quarreler_count = mysql_num_rows($quarrelers);
1097
+    db_set_active('default');
1098 1098
 
1099
-  if (!$quarreler_count) {
1099
+    if (!$quarreler_count) {
1100 1100
     drupal_set_message(
1101
-      t('There were no quarrels found: Moving on...')
1101
+        t('There were no quarrels found: Moving on...')
1102 1102
     );
1103 1103
     watchdog('boincimport',
1104
-      'There were no quarrels found: Moving on...', array(), WATCHDOG_INFO
1104
+        'There were no quarrels found: Moving on...', array(), WATCHDOG_INFO
1105 1105
     );
1106 1106
     // Release the lock on the import process
1107 1107
     variable_del('boincimport_process_locked');
1108 1108
     return t('There were no quarrels found: Moving on...');
1109
-  }
1109
+    }
1110 1110
 
1111
-  watchdog('boincimport',
1111
+    watchdog('boincimport',
1112 1112
     'Found %count quarreling users: Beginning Import',
1113 1113
     array('%count' => $quarreler_count), WATCHDOG_INFO
1114
-  );
1114
+    );
1115 1115
   
1116
-  $operations = array();
1116
+    $operations = array();
1117 1117
   
1118
-  // It doesn't matter if a filtered user preference has already been imported,
1119
-  // just do it again if so
1118
+    // It doesn't matter if a filtered user preference has already been imported,
1119
+    // just do it again if so
1120 1120
   
1121
-  // Create batches to process
1122
-  while ($quarreler = db_fetch_object($quarrelers)) {
1121
+    // Create batches to process
1122
+    while ($quarreler = db_fetch_object($quarrelers)) {
1123 1123
     $operations[] = array(
1124
-      'boincimport_quarrels_op', array(
1124
+        'boincimport_quarrels_op', array(
1125 1125
         $quarreler
1126
-      )
1126
+        )
1127 1127
     );
1128
-  }
1128
+    }
1129 1129
   
1130
-  $batch = array(
1130
+    $batch = array(
1131 1131
     'operations' => $operations,
1132 1132
     'finished' => 'boincimport_preferences_finished',
1133 1133
     'title' => t('Importing preferences'),
1134 1134
     'init_message' => t('Beginning preference import...'),
1135 1135
     'progress_message' => t('Processed @current out of @total preferences.'),
1136 1136
     'error_message' => t('Preference import has encountered an error.'),
1137
-  );
1137
+    );
1138 1138
   
1139
-  batch_set($batch);
1139
+    batch_set($batch);
1140 1140
 }
1141 1141
 
1142 1142
 /**
@@ -1145,99 +1145,99 @@  discard block
 block discarded – undo
1145 1145
  */
1146 1146
 function boincimport_quarrels_op($boinc_user, &$context) {
1147 1147
   
1148
-  $success = FALSE;
1149
-  $uid = boincuser_lookup_uid($boinc_user->userid);
1150
-  $ignored_users = explode('|', trim($boinc_user->ignorelist, '|'));
1151
-  foreach ($ignored_users as $ignored_user) {
1148
+    $success = FALSE;
1149
+    $uid = boincuser_lookup_uid($boinc_user->userid);
1150
+    $ignored_users = explode('|', trim($boinc_user->ignorelist, '|'));
1151
+    foreach ($ignored_users as $ignored_user) {
1152 1152
     $ignored_user_uid = boincuser_lookup_uid($ignored_user);
1153 1153
     if (!$ignored_user_uid) {
1154
-      $context['results']['warning'][] = "{$uid}:{$ignored_user_uid}";
1155
-      watchdog('boincimport',
1154
+        $context['results']['warning'][] = "{$uid}:{$ignored_user_uid}";
1155
+        watchdog('boincimport',
1156 1156
         'Error adding to ignore list of user @uid: No Drupal ID found for BOINC user @boinc_id',
1157 1157
         array('@boinc_id' => $ignored_user, '@uid' => $uid),
1158 1158
         WATCHDOG_WARNING
1159
-      );
1160
-      continue;
1159
+        );
1160
+        continue;
1161 1161
     }
1162 1162
     $user_ignored = db_query("
1163 1163
       INSERT IGNORE INTO {ignore_user}
1164 1164
       SET uid = '%d', iuid = '%d'",
1165
-      $uid, $ignored_user_uid
1165
+        $uid, $ignored_user_uid
1166 1166
     );
1167 1167
     if ($user_ignored) {
1168
-      $success = TRUE;
1168
+        $success = TRUE;
1169 1169
     }
1170 1170
     else {
1171
-      $context['results']['warning'][] = "{$uid}:{$ignored_user_uid}";
1172
-      watchdog('boincimport',
1171
+        $context['results']['warning'][] = "{$uid}:{$ignored_user_uid}";
1172
+        watchdog('boincimport',
1173 1173
         'Could not add user @ignored_uid to the ignore list of user @uid',
1174 1174
         array('@ignored_uid' => $ignored_user_uid, '@uid' => $uid),
1175 1175
         WATCHDOG_WARNING
1176
-      );
1176
+        );
1177
+    }
1177 1178
     }
1178
-  }
1179 1179
   
1180
-  $message = '';
1181
-  if ($success) {
1180
+    $message = '';
1181
+    if ($success) {
1182 1182
     // Store some result for post-processing in the finished callback.
1183 1183
     $context['results']['success'][] = $uid;
1184 1184
     $message = "Successfully imported ignored users for user {$uid}";
1185
-  }
1186
-  else {
1185
+    }
1186
+    else {
1187 1187
     $context['results']['failure'][] = $uid;
1188 1188
     $message = "Failed to import any user filter preferences for user {$uid}!";
1189 1189
     watchdog('boincimport',
1190
-      'Failed to import any user filter preferences for user @id!',
1191
-      array('@id' => $uid), WATCHDOG_WARNING
1190
+        'Failed to import any user filter preferences for user @id!',
1191
+        array('@id' => $uid), WATCHDOG_WARNING
1192 1192
     ); 
1193
-  }
1193
+    }
1194 1194
   
1195
-  // Update our progress information.
1196
-  $context['sandbox']['progress']++;
1197
-  $context['sandbox']['current_user'] = $uid;
1198
-  $context['message'] = $message;
1195
+    // Update our progress information.
1196
+    $context['sandbox']['progress']++;
1197
+    $context['sandbox']['current_user'] = $uid;
1198
+    $context['message'] = $message;
1199 1199
 
1200
-  // Update the progress for the batch engine
1201
-  if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
1200
+    // Update the progress for the batch engine
1201
+    if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
1202 1202
     $context['finished'] = 1;
1203
-  }
1204
-  else {
1203
+    }
1204
+    else {
1205 1205
     $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
1206
-  }
1206
+    }
1207 1207
 }
1208 1208
 
1209 1209
 /**
1210 1210
  * Batch 'finished' callback
1211 1211
  */
1212 1212
 function boincimport_preferences_finished($success, $results, $operations) {
1213
-  if ($success) {
1213
+    if ($success) {
1214 1214
     // Let's count our successes
1215 1215
     $total_imported = count($results['success']);
1216 1216
     $total_warnings = count($results['warning']);
1217 1217
     $message = t(
1218
-      'Successfully imported preferences for @count users (with @warn warnings)',
1219
-      array('@count' => $total_imported, '@warn' => $total_warnings)
1218
+        'Successfully imported preferences for @count users (with @warn warnings)',
1219
+        array('@count' => $total_imported, '@warn' => $total_warnings)
1220 1220
     );
1221 1221
     watchdog('boincimport',
1222
-      'Successfully imported preferences for @count users (with @warn warnings)',
1223
-      array('@count' => $total_imported, '@warn' => $total_warnings),
1224
-      WATCHDOG_INFO
1222
+        'Successfully imported preferences for @count users (with @warn warnings)',
1223
+        array('@count' => $total_imported, '@warn' => $total_warnings),
1224
+        WATCHDOG_INFO
1225 1225
     );
1226 1226
     // Set the preference import successful flag in the variable table
1227 1227
     variable_set('boincimport_import_preferences_successful', '1');
1228 1228
     $_SESSION['boincimport_stage_selected'] = 'private messages';
1229
-  }
1230
-  else {
1229
+    }
1230
+    else {
1231 1231
     // An error occurred.
1232 1232
     // $operations contains the operations that remained unprocessed.
1233 1233
     $error_operation = reset($operations);
1234 1234
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
1235
-  }
1236
-  drupal_set_message($message);
1235
+    }
1236
+    drupal_set_message($message);
1237 1237
   
1238
-  // Release the lock on the import process
1239
-  variable_del('boincimport_process_locked');
1240
-  drupal_goto('admin/boinc/import/process');
1238
+    // Release the lock on the import process
1239
+    variable_del('boincimport_process_locked');
1240
+    drupal_goto('admin/boinc/import/process');
1241 1241
 }
1242 1242
 
1243 1243
 
@@ -1250,74 +1250,74 @@  discard block
 block discarded – undo
1250 1250
  */
1251 1251
 function boincimport_private_msgs() {
1252 1252
   
1253
-  // Check whether private messages have been successfully imported already
1254
-  if (variable_get('boincimport_import_private_msg_successful', 0)) {
1253
+    // Check whether private messages have been successfully imported already
1254
+    if (variable_get('boincimport_import_private_msg_successful', 0)) {
1255 1255
     drupal_set_message(t('Private message import has already run successfully -- repeating this process could result in duplicate messages!'), 'warning');
1256 1256
     watchdog(
1257
-      'boincimport', 'Private message import has already run successfully',
1258
-      array(), WATCHDOG_WARNING
1257
+        'boincimport', 'Private message import has already run successfully',
1258
+        array(), WATCHDOG_WARNING
1259 1259
     );
1260 1260
     return;
1261
-  }
1261
+    }
1262 1262
 
1263
-  if (!variable_get('boincimport_import_private_msg_started', 0)) {
1263
+    if (!variable_get('boincimport_import_private_msg_started', 0)) {
1264 1264
     // Could prepare database tables, if new fields are necessary, etc.
1265 1265
     variable_set('boincimport_import_private_msg_started', 1);
1266
-  }
1266
+    }
1267 1267
   
1268
-  $pre = variable_get('boincimport_table_prefix', '');
1268
+    $pre = variable_get('boincimport_table_prefix', '');
1269 1269
 
1270
-  // Get stuff to import
1271
-  db_set_active('boinc');
1272
-  $boinc_private_msgs = db_query('
1270
+    // Get stuff to import
1271
+    db_set_active('boinc');
1272
+    $boinc_private_msgs = db_query('
1273 1273
     SELECT id, subject, content, userid, senderid, date, opened
1274 1274
     FROM %sprivate_messages',
1275 1275
     $pre
1276
-  );
1277
-  $private_msg_count = mysql_num_rows($boinc_private_msgs);
1278
-  db_set_active('default');
1276
+    );
1277
+    $private_msg_count = mysql_num_rows($boinc_private_msgs);
1278
+    db_set_active('default');
1279 1279
 
1280
-  if (!$private_msg_count) {
1280
+    if (!$private_msg_count) {
1281 1281
     drupal_set_message(
1282
-      t('There were no private messages found: Moving on...')
1282
+        t('There were no private messages found: Moving on...')
1283 1283
     );
1284 1284
     watchdog('boincimport',
1285
-      'There were no private messages found: Moving on...', array(), WATCHDOG_INFO
1285
+        'There were no private messages found: Moving on...', array(), WATCHDOG_INFO
1286 1286
     );
1287 1287
     // Release the lock on the import process
1288 1288
     variable_del('boincimport_process_locked');
1289 1289
     return t('There were no private messages found: Moving on...');
1290
-  }
1290
+    }
1291 1291
 
1292
-  watchdog('boincimport',
1292
+    watchdog('boincimport',
1293 1293
     'Found %count private messages: Beginning Import',
1294 1294
     array('%count' => $private_msg_count), WATCHDOG_INFO
1295
-  );
1295
+    );
1296 1296
   
1297
-  $operations = array();
1297
+    $operations = array();
1298 1298
   
1299
-  // We don't know if a given private message has been imported already or not;
1300
-  // if this is needed, a relation table must be added to the Drupal DB
1299
+    // We don't know if a given private message has been imported already or not;
1300
+    // if this is needed, a relation table must be added to the Drupal DB
1301 1301
   
1302
-  // Create batches to process
1303
-  while ($boinc_private_msg = db_fetch_object($boinc_private_msgs)) {
1302
+    // Create batches to process
1303
+    while ($boinc_private_msg = db_fetch_object($boinc_private_msgs)) {
1304 1304
     $operations[] = array(
1305
-      'boincimport_private_msgs_op', array(
1305
+        'boincimport_private_msgs_op', array(
1306 1306
         $boinc_private_msg
1307
-      )
1307
+        )
1308 1308
     );
1309
-  }
1309
+    }
1310 1310
   
1311
-  $batch = array(
1311
+    $batch = array(
1312 1312
     'operations' => $operations,
1313 1313
     'finished' => 'boincimport_private_msgs_finished',
1314 1314
     'title' => t('Importing private messages'),
1315 1315
     'init_message' => t('Beginning private message import...'),
1316 1316
     'progress_message' => t('Processed @current out of @total private messages.'),
1317 1317
     'error_message' => t('Private message import has encountered an error.'),
1318
-  );
1318
+    );
1319 1319
   
1320
-  batch_set($batch);
1320
+    batch_set($batch);
1321 1321
 }
1322 1322
 
1323 1323
 /**
@@ -1326,95 +1326,95 @@  discard block
 block discarded – undo
1326 1326
  */
1327 1327
 function boincimport_private_msgs_op($pm, &$context) {
1328 1328
   
1329
-  $input_format = variable_get('boincimport_input_format', 0);
1329
+    $input_format = variable_get('boincimport_input_format', 0);
1330 1330
   
1331
-  $uid = boincuser_lookup_uid($pm->userid);
1332
-  $sender_uid = boincuser_lookup_uid($pm->senderid);
1331
+    $uid = boincuser_lookup_uid($pm->userid);
1332
+    $sender_uid = boincuser_lookup_uid($pm->senderid);
1333 1333
   
1334
-  $pm->content = _boincimport_strip_bbcode($pm->content);
1335
-  $pm->content = _boincimport_text_sanitize($pm->content);
1334
+    $pm->content = _boincimport_strip_bbcode($pm->content);
1335
+    $pm->content = _boincimport_text_sanitize($pm->content);
1336 1336
   
1337
-  // First save the message
1338
-  $message_added = db_query("
1337
+    // First save the message
1338
+    $message_added = db_query("
1339 1339
     INSERT INTO {pm_message} (subject, author, body, format, timestamp)
1340 1340
     VALUES ('%s', %d, '%s', %d, %d)",
1341 1341
     $pm->subject, $sender_uid, $pm->content, $input_format, $pm->date
1342
-  );
1343
-  $mid = db_last_insert_id('pm_message', 'mid');
1342
+    );
1343
+    $mid = db_last_insert_id('pm_message', 'mid');
1344 1344
   
1345
-  // Then attach recipients and set status (note that threads are not a BOINC
1346
-  // feature, so just consider every message to be a new thread)
1347
-  $recipient_added = db_query("
1345
+    // Then attach recipients and set status (note that threads are not a BOINC
1346
+    // feature, so just consider every message to be a new thread)
1347
+    $recipient_added = db_query("
1348 1348
     INSERT INTO {pm_index} (mid, thread_id, uid, is_new, deleted)
1349 1349
     VALUES (%d, %d, %d, %d, 0)",
1350 1350
     $mid, $mid, $uid, !$pm->opened
1351
-  );
1352
-  // In Drupal, the sender should be attached as well
1353
-  $sender_added = db_query("
1351
+    );
1352
+    // In Drupal, the sender should be attached as well
1353
+    $sender_added = db_query("
1354 1354
     INSERT INTO {pm_index} (mid, thread_id, uid, is_new, deleted)
1355 1355
     VALUES (%d, %d, %d, %d, 0)",
1356 1356
     $mid, $mid, $sender_uid, 0
1357
-  );
1357
+    );
1358 1358
   
1359
-  $message = '';
1360
-  if ($message_added AND $recipient_added AND $sender_added) {
1359
+    $message = '';
1360
+    if ($message_added AND $recipient_added AND $sender_added) {
1361 1361
     // Store some result for post-processing in the finished callback.
1362 1362
     $context['results']['success'][] = $pm->id;
1363 1363
     $message = "Successfully imported private message {$pm->id}";
1364
-  }
1365
-  else {
1364
+    }
1365
+    else {
1366 1366
     $context['results']['failure'][] = $pm->id;
1367 1367
     $message = "Failed to import private message {$pm->id}!";
1368 1368
     watchdog('boincimport',
1369
-      'Failed to import private message @id!',
1370
-      array('@id' => $pm->id), WATCHDOG_WARNING
1369
+        'Failed to import private message @id!',
1370
+        array('@id' => $pm->id), WATCHDOG_WARNING
1371 1371
     ); 
1372
-  }
1372
+    }
1373 1373
   
1374
-  // Update our progress information.
1375
-  $context['sandbox']['progress']++;
1376
-  $context['sandbox']['current_pm'] = $pm->id;
1377
-  $context['message'] = $message;
1374
+    // Update our progress information.
1375
+    $context['sandbox']['progress']++;
1376
+    $context['sandbox']['current_pm'] = $pm->id;
1377
+    $context['message'] = $message;
1378 1378
 
1379
-  // Update the progress for the batch engine
1380
-  if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
1379
+    // Update the progress for the batch engine
1380
+    if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
1381 1381
     $context['finished'] = 1;
1382
-  }
1383
-  else {
1382
+    }
1383
+    else {
1384 1384
     $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
1385
-  }
1385
+    }
1386 1386
 }
1387 1387
 
1388 1388
 /**
1389 1389
  * Batch 'finished' callback
1390 1390
  */
1391 1391
 function boincimport_private_msgs_finished($success, $results, $operations) {
1392
-  if ($success) {
1392
+    if ($success) {
1393 1393
     // Let's count our successes
1394 1394
     $total_imported = count($results['success']);
1395 1395
     $message = t(
1396
-      'Successfully imported @count private messages',
1397
-      array('@count' => $total_imported)
1396
+        'Successfully imported @count private messages',
1397
+        array('@count' => $total_imported)
1398 1398
     );
1399 1399
     watchdog('boincimport',
1400
-      'Successfully imported @count private messages.',
1401
-      array('@count' => $total_imported), WATCHDOG_INFO
1400
+        'Successfully imported @count private messages.',
1401
+        array('@count' => $total_imported), WATCHDOG_INFO
1402 1402
     ); 
1403 1403
     // Set the private message import successful flag in the variable table
1404 1404
     variable_set('boincimport_import_private_msg_successful', '1');
1405 1405
     $_SESSION['boincimport_stage_selected'] = 'categories';
1406
-  }
1407
-  else {
1406
+    }
1407
+    else {
1408 1408
     // An error occurred.
1409 1409
     // $operations contains the operations that remained unprocessed.
1410 1410
     $error_operation = reset($operations);
1411 1411
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
1412
-  }
1413
-  drupal_set_message($message);
1412
+    }
1413
+    drupal_set_message($message);
1414 1414
   
1415
-  // Release the lock on the import process
1416
-  variable_del('boincimport_process_locked');
1417
-  drupal_goto('admin/boinc/import/process');
1415
+    // Release the lock on the import process
1416
+    variable_del('boincimport_process_locked');
1417
+    drupal_goto('admin/boinc/import/process');
1418 1418
 }
1419 1419
 
1420 1420
 
@@ -1427,196 +1427,196 @@  discard block
 block discarded – undo
1427 1427
  */
1428 1428
 function boincimport_forum_categories() {
1429 1429
   
1430
-  // Check whether forums have been successfully imported already
1431
-  if (variable_get('boincimport_import_forum_category_successful', 0)) {
1430
+    // Check whether forums have been successfully imported already
1431
+    if (variable_get('boincimport_import_forum_category_successful', 0)) {
1432 1432
     drupal_set_message(t('Note: forum container import has already run successfully'));
1433 1433
     watchdog(
1434
-      'boincimport', 'Note: forum container import has already run successfully',
1435
-      array(), WATCHDOG_INFO
1434
+        'boincimport', 'Note: forum container import has already run successfully',
1435
+        array(), WATCHDOG_INFO
1436 1436
     ); 
1437
-  }
1437
+    }
1438 1438
 
1439
-  if (!variable_get('boincimport_import_forum_category_started', 0)) {
1439
+    if (!variable_get('boincimport_import_forum_category_started', 0)) {
1440 1440
     // Could prepare database tables, if new fields are necessary, etc.
1441 1441
     variable_set('boincimport_import_forum_category_started', 1);
1442
-  }
1442
+    }
1443 1443
   
1444
-  $pre = variable_get('boincimport_table_prefix', '');
1444
+    $pre = variable_get('boincimport_table_prefix', '');
1445 1445
 
1446
-  // Retrieve the vocabulary vid named "Forums"
1447
-  //$forum_vid = variable_get('forum_nav_vocabulary', 0);
1448
-  $forum_vid = db_result(db_query('
1446
+    // Retrieve the vocabulary vid named "Forums"
1447
+    //$forum_vid = variable_get('forum_nav_vocabulary', 0);
1448
+    $forum_vid = db_result(db_query('
1449 1449
     SELECT vid FROM {vocabulary}
1450 1450
     WHERE name="%s"',
1451 1451
     'Forums'
1452
-  ));
1453
-  if (!$forum_vid) {
1452
+    ));
1453
+    if (!$forum_vid) {
1454 1454
     $forum_vocab = array(
1455
-      'name' => t('Forums'),
1456
-      'description' => t('The different forum categories / containers'),
1455
+        'name' => t('Forums'),
1456
+        'description' => t('The different forum categories / containers'),
1457 1457
     );
1458 1458
     taxonomy_save_vocabulary($forum_vocab);
1459 1459
     $forum_vid = db_result(db_query('
1460 1460
       SELECT vid FROM {vocabulary}
1461 1461
       WHERE name="%s"',
1462
-      'Forums'
1462
+        'Forums'
1463 1463
     ));
1464
-  }
1464
+    }
1465 1465
   
1466
-  // Get both categories and forums from BOINC
1467
-  db_set_active('boinc');
1468
-  $boinc_forum_categories = db_query('
1466
+    // Get both categories and forums from BOINC
1467
+    db_set_active('boinc');
1468
+    $boinc_forum_categories = db_query('
1469 1469
     SELECT id, name
1470 1470
     FROM %scategory
1471 1471
     ORDER BY orderID',
1472 1472
     $pre
1473
-  );
1474
-  $forum_category_count = mysql_num_rows($boinc_forum_categories);
1475
-  $boinc_forums = db_query('
1473
+    );
1474
+    $forum_category_count = mysql_num_rows($boinc_forum_categories);
1475
+    $boinc_forums = db_query('
1476 1476
     SELECT id, category, title, description, orderID
1477 1477
     FROM %sforum
1478 1478
     WHERE parent_type = 0
1479 1479
     ORDER BY category',
1480 1480
     $pre
1481
-  );
1482
-  $forum_count = mysql_num_rows($boinc_forums);
1483
-  db_set_active('default');
1481
+    );
1482
+    $forum_count = mysql_num_rows($boinc_forums);
1483
+    db_set_active('default');
1484 1484
 
1485
-  if (!$forum_category_count) {
1485
+    if (!$forum_category_count) {
1486 1486
     drupal_set_message(
1487
-      t('There were no forum containers found: Aborting script'), 'warning'
1487
+        t('There were no forum containers found: Aborting script'), 'warning'
1488 1488
     );
1489 1489
     watchdog('boincimport',
1490
-      'There were no forum containers found: Aborting script', array(), WATCHDOG_WARNING
1490
+        'There were no forum containers found: Aborting script', array(), WATCHDOG_WARNING
1491 1491
     );
1492 1492
     // Release the lock on the import process
1493 1493
     variable_del('boincimport_process_locked');
1494 1494
     return t('There were no forum containers found: Aborting script.');
1495
-  }
1496
-  if (!$forum_count) {
1495
+    }
1496
+    if (!$forum_count) {
1497 1497
     drupal_set_message(
1498
-      t('There were no forums found: Aborting script'), 'warning'
1498
+        t('There were no forums found: Aborting script'), 'warning'
1499 1499
     );
1500 1500
     watchdog('boincimport',
1501
-      'There were no forums found: Aborting script', array(), WATCHDOG_WARNING
1501
+        'There were no forums found: Aborting script', array(), WATCHDOG_WARNING
1502 1502
     );
1503 1503
     // Release the lock on the import process
1504 1504
     variable_del('boincimport_process_locked');
1505 1505
     return t('There were no forums found: Aborting script.');
1506
-  }
1506
+    }
1507 1507
 
1508
-  watchdog('boincimport',
1508
+    watchdog('boincimport',
1509 1509
     'Found %forum_count forums in %category_count containers: Beginning Import',
1510 1510
     array(
1511
-      '%forum_count' => $forum_count,
1512
-      '%category_count' => $forum_category_count,
1511
+        '%forum_count' => $forum_count,
1512
+        '%category_count' => $forum_category_count,
1513 1513
     ), WATCHDOG_INFO
1514
-  );
1515
-  
1516
-  $operations = array();
1517
-  $existing_categories = array();
1518
-  $existing_forums = array();
1519
-  $duplicate_categories = array();
1520
-  $duplicate_forums = array();
1521
-  $category_map = array();
1522
-  
1523
-  // Get the list of categories already in Drupal so as not to import any twice
1524
-  $category_tree = taxonomy_get_tree($forum_vid, 0, -1, 1);
1525
-  foreach ($category_tree as $term) {
1514
+    );
1515
+  
1516
+    $operations = array();
1517
+    $existing_categories = array();
1518
+    $existing_forums = array();
1519
+    $duplicate_categories = array();
1520
+    $duplicate_forums = array();
1521
+    $category_map = array();
1522
+  
1523
+    // Get the list of categories already in Drupal so as not to import any twice
1524
+    $category_tree = taxonomy_get_tree($forum_vid, 0, -1, 1);
1525
+    foreach ($category_tree as $term) {
1526 1526
     $existing_categories[] = $term->name;
1527
-  }
1527
+    }
1528 1528
   
1529
-  // Get the list of forums already in Drupal
1530
-  $result = db_query('
1529
+    // Get the list of forums already in Drupal
1530
+    $result = db_query('
1531 1531
     SELECT forum_id, tid FROM {boincimport_temp_forum}'
1532
-  );
1533
-  while ($row = db_fetch_object($result)) {
1532
+    );
1533
+    while ($row = db_fetch_object($result)) {
1534 1534
     $existing_forums[$row->forum_id] = $row->tid;
1535
-  }
1535
+    }
1536 1536
   
1537
-  // Create batches to process
1537
+    // Create batches to process
1538 1538
   
1539
-  // Set up the "hidden" category, if necessary
1540
-  // This is to support automatic hiding of empty categories
1541
-  $hidden_forum_tid = db_result(db_query('
1539
+    // Set up the "hidden" category, if necessary
1540
+    // This is to support automatic hiding of empty categories
1541
+    $hidden_forum_tid = db_result(db_query('
1542 1542
     SELECT tid FROM {term_data}
1543 1543
     WHERE vid = %d
1544 1544
     AND name = "%s"',
1545 1545
     $forum_vid, 'Hidden'
1546
-  ));
1547
-  if (!$hidden_forum_tid) {
1546
+    ));
1547
+    if (!$hidden_forum_tid) {
1548 1548
     $operations[] = array(
1549
-      'boincimport_forum_categories_op', array(
1549
+        'boincimport_forum_categories_op', array(
1550 1550
         NULL, $forum_vid, $pre, TRUE
1551
-      )
1551
+        )
1552 1552
     );
1553
-  }
1553
+    }
1554 1554
   
1555
-  // Import categories
1556
-  while ($boinc_forum_category = db_fetch_object($boinc_forum_categories)) {
1555
+    // Import categories
1556
+    while ($boinc_forum_category = db_fetch_object($boinc_forum_categories)) {
1557 1557
     if (in_array($boinc_forum_category->name, $existing_categories)) {
1558
-      // This category has already been imported
1559
-      $duplicate_categories[] = $boinc_forum_category->name;
1558
+        // This category has already been imported
1559
+        $duplicate_categories[] = $boinc_forum_category->name;
1560 1560
     }
1561 1561
     else {
1562
-      $operations[] = array(
1562
+        $operations[] = array(
1563 1563
         'boincimport_forum_categories_op', array(
1564
-          $boinc_forum_category, $forum_vid, $pre, FALSE
1564
+            $boinc_forum_category, $forum_vid, $pre, FALSE
1565 1565
         )
1566
-      );
1566
+        );
1567
+    }
1567 1568
     }
1568
-  }
1569 1569
   
1570
-  // Import forums
1571
-  while ($boinc_forum = db_fetch_object($boinc_forums)) {
1572
-     if (isset($existing_forums[$boinc_forum->id])) {
1573
-      // This forum has already been imported
1574
-      $duplicates[] = $boinc_forum->id;
1570
+    // Import forums
1571
+    while ($boinc_forum = db_fetch_object($boinc_forums)) {
1572
+        if (isset($existing_forums[$boinc_forum->id])) {
1573
+        // This forum has already been imported
1574
+        $duplicates[] = $boinc_forum->id;
1575 1575
     }
1576 1576
     else {
1577
-      $operations[] = array(
1577
+        $operations[] = array(
1578 1578
         'boincimport_forums_op', array(
1579
-          $boinc_forum, $forum_vid, $pre
1579
+            $boinc_forum, $forum_vid, $pre
1580 1580
         )
1581
-      );
1581
+        );
1582
+    }
1582 1583
     }
1583
-  }
1584 1584
   
1585
-  // Report any duplicates that were skipped
1586
-  $skipped_message = array();
1587
-  $categories_skipped = count($duplicate_categories);
1588
-  $forums_skipped = count($duplicate_forums);
1589
-  if ($categories_skipped) {
1585
+    // Report any duplicates that were skipped
1586
+    $skipped_message = array();
1587
+    $categories_skipped = count($duplicate_categories);
1588
+    $forums_skipped = count($duplicate_forums);
1589
+    if ($categories_skipped) {
1590 1590
     $skipped_message[] = format_plural(
1591
-      $categories_skipped,
1592
-      '1 container',
1593
-      '@count containers'
1591
+        $categories_skipped,
1592
+        '1 container',
1593
+        '@count containers'
1594 1594
     );
1595
-  }
1596
-  if ($forums_skipped) {
1595
+    }
1596
+    if ($forums_skipped) {
1597 1597
     $skipped_message[] = format_plural(
1598
-      $forums_skipped,
1599
-      '1 forum',
1600
-      '@count forums'
1598
+        $forums_skipped,
1599
+        '1 forum',
1600
+        '@count forums'
1601 1601
     );
1602
-  }
1603
-  if ($skipped_message) {
1602
+    }
1603
+    if ($skipped_message) {
1604 1604
     drupal_set_message(t('Skipped @forums that were already imported',
1605
-      array('@forums' => implode(' and ', $skipped_message))
1605
+        array('@forums' => implode(' and ', $skipped_message))
1606 1606
     ));
1607
-  }
1607
+    }
1608 1608
   
1609
-  // Create and run the batch
1610
-  $batch = array(
1609
+    // Create and run the batch
1610
+    $batch = array(
1611 1611
     'operations' => $operations,
1612 1612
     'finished' => 'boincimport_forums_finished',
1613 1613
     'title' => t('Importing forums'),
1614 1614
     'init_message' => t('Beginning forum import...'),
1615 1615
     'progress_message' => t('Processed @current out of @total forums.'),
1616 1616
     'error_message' => t('Forum import has encountered an error.'),
1617
-  );
1617
+    );
1618 1618
   
1619
-  batch_set($batch);
1619
+    batch_set($batch);
1620 1620
 }
1621 1621
 
1622 1622
 /**
@@ -1625,92 +1625,92 @@  discard block
 block discarded – undo
1625 1625
  */
1626 1626
 function boincimport_forum_categories_op($category, $forum_vid, $pre, $create_hidden, &$context) {
1627 1627
   
1628
-  // Set term parameters for categories
1629
-  $forum_id = 0;
1630
-  $parent_id = 0;
1631
-  $description = '';
1632
-  $weight = 0;
1633
-  $hidden = FALSE;
1628
+    // Set term parameters for categories
1629
+    $forum_id = 0;
1630
+    $parent_id = 0;
1631
+    $description = '';
1632
+    $weight = 0;
1633
+    $hidden = FALSE;
1634 1634
   
1635
-  $category_map = variable_get('boincimport_forum_category_map', array());
1635
+    $category_map = variable_get('boincimport_forum_category_map', array());
1636 1636
   
1637
-  if (!$category AND $create_hidden) {
1637
+    if (!$category AND $create_hidden) {
1638 1638
     // Create the special "hidden" container
1639 1639
     $category = new stdClass();
1640 1640
     $category->name = 'Hidden';
1641 1641
     $category->id = 0;
1642 1642
     $hidden = TRUE;
1643
-  }
1644
-  else {
1643
+    }
1644
+    else {
1645 1645
     // If this container is empty, put it into the hidden container
1646 1646
     db_set_active('boinc');
1647 1647
     $forums_contained = db_result(db_query('
1648 1648
       SELECT count(*) FROM %sforum
1649 1649
       WHERE parent_type = 0
1650 1650
       AND category = %d',
1651
-      $pre, $category->id));
1651
+        $pre, $category->id));
1652 1652
     db_set_active('default');
1653 1653
     if (!$forums_contained) {
1654
-      $parent_id = $category_map[0];
1655
-      $hidden = TRUE;
1654
+        $parent_id = $category_map[0];
1655
+        $hidden = TRUE;
1656
+    }
1656 1657
     }
1657
-  }
1658 1658
   
1659
-  $forum = array(
1659
+    $forum = array(
1660 1660
     'name' => $category->name,
1661 1661
     'vid' => $forum_vid,
1662 1662
     'description' => $description,
1663 1663
     'parent' => $parent_id,
1664 1664
     'weight' => $weight,
1665
-  );
1666
-  $forum['description'] = strip_tags($forum['description']);
1665
+    );
1666
+    $forum['description'] = strip_tags($forum['description']);
1667 1667
 
1668
-  taxonomy_save_term($forum);
1669
-  $success = isset($forum['tid']);
1668
+    taxonomy_save_term($forum);
1669
+    $success = isset($forum['tid']);
1670 1670
   
1671
-  // Serialize the forum containers
1672
-  $containers = variable_get('forum_containers', array());
1673
-  $containers[] = $forum['tid'];
1674
-  variable_set('forum_containers', $containers);
1671
+    // Serialize the forum containers
1672
+    $containers = variable_get('forum_containers', array());
1673
+    $containers[] = $forum['tid'];
1674
+    variable_set('forum_containers', $containers);
1675 1675
   
1676
-  // Note the taxonomy ID for mapping forums to categories
1677
-  $category_map[$category->id] = $forum['tid'];
1678
-  variable_set('boincimport_forum_category_map', $category_map);
1676
+    // Note the taxonomy ID for mapping forums to categories
1677
+    $category_map[$category->id] = $forum['tid'];
1678
+    variable_set('boincimport_forum_category_map', $category_map);
1679 1679
   
1680
-  boincimport_forum_set_permissions($forum, $hidden);
1680
+    boincimport_forum_set_permissions($forum, $hidden);
1681 1681
   
1682
-  $message = '';
1683
-  if ($success) {
1682
+    $message = '';
1683
+    if ($success) {
1684 1684
     // Store some result for post-processing in the finished callback.
1685 1685
     if (!$category AND $create_hidden) {
1686
-      $message = "Created special hidden container";
1686
+        $message = "Created special hidden container";
1687 1687
     }
1688 1688
     else {
1689
-      $context['results']['categories']['success'][] = $category->id;
1690
-      $message = "Successfully imported container {$category->id}";
1689
+        $context['results']['categories']['success'][] = $category->id;
1690
+        $message = "Successfully imported container {$category->id}";
1691 1691
     }
1692
-  }
1693
-  else {
1692
+    }
1693
+    else {
1694 1694
     $context['results']['categories']['failure'][] = $category->id;
1695 1695
     $message = "Failed to import container {$category->id}!";
1696 1696
     watchdog('boincimport',
1697
-      'Failed to import container @id!',
1698
-      array('@id' => $category->id), WATCHDOG_WARNING
1697
+        'Failed to import container @id!',
1698
+        array('@id' => $category->id), WATCHDOG_WARNING
1699 1699
     ); 
1700
-  }
1700
+    }
1701 1701
   
1702
-  // Update our progress information.
1703
-  $context['sandbox']['progress']++;
1704
-  $context['sandbox']['current_category'] = $category->id;
1705
-  $context['message'] = $message;
1702
+    // Update our progress information.
1703
+    $context['sandbox']['progress']++;
1704
+    $context['sandbox']['current_category'] = $category->id;
1705
+    $context['message'] = $message;
1706 1706
 
1707
-  // Update the progress for the batch engine
1708
-  if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
1707
+    // Update the progress for the batch engine
1708
+    if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
1709 1709
     $context['finished'] = 1;
1710
-  }
1711
-  else {
1710
+    }
1711
+    else {
1712 1712
     $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
1713
-  }
1713
+    }
1714 1714
 }
1715 1715
 
1716 1716
 /**
@@ -1719,40 +1719,40 @@  discard block
 block discarded – undo
1719 1719
  */
1720 1720
 function boincimport_forums_op($boincforum, $forum_vid, $pre = '', &$context) {
1721 1721
   
1722
-  $hidden_forum = FALSE;
1723
-  $open_forum = FALSE;
1724
-  $category_map = variable_get('boincimport_forum_category_map', array());
1725
-  
1726
-  // Set term parameters for forums
1727
-  $forum_id = $boincforum->id;
1728
-  $parent_id = isset($category_map[$boincforum->category]) ? $category_map[$boincforum->category] : $category_map[0];
1729
-  $name = $boincforum->title;
1730
-  $description = $boincforum->description;
1731
-  $weight = $boincforum->orderID;
1732
-  if ($parent_id == $category_map[0]) {
1722
+    $hidden_forum = FALSE;
1723
+    $open_forum = FALSE;
1724
+    $category_map = variable_get('boincimport_forum_category_map', array());
1725
+  
1726
+    // Set term parameters for forums
1727
+    $forum_id = $boincforum->id;
1728
+    $parent_id = isset($category_map[$boincforum->category]) ? $category_map[$boincforum->category] : $category_map[0];
1729
+    $name = $boincforum->title;
1730
+    $description = $boincforum->description;
1731
+    $weight = $boincforum->orderID;
1732
+    if ($parent_id == $category_map[0]) {
1733 1733
     // If this forum is hidden, flag for appropriate access controls
1734 1734
     $hidden_forum = TRUE;
1735
-  }
1736
-  if ($name == 'Getting Started') {
1735
+    }
1736
+    if ($name == 'Getting Started') {
1737 1737
     // Must allow users to post in this forum even if they have no credit!
1738 1738
     $open_forum = TRUE;
1739
-  }
1739
+    }
1740 1740
   
1741
-  // Try to detect a BOINC news forum and flag it so that news can be
1742
-  // imported into a Drupal news content type later
1743
-  if ($name == 'News') {
1741
+    // Try to detect a BOINC news forum and flag it so that news can be
1742
+    // imported into a Drupal news content type later
1743
+    if ($name == 'News') {
1744 1744
     // Save the ID of the News forum for later import
1745 1745
     variable_set('boincimport_news_forum_id', $forum_id);
1746 1746
     $success = TRUE;
1747
-  }
1748
-  else {
1747
+    }
1748
+    else {
1749 1749
     // Save all other forums as taxonomy terms
1750 1750
     $forum = array(
1751
-      'name' => $name,
1752
-      'vid' => $forum_vid,
1753
-      'description' => $description,
1754
-      'parent' => $parent_id,
1755
-      'weight' => $weight,
1751
+        'name' => $name,
1752
+        'vid' => $forum_vid,
1753
+        'description' => $description,
1754
+        'parent' => $parent_id,
1755
+        'weight' => $weight,
1756 1756
     );
1757 1757
     $forum['description'] = strip_tags($forum['description']);
1758 1758
 
@@ -1764,31 +1764,31 @@  discard block
 block discarded – undo
1764 1764
     
1765 1765
     // Set access controls
1766 1766
     boincimport_forum_set_permissions($forum, $hidden_forum, $open_forum);
1767
-  }
1767
+    }
1768 1768
   
1769
-  $message = '';
1770
-  if ($success) {
1769
+    $message = '';
1770
+    if ($success) {
1771 1771
     // Store some result for post-processing in the finished callback.
1772 1772
     $context['results']['forums']['success'][] = $forum_id;
1773 1773
     $message = "Successfully imported forum {$forum_id}";
1774
-  }
1775
-  else {
1774
+    }
1775
+    else {
1776 1776
     $context['results']['forums']['failure'][] = $forum_id;
1777 1777
     $message = "Failed to import forum {$forum_id}!";
1778
-  }
1778
+    }
1779 1779
   
1780
-  // Update our progress information.
1781
-  $context['sandbox']['progress']++;
1782
-  $context['sandbox']['current_forum'] = $forum_id;
1783
-  $context['message'] = $message;
1780
+    // Update our progress information.
1781
+    $context['sandbox']['progress']++;
1782
+    $context['sandbox']['current_forum'] = $forum_id;
1783
+    $context['message'] = $message;
1784 1784
 
1785
-  // Update the progress for the batch engine
1786
-  if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
1785
+    // Update the progress for the batch engine
1786
+    if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
1787 1787
     $context['finished'] = 1;
1788
-  }
1789
-  else {
1788
+    }
1789
+    else {
1790 1790
     $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
1791
-  }
1791
+    }
1792 1792
 }
1793 1793
 
1794 1794
 /**
@@ -1796,46 +1796,46 @@  discard block
 block discarded – undo
1796 1796
  */
1797 1797
 function boincimport_forum_set_permissions($forum, $hidden = FALSE, $open = FALSE) {
1798 1798
   
1799
-  // Set access controls
1800
-  $forum_perms = array();
1801
-  $role_map = array_flip(user_roles());
1802
-  $forum_perms[$role_map['anonymous user']] = array(
1799
+    // Set access controls
1800
+    $forum_perms = array();
1801
+    $role_map = array_flip(user_roles());
1802
+    $forum_perms[$role_map['anonymous user']] = array(
1803 1803
     'view' => (int) !$hidden,
1804 1804
     'update' => 0,
1805 1805
     'delete' => 0,
1806 1806
     'create' => 0,
1807
-  );
1808
-  $forum_perms[$role_map['authenticated user']] = array(
1807
+    );
1808
+    $forum_perms[$role_map['authenticated user']] = array(
1809 1809
     'view' => (int) !$hidden,
1810 1810
     'update' => 0,
1811 1811
     'delete' => 0,
1812 1812
     'create' => 0,
1813
-  );
1814
-  $forum_perms[$role_map['community member']] = array(
1813
+    );
1814
+    $forum_perms[$role_map['community member']] = array(
1815 1815
     'view' => (int) !$hidden,
1816 1816
     'update' => 0,
1817 1817
     'delete' => 0,
1818 1818
     'create' => (int) $open,
1819
-  );
1820
-  $forum_perms[$role_map['verified contributor']] = array(
1819
+    );
1820
+    $forum_perms[$role_map['verified contributor']] = array(
1821 1821
     'view' => (int) !$hidden,
1822 1822
     'update' => 0,
1823 1823
     'delete' => 0,
1824 1824
     'create' => (int) !$hidden,
1825
-  );
1826
-  $forum_perms[$role_map['moderator']] = array(
1825
+    );
1826
+    $forum_perms[$role_map['moderator']] = array(
1827 1827
     'view' => (int) !$hidden,
1828 1828
     'update' => (int) !$hidden,
1829 1829
     'delete' => 0,
1830 1830
     'create' => (int) !$hidden,
1831
-  );
1832
-  $forum_perms[$role_map['administrator']] = array(
1831
+    );
1832
+    $forum_perms[$role_map['administrator']] = array(
1833 1833
     'view' => 1,
1834 1834
     'update' => 1,
1835 1835
     'delete' => 1,
1836 1836
     'create' => 1,
1837
-  );
1838
-  foreach ($forum_perms as $role => $perm) {
1837
+    );
1838
+    foreach ($forum_perms as $role => $perm) {
1839 1839
     db_query('
1840 1840
       INSERT INTO {forum_access}
1841 1841
       SET  tid = %d, rid = %d,
@@ -1844,61 +1844,61 @@  discard block
 block discarded – undo
1844 1844
       ON DUPLICATE KEY UPDATE
1845 1845
         grant_view = %d, grant_update = %d,
1846 1846
         grant_delete = %d, grant_create = %d',
1847
-      $forum['tid'], $role,
1848
-      $perm['view'], $perm['update'],
1849
-      $perm['delete'], $perm['create'],
1850
-      $perm['view'], $perm['update'],
1851
-      $perm['delete'], $perm['create']);
1852
-  }
1847
+        $forum['tid'], $role,
1848
+        $perm['view'], $perm['update'],
1849
+        $perm['delete'], $perm['create'],
1850
+        $perm['view'], $perm['update'],
1851
+        $perm['delete'], $perm['create']);
1852
+    }
1853 1853
 }
1854 1854
 
1855 1855
 /**
1856 1856
  * Batch 'finished' callback
1857 1857
  */
1858 1858
 function boincimport_forums_finished($success, $results, $operations) {
1859
-  if ($success) {
1859
+    if ($success) {
1860 1860
     // Let's count our successes
1861 1861
     $categories_imported = count($results['categories']['success']);
1862 1862
     $forums_imported = count($results['forums']['success']);
1863 1863
     
1864 1864
     $success_message = array();
1865 1865
     if ($categories_imported) {
1866
-      $success_message[] = format_plural(
1866
+        $success_message[] = format_plural(
1867 1867
         $categories_imported,
1868 1868
         '1 container',
1869 1869
         '@count containers'
1870
-      );
1870
+        );
1871 1871
     }
1872 1872
     if ($forums_imported) {
1873
-      $success_message[] = format_plural(
1873
+        $success_message[] = format_plural(
1874 1874
         $forums_imported,
1875 1875
         '1 forum',
1876 1876
         '@count forums'
1877
-      );
1877
+        );
1878 1878
     }
1879 1879
     $message = t(
1880
-      'Successfully imported @forums',
1881
-      array('@forums' => implode(' and ', $success_message))
1880
+        'Successfully imported @forums',
1881
+        array('@forums' => implode(' and ', $success_message))
1882 1882
     );
1883 1883
     watchdog('boincimport',
1884
-      'Successfully imported @forums',
1885
-      array('@forums' => implode(' and ', $success_message)), WATCHDOG_INFO
1884
+        'Successfully imported @forums',
1885
+        array('@forums' => implode(' and ', $success_message)), WATCHDOG_INFO
1886 1886
     ); 
1887 1887
     // Set the forum import successful flag in the variable table
1888 1888
     variable_set('boincimport_import_forum_successful', '1');
1889 1889
     $_SESSION['boincimport_stage_selected'] = 'topics';
1890
-  }
1891
-  else {
1890
+    }
1891
+    else {
1892 1892
     // An error occurred.
1893 1893
     // $operations contains the operations that remained unprocessed.
1894 1894
     $error_operation = reset($operations);
1895 1895
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
1896
-  }
1897
-  drupal_set_message($message);
1896
+    }
1897
+    drupal_set_message($message);
1898 1898
   
1899
-  // Release the lock on the import process
1900
-  variable_del('boincimport_process_locked');
1901
-  drupal_goto('admin/boinc/import/process');
1899
+    // Release the lock on the import process
1900
+    variable_del('boincimport_process_locked');
1901
+    drupal_goto('admin/boinc/import/process');
1902 1902
 }
1903 1903
 
1904 1904
 
@@ -1910,82 +1910,82 @@  discard block
 block discarded – undo
1910 1910
  */
1911 1911
 function boincimport_forum_topics() {
1912 1912
   
1913
-  // Check whether topics have been successfully imported already
1914
-  if (variable_get('boincimport_import_topic_successful', 0)) {
1913
+    // Check whether topics have been successfully imported already
1914
+    if (variable_get('boincimport_import_topic_successful', 0)) {
1915 1915
     drupal_set_message(t('Topic import has already run successfully'), 'warning');
1916 1916
     watchdog(
1917
-      'boincimport', 'Topic import has already run successfully',
1918
-      array(), WATCHDOG_WARNING
1917
+        'boincimport', 'Topic import has already run successfully',
1918
+        array(), WATCHDOG_WARNING
1919 1919
     );
1920 1920
     // Release the lock on the import process
1921 1921
     variable_del('boincimport_process_locked');
1922 1922
     return;
1923
-  }
1923
+    }
1924 1924
 
1925
-  if (!variable_get('boincimport_import_topic_started', 0)) {
1925
+    if (!variable_get('boincimport_import_topic_started', 0)) {
1926 1926
     // Could prepare database tables, if new fields are necessary, etc.
1927 1927
     variable_set('boincimport_import_topic_started', 1);
1928
-  }
1928
+    }
1929 1929
   
1930
-  $pre = variable_get('boincimport_table_prefix', '');
1930
+    $pre = variable_get('boincimport_table_prefix', '');
1931 1931
 
1932
-  // Get the count of non-team topics to import
1933
-  db_set_active('boinc');
1934
-  $topic_count = db_result(db_query('
1932
+    // Get the count of non-team topics to import
1933
+    db_set_active('boinc');
1934
+    $topic_count = db_result(db_query('
1935 1935
     SELECT COUNT(DISTINCT t.id)
1936 1936
     FROM %sthread t
1937 1937
     JOIN %sforum f ON f.id = t.forum
1938 1938
     JOIN %spost p ON p.thread = t.id
1939 1939
     WHERE f.parent_type = 0',
1940 1940
     $pre, $pre, $pre
1941
-  ));
1942
-  db_set_active('default');
1941
+    ));
1942
+    db_set_active('default');
1943 1943
 
1944
-  if (!$topic_count) {
1944
+    if (!$topic_count) {
1945 1945
     drupal_set_message(
1946
-      t('There were no topics found: Aborting script'), 'warning'
1946
+        t('There were no topics found: Aborting script'), 'warning'
1947 1947
     );
1948 1948
     watchdog('boincimport',
1949
-      'There were no topics found: Aborting script', array(), WATCHDOG_WARNING
1949
+        'There were no topics found: Aborting script', array(), WATCHDOG_WARNING
1950 1950
     );
1951 1951
     // Release the lock on the import process
1952 1952
     variable_del('boincimport_process_locked');
1953 1953
     return t('There were no topics found: Aborting script.');
1954
-  }
1954
+    }
1955 1955
 
1956
-  watchdog('boincimport',
1956
+    watchdog('boincimport',
1957 1957
     'Found %count topics: Beginning Import',
1958 1958
     array('%count' => $topic_count), WATCHDOG_INFO
1959
-  );
1959
+    );
1960 1960
   
1961
-  $operations = array();
1962
-  $batch_size = 100;
1961
+    $operations = array();
1962
+    $batch_size = 100;
1963 1963
   
1964
-  // Create batches to process
1965
-  for ($offset = 0; $offset < $topic_count; $offset+=$batch_size) {
1964
+    // Create batches to process
1965
+    for ($offset = 0; $offset < $topic_count; $offset+=$batch_size) {
1966 1966
     $topics_per_batch = $batch_size;
1967 1967
     if ($offset + $batch_size > $topic_count) {
1968
-      $topics_per_batch = $topic_count - $offset;
1968
+        $topics_per_batch = $topic_count - $offset;
1969 1969
     }
1970 1970
     $operations[] = array(
1971
-      'boincimport_topics_op', array(
1971
+        'boincimport_topics_op', array(
1972 1972
         $offset, $topics_per_batch, $pre
1973
-      )
1973
+        )
1974 1974
     );
1975
-  }
1975
+    }
1976 1976
   
1977
-  $batch = array(
1977
+    $batch = array(
1978 1978
     'operations' => $operations,
1979 1979
     'finished' => 'boincimport_topics_finished',
1980 1980
     'title' => t('Importing topics'),
1981 1981
     'init_message' => t('Beginning topic import...'),
1982 1982
     'progress_message' => t('Processed @current out of @total batches (@size topics per batch).', array(
1983
-      '@size' => $batch_size,
1983
+        '@size' => $batch_size,
1984 1984
     )),
1985 1985
     'error_message' => t('Topic import has encountered an error.'),
1986
-  );
1986
+    );
1987 1987
   
1988
-  batch_set($batch);
1988
+    batch_set($batch);
1989 1989
 }
1990 1990
 
1991 1991
 /**
@@ -1993,18 +1993,18 @@  discard block
 block discarded – undo
1993 1993
  * Create a Drupal node from the given BOINC topic object
1994 1994
  */
1995 1995
 function boincimport_topics_op($offset, $batch_size, $pre = '', &$context) {
1996
-  // Initialize the batch, if needed
1997
-  if (!isset($context['sandbox']['progress'])) {
1996
+    // Initialize the batch, if needed
1997
+    if (!isset($context['sandbox']['progress'])) {
1998 1998
     $context['sandbox']['progress'] = 0;
1999 1999
     $context['sandbox']['max'] = $batch_size;
2000
-  }
2000
+    }
2001 2001
   
2002
-  $input_format = variable_get('boincimport_input_format', 0);
2003
-  $news_forum_id = variable_get('boincimport_news_forum_id', 0);
2002
+    $input_format = variable_get('boincimport_input_format', 0);
2003
+    $news_forum_id = variable_get('boincimport_news_forum_id', 0);
2004 2004
   
2005
-  // Get the topic to import
2006
-  db_set_active('boinc');
2007
-  $topics = db_query('
2005
+    // Get the topic to import
2006
+    db_set_active('boinc');
2007
+    $topics = db_query('
2008 2008
     SELECT DISTINCT t.id, t.title, t.owner, t.forum, t.locked, t.hidden,
2009 2009
         t.sticky, t.timestamp, t.create_time
2010 2010
     FROM %sthread t
@@ -2014,10 +2014,10 @@  discard block
 block discarded – undo
2014 2014
     ORDER BY t.id ASC
2015 2015
     LIMIT %d,%d',
2016 2016
     $pre, $pre, $pre, $offset, $batch_size
2017
-  );
2018
-  db_set_active('default');
2017
+    );
2018
+    db_set_active('default');
2019 2019
   
2020
-  while ($topic = db_fetch_object($topics)) {
2020
+    while ($topic = db_fetch_object($topics)) {
2021 2021
     
2022 2022
     $error_detail = '';
2023 2023
     
@@ -2030,52 +2030,52 @@  discard block
 block discarded – undo
2030 2030
       WHERE thread = %d
2031 2031
       ORDER BY timestamp ASC
2032 2032
       LIMIT 1',
2033
-      $pre, $topic->id
2033
+        $pre, $topic->id
2034 2034
     ));
2035 2035
     db_set_active('default');
2036 2036
       
2037 2037
     $duplicate = db_result(db_query('
2038 2038
       SELECT COUNT(*) FROM {boincimport_temp_topic}
2039 2039
       WHERE topic_id = %d',
2040
-      $topic->id
2040
+        $topic->id
2041 2041
     ));
2042 2042
     
2043 2043
     if ($duplicate OR !$post) {
2044
-      $success = FALSE;
2044
+        $success = FALSE;
2045 2045
     }
2046 2046
     
2047 2047
     else {
2048
-      // Get the user and term IDs along with other data to define the topic
2049
-      $uid = boincuser_lookup_uid($topic->owner);
2050
-      $tid = db_result(db_query('
2048
+        // Get the user and term IDs along with other data to define the topic
2049
+        $uid = boincuser_lookup_uid($topic->owner);
2050
+        $tid = db_result(db_query('
2051 2051
         SELECT tid FROM {boincimport_temp_forum}
2052 2052
         WHERE forum_id = %d',
2053 2053
         $topic->forum
2054
-      ));
2055
-      if (!$topic->owner) {
2054
+        ));
2055
+        if (!$topic->owner) {
2056 2056
         $uid = 0;
2057
-      }
2057
+        }
2058 2058
       
2059
-      $node_type = 'forum';
2060
-      $promote = 0;
2061
-      $comment = ($topic->locked) ? 1 : 2;
2059
+        $node_type = 'forum';
2060
+        $promote = 0;
2061
+        $comment = ($topic->locked) ? 1 : 2;
2062 2062
       
2063
-      $post->content = _boincimport_strip_bbcode($post->content);
2064
-      $post->content = _boincimport_text_sanitize($post->content);
2065
-      $teaser = node_teaser($post->content);
2063
+        $post->content = _boincimport_strip_bbcode($post->content);
2064
+        $post->content = _boincimport_text_sanitize($post->content);
2065
+        $teaser = node_teaser($post->content);
2066 2066
       
2067
-      if ($topic->timestamp < $topic->create_time) {
2067
+        if ($topic->timestamp < $topic->create_time) {
2068 2068
         $topic->timestamp = $topic->create_time;
2069
-      }
2069
+        }
2070 2070
       
2071
-      // If dealing with a News topic, be sure it is imported as such
2072
-      if ($news_forum_id AND $topic->forum == $news_forum_id) {
2071
+        // If dealing with a News topic, be sure it is imported as such
2072
+        if ($news_forum_id AND $topic->forum == $news_forum_id) {
2073 2073
         $node_type = 'news';
2074 2074
         $promote = 1;
2075
-      }
2075
+        }
2076 2076
 
2077
-      // Construct the thread as a forum topic node
2078
-      $node = array(
2077
+        // Construct the thread as a forum topic node
2078
+        $node = array(
2079 2079
         'type' => $node_type,
2080 2080
         'title' => $topic->title,
2081 2081
         'uid' => $uid,
@@ -2089,61 +2089,61 @@  discard block
 block discarded – undo
2089 2089
         'sticky' => $topic->sticky,
2090 2090
         'format' => $input_format,
2091 2091
         'teaser' => $teaser,
2092
-      );
2093
-      $node['tid'] = $tid;
2092
+        );
2093
+        $node['tid'] = $tid;
2094 2094
       
2095
-      // Save the topic node
2096
-      $node = (object) $node; // node_save requires an object form
2097
-      node_save($node);
2098
-      taxonomy_node_save($node, array($tid));
2099
-      $success = ($node->nid) ? TRUE : FALSE;
2100
-      if ($success) {
2095
+        // Save the topic node
2096
+        $node = (object) $node; // node_save requires an object form
2097
+        node_save($node);
2098
+        taxonomy_node_save($node, array($tid));
2099
+        $success = ($node->nid) ? TRUE : FALSE;
2100
+        if ($success) {
2101 2101
         $success = db_query('
2102 2102
           INSERT INTO {boincimport_temp_topic} (topic_id, post_id, nid)
2103 2103
           VALUES (%d, %d, %d)', $topic->id, $post->id, $node->nid
2104 2104
         );
2105 2105
         if ($success) {
2106
-          // Hack to keep the topics in correct order
2107
-          $success = db_query('UPDATE {node_comment_statistics} SET last_comment_timestamp = %d WHERE nid = %d', $node->created, $node->nid);
2108
-          if (!$success) {
2106
+            // Hack to keep the topics in correct order
2107
+            $success = db_query('UPDATE {node_comment_statistics} SET last_comment_timestamp = %d WHERE nid = %d', $node->created, $node->nid);
2108
+            if (!$success) {
2109 2109
             $error_detail = 'topic imported, but failed to set last comment timestamp';
2110
-          }
2110
+            }
2111 2111
         }
2112 2112
         else {
2113
-          $error_detail = 'topic node saved, but failed to link in boincimport_temp_topic table';
2113
+            $error_detail = 'topic node saved, but failed to link in boincimport_temp_topic table';
2114 2114
         }
2115
-      }
2116
-      else {
2115
+        }
2116
+        else {
2117 2117
         $error_detail = 'failed to save topic node to database';
2118
-      }
2118
+        }
2119 2119
     }
2120 2120
     
2121 2121
     // See if the import worked
2122 2122
     $message = '';
2123 2123
     if ($success) {
2124
-      // Store some result for post-processing in the finished callback.
2125
-      $context['results']['success'][] = $topic->id;
2126
-      $message = "Successfully imported topic {$topic->id}";
2124
+        // Store some result for post-processing in the finished callback.
2125
+        $context['results']['success'][] = $topic->id;
2126
+        $message = "Successfully imported topic {$topic->id}";
2127 2127
     }
2128 2128
     elseif ($duplicate) {
2129
-      $context['results']['duplicate'][] = $topic->id;
2130
-      $message = "Topic {$topic->id} was already imported";
2129
+        $context['results']['duplicate'][] = $topic->id;
2130
+        $message = "Topic {$topic->id} was already imported";
2131 2131
     }
2132 2132
     elseif (!$post) {
2133
-      $context['results']['empty'][] = $topic->id;
2134
-      $message = "Skipping topic {$topic->id} as empty";
2133
+        $context['results']['empty'][] = $topic->id;
2134
+        $message = "Skipping topic {$topic->id} as empty";
2135 2135
     }
2136 2136
     else {
2137
-      $context['results']['failure'][] = $topic->id;
2138
-      $message = "Failed to import topic {$topic->id}!";
2139
-      watchdog('boincimport',
2137
+        $context['results']['failure'][] = $topic->id;
2138
+        $message = "Failed to import topic {$topic->id}!";
2139
+        watchdog('boincimport',
2140 2140
         'Failed to import topic @id! (@error)',
2141 2141
         array(
2142
-          '@id' => $topic->id,
2143
-          '@error' => $error_detail,
2142
+            '@id' => $topic->id,
2143
+            '@error' => $error_detail,
2144 2144
         ),
2145 2145
         WATCHDOG_WARNING
2146
-      ); 
2146
+        ); 
2147 2147
     }
2148 2148
     
2149 2149
     // Update our progress information.
@@ -2153,54 +2153,54 @@  discard block
 block discarded – undo
2153 2153
 
2154 2154
     // Update the progress for the batch engine
2155 2155
     if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
2156
-      $context['finished'] = 1;
2156
+        $context['finished'] = 1;
2157 2157
     }
2158 2158
     else {
2159
-      $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
2159
+        $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
2160
+    }
2160 2161
     }
2161
-  }
2162 2162
 }
2163 2163
 
2164 2164
 /**
2165 2165
  * Batch 'finished' callback
2166 2166
  */
2167 2167
 function boincimport_topics_finished($success, $results, $operations) {
2168
-  if ($success) {
2168
+    if ($success) {
2169 2169
     // Let's count our successes
2170 2170
     $total_imported = count($results['success']);
2171 2171
     $duplicates = count($results['duplicate']);
2172 2172
     $empty_topics = count($results['empty']);
2173 2173
     $message = t(
2174
-      'Successfully imported @count topics (skipped @duplicates already imported, @abandoned empty topics)',
2175
-      array(
2174
+        'Successfully imported @count topics (skipped @duplicates already imported, @abandoned empty topics)',
2175
+        array(
2176 2176
         '@count' => $total_imported,
2177 2177
         '@duplicates' => $duplicates,
2178 2178
         '@abandoned' => $empty_topics,
2179
-      )
2179
+        )
2180 2180
     );
2181 2181
     watchdog('boincimport',
2182
-      'Successfully imported @count topics (skipped @duplicates already imported, @abandoned empty topics).',
2183
-      array(
2182
+        'Successfully imported @count topics (skipped @duplicates already imported, @abandoned empty topics).',
2183
+        array(
2184 2184
         '@count' => $total_imported,
2185 2185
         '@duplicates' => $duplicates,
2186 2186
         '@abandoned' => $empty_topics,
2187
-      ), WATCHDOG_INFO
2187
+        ), WATCHDOG_INFO
2188 2188
     ); 
2189 2189
     // Set the topic import successful flag in the variable table
2190 2190
     variable_set('boincimport_import_topic_successful', '1');
2191 2191
     $_SESSION['boincimport_stage_selected'] = 'posts';
2192
-  }
2193
-  else {
2192
+    }
2193
+    else {
2194 2194
     // An error occurred.
2195 2195
     // $operations contains the operations that remained unprocessed.
2196 2196
     $error_operation = reset($operations);
2197 2197
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
2198
-  }
2199
-  drupal_set_message($message);
2198
+    }
2199
+    drupal_set_message($message);
2200 2200
   
2201
-  // Release the lock on the import process
2202
-  variable_del('boincimport_process_locked');
2203
-  drupal_goto('admin/boinc/import/process');
2201
+    // Release the lock on the import process
2202
+    variable_del('boincimport_process_locked');
2203
+    drupal_goto('admin/boinc/import/process');
2204 2204
 }
2205 2205
 
2206 2206
 
@@ -2213,91 +2213,91 @@  discard block
 block discarded – undo
2213 2213
  */
2214 2214
 function boincimport_forum_posts() {
2215 2215
   
2216
-  // Check whether forum posts have been successfully imported already
2217
-  if (variable_get('boincimport_import_post_successful', 0)) {
2216
+    // Check whether forum posts have been successfully imported already
2217
+    if (variable_get('boincimport_import_post_successful', 0)) {
2218 2218
     drupal_set_message(t('Forum post import has already run successfully'), 'warning');
2219 2219
     watchdog(
2220
-      'boincimport', 'Forum post import has already run successfully',
2221
-      array(), WATCHDOG_WARNING
2220
+        'boincimport', 'Forum post import has already run successfully',
2221
+        array(), WATCHDOG_WARNING
2222 2222
     );
2223 2223
     // Release the lock on the import process
2224 2224
     variable_del('boincimport_process_locked');
2225 2225
     return;
2226
-  }
2226
+    }
2227 2227
 
2228
-  if (!variable_get('boincimport_import_post_started', 0)) {
2228
+    if (!variable_get('boincimport_import_post_started', 0)) {
2229 2229
     // Could prepare database tables, if new fields are necessary, etc.
2230 2230
     variable_set('boincimport_import_post_started', 1);
2231
-  }
2231
+    }
2232 2232
   
2233
-  $pre = variable_get('boincimport_table_prefix', '');
2233
+    $pre = variable_get('boincimport_table_prefix', '');
2234 2234
 
2235
-  // Get the BOINC threads and get a count of posts to import
2236
-  db_set_active('boinc');
2237
-  $topic_count = db_result(db_query("
2235
+    // Get the BOINC threads and get a count of posts to import
2236
+    db_set_active('boinc');
2237
+    $topic_count = db_result(db_query("
2238 2238
     SELECT COUNT(DISTINCT t.id) FROM %sthread t
2239 2239
     JOIN %sforum f ON f.id = t.forum
2240 2240
     JOIN %spost p ON p.thread = t.id
2241 2241
     WHERE f.parent_type = 0", $pre, $pre, $pre
2242
-  ));
2243
-  $total_post_count = db_result(db_query("
2242
+    ));
2243
+    $total_post_count = db_result(db_query("
2244 2244
     SELECT COUNT(p.id) FROM %spost p
2245 2245
     JOIN %sthread t ON t.id = p.thread
2246 2246
     JOIN %sforum f ON f.id = t.forum
2247 2247
     WHERE f.parent_type = 0", $pre, $pre, $pre
2248
-  ));
2249
-  $post_count = $total_post_count - $topic_count;
2250
-  db_set_active('default');
2248
+    ));
2249
+    $post_count = $total_post_count - $topic_count;
2250
+    db_set_active('default');
2251 2251
 
2252
-  if ($post_count <= 0) {
2252
+    if ($post_count <= 0) {
2253 2253
     drupal_set_message(
2254
-      t('There were no posts found: Aborting script'), 'warning'
2254
+        t('There were no posts found: Aborting script'), 'warning'
2255 2255
     );
2256 2256
     watchdog('boincimport',
2257
-      'There were no posts found: Aborting script', array(), WATCHDOG_WARNING
2257
+        'There were no posts found: Aborting script', array(), WATCHDOG_WARNING
2258 2258
     );
2259 2259
     // Release the lock on the import process
2260 2260
     variable_del('boincimport_process_locked');
2261 2261
     return t('There were no posts found: Aborting script.');
2262
-  }
2262
+    }
2263 2263
 
2264
-  watchdog('boincimport',
2264
+    watchdog('boincimport',
2265 2265
     'Found %count posts: Beginning Import',
2266 2266
     array('%count' => $post_count), WATCHDOG_INFO
2267
-  );
2267
+    );
2268 2268
   
2269
-  $operations = array();
2270
-  $batch_size = 100;
2269
+    $operations = array();
2270
+    $batch_size = 100;
2271 2271
   
2272
-  // Create batches to process
2273
-  for ($offset = 0; $offset < $topic_count; $offset+=$batch_size) {
2272
+    // Create batches to process
2273
+    for ($offset = 0; $offset < $topic_count; $offset+=$batch_size) {
2274 2274
     $topics_per_batch = $batch_size;
2275 2275
     if ($offset + $batch_size > $topic_count) {
2276
-      $topics_per_batch = $topic_count - $offset;
2276
+        $topics_per_batch = $topic_count - $offset;
2277 2277
     }
2278 2278
     $operations[] = array(
2279
-      'boincimport_posts_op', array(
2279
+        'boincimport_posts_op', array(
2280 2280
         $offset, $topics_per_batch
2281
-      )
2281
+        )
2282 2282
     );
2283
-  }
2283
+    }
2284 2284
   
2285
-  $batch = array(
2285
+    $batch = array(
2286 2286
     'operations' => $operations,
2287 2287
     'finished' => 'boincimport_posts_finished',
2288 2288
     'title' => t('Importing posts'),
2289 2289
     'init_message' => t('Beginning post import...'),
2290 2290
     'progress_message' => t(
2291
-      'Processed posts in @current out of @total batches (@size topics per batch).',
2292
-      array(
2291
+        'Processed posts in @current out of @total batches (@size topics per batch).',
2292
+        array(
2293 2293
         '@size' => $batch_size,
2294 2294
         // @current and @total are managed by the batch API
2295
-      )
2295
+        )
2296 2296
     ),
2297 2297
     'error_message' => t('Post import has encountered an error.'),
2298
-  );
2298
+    );
2299 2299
   
2300
-  batch_set($batch);
2300
+    batch_set($batch);
2301 2301
 }
2302 2302
 
2303 2303
 /**
@@ -2305,17 +2305,17 @@  discard block
 block discarded – undo
2305 2305
  * Create a Drupal comment from the given BOINC post object
2306 2306
  */
2307 2307
 function boincimport_posts_op($offset, $batch_size, &$context) {
2308
-  // Initialize the batch, if needed
2309
-  if (!isset($context['sandbox']['progress'])) {
2308
+    // Initialize the batch, if needed
2309
+    if (!isset($context['sandbox']['progress'])) {
2310 2310
     $context['sandbox']['progress'] = 0;
2311 2311
     $context['sandbox']['max'] = $batch_size;
2312
-  }
2312
+    }
2313 2313
   
2314
-  $input_format = variable_get('boincimport_input_format', 0);
2314
+    $input_format = variable_get('boincimport_input_format', 0);
2315 2315
   
2316
- // Get the topics with posts to import
2317
-  db_set_active('boinc');
2318
-  $boinc_topic_ids = db_query('
2316
+    // Get the topics with posts to import
2317
+    db_set_active('boinc');
2318
+    $boinc_topic_ids = db_query('
2319 2319
     SELECT DISTINCT t.id FROM %sthread t
2320 2320
     JOIN %sforum f ON f.id = t.forum
2321 2321
     JOIN %spost p ON p.thread = t.id
@@ -2323,10 +2323,10 @@  discard block
 block discarded – undo
2323 2323
     ORDER BY t.id
2324 2324
     LIMIT %d,%d', 
2325 2325
     $pre, $pre, $pre, $offset, $batch_size
2326
-  );
2327
-  db_set_active('default');
2326
+    );
2327
+    db_set_active('default');
2328 2328
   
2329
-  while ($boinc_topic = db_fetch_object($boinc_topic_ids)) {
2329
+    while ($boinc_topic = db_fetch_object($boinc_topic_ids)) {
2330 2330
     // Get the posts in this topic
2331 2331
     db_set_active('boinc');
2332 2332
     $boinc_posts = db_query('
@@ -2344,29 +2344,29 @@  discard block
 block discarded – undo
2344 2344
 
2345 2345
     while ($post = db_fetch_object($boinc_posts)) {
2346 2346
       
2347
-      // Skip the first post as it has already been imported as a topic
2348
-      if ($first_post) {
2347
+        // Skip the first post as it has already been imported as a topic
2348
+        if ($first_post) {
2349 2349
         $first_post = false;
2350 2350
         continue;
2351
-      }
2351
+        }
2352 2352
       
2353
-      // Making it this far confirms that there are posts to import
2354
-      $topic_has_responses = TRUE;
2353
+        // Making it this far confirms that there are posts to import
2354
+        $topic_has_responses = TRUE;
2355 2355
       
2356
-      $is_duplicate = db_result(db_query('
2356
+        $is_duplicate = db_result(db_query('
2357 2357
         SELECT COUNT(*) FROM {boincimport_temp_post}
2358 2358
         WHERE post_id = %d',
2359 2359
         $post->id
2360
-      ));
2361
-      if ($is_duplicate) {
2360
+        ));
2361
+        if ($is_duplicate) {
2362 2362
         // This post has already been imported
2363 2363
         $context['results']['posts']['duplicate'][] = $post->id;
2364 2364
         $duplicate_posts++;
2365 2365
         continue;
2366
-      }
2366
+        }
2367 2367
       
2368
-      // Make sure the post is valid
2369
-      if ($post->content) {
2368
+        // Make sure the post is valid
2369
+        if ($post->content) {
2370 2370
         
2371 2371
         // Get user, node, and parent IDs for the post and sanitize
2372 2372
         $uid = boincuser_lookup_uid($post->user);
@@ -2375,14 +2375,14 @@  discard block
 block discarded – undo
2375 2375
           FROM {boincimport_temp_topic} btt
2376 2376
           LEFT JOIN {node_revisions} AS nr ON btt.nid = nr.nid
2377 2377
           WHERE btt.topic_id = %d',
2378
-          $post->thread
2378
+            $post->thread
2379 2379
         ));
2380 2380
         $nid = $node->nid;
2381 2381
         $pid = db_result(db_query('
2382 2382
           SELECT cid
2383 2383
           FROM {boincimport_temp_post}
2384 2384
           WHERE post_id = %d',
2385
-          $post->parent_post));
2385
+            $post->parent_post));
2386 2386
         if (is_null($pid)) $pid = 0;
2387 2387
         if (!$uid) $uid = 0;
2388 2388
         
@@ -2393,85 +2393,85 @@  discard block
 block discarded – undo
2393 2393
           SELECT COUNT(*)
2394 2394
           FROM {comments}
2395 2395
           WHERE nid = %d',
2396
-          $nid
2396
+            $nid
2397 2397
         ));
2398 2398
         $post_reply = $pid;
2399 2399
         
2400 2400
         if ($post_reply OR $topic_reply) {
2401
-          // Create a subject for the post from the post content. The body may be in 
2402
-          // any format, so we:
2403
-          //  1) Filter it into HTML
2404
-          //  2) Strip out all HTML tags
2405
-          //  3) Convert entities back to plain-text.
2406
-          // Note: format is checked by check_markup().
2407
-          $subject = truncate_utf8(trim(decode_entities(strip_tags(check_markup($post->content, $input_format)))), 29, TRUE);
2408
-          // Replace "Quote:" with "RE:"
2409
-          $subject = str_replace('Quote:', 'RE: ', $subject);
2410
-          // Fringe cases where the comment body is populated only by HTML tags
2411
-          // will require a default subject...
2412
-          if ($subject === '')
2401
+            // Create a subject for the post from the post content. The body may be in 
2402
+            // any format, so we:
2403
+            //  1) Filter it into HTML
2404
+            //  2) Strip out all HTML tags
2405
+            //  3) Convert entities back to plain-text.
2406
+            // Note: format is checked by check_markup().
2407
+            $subject = truncate_utf8(trim(decode_entities(strip_tags(check_markup($post->content, $input_format)))), 29, TRUE);
2408
+            // Replace "Quote:" with "RE:"
2409
+            $subject = str_replace('Quote:', 'RE: ', $subject);
2410
+            // Fringe cases where the comment body is populated only by HTML tags
2411
+            // will require a default subject...
2412
+            if ($subject === '')
2413 2413
             $subject = "RE: {$node->title}";
2414 2414
         } else {
2415
-          // This is the first post in the topic
2416
-          $subject = $node->title;
2415
+            // This is the first post in the topic
2416
+            $subject = $node->title;
2417 2417
         }
2418 2418
         
2419 2419
         // Construct the post as a Drupal comment
2420 2420
         $comment = array(
2421
-          'pid' => $pid,
2422
-          'nid' => $nid,
2423
-          'uid' => $uid,
2424
-          'subject' => $subject,
2425
-          'comment' => $post->content,
2426
-          'timestamp' => $post->timestamp,
2427
-          'status' => $post->hidden,
2428
-          'format' => $input_format
2421
+            'pid' => $pid,
2422
+            'nid' => $nid,
2423
+            'uid' => $uid,
2424
+            'subject' => $subject,
2425
+            'comment' => $post->content,
2426
+            'timestamp' => $post->timestamp,
2427
+            'status' => $post->hidden,
2428
+            'format' => $input_format
2429 2429
         );
2430 2430
         
2431 2431
         // Save the comment
2432 2432
         if (boincimport_forum_comment_save($comment)) {
2433
-          $success = db_query('
2433
+            $success = db_query('
2434 2434
             INSERT INTO {boincimport_temp_post} (post_id, cid)
2435 2435
             VALUES (%d, %d)',
2436 2436
             $post->id, $comment['cid']
2437
-          );
2438
-          if ($success) {
2437
+            );
2438
+            if ($success) {
2439 2439
             $posts_imported++;
2440 2440
             $context['results']['posts']['success'][] = $post->id;
2441
-          }
2442
-          else {
2441
+            }
2442
+            else {
2443 2443
             $context['results']['posts']['failure'][] = $post->id;
2444 2444
             $error_posts++;
2445
-          }
2445
+            }
2446 2446
         }
2447 2447
         else {
2448
-          $context['results']['posts']['failure'][] = $post->id;
2449
-          $error_posts++;
2448
+            $context['results']['posts']['failure'][] = $post->id;
2449
+            $error_posts++;
2450
+        }
2450 2451
         }
2451
-      }
2452
-      else {
2452
+        else {
2453 2453
         $context['results']['posts']['empty'][] = $post->id;
2454 2454
         $empty_posts++;
2455
-      }
2455
+        }
2456 2456
     }
2457 2457
     
2458 2458
     $message = '';
2459 2459
     if ($success OR !$topic_has_responses) {
2460
-      // Store some result for post-processing in the finished callback.
2461
-      $context['results']['success'][] = $boinc_topic->id;
2462
-      $message = "Imported {$posts_imported} post(s) for topic {$boinc_topic->id}";
2460
+        // Store some result for post-processing in the finished callback.
2461
+        $context['results']['success'][] = $boinc_topic->id;
2462
+        $message = "Imported {$posts_imported} post(s) for topic {$boinc_topic->id}";
2463 2463
     }
2464 2464
     else {
2465
-      $context['results']['failure'][] = $boinc_topic->id;
2466
-      $message = "Failed to import any posts for topic {$boinc_topic->id} (excluded {$error_posts} errors, {$duplicate_posts} duplicates, and {$empty_posts} empty)";
2467
-      watchdog('boincimport', 'Failed to import any posts for topic @id (excluded @error_posts errors, @duplicate_posts duplicates, and @empty_posts empty)', 
2465
+        $context['results']['failure'][] = $boinc_topic->id;
2466
+        $message = "Failed to import any posts for topic {$boinc_topic->id} (excluded {$error_posts} errors, {$duplicate_posts} duplicates, and {$empty_posts} empty)";
2467
+        watchdog('boincimport', 'Failed to import any posts for topic @id (excluded @error_posts errors, @duplicate_posts duplicates, and @empty_posts empty)', 
2468 2468
         array(
2469
-          '@id' => $boinc_topic->id,
2470
-          '@error_posts' => $error_posts,
2471
-          '@duplicate_posts' => $duplicate_posts,
2472
-          '@empty_posts' => $empty_posts,
2469
+            '@id' => $boinc_topic->id,
2470
+            '@error_posts' => $error_posts,
2471
+            '@duplicate_posts' => $duplicate_posts,
2472
+            '@empty_posts' => $empty_posts,
2473 2473
         ), WATCHDOG_WARNING
2474
-      ); 
2474
+        ); 
2475 2475
     }
2476 2476
     
2477 2477
     // Update our progress information.
@@ -2481,19 +2481,19 @@  discard block
 block discarded – undo
2481 2481
 
2482 2482
     // Update the progress for the batch engine
2483 2483
     if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
2484
-      $context['finished'] = 1;
2484
+        $context['finished'] = 1;
2485 2485
     }
2486 2486
     else {
2487
-      $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
2487
+        $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
2488
+    }
2488 2489
     }
2489
-  }
2490 2490
 }
2491 2491
 
2492 2492
 /**
2493 2493
  * Batch 'finished' callback
2494 2494
  */
2495 2495
 function boincimport_posts_finished($success, $results, $operations) {
2496
-  if ($success) {
2496
+    if ($success) {
2497 2497
     // Let's count our successes
2498 2498
     $posts_imported = count($results['posts']['success']);
2499 2499
     $topic_count = count($results['success']);
@@ -2502,39 +2502,39 @@  discard block
 block discarded – undo
2502 2502
     $empty_posts = count($results['posts']['empty']);
2503 2503
     $failed_posts = count($results['posts']['failure']);
2504 2504
     $message = t(
2505
-      'Successfully imported @post_count posts in @topic_count topics ' .
2506
-      '(@skipped topics either had no replies or all replies were already imported, ' .
2507
-      '@duplicates posts were skipped as already imported, ' .
2508
-      '@empty_posts had no content, ' .
2509
-      'and @error_posts encountered errors during import)',
2510
-      array(
2505
+        'Successfully imported @post_count posts in @topic_count topics ' .
2506
+        '(@skipped topics either had no replies or all replies were already imported, ' .
2507
+        '@duplicates posts were skipped as already imported, ' .
2508
+        '@empty_posts had no content, ' .
2509
+        'and @error_posts encountered errors during import)',
2510
+        array(
2511 2511
         '@post_count' => $posts_imported,
2512 2512
         '@topic_count' => $topic_count,
2513 2513
         '@skipped' => $topics_skipped,
2514 2514
         '@duplicates' => $duplicates,
2515 2515
         '@empty_posts' => $empty_posts,
2516 2516
         '@error_posts' => $failed_posts,
2517
-      )
2517
+        )
2518 2518
     );
2519 2519
     watchdog('boincimport',
2520
-      $message,
2521
-      array(), WATCHDOG_INFO
2520
+        $message,
2521
+        array(), WATCHDOG_INFO
2522 2522
     ); 
2523 2523
     // Set the post import successful flag in the variable table
2524 2524
     variable_set('boincimport_import_post_successful', '1');
2525 2525
     $_SESSION['boincimport_stage_selected'] = 'team forums';
2526
-  }
2527
-  else {
2526
+    }
2527
+    else {
2528 2528
     // An error occurred.
2529 2529
     // $operations contains the operations that remained unprocessed.
2530 2530
     $error_operation = reset($operations);
2531 2531
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
2532
-  }
2533
-  drupal_set_message($message);
2532
+    }
2533
+    drupal_set_message($message);
2534 2534
   
2535
-  // Release the lock on the import process
2536
-  variable_del('boincimport_process_locked');
2537
-  drupal_goto('admin/boinc/import/process');
2535
+    // Release the lock on the import process
2536
+    variable_del('boincimport_process_locked');
2537
+    drupal_goto('admin/boinc/import/process');
2538 2538
 }
2539 2539
 
2540 2540
 
@@ -2547,97 +2547,97 @@  discard block
 block discarded – undo
2547 2547
  */
2548 2548
 function boincimport_team_forums() {
2549 2549
   
2550
-  // Check whether team forums have been successfully imported already
2551
-  if (variable_get('boincimport_import_team_forum_successful', 0)) {
2550
+    // Check whether team forums have been successfully imported already
2551
+    if (variable_get('boincimport_import_team_forum_successful', 0)) {
2552 2552
     drupal_set_message(t('Team forum import has already run successfully'), 'warning');
2553 2553
     watchdog(
2554
-      'boincimport', 'Team forum import has already run successfully',
2555
-      array(), WATCHDOG_WARNING
2554
+        'boincimport', 'Team forum import has already run successfully',
2555
+        array(), WATCHDOG_WARNING
2556 2556
     );
2557
-  }
2557
+    }
2558 2558
 
2559
-  if (!variable_get('boincimport_import_team_forum_started', 0)) {
2559
+    if (!variable_get('boincimport_import_team_forum_started', 0)) {
2560 2560
     // Could prepare database tables, if new fields are necessary, etc.
2561 2561
     variable_set('boincimport_import_team_forum_started', 1);
2562
-  }
2562
+    }
2563 2563
   
2564
-  $pre = variable_get('boincimport_table_prefix', '');
2564
+    $pre = variable_get('boincimport_table_prefix', '');
2565 2565
 
2566
-  // Get team forums from BOINC database
2567
-  db_set_active('boinc');
2568
-  $boincteam_forums = db_query('
2566
+    // Get team forums from BOINC database
2567
+    db_set_active('boinc');
2568
+    $boincteam_forums = db_query('
2569 2569
     SELECT id, title, description, category, timestamp, post_min_interval,
2570 2570
       post_min_total_credit, post_min_expavg_credit
2571 2571
     FROM %sforum
2572 2572
     WHERE parent_type = 1
2573 2573
     ORDER BY id ASC',
2574 2574
     $pre
2575
-  );
2576
-  $team_forum_count = mysql_num_rows($boincteam_forums);
2577
-  db_set_active('default');
2575
+    );
2576
+    $team_forum_count = mysql_num_rows($boincteam_forums);
2577
+    db_set_active('default');
2578 2578
 
2579
-  if (!$team_forum_count) {
2579
+    if (!$team_forum_count) {
2580 2580
     drupal_set_message(
2581
-      t('There were no team forums found: Aborting script'), 'warning'
2581
+        t('There were no team forums found: Aborting script'), 'warning'
2582 2582
     );
2583 2583
     watchdog('boincimport',
2584
-      'There were no team forums found: Aborting script', array(), WATCHDOG_WARNING
2584
+        'There were no team forums found: Aborting script', array(), WATCHDOG_WARNING
2585 2585
     );
2586 2586
     // Release the lock on the import process
2587 2587
     variable_del('boincimport_process_locked');
2588 2588
     return t('There were no BLAH found: Aborting script.');
2589
-  }
2589
+    }
2590 2590
 
2591
-  watchdog('boincimport',
2591
+    watchdog('boincimport',
2592 2592
     'Found %count team forums: Beginning Import',
2593 2593
     array('%count' => $team_forum_count), WATCHDOG_INFO
2594
-  );
2594
+    );
2595 2595
   
2596
-  $operations = array();
2597
-  $existing_team_forums = array();
2598
-  $duplicates = array();
2596
+    $operations = array();
2597
+    $existing_team_forums = array();
2598
+    $duplicates = array();
2599 2599
   
2600
-  // Get the list of team forums already in Drupal to be sure we're not
2601
-  // importing any twice
2602
-  $result = db_query('
2600
+    // Get the list of team forums already in Drupal to be sure we're not
2601
+    // importing any twice
2602
+    $result = db_query('
2603 2603
     SELECT nid, boinc_id FROM {boincteam_forum}'
2604
-  );
2605
-  while ($row = db_fetch_object($result)) {
2604
+    );
2605
+    while ($row = db_fetch_object($result)) {
2606 2606
     $existing_team_forums[$row->boinc_id] = $row->nid;
2607
-  }
2607
+    }
2608 2608
   
2609
-  // Create batches to process
2610
-  while ($boincteam_forum = db_fetch_object($boincteam_forums)) {
2611
-     if (isset($existing_team_forums[$boincteam_forum->id])) {
2612
-      // This team has already been imported
2613
-      $duplicates[] = $boincteam_forum->id;
2609
+    // Create batches to process
2610
+    while ($boincteam_forum = db_fetch_object($boincteam_forums)) {
2611
+        if (isset($existing_team_forums[$boincteam_forum->id])) {
2612
+        // This team has already been imported
2613
+        $duplicates[] = $boincteam_forum->id;
2614 2614
     }
2615 2615
     else {
2616
-      $operations[] = array(
2616
+        $operations[] = array(
2617 2617
         'boincimport_team_forums_op', array(
2618
-          $boincteam_forum
2618
+            $boincteam_forum
2619 2619
         )
2620
-      );
2620
+        );
2621
+    }
2621 2622
     }
2622
-  }
2623 2623
   
2624
-  if ($duplicates) {
2624
+    if ($duplicates) {
2625 2625
     drupal_set_message(t(
2626
-      'Skipped @count team forums that were already imported',
2627
-      array('@count' => count($duplicates))
2626
+        'Skipped @count team forums that were already imported',
2627
+        array('@count' => count($duplicates))
2628 2628
     ));
2629
-  }
2629
+    }
2630 2630
   
2631
-  $batch = array(
2631
+    $batch = array(
2632 2632
     'operations' => $operations,
2633 2633
     'finished' => 'boincimport_team_forums_finished',
2634 2634
     'title' => t('Importing team forums'),
2635 2635
     'init_message' => t('Beginning team forum import...'),
2636 2636
     'progress_message' => t('Processed @current out of @total team forums.'),
2637 2637
     'error_message' => t('Team forum import has encountered an error.'),
2638
-  );
2638
+    );
2639 2639
   
2640
-  batch_set($batch);
2640
+    batch_set($batch);
2641 2641
 }
2642 2642
 
2643 2643
 /**
@@ -2647,15 +2647,15 @@  discard block
 block discarded – undo
2647 2647
  */
2648 2648
 function boincimport_team_forums_op($boincteam_forum, &$context) {
2649 2649
   
2650
-  $input_format = variable_get('boincimport_input_format', 0);
2650
+    $input_format = variable_get('boincimport_input_format', 0);
2651 2651
   
2652
-  // Set term parameters for forums
2653
-  $forum_id = $boincteam_forum->id;
2654
-  $team_id = boincteam_lookup_nid($boincteam_forum->category);
2655
-  $name = $boincteam_forum->title;
2656
-  $description = strip_tags($boincteam_forum->description);
2652
+    // Set term parameters for forums
2653
+    $forum_id = $boincteam_forum->id;
2654
+    $team_id = boincteam_lookup_nid($boincteam_forum->category);
2655
+    $name = $boincteam_forum->title;
2656
+    $description = strip_tags($boincteam_forum->description);
2657 2657
   
2658
-  $success = db_query("
2658
+    $success = db_query("
2659 2659
     INSERT INTO {boincteam_forum} SET 
2660 2660
       boinc_id = %d,
2661 2661
       nid = %d,
@@ -2671,67 +2671,67 @@  discard block
 block discarded – undo
2671 2671
     time(), 0, $boincteam_forum->post_min_interval, 
2672 2672
     $boincteam_forum->post_min_total_credit,
2673 2673
     $boincteam_forum->post_min_expavg_credit
2674
-  );
2674
+    );
2675 2675
   
2676
-  $message = '';
2677
-  if ($success) {
2676
+    $message = '';
2677
+    if ($success) {
2678 2678
     // Store some result for post-processing in the finished callback.
2679 2679
     $context['results']['success'][] = $forum_id;
2680 2680
     $message = "Successfully imported team forum {$forum_id}";
2681
-  }
2682
-  else {
2681
+    }
2682
+    else {
2683 2683
     $context['results']['failure'][] = $forum_id;
2684 2684
     $message = "Failed to import team forum {$forum_id}!";
2685 2685
     watchdog('boincimport',
2686
-      'Failed to import team forum @id!',
2687
-      array('@id' => $forum_id), WATCHDOG_WARNING
2686
+        'Failed to import team forum @id!',
2687
+        array('@id' => $forum_id), WATCHDOG_WARNING
2688 2688
     ); 
2689
-  }
2689
+    }
2690 2690
   
2691
-  // Update our progress information.
2692
-  $context['sandbox']['progress']++;
2693
-  $context['sandbox']['current_forum'] = $forum_id;
2694
-  $context['message'] = $message;
2691
+    // Update our progress information.
2692
+    $context['sandbox']['progress']++;
2693
+    $context['sandbox']['current_forum'] = $forum_id;
2694
+    $context['message'] = $message;
2695 2695
 
2696
-  // Update the progress for the batch engine
2697
-  if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
2696
+    // Update the progress for the batch engine
2697
+    if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
2698 2698
     $context['finished'] = 1;
2699
-  }
2700
-  else {
2699
+    }
2700
+    else {
2701 2701
     $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
2702
-  }
2702
+    }
2703 2703
 }
2704 2704
 
2705 2705
 /**
2706 2706
  * Batch 'finished' callback
2707 2707
  */
2708 2708
 function boincimport_team_forums_finished($success, $results, $operations) {
2709
-  if ($success) {
2709
+    if ($success) {
2710 2710
     // Let's count our successes
2711 2711
     $total_imported = count($results['success']);
2712 2712
     $message = t(
2713
-      'Successfully imported @count team forums',
2714
-      array('@count' => $total_imported)
2713
+        'Successfully imported @count team forums',
2714
+        array('@count' => $total_imported)
2715 2715
     );
2716 2716
     watchdog('boincimport',
2717
-      'Successfully imported @count team forums.',
2718
-      array('@count' => $total_imported), WATCHDOG_INFO
2717
+        'Successfully imported @count team forums.',
2718
+        array('@count' => $total_imported), WATCHDOG_INFO
2719 2719
     ); 
2720 2720
     // Set the team forum import successful flag in the variable table
2721 2721
     variable_set('boincimport_import_team_forum_successful', '1');
2722 2722
     $_SESSION['boincimport_stage_selected'] = 'team topics';
2723
-  }
2724
-  else {
2723
+    }
2724
+    else {
2725 2725
     // An error occurred.
2726 2726
     // $operations contains the operations that remained unprocessed.
2727 2727
     $error_operation = reset($operations);
2728 2728
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
2729
-  }
2730
-  drupal_set_message($message);
2729
+    }
2730
+    drupal_set_message($message);
2731 2731
   
2732
-  // Release the lock on the import process
2733
-  variable_del('boincimport_process_locked');
2734
-  drupal_goto('admin/boinc/import/process');
2732
+    // Release the lock on the import process
2733
+    variable_del('boincimport_process_locked');
2734
+    drupal_goto('admin/boinc/import/process');
2735 2735
 }
2736 2736
 
2737 2737
 
@@ -2744,25 +2744,25 @@  discard block
 block discarded – undo
2744 2744
  */
2745 2745
 function boincimport_team_forum_topics() {
2746 2746
   
2747
-  // Check whether team forum topics have been successfully imported already
2748
-  if (variable_get('boincimport_import_team_topic_successful', 0)) {
2747
+    // Check whether team forum topics have been successfully imported already
2748
+    if (variable_get('boincimport_import_team_topic_successful', 0)) {
2749 2749
     drupal_set_message(t('Team topic import has already run successfully'), 'warning');
2750 2750
     watchdog(
2751
-      'boincimport', 'Team topic import has already run successfully',
2752
-      array(), WATCHDOG_WARNING
2751
+        'boincimport', 'Team topic import has already run successfully',
2752
+        array(), WATCHDOG_WARNING
2753 2753
     );
2754
-  }
2754
+    }
2755 2755
 
2756
-  if (!variable_get('boincimport_import_team_topic_started', 0)) {
2756
+    if (!variable_get('boincimport_import_team_topic_started', 0)) {
2757 2757
     // Could prepare database tables, if new fields are necessary, etc.
2758 2758
     variable_set('boincimport_import_team_topic_started', 1);
2759
-  }
2759
+    }
2760 2760
   
2761
-  $pre = variable_get('boincimport_table_prefix', '');
2761
+    $pre = variable_get('boincimport_table_prefix', '');
2762 2762
 
2763
-  // Get all team topics to import from BOINC
2764
-  db_set_active('boinc');
2765
-  $boincteam_topics = db_query('
2763
+    // Get all team topics to import from BOINC
2764
+    db_set_active('boinc');
2765
+    $boincteam_topics = db_query('
2766 2766
     SELECT DISTINCT t.id, t.title, t.owner, t.forum, t.locked, t.hidden,
2767 2767
       t.sticky, t.timestamp, t.create_time
2768 2768
     FROM %sthread t
@@ -2771,78 +2771,78 @@  discard block
 block discarded – undo
2771 2771
     WHERE f.parent_type = 1
2772 2772
     ORDER BY id',
2773 2773
     $pre, $pre, $pre
2774
-  );
2775
-  $boincteam_topic_count = mysql_num_rows($boincteam_topics);
2776
-  $total_team_topic_count = db_result(db_query('
2774
+    );
2775
+    $boincteam_topic_count = mysql_num_rows($boincteam_topics);
2776
+    $total_team_topic_count = db_result(db_query('
2777 2777
     SELECT COUNT(*) FROM %sthread t
2778 2778
     JOIN %sforum f ON f.id = t.forum
2779 2779
     WHERE f.parent_type = 1', $pre, $pre
2780
-  ));
2781
-  $empty_topic_count = $total_team_topic_count - $boincteam_topic_count;
2782
-  db_set_active('default');
2780
+    ));
2781
+    $empty_topic_count = $total_team_topic_count - $boincteam_topic_count;
2782
+    db_set_active('default');
2783 2783
 
2784
-  if (!$boincteam_topic_count) {
2784
+    if (!$boincteam_topic_count) {
2785 2785
     drupal_set_message(
2786
-      t('There were no team topics found: Aborting script'), 'warning'
2786
+        t('There were no team topics found: Aborting script'), 'warning'
2787 2787
     );
2788 2788
     watchdog('boincimport',
2789
-      'There were no team topics found: Aborting script', array(), WATCHDOG_WARNING
2789
+        'There were no team topics found: Aborting script', array(), WATCHDOG_WARNING
2790 2790
     );
2791 2791
     // Release the lock on the import process
2792 2792
     variable_del('boincimport_process_locked');
2793 2793
     return t('There were no team topics found: Aborting script.');
2794
-  }
2794
+    }
2795 2795
 
2796
-  watchdog('boincimport',
2796
+    watchdog('boincimport',
2797 2797
     'Found %count team topics: Beginning Import',
2798 2798
     array('%count' => $boincteam_topic_count), WATCHDOG_INFO
2799
-  );
2799
+    );
2800 2800
   
2801
-  $operations = array();
2802
-  $existing_team_topics = array();
2803
-  $duplicates = array();
2801
+    $operations = array();
2802
+    $existing_team_topics = array();
2803
+    $duplicates = array();
2804 2804
   
2805
-  // Get the list of team topics already in Drupal to be sure we're not
2806
-  // importing any twice
2807
-  $result = db_query('
2805
+    // Get the list of team topics already in Drupal to be sure we're not
2806
+    // importing any twice
2807
+    $result = db_query('
2808 2808
     SELECT nid, topic_id FROM {boincimport_temp_topic}'
2809
-  );
2810
-  while ($row = db_fetch_object($result)) {
2809
+    );
2810
+    while ($row = db_fetch_object($result)) {
2811 2811
     $existing_team_topics[$row->topic_id] = $row->nid;
2812
-  }
2812
+    }
2813 2813
   
2814
-  // Create batches to process
2815
-  while ($boincteam_topic = db_fetch_object($boincteam_topics)) {
2816
-     if (isset($existing_team_topics[$boincteam_topic->id])) {
2817
-      // This team topic has already been imported
2818
-      $duplicates[] = $boincteam_topic->id;
2814
+    // Create batches to process
2815
+    while ($boincteam_topic = db_fetch_object($boincteam_topics)) {
2816
+        if (isset($existing_team_topics[$boincteam_topic->id])) {
2817
+        // This team topic has already been imported
2818
+        $duplicates[] = $boincteam_topic->id;
2819 2819
     }
2820 2820
     else {
2821
-      $operations[] = array(
2821
+        $operations[] = array(
2822 2822
         'boincimport_team_topics_op', array(
2823
-          $boincteam_topic
2823
+            $boincteam_topic
2824 2824
         )
2825
-      );
2825
+        );
2826
+    }
2826 2827
     }
2827
-  }
2828 2828
   
2829
-  if ($duplicates) {
2829
+    if ($duplicates) {
2830 2830
     drupal_set_message(t(
2831
-      'Skipped @count team topics that were already imported',
2832
-      array('@count' => count($duplicates))
2831
+        'Skipped @count team topics that were already imported',
2832
+        array('@count' => count($duplicates))
2833 2833
     ));
2834
-  }
2834
+    }
2835 2835
   
2836
-  $batch = array(
2836
+    $batch = array(
2837 2837
     'operations' => $operations,
2838 2838
     'finished' => 'boincimport_team_topics_finished',
2839 2839
     'title' => t('Importing team topics'),
2840 2840
     'init_message' => t('Beginning team topic import...'),
2841 2841
     'progress_message' => t('Processed @current out of @total team topics.'),
2842 2842
     'error_message' => t('Team topic import has encountered an error.'),
2843
-  );
2843
+    );
2844 2844
   
2845
-  batch_set($batch);
2845
+    batch_set($batch);
2846 2846
 }
2847 2847
 
2848 2848
 /**
@@ -2851,21 +2851,21 @@  discard block
 block discarded – undo
2851 2851
  */
2852 2852
 function boincimport_team_topics_op($topic, &$context) {
2853 2853
   
2854
-  $input_format = variable_get('boincimport_input_format', 0);
2855
-  $success = FALSE;
2856
-  $missing_parent = array();
2857
-  $empty_topics = array();
2854
+    $input_format = variable_get('boincimport_input_format', 0);
2855
+    $success = FALSE;
2856
+    $missing_parent = array();
2857
+    $empty_topics = array();
2858 2858
   
2859
-  // Verify that the team forum container has been imported
2860
-  $team_forum_id = db_result(db_query("
2859
+    // Verify that the team forum container has been imported
2860
+    $team_forum_id = db_result(db_query("
2861 2861
     SELECT tfid FROM {boincteam_forum}
2862 2862
     WHERE boinc_id = %d",
2863 2863
     $topic->forum
2864
-  ));
2865
-  if (!$team_forum_id) {
2864
+    ));
2865
+    if (!$team_forum_id) {
2866 2866
     $missing_parent[] = $topic->id;
2867
-  }
2868
-  else {
2867
+    }
2868
+    else {
2869 2869
     // Get the content of the post that started the topic
2870 2870
     db_set_active('boinc');
2871 2871
     $query = db_query('
@@ -2874,36 +2874,36 @@  discard block
 block discarded – undo
2874 2874
       WHERE thread = %d
2875 2875
       ORDER BY timestamp ASC
2876 2876
       LIMIT 1',
2877
-      $pre, $topic->id);
2877
+        $pre, $topic->id);
2878 2878
     db_set_active('default');
2879 2879
       
2880 2880
     // Skip this topic if there are no posts
2881 2881
     if (!$post = db_fetch_object($query)) {
2882
-      // Empty topics should have already been filtered out of the import, so
2883
-      // consider this an error condition
2884
-      $empty_topics[] = $topic->id;
2882
+        // Empty topics should have already been filtered out of the import, so
2883
+        // consider this an error condition
2884
+        $empty_topics[] = $topic->id;
2885 2885
     }
2886 2886
     else {
2887
-      // Get the user ID along with other data to define the topic
2888
-      $uid = boincuser_lookup_uid($topic->owner);
2889
-       if (!$topic->owner) {
2887
+        // Get the user ID along with other data to define the topic
2888
+        $uid = boincuser_lookup_uid($topic->owner);
2889
+        if (!$topic->owner) {
2890 2890
         $uid = 0;
2891
-      }
2891
+        }
2892 2892
       
2893
-      $node_type = 'team_forum';
2894
-      $promote = 0;
2895
-      $comment = ($topic->locked) ? 1 : 2;
2893
+        $node_type = 'team_forum';
2894
+        $promote = 0;
2895
+        $comment = ($topic->locked) ? 1 : 2;
2896 2896
       
2897
-      $post->content = _boincimport_strip_bbcode($post->content);
2898
-      $post->content = _boincimport_text_sanitize($post->content);
2899
-      $teaser = node_teaser($post->content);
2897
+        $post->content = _boincimport_strip_bbcode($post->content);
2898
+        $post->content = _boincimport_text_sanitize($post->content);
2899
+        $teaser = node_teaser($post->content);
2900 2900
       
2901
-      if ($topic->timestamp < $topic->create_time) {
2901
+        if ($topic->timestamp < $topic->create_time) {
2902 2902
         $topic->timestamp = $topic->create_time;
2903
-      }
2903
+        }
2904 2904
 
2905
-      // Construct the thread as a team_forum topic node
2906
-      $node = array(
2905
+        // Construct the thread as a team_forum topic node
2906
+        $node = array(
2907 2907
         'type' => $node_type,
2908 2908
         'title' => $topic->title,
2909 2909
         'uid' => $uid,
@@ -2918,89 +2918,89 @@  discard block
 block discarded – undo
2918 2918
         'format' => $input_format,
2919 2919
         'teaser' => $teaser,
2920 2920
         'tfid' => $team_forum_id,
2921
-      );
2921
+        );
2922 2922
       
2923
-      // Save the team topic node
2924
-      $node = (object) $node; // node_save requires an object form
2925
-      node_save($node);
2923
+        // Save the team topic node
2924
+        $node = (object) $node; // node_save requires an object form
2925
+        node_save($node);
2926 2926
 
2927
-      if ($node->nid) {
2927
+        if ($node->nid) {
2928 2928
         db_query('
2929 2929
           INSERT INTO {boincimport_temp_topic} (topic_id, post_id, nid)
2930 2930
           VALUES (%d, %d, %d)',
2931
-          $topic->id, $post->id, $node->nid
2931
+            $topic->id, $post->id, $node->nid
2932 2932
         );
2933 2933
         // Hack to keep the topics in correct order
2934 2934
         db_query('
2935 2935
           UPDATE {node_comment_statistics}
2936 2936
           SET last_comment_timestamp = %d
2937 2937
           WHERE nid = %d',
2938
-          $node->created, $node->nid
2938
+            $node->created, $node->nid
2939 2939
         );
2940 2940
         $success = TRUE;
2941
-      }
2941
+        }
2942
+    }
2942 2943
     }
2943
-  }
2944 2944
   
2945
-  $message = '';
2946
-  if ($success) {
2945
+    $message = '';
2946
+    if ($success) {
2947 2947
     // Store some result for post-processing in the finished callback.
2948 2948
     $context['results']['success'][] = $topic->id;
2949 2949
     $message = "Successfully imported team topic {$topic->id}";
2950
-  }
2951
-  else {
2950
+    }
2951
+    else {
2952 2952
     $context['results']['failure'][] = $topic->id;
2953 2953
     $message = "Failed to import team topic {$topic->id}!";
2954 2954
     watchdog('boincimport',
2955
-      'Failed to import team topic @id!',
2956
-      array('@id' => $topic->id), WATCHDOG_WARNING
2955
+        'Failed to import team topic @id!',
2956
+        array('@id' => $topic->id), WATCHDOG_WARNING
2957 2957
     ); 
2958
-  }
2958
+    }
2959 2959
   
2960
-  // Update our progress information.
2961
-  $context['sandbox']['progress']++;
2962
-  $context['sandbox']['current_topic'] = $topic->id;
2963
-  $context['message'] = $message;
2960
+    // Update our progress information.
2961
+    $context['sandbox']['progress']++;
2962
+    $context['sandbox']['current_topic'] = $topic->id;
2963
+    $context['message'] = $message;
2964 2964
 
2965
-  // Update the progress for the batch engine
2966
-  if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
2965
+    // Update the progress for the batch engine
2966
+    if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
2967 2967
     $context['finished'] = 1;
2968
-  }
2969
-  else {
2968
+    }
2969
+    else {
2970 2970
     $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
2971
-  }
2971
+    }
2972 2972
 }
2973 2973
 
2974 2974
 /**
2975 2975
  * Batch 'finished' callback
2976 2976
  */
2977 2977
 function boincimport_team_topics_finished($success, $results, $operations) {
2978
-  if ($success) {
2978
+    if ($success) {
2979 2979
     // Let's count our successes
2980 2980
     $total_imported = count($results['success']);
2981 2981
     $message = t(
2982
-      'Successfully imported @count team topics',
2983
-      array('@count' => $total_imported)
2982
+        'Successfully imported @count team topics',
2983
+        array('@count' => $total_imported)
2984 2984
     );
2985 2985
     watchdog('boincimport',
2986
-      'Successfully imported @count team topics.',
2987
-      array('@count' => $total_imported), WATCHDOG_INFO
2986
+        'Successfully imported @count team topics.',
2987
+        array('@count' => $total_imported), WATCHDOG_INFO
2988 2988
     ); 
2989 2989
     // Set the BLAH import successful flag in the variable table
2990 2990
     variable_set('boincimport_import_team_topic_successful', '1');
2991 2991
     $_SESSION['boincimport_stage_selected'] = 'team posts';
2992
-  }
2993
-  else {
2992
+    }
2993
+    else {
2994 2994
     // An error occurred.
2995 2995
     // $operations contains the operations that remained unprocessed.
2996 2996
     $error_operation = reset($operations);
2997 2997
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
2998
-  }
2999
-  drupal_set_message($message);
2998
+    }
2999
+    drupal_set_message($message);
3000 3000
   
3001
-  // Release the lock on the import process
3002
-  variable_del('boincimport_process_locked');
3003
-  drupal_goto('admin/boinc/import/process');
3001
+    // Release the lock on the import process
3002
+    variable_del('boincimport_process_locked');
3003
+    drupal_goto('admin/boinc/import/process');
3004 3004
 }
3005 3005
 
3006 3006
 
@@ -3013,81 +3013,81 @@  discard block
 block discarded – undo
3013 3013
  */
3014 3014
 function boincimport_team_forum_posts() {
3015 3015
   
3016
-  // Check whether team forum posts have been successfully imported already
3017
-  if (variable_get('boincimport_import_team_post_successful', 0)) {
3016
+    // Check whether team forum posts have been successfully imported already
3017
+    if (variable_get('boincimport_import_team_post_successful', 0)) {
3018 3018
     drupal_set_message(t('Team forum post import has already run successfully'), 'warning');
3019 3019
     watchdog(
3020
-      'boincimport', 'Team forum post import has already run successfully',
3021
-      array(), WATCHDOG_WARNING
3020
+        'boincimport', 'Team forum post import has already run successfully',
3021
+        array(), WATCHDOG_WARNING
3022 3022
     );
3023 3023
     // Release the lock on the import process
3024 3024
     variable_del('boincimport_process_locked');
3025 3025
     return;
3026
-  }
3026
+    }
3027 3027
 
3028
-  if (!variable_get('boincimport_import_team_post_started', 0)) {
3028
+    if (!variable_get('boincimport_import_team_post_started', 0)) {
3029 3029
     // Could prepare database tables, if new fields are necessary, etc.
3030 3030
     variable_set('boincimport_import_team_post_started', 1);
3031
-  }
3031
+    }
3032 3032
   
3033
-  $pre = variable_get('boincimport_table_prefix', '');
3033
+    $pre = variable_get('boincimport_table_prefix', '');
3034 3034
 
3035
-  // Get the BOINC threads and get a count of team posts to import
3036
-  db_set_active('boinc');
3037
-  $team_topic_ids = db_query('
3035
+    // Get the BOINC threads and get a count of team posts to import
3036
+    db_set_active('boinc');
3037
+    $team_topic_ids = db_query('
3038 3038
     SELECT DISTINCT t.id FROM %sthread t
3039 3039
     JOIN %sforum f ON f.id = t.forum
3040 3040
     JOIN %spost p ON p.thread = t.id
3041 3041
     WHERE f.parent_type = 1
3042 3042
     ORDER BY id', $pre, $pre
3043
-  );
3044
-  $team_topic_count = db_result(db_query("
3043
+    );
3044
+    $team_topic_count = db_result(db_query("
3045 3045
     SELECT COUNT(DISTINCT t.id) FROM %sthread t
3046 3046
     JOIN %sforum f ON f.id = t.forum
3047 3047
     JOIN %spost p ON p.thread = t.id
3048 3048
     WHERE f.parent_type = 1", $pre, $pre, $pre
3049
-  ));
3050
-  $total_team_post_count = db_result(db_query("
3049
+    ));
3050
+    $total_team_post_count = db_result(db_query("
3051 3051
     SELECT COUNT(p.id) FROM %spost p
3052 3052
     JOIN %sthread t ON t.id = p.thread
3053 3053
     JOIN %sforum f ON f.id = t.forum
3054 3054
     WHERE f.parent_type = 1", $pre, $pre, $pre
3055
-  ));
3056
-  $team_post_count = $total_team_post_count - $team_topic_count;
3057
-  db_set_active('default');
3055
+    ));
3056
+    $team_post_count = $total_team_post_count - $team_topic_count;
3057
+    db_set_active('default');
3058 3058
 
3059
-  if ($team_post_count <= 0) {
3059
+    if ($team_post_count <= 0) {
3060 3060
     drupal_set_message(
3061
-      t('There were no team posts found: Aborting script'), 'warning'
3061
+        t('There were no team posts found: Aborting script'), 'warning'
3062 3062
     );
3063 3063
     watchdog('boincimport',
3064
-      'There were no team posts found: Aborting script', array(), WATCHDOG_WARNING
3064
+        'There were no team posts found: Aborting script', array(), WATCHDOG_WARNING
3065 3065
     );
3066 3066
     // Release the lock on the import process
3067 3067
     variable_del('boincimport_process_locked');
3068 3068
     return t('There were no posts found: Aborting script.');
3069
-  }
3069
+    }
3070 3070
 
3071
-  watchdog('boincimport',
3071
+    watchdog('boincimport',
3072 3072
     'Found %count team posts: Beginning Import',
3073 3073
     array('%count' => $team_post_count), WATCHDOG_INFO
3074
-  );
3074
+    );
3075 3075
   
3076
-  $operations = array();
3077
-  $existing_posts = array();
3078
-  $duplicates = array();
3076
+    $operations = array();
3077
+    $existing_posts = array();
3078
+    $duplicates = array();
3079 3079
   
3080
-  // Get the list of team posts already in Drupal to be sure we're not
3081
-  // importing any twice
3082
-  $result = db_query('
3080
+    // Get the list of team posts already in Drupal to be sure we're not
3081
+    // importing any twice
3082
+    $result = db_query('
3083 3083
     SELECT cid, post_id FROM {boincimport_temp_post}'
3084
-  );
3085
-  while ($row = db_fetch_object($result)) {
3084
+    );
3085
+    while ($row = db_fetch_object($result)) {
3086 3086
     $existing_posts[$row->post_id] = $row->cid;
3087
-  }
3087
+    }
3088 3088
   
3089
-  // Create batches to process
3090
-  while ($boincteam_topic = db_fetch_object($team_topic_ids)) {
3089
+    // Create batches to process
3090
+    while ($boincteam_topic = db_fetch_object($team_topic_ids)) {
3091 3091
     
3092 3092
     db_set_active('boinc');
3093 3093
     $boincteam_posts = db_query('
@@ -3095,7 +3095,7 @@  discard block
 block discarded – undo
3095 3095
       FROM %spost
3096 3096
       WHERE thread = %d
3097 3097
       ORDER BY timestamp ASC',
3098
-      $pre, $boincteam_topic->id
3098
+        $pre, $boincteam_topic->id
3099 3099
     );
3100 3100
     db_set_active('default');
3101 3101
     
@@ -3103,43 +3103,43 @@  discard block
 block discarded – undo
3103 3103
 
3104 3104
     while ($boincteam_post = db_fetch_object($boincteam_posts)) {
3105 3105
       
3106
-      // Skip the first post as it has already been imported as a topic
3107
-      if ($first_post) {
3106
+        // Skip the first post as it has already been imported as a topic
3107
+        if ($first_post) {
3108 3108
         $first_post = false;
3109 3109
         continue;
3110
-      }
3110
+        }
3111 3111
 
3112
-      if (isset($existing_posts[$boincteam_post->id])) {
3112
+        if (isset($existing_posts[$boincteam_post->id])) {
3113 3113
         // This post has already been imported
3114 3114
         $duplicates[] = $boincteam_post->id;
3115
-      }
3116
-      else {
3115
+        }
3116
+        else {
3117 3117
         $operations[] = array(
3118
-          'boincimport_team_posts_op', array(
3118
+            'boincimport_team_posts_op', array(
3119 3119
             $boincteam_post
3120
-          )
3120
+            )
3121 3121
         );
3122
-      }
3122
+        }
3123
+    }
3123 3124
     }
3124
-  }
3125 3125
   
3126
-  if ($duplicates) {
3126
+    if ($duplicates) {
3127 3127
     drupal_set_message(t(
3128
-      'Skipped @count team posts that were already imported',
3129
-      array('@count' => count($duplicates))
3128
+        'Skipped @count team posts that were already imported',
3129
+        array('@count' => count($duplicates))
3130 3130
     ));
3131
-  }
3131
+    }
3132 3132
   
3133
-  $batch = array(
3133
+    $batch = array(
3134 3134
     'operations' => $operations,
3135 3135
     'finished' => 'boincimport_team_posts_finished',
3136 3136
     'title' => t('Importing team posts'),
3137 3137
     'init_message' => t('Beginning team post import...'),
3138 3138
     'progress_message' => t('Processed @current out of @total team posts.'),
3139 3139
     'error_message' => t('Team post import has encountered an error.'),
3140
-  );
3140
+    );
3141 3141
   
3142
-  batch_set($batch);
3142
+    batch_set($batch);
3143 3143
 }
3144 3144
 
3145 3145
 /**
@@ -3148,11 +3148,11 @@  discard block
 block discarded – undo
3148 3148
  */
3149 3149
 function boincimport_team_posts_op($post, &$context) {
3150 3150
   
3151
-  $input_format = variable_get('boincimport_input_format', 0);
3152
-  $success = FALSE;
3151
+    $input_format = variable_get('boincimport_input_format', 0);
3152
+    $success = FALSE;
3153 3153
   
3154
-  // Make sure the post is valid
3155
-  if ($post->content) {
3154
+    // Make sure the post is valid
3155
+    if ($post->content) {
3156 3156
     
3157 3157
     // Get user, node, and parent IDs for the post and sanitize
3158 3158
     $uid = boincuser_lookup_uid($post->user);
@@ -3161,14 +3161,14 @@  discard block
 block discarded – undo
3161 3161
       FROM {boincimport_temp_topic} btt
3162 3162
       LEFT JOIN {node_revisions} AS nr ON btt.nid = nr.nid
3163 3163
       WHERE btt.topic_id = %d',
3164
-      $post->thread
3164
+        $post->thread
3165 3165
     ));
3166 3166
     $nid = $node->nid;
3167 3167
     $pid = db_result(db_query('
3168 3168
       SELECT cid
3169 3169
       FROM {boincimport_temp_post}
3170 3170
       WHERE post_id = %d',
3171
-      $post->parent_post));
3171
+        $post->parent_post));
3172 3172
     if (is_null($pid)) $pid = 0;
3173 3173
     if (!$uid) $uid = 0;
3174 3174
     
@@ -3179,110 +3179,110 @@  discard block
 block discarded – undo
3179 3179
       SELECT COUNT(*)
3180 3180
       FROM {comments}
3181 3181
       WHERE nid = %d',
3182
-      $nid
3182
+        $nid
3183 3183
     ));
3184 3184
     $post_reply = $pid;
3185 3185
     
3186 3186
     if ($post_reply OR $topic_reply) {
3187
-      // Create a subject for the post from the post content. The body may be in 
3188
-      // any format, so we:
3189
-      //  1) Filter it into HTML
3190
-      //  2) Strip out all HTML tags
3191
-      //  3) Convert entities back to plain-text.
3192
-      // Note: format is checked by check_markup().
3193
-      $subject = truncate_utf8(trim(decode_entities(strip_tags(check_markup($post->content, $input_format)))), 29, TRUE);
3194
-      // Replace "Quote:" with "RE:"
3195
-      $subject = str_replace('Quote:', 'RE: ', $subject);
3196
-      // Fringe cases where the comment body is populated only by HTML tags
3197
-      // will require a default subject...
3198
-      if ($subject === '')
3187
+        // Create a subject for the post from the post content. The body may be in 
3188
+        // any format, so we:
3189
+        //  1) Filter it into HTML
3190
+        //  2) Strip out all HTML tags
3191
+        //  3) Convert entities back to plain-text.
3192
+        // Note: format is checked by check_markup().
3193
+        $subject = truncate_utf8(trim(decode_entities(strip_tags(check_markup($post->content, $input_format)))), 29, TRUE);
3194
+        // Replace "Quote:" with "RE:"
3195
+        $subject = str_replace('Quote:', 'RE: ', $subject);
3196
+        // Fringe cases where the comment body is populated only by HTML tags
3197
+        // will require a default subject...
3198
+        if ($subject === '')
3199 3199
         $subject = "RE: {$node->title}";
3200 3200
     } else {
3201
-      // This is the first post in the topic
3202
-      $subject = $node->title;
3201
+        // This is the first post in the topic
3202
+        $subject = $node->title;
3203 3203
     }
3204 3204
     
3205 3205
     // Construct the post as a Drupal comment
3206 3206
     $comment = array(
3207
-      'pid' => $pid,
3208
-      'nid' => $nid,
3209
-      'uid' => $uid,
3210
-      'subject' => $subject,
3211
-      'comment' => $post->content,
3212
-      'timestamp' => $post->timestamp,
3213
-      'status' => $post->hidden,
3214
-      'format' => $input_format
3207
+        'pid' => $pid,
3208
+        'nid' => $nid,
3209
+        'uid' => $uid,
3210
+        'subject' => $subject,
3211
+        'comment' => $post->content,
3212
+        'timestamp' => $post->timestamp,
3213
+        'status' => $post->hidden,
3214
+        'format' => $input_format
3215 3215
     );
3216 3216
     
3217 3217
     // Save the comment
3218 3218
     if (boincimport_forum_comment_save($comment)) {
3219
-      $success = db_query('
3219
+        $success = db_query('
3220 3220
         INSERT INTO {boincimport_temp_post} (post_id, cid)
3221 3221
         VALUES (%d, %d)',
3222 3222
         $post->id, $comment['cid']
3223
-      );
3223
+        );
3224
+    }
3224 3225
     }
3225
-  }
3226 3226
   
3227
-  $message = '';
3228
-  if ($success) {
3227
+    $message = '';
3228
+    if ($success) {
3229 3229
     // Store some result for post-processing in the finished callback.
3230 3230
     $context['results']['success'][] = $post->id;
3231 3231
     $message = "Successfully imported team post {$post->id}";
3232
-  }
3233
-  else {
3232
+    }
3233
+    else {
3234 3234
     $context['results']['failure'][] = $post->id;
3235 3235
     $message = "Failed to import team post {$post->id}!";
3236 3236
     watchdog('boincimport',
3237
-      'Failed to import team post @id!',
3238
-      array('@id' => $post->id), WATCHDOG_WARNING
3237
+        'Failed to import team post @id!',
3238
+        array('@id' => $post->id), WATCHDOG_WARNING
3239 3239
     ); 
3240
-  }
3240
+    }
3241 3241
   
3242
-  // Update our progress information.
3243
-  $context['sandbox']['progress']++;
3244
-  $context['sandbox']['current_post'] = $post->id;
3245
-  $context['message'] = $message;
3242
+    // Update our progress information.
3243
+    $context['sandbox']['progress']++;
3244
+    $context['sandbox']['current_post'] = $post->id;
3245
+    $context['message'] = $message;
3246 3246
 
3247
-  // Update the progress for the batch engine
3248
-  if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
3247
+    // Update the progress for the batch engine
3248
+    if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
3249 3249
     $context['finished'] = 1;
3250
-  }
3251
-  else {
3250
+    }
3251
+    else {
3252 3252
     $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
3253
-  }
3253
+    }
3254 3254
 }
3255 3255
 
3256 3256
 /**
3257 3257
  * Batch 'finished' callback
3258 3258
  */
3259 3259
 function boincimport_team_posts_finished($success, $results, $operations) {
3260
-  if ($success) {
3260
+    if ($success) {
3261 3261
     // Let's count our successes
3262 3262
     $total_imported = count($results['success']);
3263 3263
     $message = t(
3264
-      'Successfully imported @count team posts',
3265
-      array('@count' => $total_imported)
3264
+        'Successfully imported @count team posts',
3265
+        array('@count' => $total_imported)
3266 3266
     );
3267 3267
     watchdog('boincimport',
3268
-      'Successfully imported @count team posts.',
3269
-      array('@count' => $total_imported), WATCHDOG_INFO
3268
+        'Successfully imported @count team posts.',
3269
+        array('@count' => $total_imported), WATCHDOG_INFO
3270 3270
     ); 
3271 3271
     // Set the team post import successful flag in the variable table
3272 3272
     variable_set('boincimport_import_team_post_successful', '1');
3273 3273
     $_SESSION['boincimport_stage_selected'] = 'url';
3274
-  }
3275
-  else {
3274
+    }
3275
+    else {
3276 3276
     // An error occurred.
3277 3277
     // $operations contains the operations that remained unprocessed.
3278 3278
     $error_operation = reset($operations);
3279 3279
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
3280
-  }
3281
-  drupal_set_message($message);
3280
+    }
3281
+    drupal_set_message($message);
3282 3282
   
3283
-  // Release the lock on the import process
3284
-  variable_del('boincimport_process_locked');
3285
-  drupal_goto('admin/boinc/import/process');
3283
+    // Release the lock on the import process
3284
+    variable_del('boincimport_process_locked');
3285
+    drupal_goto('admin/boinc/import/process');
3286 3286
 }
3287 3287
 
3288 3288
 
@@ -3295,71 +3295,71 @@  discard block
 block discarded – undo
3295 3295
  */
3296 3296
 function boincimport_subscriptions() {
3297 3297
   
3298
-  // Check whether subscriptions have been successfully imported already
3299
-  if (variable_get('boincimport_import_subscription_successful', 0)) {
3298
+    // Check whether subscriptions have been successfully imported already
3299
+    if (variable_get('boincimport_import_subscription_successful', 0)) {
3300 3300
     drupal_set_message(t('Subscription import has already run successfully'), 'warning');
3301 3301
     watchdog(
3302
-      'boincimport', 'Subscription import has already run successfully',
3303
-      array(), WATCHDOG_WARNING
3302
+        'boincimport', 'Subscription import has already run successfully',
3303
+        array(), WATCHDOG_WARNING
3304 3304
     );
3305
-  }
3305
+    }
3306 3306
 
3307
-  if (!variable_get('boincimport_import_subscription_started', 0)) {
3307
+    if (!variable_get('boincimport_import_subscription_started', 0)) {
3308 3308
     // Could prepare database tables, if new fields are necessary, etc.
3309 3309
     variable_set('boincimport_import_subscription_started', 1);
3310
-  }
3310
+    }
3311 3311
   
3312
-  $pre = variable_get('boincimport_table_prefix', '');
3312
+    $pre = variable_get('boincimport_table_prefix', '');
3313 3313
 
3314
-  // Get users with subscriptions to import
3315
-  db_set_active('boinc');
3316
-  $users_with_subscriptions = db_query('
3314
+    // Get users with subscriptions to import
3315
+    db_set_active('boinc');
3316
+    $users_with_subscriptions = db_query('
3317 3317
     SELECT DISTINCT userid
3318 3318
     FROM %ssubscriptions
3319 3319
     ORDER BY userid ASC',
3320 3320
     $pre
3321
-  );
3322
-  $user_count = mysql_num_rows($users_with_subscriptions);
3323
-  db_set_active('default');
3321
+    );
3322
+    $user_count = mysql_num_rows($users_with_subscriptions);
3323
+    db_set_active('default');
3324 3324
 
3325
-  if (!$user_count) {
3325
+    if (!$user_count) {
3326 3326
     drupal_set_message(
3327
-      t('There were no subscriptions found: Aborting script'), 'warning'
3327
+        t('There were no subscriptions found: Aborting script'), 'warning'
3328 3328
     );
3329 3329
     watchdog('boincimport',
3330
-      'There were no subscriptions found: Aborting script', array(), WATCHDOG_WARNING
3330
+        'There were no subscriptions found: Aborting script', array(), WATCHDOG_WARNING
3331 3331
     );
3332 3332
     // Release the lock on the import process
3333 3333
     variable_del('boincimport_process_locked');
3334 3334
     return t('There were no subscriptions found: Aborting script.');
3335
-  }
3335
+    }
3336 3336
 
3337
-  watchdog('boincimport',
3337
+    watchdog('boincimport',
3338 3338
     'Found %count users with subscriptions: Beginning import',
3339 3339
     array('%count' => $user_count), WATCHDOG_INFO
3340
-  );
3340
+    );
3341 3341
   
3342
-  $operations = array();
3342
+    $operations = array();
3343 3343
   
3344
-  // Create batches to process
3345
-  while ($subscribed_user = db_fetch_object($users_with_subscriptions)) {
3344
+    // Create batches to process
3345
+    while ($subscribed_user = db_fetch_object($users_with_subscriptions)) {
3346 3346
     $operations[] = array(
3347
-      'boincimport_subscriptions_op', array(
3347
+        'boincimport_subscriptions_op', array(
3348 3348
         $subscribed_user->userid
3349
-      )
3349
+        )
3350 3350
     );
3351
-  }
3351
+    }
3352 3352
   
3353
-  $batch = array(
3353
+    $batch = array(
3354 3354
     'operations' => $operations,
3355 3355
     'finished' => 'boincimport_subscriptions_finished',
3356 3356
     'title' => t('Importing subscriptions'),
3357 3357
     'init_message' => t('Beginning subscription import...'),
3358 3358
     'progress_message' => t('Processed @current out of @total subscriptions.'),
3359 3359
     'error_message' => t('Subscription import has encountered an error.'),
3360
-  );
3360
+    );
3361 3361
   
3362
-  batch_set($batch);
3362
+    batch_set($batch);
3363 3363
 }
3364 3364
 
3365 3365
 /**
@@ -3368,72 +3368,72 @@  discard block
 block discarded – undo
3368 3368
  */
3369 3369
 function boincimport_subscriptions_op($boincuser_id, &$context) {
3370 3370
   
3371
-  // Get the drupal user and pull subscriptions
3372
-  $uid = get_drupal_id($boincuser_id);
3373
-  $count = boincuser_pull_subscriptions($uid);
3371
+    // Get the drupal user and pull subscriptions
3372
+    $uid = get_drupal_id($boincuser_id);
3373
+    $count = boincuser_pull_subscriptions($uid);
3374 3374
   
3375
-  $message = '';
3376
-  if ($count) {
3375
+    $message = '';
3376
+    if ($count) {
3377 3377
     // Store some result for post-processing in the finished callback.
3378 3378
     $context['results']['success'][] = $boincuser_id;
3379 3379
     $context['results']['subscriptions'][$boincuser_id] = $count;
3380 3380
     $message = "Successfully imported {$count} subscriptions for user {$boincuser_id}";
3381
-  }
3382
-  else {
3381
+    }
3382
+    else {
3383 3383
     $context['results']['failure'][] = $boincuser_id;
3384 3384
     $message = "Failed to import subscriptions for user {$boincuser_id}!";
3385 3385
     watchdog('boincimport',
3386
-      'Failed to import subscriptions for user @id!',
3387
-      array('@id' => $boincuser_id), WATCHDOG_WARNING
3386
+        'Failed to import subscriptions for user @id!',
3387
+        array('@id' => $boincuser_id), WATCHDOG_WARNING
3388 3388
     ); 
3389
-  }
3389
+    }
3390 3390
   
3391
-  // Update our progress information.
3392
-  $context['sandbox']['progress']++;
3393
-  $context['sandbox']['current_user'] = $boincuser_id;
3394
-  $context['message'] = $message;
3391
+    // Update our progress information.
3392
+    $context['sandbox']['progress']++;
3393
+    $context['sandbox']['current_user'] = $boincuser_id;
3394
+    $context['message'] = $message;
3395 3395
 
3396
-  // Update the progress for the batch engine
3397
-  if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
3396
+    // Update the progress for the batch engine
3397
+    if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
3398 3398
     $context['finished'] = 1;
3399
-  }
3400
-  else {
3399
+    }
3400
+    else {
3401 3401
     $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
3402
-  }
3402
+    }
3403 3403
 }
3404 3404
 
3405 3405
 /**
3406 3406
  * Batch 'finished' callback
3407 3407
  */
3408 3408
 function boincimport_subscriptions_finished($success, $results, $operations) {
3409
-  if ($success) {
3409
+    if ($success) {
3410 3410
     // Let's count our successes
3411 3411
     $user_count = count($results['success']);
3412 3412
     $subscriptions_imported = array_sum($results['subscriptions']);
3413 3413
     $message = t(
3414
-      'Successfully imported @count subscriptions for @distinct users',
3415
-      array('@count' => $subscriptions_imported, '@distinct' => $user_count)
3414
+        'Successfully imported @count subscriptions for @distinct users',
3415
+        array('@count' => $subscriptions_imported, '@distinct' => $user_count)
3416 3416
     );
3417 3417
     watchdog('boincimport',
3418
-      'Successfully imported @count subscriptions for @distinct users.',
3419
-      array('@count' => $subscriptions_imported, '@distinct' => $user_count),
3420
-      WATCHDOG_INFO
3418
+        'Successfully imported @count subscriptions for @distinct users.',
3419
+        array('@count' => $subscriptions_imported, '@distinct' => $user_count),
3420
+        WATCHDOG_INFO
3421 3421
     ); 
3422 3422
     // Set the subscription import successful flag in the variable table
3423 3423
     variable_set('boincimport_import_subscription_successful', '1');
3424 3424
     $_SESSION['boincimport_stage_selected'] = 'url';
3425
-  }
3426
-  else {
3425
+    }
3426
+    else {
3427 3427
     // An error occurred.
3428 3428
     // $operations contains the operations that remained unprocessed.
3429 3429
     $error_operation = reset($operations);
3430 3430
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
3431
-  }
3432
-  drupal_set_message($message);
3431
+    }
3432
+    drupal_set_message($message);
3433 3433
   
3434
-  // Release the lock on the import process
3435
-  variable_del('boincimport_process_locked');
3436
-  drupal_goto('admin/boinc/import/process');
3434
+    // Release the lock on the import process
3435
+    variable_del('boincimport_process_locked');
3436
+    drupal_goto('admin/boinc/import/process');
3437 3437
 }
3438 3438
 
3439 3439
 
@@ -3445,112 +3445,112 @@  discard block
 block discarded – undo
3445 3445
  */
3446 3446
 function boincimport_replace_urls() {
3447 3447
   
3448
-  // Check whether URLs have already been fixed
3449
-  if (variable_get('boincimport_replace_url_successful', 0)) {
3448
+    // Check whether URLs have already been fixed
3449
+    if (variable_get('boincimport_replace_url_successful', 0)) {
3450 3450
     drupal_set_message(t('URLs have already been updated'), 'warning');
3451 3451
     watchdog(
3452
-      'boincimport', 'URLs have already been updated',
3453
-      array(), WATCHDOG_WARNING
3452
+        'boincimport', 'URLs have already been updated',
3453
+        array(), WATCHDOG_WARNING
3454 3454
     );
3455
-  }
3455
+    }
3456 3456
 
3457
-  if (!variable_get('boincimport_replace_url_started', 0)) {
3457
+    if (!variable_get('boincimport_replace_url_started', 0)) {
3458 3458
     // Could prepare database tables, if new fields are necessary, etc.
3459 3459
     variable_set('boincimport_replace_url_started', 1);
3460
-  }
3460
+    }
3461 3461
   
3462
-  // Get the count of nodes and comments to process for URL updates
3463
-  $node_count = db_result(db_query('
3462
+    // Get the count of nodes and comments to process for URL updates
3463
+    $node_count = db_result(db_query('
3464 3464
     SELECT COUNT(DISTINCT btt.nid)
3465 3465
     FROM {boincimport_temp_topic} AS btt
3466 3466
     LEFT JOIN {node_revisions} AS nr ON btt.nid = nr.nid'
3467
-  ));
3467
+    ));
3468 3468
   
3469
-  $comment_count = db_result(db_query('
3469
+    $comment_count = db_result(db_query('
3470 3470
     SELECT COUNT(c.cid)
3471 3471
     FROM {boincimport_temp_post} AS p
3472 3472
     LEFT JOIN {comments} AS c ON p.cid = c.cid'
3473
-  ));
3473
+    ));
3474 3474
   
3475
-  $pm_count = db_result(db_query('
3475
+    $pm_count = db_result(db_query('
3476 3476
     SELECT COUNT(*)
3477 3477
     FROM {pm_message} pm'
3478
-  ));
3478
+    ));
3479 3479
   
3480
-  if (!$node_count AND !$comment_count AND !$pm_count) {
3480
+    if (!$node_count AND !$comment_count AND !$pm_count) {
3481 3481
     drupal_set_message(
3482
-      t('There were no nodes, comments, or private messages found: Aborting script'), 'warning'
3482
+        t('There were no nodes, comments, or private messages found: Aborting script'), 'warning'
3483 3483
     );
3484 3484
     watchdog('boincimport',
3485
-      'There were no nodes,comments, or private messages found: Aborting script', array(), WATCHDOG_WARNING
3485
+        'There were no nodes,comments, or private messages found: Aborting script', array(), WATCHDOG_WARNING
3486 3486
     );
3487 3487
     // Release the lock on the import process
3488 3488
     variable_del('boincimport_process_locked');
3489 3489
     return t('There were no nodes, comments, or private messages found: Aborting script.');
3490
-  }
3490
+    }
3491 3491
   
3492
-  watchdog('boincimport',
3492
+    watchdog('boincimport',
3493 3493
     'Found %node_count nodes, %comment_count comments, and %pm_count private messages: Updating URLs...',
3494 3494
     array(
3495
-      '%node_count' => $node_count,
3496
-      '%comment_count' => $comment_count,
3497
-      '%pm_count' => $pm_count,
3495
+        '%node_count' => $node_count,
3496
+        '%comment_count' => $comment_count,
3497
+        '%pm_count' => $pm_count,
3498 3498
     ),
3499 3499
     WATCHDOG_INFO
3500
-  );
3500
+    );
3501 3501
   
3502
-  $operations = array();
3503
-  $batch_size = 100;
3502
+    $operations = array();
3503
+    $batch_size = 100;
3504 3504
   
3505
-  // Create node batches to process
3506
-  for ($offset = 0; $offset < $node_count; $offset+=$batch_size) {
3505
+    // Create node batches to process
3506
+    for ($offset = 0; $offset < $node_count; $offset+=$batch_size) {
3507 3507
     $nodes_per_batch = $batch_size;
3508 3508
     if ($offset + $batch_size > $node_count) {
3509
-      $nodes_per_batch = $node_count - $offset;
3509
+        $nodes_per_batch = $node_count - $offset;
3510 3510
     }
3511 3511
     $operations[] = array(
3512
-      'boincimport_replace_urls_node_op', array(
3512
+        'boincimport_replace_urls_node_op', array(
3513 3513
         $offset, $nodes_per_batch
3514
-      )
3514
+        )
3515 3515
     );
3516
-  }
3517
-  // Add comment batches
3518
-  for ($offset = 0; $offset < $comment_count; $offset+=$batch_size) {
3516
+    }
3517
+    // Add comment batches
3518
+    for ($offset = 0; $offset < $comment_count; $offset+=$batch_size) {
3519 3519
     $comments_per_batch = $batch_size;
3520 3520
     if ($offset + $batch_size > $comment_count) {
3521
-      $comments_per_batch = $comment_count - $offset;
3521
+        $comments_per_batch = $comment_count - $offset;
3522 3522
     }
3523 3523
     $operations[] = array(
3524
-      'boincimport_replace_urls_comment_op', array(
3524
+        'boincimport_replace_urls_comment_op', array(
3525 3525
         $offset, $comments_per_batch
3526
-      )
3526
+        )
3527 3527
     );
3528
-  }
3529
-  // And don't forget to process private messages
3530
-  for ($offset = 0; $offset < $pm_count; $offset+=$batch_size) {
3528
+    }
3529
+    // And don't forget to process private messages
3530
+    for ($offset = 0; $offset < $pm_count; $offset+=$batch_size) {
3531 3531
     $messages_per_batch = $batch_size;
3532 3532
     if ($offset + $batch_size > $pm_count) {
3533
-      $messages_per_batch = $pm_count - $offset;
3533
+        $messages_per_batch = $pm_count - $offset;
3534 3534
     }
3535 3535
     $operations[] = array(
3536
-      'boincimport_replace_urls_pm_op', array(
3536
+        'boincimport_replace_urls_pm_op', array(
3537 3537
         $offset, $messages_per_batch
3538
-      )
3538
+        )
3539 3539
     );
3540
-  }
3540
+    }
3541 3541
   
3542
-  $batch = array(
3542
+    $batch = array(
3543 3543
     'operations' => $operations,
3544 3544
     'finished' => 'boincimport_replace_urls_finished',
3545 3545
     'title' => t('Updating URLs...'),
3546 3546
     'init_message' => t('Beginning URL update...'),
3547 3547
     'progress_message' => t('Processed URLs in @current out of @total batches (@size items per batch).', array(
3548
-      '@size' => $batch_size,
3548
+        '@size' => $batch_size,
3549 3549
     )),
3550 3550
     'error_message' => t('URL update has encountered an error.'),
3551
-  );
3551
+    );
3552 3552
   
3553
-  batch_set($batch);
3553
+    batch_set($batch);
3554 3554
 }
3555 3555
 
3556 3556
 /**
@@ -3558,27 +3558,27 @@  discard block
 block discarded – undo
3558 3558
  * Find URLs for the old system and update them with Drupal paths
3559 3559
  */
3560 3560
 function boincimport_replace_urls_node_op($offset, $batch_size, &$context) {
3561
-  // Initialize the batch, if needed
3562
-  if (!isset($context['sandbox']['progress'])) {
3561
+    // Initialize the batch, if needed
3562
+    if (!isset($context['sandbox']['progress'])) {
3563 3563
     $context['sandbox']['progress'] = 0;
3564 3564
     $context['sandbox']['max'] = $batch_size;
3565
-  }
3565
+    }
3566 3566
   
3567
-  $input_format = variable_get('boincimport_input_format', 0);
3567
+    $input_format = variable_get('boincimport_input_format', 0);
3568 3568
 
3569
-  // Since topics have just been imported, there should be only one vid for
3570
-  // each nid, so we can update node_revisions by nid
3571
-  // Get nodes to process
3572
-  $nodes = db_query('
3569
+    // Since topics have just been imported, there should be only one vid for
3570
+    // each nid, so we can update node_revisions by nid
3571
+    // Get nodes to process
3572
+    $nodes = db_query('
3573 3573
     SELECT btt.nid, nr.body, nr.teaser
3574 3574
     FROM {boincimport_temp_topic} AS btt
3575 3575
     LEFT JOIN {node_revisions} AS nr ON btt.nid = nr.nid
3576 3576
     ORDER BY btt.nid
3577 3577
     LIMIT %d,%d',
3578 3578
     $offset, $batch_size
3579
-  );
3579
+    );
3580 3580
   
3581
-  while ($node = db_fetch_object($nodes)) {
3581
+    while ($node = db_fetch_object($nodes)) {
3582 3582
     $updated = FALSE;
3583 3583
     
3584 3584
     // Update URLs in node contents
@@ -3587,23 +3587,23 @@  discard block
 block discarded – undo
3587 3587
     $node->body = _boincimport_replace_links($node->body);
3588 3588
     $node->teaser = _boincimport_replace_links($node->teaser);
3589 3589
     if ($node->body != $original_body OR $node->teaser != $original_teaser) {
3590
-      $updated = db_query("
3590
+        $updated = db_query("
3591 3591
         UPDATE {node_revisions}
3592 3592
         SET body= '%s', teaser = '%s'
3593 3593
         WHERE nid = %d",
3594 3594
         $node->body, $node->teaser, $node->nid
3595
-      );
3595
+        );
3596 3596
     }
3597 3597
     
3598 3598
     $message = '';
3599 3599
     $context['results']['success'][] = $node->nid;
3600 3600
     if ($updated) {
3601
-      // Store some result for post-processing in the finished callback.
3602
-      $context['results']['nodes']['updated'][] = $node->nid;
3603
-      $message = "Successfully updated node {$node->nid}";
3601
+        // Store some result for post-processing in the finished callback.
3602
+        $context['results']['nodes']['updated'][] = $node->nid;
3603
+        $message = "Successfully updated node {$node->nid}";
3604 3604
     }
3605 3605
     else {
3606
-      $message = "No changes made to node {$node->nid}!";
3606
+        $message = "No changes made to node {$node->nid}!";
3607 3607
     }
3608 3608
     
3609 3609
     // Update our progress information.
@@ -3613,12 +3613,12 @@  discard block
 block discarded – undo
3613 3613
 
3614 3614
     // Update the progress for the batch engine
3615 3615
     if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
3616
-      $context['finished'] = 1;
3616
+        $context['finished'] = 1;
3617 3617
     }
3618 3618
     else {
3619
-      $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
3619
+        $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
3620
+    }
3620 3621
     }
3621
-  }
3622 3622
 }
3623 3623
 
3624 3624
 /**
@@ -3626,48 +3626,48 @@  discard block
 block discarded – undo
3626 3626
  * Find URLs for the old system and update them with Drupal paths
3627 3627
  */
3628 3628
 function boincimport_replace_urls_comment_op($offset, $batch_size, &$context) {
3629
-  // Initialize the batch, if needed
3630
-  if (!isset($context['sandbox']['progress'])) {
3629
+    // Initialize the batch, if needed
3630
+    if (!isset($context['sandbox']['progress'])) {
3631 3631
     $context['sandbox']['progress'] = 0;
3632 3632
     $context['sandbox']['max'] = $batch_size;
3633
-  }
3633
+    }
3634 3634
   
3635
-  $input_format = variable_get('boincimport_input_format', 0);
3635
+    $input_format = variable_get('boincimport_input_format', 0);
3636 3636
   
3637
-  // Get comments to process
3638
-  $comments = db_query('
3637
+    // Get comments to process
3638
+    $comments = db_query('
3639 3639
     SELECT c.cid, c.comment
3640 3640
     FROM {boincimport_temp_post} AS p
3641 3641
     LEFT JOIN {comments} AS c ON p.cid = c.cid
3642 3642
     ORDER BY c.cid
3643 3643
     LIMIT %d,%d',
3644 3644
     $offset, $batch_size
3645
-  );
3645
+    );
3646 3646
   
3647
-  while ($comment = db_fetch_object($comments)) {
3647
+    while ($comment = db_fetch_object($comments)) {
3648 3648
     $updated = FALSE;
3649 3649
     
3650 3650
     // Update URLs in comment contents
3651 3651
     $original_comment = $comment->comment;
3652 3652
     $comment->comment = _boincimport_replace_links($comment->comment);
3653 3653
     if ($comment->comment != $original_comment) {
3654
-      $updated = db_query("
3654
+        $updated = db_query("
3655 3655
         UPDATE {comments}
3656 3656
         SET comment= '%s'
3657 3657
         WHERE cid = %d",
3658 3658
         $comment->comment, $comment->cid
3659
-      );
3659
+        );
3660 3660
     }
3661 3661
     
3662 3662
     $message = '';
3663 3663
     $context['results']['success'][] = $comment->cid;
3664 3664
     if ($updated) {
3665
-      // Store some result for post-processing in the finished callback.
3666
-      $context['results']['comments']['updated'][] = $comment->cid;
3667
-      $message = "Successfully updated comment {$comment->cid}";
3665
+        // Store some result for post-processing in the finished callback.
3666
+        $context['results']['comments']['updated'][] = $comment->cid;
3667
+        $message = "Successfully updated comment {$comment->cid}";
3668 3668
     }
3669 3669
     else {
3670
-      $message = "No changes made to comment {$comment->cid}!";
3670
+        $message = "No changes made to comment {$comment->cid}!";
3671 3671
     }
3672 3672
     
3673 3673
     // Update our progress information.
@@ -3677,12 +3677,12 @@  discard block
 block discarded – undo
3677 3677
 
3678 3678
     // Update the progress for the batch engine
3679 3679
     if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
3680
-      $context['finished'] = 1;
3680
+        $context['finished'] = 1;
3681 3681
     }
3682 3682
     else {
3683
-      $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
3683
+        $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
3684
+    }
3684 3685
     }
3685
-  }
3686 3686
 }
3687 3687
 
3688 3688
 /**
@@ -3690,47 +3690,47 @@  discard block
 block discarded – undo
3690 3690
  * Find URLs for the old system and update them with Drupal paths
3691 3691
  */
3692 3692
 function boincimport_replace_urls_pm_op($offset, $batch_size, &$context) {
3693
-  // Initialize the batch, if needed
3694
-  if (!isset($context['sandbox']['progress'])) {
3693
+    // Initialize the batch, if needed
3694
+    if (!isset($context['sandbox']['progress'])) {
3695 3695
     $context['sandbox']['progress'] = 0;
3696 3696
     $context['sandbox']['max'] = $batch_size;
3697
-  }
3697
+    }
3698 3698
   
3699
-  $input_format = variable_get('boincimport_input_format', 0);
3699
+    $input_format = variable_get('boincimport_input_format', 0);
3700 3700
   
3701
-  // Get private messages to process
3702
-  $messages = db_query('
3701
+    // Get private messages to process
3702
+    $messages = db_query('
3703 3703
     SELECT pm.mid, pm.body
3704 3704
     FROM {pm_message} pm
3705 3705
     ORDER BY pm.mid
3706 3706
     LIMIT %d,%d',
3707 3707
     $offset, $batch_size
3708
-  );
3708
+    );
3709 3709
   
3710
-  while ($pm = db_fetch_object($messages)) {
3710
+    while ($pm = db_fetch_object($messages)) {
3711 3711
     $updated = FALSE;
3712 3712
     
3713 3713
     // Update URLs in private message body
3714 3714
     $original_pm_body = $pm->body;
3715 3715
     $pm->body = _boincimport_replace_links($pm->body);
3716 3716
     if ($pm->body != $original_pm_body) {
3717
-      $updated = db_query("
3717
+        $updated = db_query("
3718 3718
         UPDATE {pm_message}
3719 3719
         SET body= '%s'
3720 3720
         WHERE mid = %d",
3721 3721
         $pm->body, $pm->mid
3722
-      );
3722
+        );
3723 3723
     }
3724 3724
     
3725 3725
     $message = '';
3726 3726
     $context['results']['success'][] = $pm->mid;
3727 3727
     if ($updated) {
3728
-      // Store some result for post-processing in the finished callback.
3729
-      $context['results']['pm']['updated'][] = $pm->mid;
3730
-      $message = "Successfully updated private message {$pm->mid}";
3728
+        // Store some result for post-processing in the finished callback.
3729
+        $context['results']['pm']['updated'][] = $pm->mid;
3730
+        $message = "Successfully updated private message {$pm->mid}";
3731 3731
     }
3732 3732
     else {
3733
-      $message = "No changes made to private message {$pm->mid}!";
3733
+        $message = "No changes made to private message {$pm->mid}!";
3734 3734
     }
3735 3735
     
3736 3736
     // Update our progress information.
@@ -3740,85 +3740,85 @@  discard block
 block discarded – undo
3740 3740
 
3741 3741
     // Update the progress for the batch engine
3742 3742
     if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
3743
-      $context['finished'] = 1;
3743
+        $context['finished'] = 1;
3744 3744
     }
3745 3745
     else {
3746
-      $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
3746
+        $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
3747
+    }
3747 3748
     }
3748
-  }
3749 3749
 }
3750 3750
 
3751 3751
 /**
3752 3752
  * Batch 'finished' callback
3753 3753
  */
3754 3754
 function boincimport_replace_urls_finished($success, $results, $operations) {
3755
-  if ($success) {
3755
+    if ($success) {
3756 3756
     // Let's count our successes
3757 3757
     $total_processed = count($results['success']);
3758 3758
     $nodes_updated = count($results['nodes']['updated']);
3759 3759
     $comments_updated = count($results['comments']['updated']);
3760 3760
     $private_messages_updated = count($results['pm']['updated']);
3761 3761
     $message = t(
3762
-      'Successfully processed @count nodes, comments, and private messages (@nodes_updated nodes, @comments_updated comments, and @pm_updated private messages were updated)',
3763
-      array(
3762
+        'Successfully processed @count nodes, comments, and private messages (@nodes_updated nodes, @comments_updated comments, and @pm_updated private messages were updated)',
3763
+        array(
3764 3764
         '@count' => $total_processed,
3765 3765
         '@nodes_updated' => $nodes_updated,
3766 3766
         '@comments_updated' => $comments_updated,
3767 3767
         '@pm_updated' => $private_messages_updated,
3768
-      )
3768
+        )
3769 3769
     );
3770 3770
     if ($private_messages_updated) {
3771
-      watchdog('boincimport',
3771
+        watchdog('boincimport',
3772 3772
         'Updated URLs in these private_messages: @mid_list',
3773 3773
         array(
3774
-          '@mid_list' => implode(', ', $results['pm']['updated']),
3774
+            '@mid_list' => implode(', ', $results['pm']['updated']),
3775 3775
         ),
3776 3776
         WATCHDOG_INFO
3777
-      );
3777
+        );
3778 3778
     }
3779 3779
     if ($comments_updated) {
3780
-      watchdog('boincimport',
3780
+        watchdog('boincimport',
3781 3781
         'Updated URLs in these comments: @cid_list',
3782 3782
         array(
3783
-          '@cid_list' => implode(', ', $results['comments']['updated']),
3783
+            '@cid_list' => implode(', ', $results['comments']['updated']),
3784 3784
         ),
3785 3785
         WATCHDOG_INFO
3786
-      );
3786
+        );
3787 3787
     }
3788 3788
     if ($nodes_updated) {
3789
-      watchdog('boincimport',
3789
+        watchdog('boincimport',
3790 3790
         'Updated URLs in these nodes: @nid_list',
3791 3791
         array(
3792
-          '@nid_list' => implode(', ', $results['nodes']['updated']),
3792
+            '@nid_list' => implode(', ', $results['nodes']['updated']),
3793 3793
         ),
3794 3794
         WATCHDOG_INFO
3795
-      );
3795
+        );
3796 3796
     }
3797 3797
     watchdog('boincimport',
3798
-      'Successfully processed @count nodes, comments, and private messages (@nodes_updated nodes, @comments_updated comments, and @pm_updated private messages were updated)',
3799
-      array(
3798
+        'Successfully processed @count nodes, comments, and private messages (@nodes_updated nodes, @comments_updated comments, and @pm_updated private messages were updated)',
3799
+        array(
3800 3800
         '@count' => $total_processed,
3801 3801
         '@nodes_updated' => $nodes_updated,
3802 3802
         '@comments_updated' => $comments_updated,
3803 3803
         '@pm_updated' => $private_messages_updated,
3804
-      ),
3805
-      WATCHDOG_INFO
3804
+        ),
3805
+        WATCHDOG_INFO
3806 3806
     );
3807 3807
     // Set the replace URLs successful flag in the variable table
3808 3808
     variable_set('boincimport_replace_urls_successful', '1');
3809 3809
     $_SESSION['boincimport_stage_selected'] = 'users';
3810
-  }
3811
-  else {
3810
+    }
3811
+    else {
3812 3812
     // An error occurred.
3813 3813
     // $operations contains the operations that remained unprocessed.
3814 3814
     $error_operation = reset($operations);
3815 3815
     $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
3816
-  }
3817
-  drupal_set_message($message);
3816
+    }
3817
+    drupal_set_message($message);
3818 3818
   
3819
-  // Release the lock on the import process
3820
-  variable_del('boincimport_process_locked');
3821
-  drupal_goto('admin/boinc/import/process');
3819
+    // Release the lock on the import process
3820
+    variable_del('boincimport_process_locked');
3821
+    drupal_goto('admin/boinc/import/process');
3822 3822
 }
3823 3823
 
3824 3824
 
@@ -3830,43 +3830,43 @@  discard block
 block discarded – undo
3830 3830
  * Remove temporary variables, clear caches, etc.
3831 3831
  */
3832 3832
 function boincimport_process_cleanup() {
3833
-  db_set_active('default');
3834
-  
3835
-  variable_del('boincimport_base_url_boinc');
3836
-  variable_del('boincimport_base_url_drupal');
3837
-  variable_del('boincimport_import_user_successful');
3838
-  variable_del('boincimport_import_user_started');
3839
-  variable_del('boincimport_import_team_successful');
3840
-  variable_del('boincimport_import_team_started');
3841
-  variable_del('boincimport_import_category_successful');
3842
-  variable_del('boincimport_replace_url_successful');
3843
-  variable_del('boincimport_import_category_started');
3844
-  variable_del('boincimport_import_topic_successful');
3845
-  variable_del('boincimport_import_topic_started');
3846
-  variable_del('boincimport_import_post_successful');
3847
-  variable_del('boincimport_import_post_started');
3848
-  variable_del('boincimport_team_forum_successful');
3849
-  variable_del('boincimport_team_topic_successful');
3850
-  variable_del('boincimport_team_post_successful');
3851
-  variable_del('boincimport_team_post_started');
3852
-  variable_del('boincimport_ready');
3853
-  variable_del('boincimport_db_url');
3854
-  variable_del('boincimport_tested');
3855
-  variable_del('boincimport_db_configured');
3856
-  variable_del('boincimport_table_prefix');
3857
-  variable_del('boincimport_team_types');
3858
-  variable_del('boincimport_time_limit');
3859
-  variable_del('boincimport_import_lurkers');
3860
-  variable_del('boincimport_import_polls'); 
3861
-  variable_del('boincimport_import_poll_started');
3862
-  variable_del('boincimport_import_poll_successful');
3863
-  variable_del('boincimport_import_pm_successful');
3864
-  variable_del('boincimport_encode');
3865
-  variable_del('boincimport_encoding_phpbb');
3866
-  variable_del('boincimport_encoding_drupal');
3867
-  variable_del('boincimport_version');
3868
-
3869
-  db_query('DELETE FROM {cache}');
3833
+    db_set_active('default');
3834
+  
3835
+    variable_del('boincimport_base_url_boinc');
3836
+    variable_del('boincimport_base_url_drupal');
3837
+    variable_del('boincimport_import_user_successful');
3838
+    variable_del('boincimport_import_user_started');
3839
+    variable_del('boincimport_import_team_successful');
3840
+    variable_del('boincimport_import_team_started');
3841
+    variable_del('boincimport_import_category_successful');
3842
+    variable_del('boincimport_replace_url_successful');
3843
+    variable_del('boincimport_import_category_started');
3844
+    variable_del('boincimport_import_topic_successful');
3845
+    variable_del('boincimport_import_topic_started');
3846
+    variable_del('boincimport_import_post_successful');
3847
+    variable_del('boincimport_import_post_started');
3848
+    variable_del('boincimport_team_forum_successful');
3849
+    variable_del('boincimport_team_topic_successful');
3850
+    variable_del('boincimport_team_post_successful');
3851
+    variable_del('boincimport_team_post_started');
3852
+    variable_del('boincimport_ready');
3853
+    variable_del('boincimport_db_url');
3854
+    variable_del('boincimport_tested');
3855
+    variable_del('boincimport_db_configured');
3856
+    variable_del('boincimport_table_prefix');
3857
+    variable_del('boincimport_team_types');
3858
+    variable_del('boincimport_time_limit');
3859
+    variable_del('boincimport_import_lurkers');
3860
+    variable_del('boincimport_import_polls'); 
3861
+    variable_del('boincimport_import_poll_started');
3862
+    variable_del('boincimport_import_poll_successful');
3863
+    variable_del('boincimport_import_pm_successful');
3864
+    variable_del('boincimport_encode');
3865
+    variable_del('boincimport_encoding_phpbb');
3866
+    variable_del('boincimport_encoding_drupal');
3867
+    variable_del('boincimport_version');
3868
+
3869
+    db_query('DELETE FROM {cache}');
3870 3870
 }
3871 3871
 
3872 3872
 /**
@@ -3874,15 +3874,15 @@  discard block
 block discarded – undo
3874 3874
  */
3875 3875
 
3876 3876
 function boincimport_forum_comment_save(&$edit) {
3877
-  // Here we are building the thread field.  See the comment in comment_render().
3878
-  if ($edit['pid'] == 0) {
3877
+    // Here we are building the thread field.  See the comment in comment_render().
3878
+    if ($edit['pid'] == 0) {
3879 3879
     // This is a comment with no parent comment (depth 0): we start by retrieving
3880 3880
     // the maximum thread level.
3881 3881
     $max = db_result(db_query('SELECT MAX(thread) FROM {comments} WHERE nid = %d', $edit['nid']));
3882 3882
     // Strip the "/" from the end of the thread.
3883 3883
     $max = rtrim($max, '/');
3884 3884
     $thread = int2vancode(vancode2int($max)+1) .'/';
3885
-  } else {
3885
+    } else {
3886 3886
     // This is comment with a parent comment: we increase the part of the thread
3887 3887
     // value at the proper depth.
3888 3888
     $parent = db_fetch_object(db_query('SELECT * FROM {comments} WHERE cid = %d', $edit['pid']));
@@ -3891,71 +3891,71 @@  discard block
 block discarded – undo
3891 3891
     // Get the max value in _this_ thread.
3892 3892
     $max = db_result(db_query("SELECT MAX(thread) FROM {comments} WHERE thread LIKE '%s.%%' AND nid = %d", $parent->thread, $edit['nid']));
3893 3893
     if ($max == '') {
3894
-      // First child of this parent.
3895
-      $thread = $parent->thread .'.'. int2vancode(1) .'/';
3894
+        // First child of this parent.
3895
+        $thread = $parent->thread .'.'. int2vancode(1) .'/';
3896 3896
     } else {
3897
-      // Strip the "/" at the end of the thread.
3898
-      $max = rtrim($max, '/');
3899
-      // We need to get the value at the correct depth.
3900
-      $parts = explode('.', $max);
3901
-      $parent_depth = count(explode('.', $parent->thread));
3902
-      $last = $parts[$parent_depth];
3903
-      // Finally, build the thread field for this new comment.
3904
-      $thread = $parent->thread .'.'. int2vancode(vancode2int($last) + 1) .'/';
3897
+        // Strip the "/" at the end of the thread.
3898
+        $max = rtrim($max, '/');
3899
+        // We need to get the value at the correct depth.
3900
+        $parts = explode('.', $max);
3901
+        $parent_depth = count(explode('.', $parent->thread));
3902
+        $last = $parts[$parent_depth];
3903
+        // Finally, build the thread field for this new comment.
3904
+        $thread = $parent->thread .'.'. int2vancode(vancode2int($last) + 1) .'/';
3905
+    }
3905 3906
     }
3906
-  }
3907 3907
 
3908
-  $status = 0; // 1 - not published, 0 - published
3909
-  $format = variable_get('boincimport_input_format', 0);
3910
-  $score = 0; // 0 default value, comments get higher score depending on the author's roles
3911
-  $users = serialize(array(0 => 1));  // default value for everybody!!
3908
+    $status = 0; // 1 - not published, 0 - published
3909
+    $format = variable_get('boincimport_input_format', 0);
3910
+    $score = 0; // 0 default value, comments get higher score depending on the author's roles
3911
+    $users = serialize(array(0 => 1));  // default value for everybody!!
3912 3912
   
3913
-  if ($edit['uid'] === $user->uid) { // '===' because we want to modify anonymous users too
3913
+    if ($edit['uid'] === $user->uid) { // '===' because we want to modify anonymous users too
3914 3914
     $edit['name'] = $user->name;
3915
-  }
3915
+    }
3916 3916
 
3917
-  $success = db_query("INSERT INTO {comments} (nid, pid, uid, subject, comment, format, hostname, timestamp, status, thread, name) VALUES (%d, %d, %d, '%s', '%s', %d, '%s', %d, %d, '%s', '%s')", $edit['nid'], $edit['pid'], $edit['uid'], $edit['subject'], $edit['comment'], $edit['format'], ip_address(), $edit['timestamp'], $edit['status'], $thread, $edit['name']);
3918
-  if ($success) {
3917
+    $success = db_query("INSERT INTO {comments} (nid, pid, uid, subject, comment, format, hostname, timestamp, status, thread, name) VALUES (%d, %d, %d, '%s', '%s', %d, '%s', %d, %d, '%s', '%s')", $edit['nid'], $edit['pid'], $edit['uid'], $edit['subject'], $edit['comment'], $edit['format'], ip_address(), $edit['timestamp'], $edit['status'], $thread, $edit['name']);
3918
+    if ($success) {
3919 3919
     $edit['cid'] = db_last_insert_id('comments', 'cid');
3920 3920
     _comment_update_node_statistics($edit['nid']);
3921
-  }
3922
-  return $success;
3921
+    }
3922
+    return $success;
3923 3923
 }
3924 3924
 
3925 3925
 /**
3926 3926
  * Strips text of extra phpbb3 markup and if requested, also strips all bbcode from text.
3927 3927
  */
3928 3928
 function _boincimport_strip_bbcode($text) {
3929
-  // Strip the text of extra markup - regular expressions taken from phpbb3 includes/function.php, function get_preg_expression().
3930
-  $match = array(
3929
+    // Strip the text of extra markup - regular expressions taken from phpbb3 includes/function.php, function get_preg_expression().
3930
+    $match = array(
3931 3931
     '#<!\-\- e \-\-><a href="mailto:(.*?)">.*?</a><!\-\- e \-\->#',
3932 3932
     '#<!\-\- l \-\-><a (?:class="[\w-]+" )?href="(.*?)(?:(&amp;|\?)sid=[0-9a-f]{32})?">.*?</a><!\-\- l \-\->#',
3933 3933
     '#<!\-\- ([mw]) \-\-><a (?:class="[\w-]+" )?href="(.*?)">.*?</a><!\-\- \1 \-\->#',
3934 3934
     '#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/.*? \/><!\-\- s\1 \-\->#',
3935 3935
     '#<!\-\- .*? \-\->#s',
3936 3936
     '#<.*?>#s',
3937
-  );
3938
-  $replace = array('$1', '$1', '$2', '$1', '', '');
3939
-  $text = preg_replace($match, $replace, $text);
3937
+    );
3938
+    $replace = array('$1', '$1', '$2', '$1', '', '');
3939
+    $text = preg_replace($match, $replace, $text);
3940 3940
 
3941
-  // If BBcode conversion to has been selected, the following will convert the
3942
-  // BBcode to normal html
3943
-  if (variable_get('boincimport_bbcode', 0)) {
3941
+    // If BBcode conversion to has been selected, the following will convert the
3942
+    // BBcode to normal html
3943
+    if (variable_get('boincimport_bbcode', 0)) {
3944 3944
     $input_format = variable_get('boincimport_input_format', 0);
3945 3945
     $text = bbcode_filter('process', 0 , $input_format, $text);
3946
-  }
3947
-  return $text;
3946
+    }
3947
+    return $text;
3948 3948
 }
3949 3949
 
3950 3950
 /**
3951 3951
  * Function to properly encode strings.
3952 3952
  */
3953 3953
 function _boincimport_text_sanitize($text) {
3954
-  $input_format = variable_get('boincimport_input_format', 0);
3955
-  $text = html_entity_decode($text, ENT_QUOTES, 'utf-8');
3956
-  // Be sure the text is filtered for the default input format
3957
-  $text = check_markup($text, $input_format);
3958
-  return $text;
3954
+    $input_format = variable_get('boincimport_input_format', 0);
3955
+    $text = html_entity_decode($text, ENT_QUOTES, 'utf-8');
3956
+    // Be sure the text is filtered for the default input format
3957
+    $text = check_markup($text, $input_format);
3958
+    return $text;
3959 3959
 }
3960 3960
 
3961 3961
 
@@ -3964,25 +3964,25 @@  discard block
 block discarded – undo
3964 3964
  */
3965 3965
 function _boincimport_replace_links($html) {
3966 3966
   
3967
-  $transformer = new BoincImportUrlTransformer();
3968
-  
3969
-  // Update links to posts, threads, and forums
3970
-  $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)forum_thread\.php\?id=(\d+)&postid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformPostLinks'), $html);
3971
-  $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)forum_thread\.php\?id=(\d+)(&\w+=\w*)*?(#(\d+)?)}i', array($transformer, 'transformOldPostLinks'), $html);
3972
-  $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)forum_thread\.php\?id=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformTopicLinks'), $html);
3973
-  $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)forum_forum\.php\?id=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformForumLinks'), $html);
3974
-  $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)show_user\.php\?userid=(\d+)((&\w+=\w*)+)?}i', array($transformer, 'transformUserLinks'), $html);
3975
-  $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)workunit\.php\?wuid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformWorkUnitLinks'), $html);
3976
-  $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)result\.php\?resultid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformResultLinks'), $html);
3977
-  $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)results\.php\?userid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformUserResultsLinks'), $html);
3978
-  $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)results\.php\?hostid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformHostResultsLinks'), $html);
3979
-  $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)show_host_detail\.php\?hostid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformHostLinks'), $html);
3980
-  $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)hosts_user\.php\?userid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformUserHostsLinks'), $html);
3981
-  
3982
-  // Update any links to the top level index
3983
-  $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)forum_index.php}i', array($transformer, 'transformForumIndexLinks'), $html);
3984
-  
3985
-  return $html;
3967
+    $transformer = new BoincImportUrlTransformer();
3968
+  
3969
+    // Update links to posts, threads, and forums
3970
+    $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)forum_thread\.php\?id=(\d+)&postid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformPostLinks'), $html);
3971
+    $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)forum_thread\.php\?id=(\d+)(&\w+=\w*)*?(#(\d+)?)}i', array($transformer, 'transformOldPostLinks'), $html);
3972
+    $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)forum_thread\.php\?id=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformTopicLinks'), $html);
3973
+    $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)forum_forum\.php\?id=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformForumLinks'), $html);
3974
+    $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)show_user\.php\?userid=(\d+)((&\w+=\w*)+)?}i', array($transformer, 'transformUserLinks'), $html);
3975
+    $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)workunit\.php\?wuid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformWorkUnitLinks'), $html);
3976
+    $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)result\.php\?resultid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformResultLinks'), $html);
3977
+    $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)results\.php\?userid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformUserResultsLinks'), $html);
3978
+    $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)results\.php\?hostid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformHostResultsLinks'), $html);
3979
+    $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)show_host_detail\.php\?hostid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformHostLinks'), $html);
3980
+    $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)hosts_user\.php\?userid=(\d+)(&\w+=\w*)*?}i', array($transformer, 'transformUserHostsLinks'), $html);
3981
+  
3982
+    // Update any links to the top level index
3983
+    $html = preg_replace_callback('{(?:(http|https)://([^\s]*?)|href="(?:/)?)forum_index.php}i', array($transformer, 'transformForumIndexLinks'), $html);
3984
+  
3985
+    return $html;
3986 3986
 }
3987 3987
 
3988 3988
 /**
@@ -3990,14 +3990,14 @@  discard block
 block discarded – undo
3990 3990
  */
3991 3991
 class BoincImportUrlTransformer {
3992 3992
   
3993
-  var $basePath;
3994
-  var $boincDomain;
3995
-  var $drupalDomain;
3993
+    var $basePath;
3994
+    var $boincDomain;
3995
+    var $drupalDomain;
3996 3996
   
3997
-  /**
3998
-   * Constructor
3999
-   */
4000
-  function BoincImportUrlTransformer() {
3997
+    /**
3998
+     * Constructor
3999
+     */
4000
+    function BoincImportUrlTransformer() {
4001 4001
     global $base_url;
4002 4002
     global $base_path;
4003 4003
     $boinc_base_urls = variable_get('boincimport_base_url_boinc', '');
@@ -4007,203 +4007,203 @@  discard block
 block discarded – undo
4007 4007
     $this->boincDomains = array();
4008 4008
     $boinc_base_urls = preg_split('/\s+/', $boinc_base_urls);
4009 4009
     foreach ($boinc_base_urls as $url) {
4010
-      $domain = parse_url($url, PHP_URL_HOST);
4011
-      if ($domain) {
4010
+        $domain = parse_url($url, PHP_URL_HOST);
4011
+        if ($domain) {
4012 4012
         $this->boincDomains[$domain] = TRUE;
4013
-      }
4013
+        }
4014 4014
     }
4015 4015
     if (!$this->boincDomains) {
4016
-      watchdog('boincimport', 'No valid BOINC base URLs found to transform!',
4016
+        watchdog('boincimport', 'No valid BOINC base URLs found to transform!',
4017 4017
         array(), WATCHDOG_WARNING); 
4018 4018
     }
4019
-  }
4019
+    }
4020 4020
   
4021
-  /**
4022
-   * Get what the new base URL should be (needed for every transformation)
4023
-   */
4024
-  function getNewBaseUrl($matches) {
4021
+    /**
4022
+     * Get what the new base URL should be (needed for every transformation)
4023
+     */
4024
+    function getNewBaseUrl($matches) {
4025 4025
     $http = $matches[1];
4026 4026
     $domain = trim($matches[2], '/');
4027 4027
     if ($http) {
4028
-      if (isset($this->boincDomains[$domain])) {
4028
+        if (isset($this->boincDomains[$domain])) {
4029 4029
         // This is a URL configured to be transformed
4030 4030
         return "{$http}://{$this->drupalDomain}{$this->basePath}";
4031
-      }
4032
-      else {
4031
+        }
4032
+        else {
4033 4033
         // This URL should not be transformed
4034 4034
         return NULL;
4035
-      }
4035
+        }
4036 4036
     }
4037 4037
     else {
4038
-      // This is a relative URL
4039
-      return $this->basePath;
4038
+        // This is a relative URL
4039
+        return $this->basePath;
4040
+    }
4040 4041
     }
4041
-  }
4042 4042
   
4043
-  /**
4044
-   * Replace links to specific posts. If the given post is the first in the
4045
-   * thread, it is a topic node in Drupal, not a comment.
4046
-   */
4047
-  function transformPostLinks($matches) {
4043
+    /**
4044
+     * Replace links to specific posts. If the given post is the first in the
4045
+     * thread, it is a topic node in Drupal, not a comment.
4046
+     */
4047
+    function transformPostLinks($matches) {
4048 4048
     $link = $matches[0];
4049 4049
     $newBaseUrl = $this->getNewBaseUrl($matches);
4050 4050
     if ($newBaseUrl !== NULL) {
4051
-      $id = db_result(db_query('
4051
+        $id = db_result(db_query('
4052 4052
         SELECT p.cid
4053 4053
         FROM {boincimport_temp_post} p
4054 4054
         WHERE p.post_id = %d',
4055 4055
         $matches[4]
4056
-      ));
4057
-      if ($id) {
4056
+        ));
4057
+        if ($id) {
4058 4058
         $link = "{$newBaseUrl}goto/comment/{$id}";
4059
-      }
4060
-      else {
4059
+        }
4060
+        else {
4061 4061
         // This post is not in the post import table, so it's probably a topic
4062 4062
         $link = $this->transformTopicLinks($matches);
4063
-      }
4063
+        }
4064 4064
     }
4065 4065
     return $link;
4066
-  }
4066
+    }
4067 4067
   
4068
-  /**
4069
-   * Replace links that include anchors to specific posts. If the given post is
4070
-   * the first in the thread, it is a topic node in Drupal, not a comment.
4071
-   */
4072
-  function transformOldPostLinks($matches) {
4068
+    /**
4069
+     * Replace links that include anchors to specific posts. If the given post is
4070
+     * the first in the thread, it is a topic node in Drupal, not a comment.
4071
+     */
4072
+    function transformOldPostLinks($matches) {
4073 4073
     $link = $matches[0];
4074 4074
     $newBaseUrl = $this->getNewBaseUrl($matches);
4075 4075
     if ($newBaseUrl !== NULL) {
4076
-      $id = db_result(db_query('
4076
+        $id = db_result(db_query('
4077 4077
         SELECT p.cid
4078 4078
         FROM {boincimport_temp_post} p
4079 4079
         WHERE p.post_id = %d',
4080 4080
         $matches[6]
4081
-      ));
4082
-      if ($id) {
4081
+        ));
4082
+        if ($id) {
4083 4083
         $link = "{$newBaseUrl}goto/comment/{$id}";
4084
-      }
4085
-      else {
4084
+        }
4085
+        else {
4086 4086
         // This post is not in the post import table, so it's probably a topic
4087 4087
         $link = $this->transformTopicLinks($matches);
4088
-      }
4088
+        }
4089 4089
     }
4090 4090
     return $link;
4091
-  }
4091
+    }
4092 4092
   
4093
-  function transformTopicLinks($matches) {
4093
+    function transformTopicLinks($matches) {
4094 4094
     $link = $matches[0];
4095 4095
     $newBaseUrl = $this->getNewBaseUrl($matches);
4096 4096
     if ($newBaseUrl !== NULL) {
4097
-      $id = db_result(db_query('
4097
+        $id = db_result(db_query('
4098 4098
         SELECT nid
4099 4099
         FROM {boincimport_temp_topic}
4100 4100
         WHERE topic_id = %d',
4101 4101
         $matches[3]
4102
-      ));
4103
-      $link = "{$newBaseUrl}node/{$id}";
4102
+        ));
4103
+        $link = "{$newBaseUrl}node/{$id}";
4104 4104
     }
4105 4105
     return $link;
4106
-  }
4106
+    }
4107 4107
 
4108
-  function transformForumLinks($matches) {
4108
+    function transformForumLinks($matches) {
4109 4109
     $link = $matches[0];
4110 4110
     $newBaseUrl = $this->getNewBaseUrl($matches);
4111 4111
     if ($newBaseUrl !== NULL) {
4112
-      $forum = db_fetch_object(db_query('
4112
+        $forum = db_fetch_object(db_query('
4113 4113
         SELECT tid
4114 4114
         FROM {boincimport_temp_forum}
4115 4115
         WHERE forum_id = %d',
4116 4116
         $matches[3]
4117
-      ));
4118
-      $link = "{$newBaseUrl}community/forum/{$forum->tid}";
4117
+        ));
4118
+        $link = "{$newBaseUrl}community/forum/{$forum->tid}";
4119 4119
     }
4120 4120
     return $link;
4121
-  }
4121
+    }
4122 4122
 
4123
-  function transformUserLinks($matches) {
4123
+    function transformUserLinks($matches) {
4124 4124
     $link = $matches[0];
4125 4125
     $newBaseUrl = $this->getNewBaseUrl($matches);
4126 4126
     if ($newBaseUrl !== NULL) {
4127
-      // Make sure this isn't an RPC link (no need to transform those)
4128
-      if (!$matches[5]) {
4127
+        // Make sure this isn't an RPC link (no need to transform those)
4128
+        if (!$matches[5]) {
4129 4129
         // TODO: This regex doesn't seem to capture the format=xml part of the
4130 4130
         // URL, making it impossible to distinguish if this is an RPC or not...
4131 4131
         //watchdog('DEBUG', 'matches: @m', array('@m' => print_r($matches,true)), WATCHDOG_DEBUG);
4132 4132
         $uid = boincuser_lookup_uid($matches[3]);
4133 4133
         $link = "{$newBaseUrl}account/{$uid}";
4134
-      }
4134
+        }
4135 4135
     }
4136 4136
     return $link;
4137
-  }
4137
+    }
4138 4138
 
4139
-  function transformWorkUnitLinks($matches) {
4139
+    function transformWorkUnitLinks($matches) {
4140 4140
     $link = $matches[0];
4141 4141
     $newBaseUrl = $this->getNewBaseUrl($matches);
4142 4142
     if ($newBaseUrl !== NULL) {
4143
-      $id = $matches[3];
4144
-      $link = "{$newBaseUrl}workunit/{$id}";
4143
+        $id = $matches[3];
4144
+        $link = "{$newBaseUrl}workunit/{$id}";
4145 4145
     }
4146 4146
     return $link;
4147
-  }
4147
+    }
4148 4148
 
4149
-  function transformResultLinks($matches) {
4149
+    function transformResultLinks($matches) {
4150 4150
     $link = $matches[0];
4151 4151
     $newBaseUrl = $this->getNewBaseUrl($matches);
4152 4152
     if ($newBaseUrl !== NULL) {
4153
-      $id = $matches[3];
4154
-      $link = "{$newBaseUrl}task/{$id}";
4153
+        $id = $matches[3];
4154
+        $link = "{$newBaseUrl}task/{$id}";
4155 4155
     }
4156 4156
     return $link;
4157
-  }
4157
+    }
4158 4158
 
4159
-  function transformHostResultsLinks($matches) {
4159
+    function transformHostResultsLinks($matches) {
4160 4160
     $link = $matches[0];
4161 4161
     $newBaseUrl = $this->getNewBaseUrl($matches);
4162 4162
     if ($newBaseUrl !== NULL) {
4163
-      $id = $matches[3];
4164
-      $link = "{$newBaseUrl}host/{$id}/tasks";
4163
+        $id = $matches[3];
4164
+        $link = "{$newBaseUrl}host/{$id}/tasks";
4165 4165
     }
4166 4166
     return $link;
4167
-  }
4167
+    }
4168 4168
   
4169
-  function transformUserResultsLinks($matches) {
4169
+    function transformUserResultsLinks($matches) {
4170 4170
     $link = $matches[0];
4171 4171
     $newBaseUrl = $this->getNewBaseUrl($matches);
4172 4172
     if ($newBaseUrl !== NULL) {
4173
-      $link = "{$newBaseUrl}account/tasks";
4173
+        $link = "{$newBaseUrl}account/tasks";
4174 4174
     }
4175 4175
     return $link;
4176
-  }
4176
+    }
4177 4177
   
4178
-  function transformHostLinks($matches) {
4178
+    function transformHostLinks($matches) {
4179 4179
     $link = $matches[0];
4180 4180
     $newBaseUrl = $this->getNewBaseUrl($matches);
4181 4181
     if ($newBaseUrl !== NULL) {
4182
-      $id = $matches[3];
4183
-      $link = "{$newBaseUrl}host/{$id}";
4182
+        $id = $matches[3];
4183
+        $link = "{$newBaseUrl}host/{$id}";
4184 4184
     }
4185 4185
     return $link;
4186
-  }
4186
+    }
4187 4187
   
4188
-  function transformUserHostsLinks($matches) {
4188
+    function transformUserHostsLinks($matches) {
4189 4189
     $link = $matches[0];
4190 4190
     $newBaseUrl = $this->getNewBaseUrl($matches);
4191 4191
     if ($newBaseUrl !== NULL) {
4192
-      $uid = boincuser_lookup_uid($matches[3]);
4193
-      if ($uid) {
4192
+        $uid = boincuser_lookup_uid($matches[3]);
4193
+        if ($uid) {
4194 4194
         $link = "{$newBaseUrl}account/{$uid}/computers";
4195
-      }
4195
+        }
4196 4196
     }
4197 4197
     return $link;
4198
-  }
4198
+    }
4199 4199
   
4200
-  function transformForumIndexLinks($matches) {
4200
+    function transformForumIndexLinks($matches) {
4201 4201
     $link = $matches[0];
4202 4202
     $newBaseUrl = $this->getNewBaseUrl($matches);
4203 4203
     if ($newBaseUrl !== NULL) {
4204
-      $link = "{$newBaseUrl}community/forum";
4204
+        $link = "{$newBaseUrl}community/forum";
4205 4205
     }
4206 4206
     return $link;
4207
-  }
4207
+    }
4208 4208
 
4209 4209
 }
Please login to merge, or discard this patch.
drupal/sites/default/boinc/modules/boincstats/boincstats.module 2 patches
Doc Comments   +3 added lines patch added patch discarded remove patch
@@ -422,6 +422,9 @@
 block discarded – undo
422 422
 /*
423 423
  *
424 424
  */
425
+/**
426
+ * @param integer $credit
427
+ */
425 428
 function boincstats_credit_to_ghours($credit) {
426 429
   return $credit / (100 * 365);
427 430
 }
Please login to merge, or discard this patch.
Indentation   +179 added lines, -179 removed lines patch added patch discarded remove patch
@@ -2,9 +2,9 @@  discard block
 block discarded – undo
2 2
 // $Id$
3 3
 
4 4
 /**
5
-  * @file
6
-  * Enable BOINC charting features for statistics
7
-  */
5
+ * @file
6
+ * Enable BOINC charting features for statistics
7
+ */
8 8
 
9 9
 
10 10
 /*  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *
@@ -18,10 +18,10 @@  discard block
 block discarded – undo
18 18
  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  */
19 19
 
20 20
 /**
21
-  * Implementation of hook_menu().
22
-  */
21
+ * Implementation of hook_menu().
22
+ */
23 23
 function boincstats_menu() {
24
-  $items['admin/boinc/stats'] = array(
24
+    $items['admin/boinc/stats'] = array(
25 25
     'title' => 'Environment: Statistics setup',
26 26
     'description' => 'Configure the stats system for generating charts and 
27 27
       providing cross project data.',
@@ -30,18 +30,18 @@  discard block
 block discarded – undo
30 30
     'access arguments' => array('administer site configuration'),
31 31
     'type' => MENU_NORMAL_ITEM,
32 32
     'file' => 'boincstats.admin.inc'
33
-  );
34
-  $items['charts/user'] = array(
33
+    );
34
+    $items['charts/user'] = array(
35 35
     'page callback' => 'boincstats_get_user_stats_chart',
36 36
     'access arguments' => array('access content'),
37 37
     'type' => MENU_CALLBACK
38
-  );
39
-  $items['charts/project'] = array(
38
+    );
39
+    $items['charts/project'] = array(
40 40
     'page callback' => 'boincstats_get_project_stats_chart',
41 41
     'access arguments' => array('access content'),
42 42
     'type' => MENU_CALLBACK
43
-  );
44
-  return $items;
43
+    );
44
+    return $items;
45 45
 }
46 46
 
47 47
 
@@ -50,31 +50,31 @@  discard block
 block discarded – undo
50 50
  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  */
51 51
  
52 52
 /**
53
-  * User stats chart menu callback
54
-  * Called to generate the daily credit status chart for a user (dashboard)
55
-  */
53
+ * User stats chart menu callback
54
+ * Called to generate the daily credit status chart for a user (dashboard)
55
+ */
56 56
 function boincstats_get_user_stats_chart($cpid = null, $chart_size = 'medium') {
57 57
   
58
-  // pChart library inclusions
59
-  module_load_include('php', 'boincstats', 'includes/pchart/class/pData.class');
60
-  module_load_include('php', 'boincstats', 'includes/pchart/class/pDraw.class');
61
-  module_load_include('php', 'boincstats', 'includes/pchart/class/pImage.class');
62
-  module_load_include('php', 'boincstats', 'includes/pchart/class/pCache.class');
58
+    // pChart library inclusions
59
+    module_load_include('php', 'boincstats', 'includes/pchart/class/pData.class');
60
+    module_load_include('php', 'boincstats', 'includes/pchart/class/pDraw.class');
61
+    module_load_include('php', 'boincstats', 'includes/pchart/class/pImage.class');
62
+    module_load_include('php', 'boincstats', 'includes/pchart/class/pCache.class');
63 63
   
64
-  init_theme();
65
-  global $theme_key;
66
-  $cache_name = "{$theme_key}_";
64
+    init_theme();
65
+    global $theme_key;
66
+    $cache_name = "{$theme_key}_";
67 67
   
68
-  $dataset_size = 0;
69
-  $chart_height = 0;
70
-  $chart_width = 0;
71
-  $draw_x_lines = FALSE;
72
-  $label_x_axis = FALSE;
68
+    $dataset_size = 0;
69
+    $chart_height = 0;
70
+    $chart_width = 0;
71
+    $draw_x_lines = FALSE;
72
+    $label_x_axis = FALSE;
73 73
   
74
-  $stats_xml = NULL;
74
+    $stats_xml = NULL;
75 75
   
76
-  switch($chart_size) {
77
-  case 'small':
76
+    switch($chart_size) {
77
+    case 'small':
78 78
     $cache_name .= "{$cpid}_small";
79 79
     $dataset_size = 30;
80 80
     $chart_height = 80;
@@ -83,7 +83,7 @@  discard block
 block discarded – undo
83 83
     $draw_x_lines = FALSE;
84 84
     $label_x_axis = FALSE;
85 85
     break;
86
-  case 'medium':
86
+    case 'medium':
87 87
   default:
88 88
     $cache_name .= $cpid;
89 89
     $dataset_size = 60;
@@ -91,32 +91,32 @@  discard block
 block discarded – undo
91 91
     $chart_width = 589;
92 92
     $draw_x_lines = TRUE;
93 93
     $label_x_axis = TRUE;
94
-  }
94
+    }
95 95
   
96
-  // Sanity check for cache directory
97
-  if (!boincstats_check_cache_dir()) {
96
+    // Sanity check for cache directory
97
+    if (!boincstats_check_cache_dir()) {
98 98
     return;
99
-  }
99
+    }
100 100
   
101
-  // Initialize the cache object and flush stale images
102
-  $myCache = new pCache(array('CacheFolder' => realpath('.') . '/' . conf_path() . '/files/cache'));
103
-  $myCache->removeOlderThan(60*60*24);
101
+    // Initialize the cache object and flush stale images
102
+    $myCache = new pCache(array('CacheFolder' => realpath('.') . '/' . conf_path() . '/files/cache'));
103
+    $myCache->removeOlderThan(60*60*24);
104 104
   
105
-  if ($myCache->isInCache($cache_name)) {
105
+    if ($myCache->isInCache($cache_name)) {
106 106
     $myCache->strokeFromCache($cache_name);
107
-  }
108
-  else {
107
+    }
108
+    else {
109 109
     // Initialize dataset
110 110
     $dataset = array();
111 111
     $stats_xml = boincstats_get_project_stats('daily', $cpid);
112 112
     if ($stats_xml) {
113
-      // Get the last 60 days of stats for the chart
114
-      for ($j = 30; $j < 90; $j++) {
113
+        // Get the last 60 days of stats for the chart
114
+        for ($j = 30; $j < 90; $j++) {
115 115
         $dataset[] = (int) $stats_xml->records->record[$j];
116
-      }
116
+        }
117 117
     }
118 118
     else {
119
-      for ($i = 0; $i <= $dataset_size; $i++) $dataset[] = 0;
119
+        for ($i = 0; $i <= $dataset_size; $i++) $dataset[] = 0;
120 120
     }
121 121
     
122 122
     // Get color configuration
@@ -145,39 +145,39 @@  discard block
 block discarded – undo
145 145
     // Define the chart area
146 146
     $myPicture->setGraphArea(0, 3, $chart_width, $chart_height);
147 147
     if ($backdrop_color) {
148
-      $myPicture->drawFilledRectangle(0, 0, $chart_width, $chart_height, $backdrop_color);
148
+        $myPicture->drawFilledRectangle(0, 0, $chart_width, $chart_height, $backdrop_color);
149 149
     }
150 150
     
151 151
     // Draw the scale
152 152
     $scaleSettings = array(
153
-      'Mode' => SCALE_MODE_START0,
154
-      'DrawYLines' => false,
155
-      'DrawXLines' => $draw_x_lines,
156
-      'GridTicks' => 2,
157
-      'LabelSkip' => 9,
158
-      'SkippedAxisAlpha' => 0,
159
-      'SkippedInnerTickWidth' => 0,
160
-      'SkippedOuterTickWidth' => 0,
161
-      'AxisAlpha' => 0,
162
-      'InnerTickWidth' => 0,
163
-      'OuterTickWidth' => 0,
164
-      'XMargin' => 1,
165
-      'YMargin' => 0,
166
-      'Floating' => TRUE,
167
-      'GridR' => 200,
168
-      'GridG' => 200,
169
-      'GridB' => 200,
170
-      'DrawSubTicks' => false,
171
-      'CycleBackground' => false
153
+        'Mode' => SCALE_MODE_START0,
154
+        'DrawYLines' => false,
155
+        'DrawXLines' => $draw_x_lines,
156
+        'GridTicks' => 2,
157
+        'LabelSkip' => 9,
158
+        'SkippedAxisAlpha' => 0,
159
+        'SkippedInnerTickWidth' => 0,
160
+        'SkippedOuterTickWidth' => 0,
161
+        'AxisAlpha' => 0,
162
+        'InnerTickWidth' => 0,
163
+        'OuterTickWidth' => 0,
164
+        'XMargin' => 1,
165
+        'YMargin' => 0,
166
+        'Floating' => TRUE,
167
+        'GridR' => 200,
168
+        'GridG' => 200,
169
+        'GridB' => 200,
170
+        'DrawSubTicks' => false,
171
+        'CycleBackground' => false
172 172
     );
173 173
     $myPicture->setFontProperties(array('FontSize' => 10));
174 174
     $myPicture->drawScale($scaleSettings);
175 175
     
176 176
     if ($label_x_axis) {
177
-      for ($i = 5; $i >= 0; $i--) {
177
+        for ($i = 5; $i >= 0; $i--) {
178 178
         $label = ($i) ? -10*$i : 'Today';
179 179
         $myPicture->drawText(589-587*($i/6)-5, 2, $label, array('Align' => TEXT_ALIGN_TOPRIGHT));
180
-      }
180
+        }
181 181
     }
182 182
 
183 183
     // Draw the area chart
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
     // Render the picture (choose the best way)
190 190
     //$myPicture->autoOutput('pictures/example.drawAreaChart.simple.png');
191 191
     $myPicture->stroke();
192
-  }
192
+    }
193 193
 }
194 194
 
195 195
 /**
@@ -197,48 +197,48 @@  discard block
 block discarded – undo
197 197
  * Called to generate the daily credit status chart for the whole project
198 198
  */
199 199
 function boincstats_get_project_stats_chart() {
200
-  // pChart library inclusions
201
-  module_load_include('php', 'boincstats', 'includes/pchart/class/pData.class');
202
-  module_load_include('php', 'boincstats', 'includes/pchart/class/pDraw.class');
203
-  module_load_include('php', 'boincstats', 'includes/pchart/class/pImage.class');
204
-  module_load_include('php', 'boincstats', 'includes/pchart/class/pCache.class');
200
+    // pChart library inclusions
201
+    module_load_include('php', 'boincstats', 'includes/pchart/class/pData.class');
202
+    module_load_include('php', 'boincstats', 'includes/pchart/class/pDraw.class');
203
+    module_load_include('php', 'boincstats', 'includes/pchart/class/pImage.class');
204
+    module_load_include('php', 'boincstats', 'includes/pchart/class/pCache.class');
205 205
   
206
-  init_theme();
207
-  global $theme_key;
208
-  $cache_name = "{$theme_key}_project_chart";
206
+    init_theme();
207
+    global $theme_key;
208
+    $cache_name = "{$theme_key}_project_chart";
209 209
   
210
-  $color_keys = array('R', 'G', 'B');
210
+    $color_keys = array('R', 'G', 'B');
211 211
   
212
-  // Get color configuration
213
-  $palette_color_hex = theme_get_setting('boinc_stats_chart_color');
214
-  $palette_color = array_combine($color_keys, sscanf($palette_color_hex, "#%02x%02x%02x"));
215
-  $backdrop_color_hex = theme_get_setting('boinc_stats_chart_bcolor');
216
-  $backdrop_color = array_combine($color_keys, sscanf($backdrop_color_hex, "#%02x%02x%02x"));
212
+    // Get color configuration
213
+    $palette_color_hex = theme_get_setting('boinc_stats_chart_color');
214
+    $palette_color = array_combine($color_keys, sscanf($palette_color_hex, "#%02x%02x%02x"));
215
+    $backdrop_color_hex = theme_get_setting('boinc_stats_chart_bcolor');
216
+    $backdrop_color = array_combine($color_keys, sscanf($backdrop_color_hex, "#%02x%02x%02x"));
217 217
    
218
-  // Sanity check for cache directory
219
-  if (!boincstats_check_cache_dir()) {
218
+    // Sanity check for cache directory
219
+    if (!boincstats_check_cache_dir()) {
220 220
     return;
221
-  }
221
+    }
222 222
   
223
-  // Initialize the cache object and flush stale images
224
-  $myCache = new pCache(array('CacheFolder' => realpath('.') . '/' . conf_path() . '/files/cache'));
225
-  $myCache->removeOlderThan(60*60*24);
223
+    // Initialize the cache object and flush stale images
224
+    $myCache = new pCache(array('CacheFolder' => realpath('.') . '/' . conf_path() . '/files/cache'));
225
+    $myCache->removeOlderThan(60*60*24);
226 226
   
227
-  if ($myCache->isInCache($cache_name)) {
227
+    if ($myCache->isInCache($cache_name)) {
228 228
     $myCache->strokeFromCache($cache_name);
229
-  }
230
-  else {
229
+    }
230
+    else {
231 231
     // Initialize dataset
232 232
     $dataset = array();
233 233
     $stats_xml = boincstats_get_project_stats('daily');
234 234
     if ($stats_xml) {
235
-      // Get the last 60 days of stats for the chart
236
-      for ($j = 30; $j < 90; $j++) {
235
+        // Get the last 60 days of stats for the chart
236
+        for ($j = 30; $j < 90; $j++) {
237 237
         $dataset[] = (int) $stats_xml->records->record[$j];
238
-      }
238
+        }
239 239
     }
240 240
     else {
241
-      for ($i = 0; $i <= 30; $i++) $dataset[] = 0;
241
+        for ($i = 0; $i <= 30; $i++) $dataset[] = 0;
242 242
     }
243 243
     
244 244
     // Create and populate the pData object
@@ -263,25 +263,25 @@  discard block
 block discarded – undo
263 263
 
264 264
     // Draw the scale
265 265
     $scaleSettings = array(
266
-      'Mode' => SCALE_MODE_START0,
267
-      'DrawYLines' => false,
268
-      'DrawXLines' => false,
269
-      'GridTicks' => 2,
270
-      'LabelSkip' => 9,
271
-      'SkippedAxisAlpha' => 0,
272
-      'SkippedInnerTickWidth' => 0,
273
-      'SkippedOuterTickWidth' => 0,
274
-      'AxisAlpha' => 0,
275
-      'InnerTickWidth' => 0,
276
-      'OuterTickWidth' => 0,
277
-      'XMargin' => 1,
278
-      'YMargin' => 0,
279
-      'Floating' => TRUE,
280
-      'GridR' => 200,
281
-      'GridG' => 200,
282
-      'GridB' => 200,
283
-      'DrawSubTicks' => false,
284
-      'CycleBackground' => false
266
+        'Mode' => SCALE_MODE_START0,
267
+        'DrawYLines' => false,
268
+        'DrawXLines' => false,
269
+        'GridTicks' => 2,
270
+        'LabelSkip' => 9,
271
+        'SkippedAxisAlpha' => 0,
272
+        'SkippedInnerTickWidth' => 0,
273
+        'SkippedOuterTickWidth' => 0,
274
+        'AxisAlpha' => 0,
275
+        'InnerTickWidth' => 0,
276
+        'OuterTickWidth' => 0,
277
+        'XMargin' => 1,
278
+        'YMargin' => 0,
279
+        'Floating' => TRUE,
280
+        'GridR' => 200,
281
+        'GridG' => 200,
282
+        'GridB' => 200,
283
+        'DrawSubTicks' => false,
284
+        'CycleBackground' => false
285 285
     );
286 286
     $myPicture->setFontProperties(array('FontSize' => 10));
287 287
     $myPicture->drawScale($scaleSettings);
@@ -300,41 +300,41 @@  discard block
 block discarded – undo
300 300
     // Render the picture (choose the best way)
301 301
     //$myPicture->autoOutput('pictures/example.drawAreaChart.simple.png');
302 302
     $myPicture->stroke();
303
-  }
303
+    }
304 304
 }
305 305
 
306 306
 /*
307 307
  *
308 308
  */
309 309
 function boincstats_check_cache_dir($cache_path = 'files/cache') {
310
-  $cache_dir = realpath('.') . '/' . conf_path() . '/' . $cache_path;
311
-  if (!is_writeable($cache_dir)) {
310
+    $cache_dir = realpath('.') . '/' . conf_path() . '/' . $cache_path;
311
+    if (!is_writeable($cache_dir)) {
312 312
     if (!is_dir($cache_dir)) {
313
-      if (!is_writeable(dirname($cache_dir))) {
313
+        if (!is_writeable(dirname($cache_dir))) {
314 314
         // If the parent "files" dir isn't even writeable...
315 315
         watchdog('boincstats', '@parent_dir directory is not writeable. This
316 316
           directory must be writeable by the web server.',
317
-          array('@parent_dir' => dirname($cache_dir)), WATCHDOG_ERROR);
317
+            array('@parent_dir' => dirname($cache_dir)), WATCHDOG_ERROR);
318 318
         return FALSE;
319
-      }
320
-      else {
319
+        }
320
+        else {
321 321
         // Create the cache dir
322 322
         if (!mkdir($cache_dir, 0775)) {
323
-          watchdog('boincstats', 'Failed to create @cache_dir directory. Check
323
+            watchdog('boincstats', 'Failed to create @cache_dir directory. Check
324 324
             filesystem permissions...?',
325 325
             array('@cache_dir' => $cache_dir), WATCHDOG_ERROR);
326
-          return FALSE;
326
+            return FALSE;
327
+        }
327 328
         }
328
-      }
329 329
     }
330 330
     else {
331
-      watchdog('boincstats', 'Cache directory at @cache_dir is not writeable.
331
+        watchdog('boincstats', 'Cache directory at @cache_dir is not writeable.
332 332
         Please allow webserver write access.',
333 333
         array('@cache_dir' => $cache_dir), WATCHDOG_ERROR);
334
-      return FALSE;
334
+        return FALSE;
335 335
     }
336
-  }
337
-  return TRUE;
336
+    }
337
+    return TRUE;
338 338
 }
339 339
 
340 340
 /*
@@ -342,87 +342,87 @@  discard block
 block discarded – undo
342 342
  */
343 343
 function boincstats_get_project_stats($type = 'total', $cpid = NULL) {
344 344
   
345
-  // Determine the stats environment
346
-  boincstats_check_configuration();
347
-  $stats_server = variable_get('boinc_stats_server', '');
348
-  $stats_rpc = variable_get('boinc_stats_project_credit_history_rpc', '');
349
-  $project_id = variable_get('boinc_stats_remote_project_id', '');
345
+    // Determine the stats environment
346
+    boincstats_check_configuration();
347
+    $stats_server = variable_get('boinc_stats_server', '');
348
+    $stats_rpc = variable_get('boinc_stats_project_credit_history_rpc', '');
349
+    $project_id = variable_get('boinc_stats_remote_project_id', '');
350 350
   
351
-  $get = array(
351
+    $get = array(
352 352
     'id' => $project_id
353
-  );
354
-  switch ($type) {
355
-  case 'daily':
353
+    );
354
+    switch ($type) {
355
+    case 'daily':
356 356
     $get['daily'] = NULL;
357 357
     break;
358
-  case 'total':
358
+    case 'total':
359 359
   default:
360 360
   }
361 361
   
362
-  if ($cpid) {
362
+    if ($cpid) {
363 363
     // If a user CPID has been provided, limit scope to that user
364 364
     $stats_rpc = variable_get('boinc_stats_user_credit_history_rpc', '');
365 365
     $get['cpid'] = $cpid;
366
-  }
366
+    }
367 367
   
368
-  // Construct query string
369
-  $args = array();
370
-  foreach ($get as $arg => $value) {
368
+    // Construct query string
369
+    $args = array();
370
+    foreach ($get as $arg => $value) {
371 371
     if ($value !== NULL) {
372
-      $args[] = "{$arg}=" . rawurlencode($value);
372
+        $args[] = "{$arg}=" . rawurlencode($value);
373 373
     }
374 374
     else {
375
-      $args[] = $arg;
375
+        $args[] = $arg;
376 376
     }
377
-  }
378
-  $query = '?' . implode('&', $args);
377
+    }
378
+    $query = '?' . implode('&', $args);
379 379
   
380
-  // Load XML from RPC
381
-  $stats_xml = NULL;
382
-  $target_url = "http://{$stats_server}/{$stats_rpc}{$query}";
383
-  $result = drupal_http_request($target_url);
384
-  if (in_array($result->code, array(200, 304))) {
380
+    // Load XML from RPC
381
+    $stats_xml = NULL;
382
+    $target_url = "http://{$stats_server}/{$stats_rpc}{$query}";
383
+    $result = drupal_http_request($target_url);
384
+    if (in_array($result->code, array(200, 304))) {
385 385
     $stats_xml = simplexml_load_string($result->data);
386
-  }
387
-  watchdog('boincstats', $target_url);
388
-  return $stats_xml;
386
+    }
387
+    watchdog('boincstats', $target_url);
388
+    return $stats_xml;
389 389
 }
390 390
 
391 391
 /*
392 392
  *
393 393
  */
394 394
 function boincstats_get_project_total_credit() {
395
-  $stats_xml = boincstats_get_project_stats();
396
-  $last_record = end($stats_xml->records->record);
397
-  return ($last_record) ? (int) $last_record : 0;
395
+    $stats_xml = boincstats_get_project_stats();
396
+    $last_record = end($stats_xml->records->record);
397
+    return ($last_record) ? (int) $last_record : 0;
398 398
 }
399 399
 
400 400
 /*
401 401
  *
402 402
  */
403 403
 function boincstats_get_project_avg_credit() {
404
-  $stats_xml = boincstats_get_project_stats();
405
-  return (isset($stats_xml->recent_avg)) ? $stats_xml->recent_avg : 0;
404
+    $stats_xml = boincstats_get_project_stats();
405
+    return (isset($stats_xml->recent_avg)) ? $stats_xml->recent_avg : 0;
406 406
 }
407 407
 
408 408
 /*
409 409
  *
410 410
  */
411 411
 function boincstats_credit_to_ghours($credit) {
412
-  return $credit / (100 * 365);
412
+    return $credit / (100 * 365);
413 413
 }
414 414
 
415 415
 /*
416 416
  *
417 417
  */
418 418
 function boincstats_credit_to_flops($credit, $prefix = 0) {
419
-  $factor = array(
419
+    $factor = array(
420 420
     '0' => 0,
421 421
     'g' => 3,
422 422
     't' => 6,
423 423
     'p' => 9
424
-  );
425
-  return $credit / (pow(10, (int) $factor[$prefix]) / 10);
424
+    );
425
+    return $credit / (pow(10, (int) $factor[$prefix]) / 10);
426 426
 }
427 427
 
428 428
 
@@ -431,22 +431,22 @@  discard block
 block discarded – undo
431 431
  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  */
432 432
 
433 433
 function boincstats_get_project_stats_overview($type = 'basic') {
434
-  global $base_path;
435
-  $output = '';
436
-  switch ($type) {
437
-  case 'basic':
434
+    global $base_path;
435
+    $output = '';
436
+    switch ($type) {
437
+    case 'basic':
438 438
     $output .= '<div class="overlay"><span>(' . bts('Credits per day', array(), NULL, 'boinc:front-page') . ')</span></div>' . "\n";
439 439
     $output .= '<div class="chart"><img src="' . $base_path . 'charts/project" /></div>' . "\n";
440 440
     break;
441
-  case 'detailed':
441
+    case 'detailed':
442 442
     $output .= '<div class="stats"><label>' . bts('Total G-hours', array(), NULL, 'boinc:front-page') . ': </label><span>' . number_format(boincstats_credit_to_ghours(boincstats_get_project_total_credit())) . '</span></div>' . "\n";
443 443
     $output .= '<div class="stats"><label>' . bts('Avg TFlops', array(), NULL, 'boinc:front-page') . ': </label><span>' . number_format(boincstats_credit_to_flops(boincstats_get_project_avg_credit(), 't')) . '</span></div>' . "\n";
444 444
     //$output .= '<div class="stats"><a href="#">' . bts('Pending credits', array(), NULL, 'boinc:front-page') . '</a></div>' . "\n";
445 445
     $output .= '<div class="chart"><img src="' . $base_path . 'charts/project" /></div>' . "\n";
446 446
     break;
447
-  default:
447
+    default:
448 448
   }
449
-  return $output;
449
+    return $output;
450 450
 }
451 451
 
452 452
 
@@ -458,19 +458,19 @@  discard block
 block discarded – undo
458 458
  * Check that the stats system is configured, report if it isn't
459 459
  */
460 460
 function boincstats_check_configuration() {
461
-  $project_id = variable_get('boinc_stats_remote_project_id', '');
462
-  if (!$project_id) {
461
+    $project_id = variable_get('boinc_stats_remote_project_id', '');
462
+    if (!$project_id) {
463 463
     watchdog('boincstats', 'The BOINC stats system is not configured. Please
464 464
         !configure_it', array('!configure_it' => l(t('configure it now'),
465
-          'admin/boinc/stats')), WATCHDOG_ERROR);
465
+            'admin/boinc/stats')), WATCHDOG_ERROR);
466 466
     if (user_access('administer site configuration')) {
467
-      drupal_set_message(t('The BOINC stats system is not configured. Please
467
+        drupal_set_message(t('The BOINC stats system is not configured. Please
468 468
         !configure_it', array('!configure_it' => l(t('configure it now'),
469
-          'admin/boinc/stats'))), 'error', FALSE);
469
+            'admin/boinc/stats'))), 'error', FALSE);
470 470
     }
471 471
     else {
472
-      drupal_set_message(t('There is a problem with the site. Please contact
472
+        drupal_set_message(t('There is a problem with the site. Please contact
473 473
         the system administrator.'), 'error', FALSE);
474 474
     }
475
-  }
475
+    }
476 476
 }
Please login to merge, or discard this patch.
boinc/modules/boincstats/includes/pchart/class/pBarcode128.class.php 2 patches
Doc Comments   +4 added lines patch added patch discarded remove patch
@@ -179,6 +179,10 @@
 block discarded – undo
179 179
 
180 180
    function left($value,$NbChar) { return substr($value,0,$NbChar); }  
181 181
    function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); }  
182
+
183
+   /**
184
+    * @param integer $NbChar
185
+    */
182 186
    function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); }  
183 187
   }
184 188
 ?>
185 189
\ No newline at end of file
Please login to merge, or discard this patch.
Indentation   +133 added lines, -133 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
- /*
2
+    /*
3 3
      pBarcode128 - class to create barcodes (128B)
4 4
 
5 5
      Version     : 2.1.3
@@ -13,172 +13,172 @@  discard block
 block discarded – undo
13 13
      You can find the whole class documentation on the pChart web site.
14 14
  */
15 15
 
16
- /* pData class definition */
17
- class pBarcode128
18
-  {
19
-   var $Codes;
20
-   var $Reverse;
21
-   var $Result;
22
-   var $pChartObject;
23
-   var $CRC;
24
-
25
-   /* Class creator */
26
-   function pBarcode128($BasePath="")
16
+    /* pData class definition */
17
+    class pBarcode128
27 18
     {
28
-     $this->Codes   = "";
29
-     $this->Reverse = "";
30
-
31
-     $FileHandle = @fopen($BasePath."data/128B.db", "r");
32
-
33
-     if (!$FileHandle) { die("Cannot find barcode database (".$BasePath."128B.db)."); }
34
-
35
-     while (!feof($FileHandle))
36
-      {
37
-       $Buffer = fgets($FileHandle,4096);
38
-       $Buffer = str_replace(chr(10),"",$Buffer);
39
-       $Buffer = str_replace(chr(13),"",$Buffer);
40
-       $Values = preg_split("/;/",$Buffer);
41
-
42
-       $this->Codes[$Values[1]]["ID"]     = $Values[0];
43
-       $this->Codes[$Values[1]]["Code"]   = $Values[2];
44
-       $this->Reverse[$Values[0]]["Code"] = $Values[2];
45
-       $this->Reverse[$Values[0]]["Asc"]  = $Values[1];
46
-      }
47
-     fclose($FileHandle);
19
+    var $Codes;
20
+    var $Reverse;
21
+    var $Result;
22
+    var $pChartObject;
23
+    var $CRC;
24
+
25
+    /* Class creator */
26
+    function pBarcode128($BasePath="")
27
+    {
28
+        $this->Codes   = "";
29
+        $this->Reverse = "";
30
+
31
+        $FileHandle = @fopen($BasePath."data/128B.db", "r");
32
+
33
+        if (!$FileHandle) { die("Cannot find barcode database (".$BasePath."128B.db)."); }
34
+
35
+        while (!feof($FileHandle))
36
+        {
37
+        $Buffer = fgets($FileHandle,4096);
38
+        $Buffer = str_replace(chr(10),"",$Buffer);
39
+        $Buffer = str_replace(chr(13),"",$Buffer);
40
+        $Values = preg_split("/;/",$Buffer);
41
+
42
+        $this->Codes[$Values[1]]["ID"]     = $Values[0];
43
+        $this->Codes[$Values[1]]["Code"]   = $Values[2];
44
+        $this->Reverse[$Values[0]]["Code"] = $Values[2];
45
+        $this->Reverse[$Values[0]]["Asc"]  = $Values[1];
46
+        }
47
+        fclose($FileHandle);
48 48
     }
49 49
 
50
-   /* Return the projected size of a barcode */
51
-   function getSize($TextString,$Format="")
50
+    /* Return the projected size of a barcode */
51
+    function getSize($TextString,$Format="")
52 52
     {
53
-     $Angle		= isset($Format["Angle"]) ? $Format["Angle"] : 0;
54
-     $ShowLegend	= isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
55
-     $LegendOffset	= isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
56
-     $DrawArea		= isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
57
-     $FontSize		= isset($Format["FontSize"]) ? $Format["FontSize"] : 12;
58
-     $Height		= isset($Format["Height"]) ? $Format["Height"] : 30;
53
+        $Angle		= isset($Format["Angle"]) ? $Format["Angle"] : 0;
54
+        $ShowLegend	= isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
55
+        $LegendOffset	= isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
56
+        $DrawArea		= isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
57
+        $FontSize		= isset($Format["FontSize"]) ? $Format["FontSize"] : 12;
58
+        $Height		= isset($Format["Height"]) ? $Format["Height"] : 30;
59 59
 
60
-     $TextString    = $this->encode128($TextString);
61
-     $BarcodeLength = strlen($this->Result);
60
+        $TextString    = $this->encode128($TextString);
61
+        $BarcodeLength = strlen($this->Result);
62 62
 
63
-     if ( $DrawArea )   { $WOffset = 20; } else { $WOffset = 0; }
64
-     if ( $ShowLegend ) { $HOffset = $FontSize+$LegendOffset+$WOffset; } else { $HOffset = 0; }
63
+        if ( $DrawArea )   { $WOffset = 20; } else { $WOffset = 0; }
64
+        if ( $ShowLegend ) { $HOffset = $FontSize+$LegendOffset+$WOffset; } else { $HOffset = 0; }
65 65
 
66
-     $X1 = cos($Angle * PI / 180) * ($WOffset+$BarcodeLength);
67
-     $Y1 = sin($Angle * PI / 180) * ($WOffset+$BarcodeLength);
66
+        $X1 = cos($Angle * PI / 180) * ($WOffset+$BarcodeLength);
67
+        $Y1 = sin($Angle * PI / 180) * ($WOffset+$BarcodeLength);
68 68
 
69
-     $X2 = $X1 + cos(($Angle+90) * PI / 180) * ($HOffset+$Height);
70
-     $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * ($HOffset+$Height);
69
+        $X2 = $X1 + cos(($Angle+90) * PI / 180) * ($HOffset+$Height);
70
+        $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * ($HOffset+$Height);
71 71
 
72 72
 
73
-     $AreaWidth  = max(abs($X1),abs($X2));
74
-     $AreaHeight = max(abs($Y1),abs($Y2));
73
+        $AreaWidth  = max(abs($X1),abs($X2));
74
+        $AreaHeight = max(abs($Y1),abs($Y2));
75 75
 
76
-     return(array("Width"=>$AreaWidth,"Height"=>$AreaHeight));
76
+        return(array("Width"=>$AreaWidth,"Height"=>$AreaHeight));
77 77
     }
78 78
 
79
-   function encode128($Value,$Format="")
79
+    function encode128($Value,$Format="")
80 80
     {
81
-     $this->Result  = "11010010000";
82
-     $this->CRC     = 104;
83
-     $TextString    = "";
84
-
85
-     for($i=1;$i<=strlen($Value);$i++)
86
-      {
87
-       $CharCode = ord($this->mid($Value,$i,1));
88
-       if ( isset($this->Codes[$CharCode]) )
81
+        $this->Result  = "11010010000";
82
+        $this->CRC     = 104;
83
+        $TextString    = "";
84
+
85
+        for($i=1;$i<=strlen($Value);$i++)
89 86
         {
90
-         $this->Result = $this->Result.$this->Codes[$CharCode]["Code"];
91
-         $this->CRC = $this->CRC + $i*$this->Codes[$CharCode]["ID"];
92
-         $TextString = $TextString.chr($CharCode);
87
+        $CharCode = ord($this->mid($Value,$i,1));
88
+        if ( isset($this->Codes[$CharCode]) )
89
+        {
90
+            $this->Result = $this->Result.$this->Codes[$CharCode]["Code"];
91
+            $this->CRC = $this->CRC + $i*$this->Codes[$CharCode]["ID"];
92
+            $TextString = $TextString.chr($CharCode);
93
+        }
93 94
         }
94
-      }
95
-     $this->CRC = $this->CRC - floor($this->CRC/103)*103;
95
+        $this->CRC = $this->CRC - floor($this->CRC/103)*103;
96 96
 
97
-     $this->Result = $this->Result.$this->Reverse[$this->CRC]["Code"];
98
-     $this->Result = $this->Result."1100011101011";
97
+        $this->Result = $this->Result.$this->Reverse[$this->CRC]["Code"];
98
+        $this->Result = $this->Result."1100011101011";
99 99
 
100
-     return($TextString);
100
+        return($TextString);
101 101
     }
102 102
 
103
-   /* Create the encoded string */
104
-   function draw($Object,$Value,$X,$Y,$Format="")
103
+    /* Create the encoded string */
104
+    function draw($Object,$Value,$X,$Y,$Format="")
105 105
     {
106
-     $this->pChartObject = $Object;
107
-
108
-     $R			= isset($Format["R"]) ? $Format["R"] : 0;
109
-     $G			= isset($Format["G"]) ? $Format["G"] : 0;
110
-     $B			= isset($Format["B"]) ? $Format["B"] : 0;
111
-     $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
112
-     $Height		= isset($Format["Height"]) ? $Format["Height"] : 30;
113
-     $Angle		= isset($Format["Angle"]) ? $Format["Angle"] : 0;
114
-     $ShowLegend	= isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
115
-     $LegendOffset	= isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
116
-     $DrawArea		= isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
117
-     $AreaR		= isset($Format["AreaR"]) ? $Format["AreaR"] : 255;
118
-     $AreaG		= isset($Format["AreaG"]) ? $Format["AreaG"] : 255;
119
-     $AreaB		= isset($Format["AreaB"]) ? $Format["AreaB"] : 255;
120
-     $AreaBorderR	= isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR;
121
-     $AreaBorderG	= isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG;
122
-     $AreaBorderB	= isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB;
123
-
124
-     $TextString = $this->encode128($Value);
125
-
126
-     if ( $DrawArea )
127
-      {
128
-       $X1 = $X + cos(($Angle-135) * PI / 180) * 10;
129
-       $Y1 = $Y + sin(($Angle-135) * PI / 180) * 10;
130
-
131
-       $X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result)+20);
132
-       $Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result)+20);
133
-
134
-       if ( $ShowLegend )
106
+        $this->pChartObject = $Object;
107
+
108
+        $R			= isset($Format["R"]) ? $Format["R"] : 0;
109
+        $G			= isset($Format["G"]) ? $Format["G"] : 0;
110
+        $B			= isset($Format["B"]) ? $Format["B"] : 0;
111
+        $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
112
+        $Height		= isset($Format["Height"]) ? $Format["Height"] : 30;
113
+        $Angle		= isset($Format["Angle"]) ? $Format["Angle"] : 0;
114
+        $ShowLegend	= isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
115
+        $LegendOffset	= isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
116
+        $DrawArea		= isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
117
+        $AreaR		= isset($Format["AreaR"]) ? $Format["AreaR"] : 255;
118
+        $AreaG		= isset($Format["AreaG"]) ? $Format["AreaG"] : 255;
119
+        $AreaB		= isset($Format["AreaB"]) ? $Format["AreaB"] : 255;
120
+        $AreaBorderR	= isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR;
121
+        $AreaBorderG	= isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG;
122
+        $AreaBorderB	= isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB;
123
+
124
+        $TextString = $this->encode128($Value);
125
+
126
+        if ( $DrawArea )
135 127
         {
136
-         $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
137
-         $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
128
+        $X1 = $X + cos(($Angle-135) * PI / 180) * 10;
129
+        $Y1 = $Y + sin(($Angle-135) * PI / 180) * 10;
130
+
131
+        $X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result)+20);
132
+        $Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result)+20);
133
+
134
+        if ( $ShowLegend )
135
+        {
136
+            $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
137
+            $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
138 138
         }
139
-       else
139
+        else
140 140
         {
141
-         $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+20);
142
-         $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+20);
141
+            $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+20);
142
+            $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+20);
143 143
         }
144 144
 
145
-       $X4 = $X3 + cos(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
146
-       $Y4 = $Y3 + sin(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
145
+        $X4 = $X3 + cos(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
146
+        $Y4 = $Y3 + sin(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
147 147
 
148
-       $Polygon  = array($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4);
149
-       $Settings = array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"BorderR"=>$AreaBorderR,"BorderG"=>$AreaBorderG,"BorderB"=>$AreaBorderB);
150
-       $this->pChartObject->drawPolygon($Polygon,$Settings);
151
-      }
148
+        $Polygon  = array($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4);
149
+        $Settings = array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"BorderR"=>$AreaBorderR,"BorderG"=>$AreaBorderG,"BorderB"=>$AreaBorderB);
150
+        $this->pChartObject->drawPolygon($Polygon,$Settings);
151
+        }
152 152
 
153
-     for($i=1;$i<=strlen($this->Result);$i++)
154
-      {
155
-       if ( $this->mid($this->Result,$i,1) == 1 )
153
+        for($i=1;$i<=strlen($this->Result);$i++)
154
+        {
155
+        if ( $this->mid($this->Result,$i,1) == 1 )
156 156
         {
157
-         $X1 = $X + cos($Angle * PI / 180) * $i;
158
-         $Y1 = $Y + sin($Angle * PI / 180) * $i;
159
-         $X2 = $X1 + cos(($Angle+90) * PI / 180) * $Height;
160
-         $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * $Height;
157
+            $X1 = $X + cos($Angle * PI / 180) * $i;
158
+            $Y1 = $Y + sin($Angle * PI / 180) * $i;
159
+            $X2 = $X1 + cos(($Angle+90) * PI / 180) * $Height;
160
+            $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * $Height;
161 161
 
162
-         $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
163
-         $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Settings);
162
+            $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
163
+            $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Settings);
164
+        }
164 165
         }
165
-      }
166 166
 
167
-     if ( $ShowLegend )
168
-      {
169
-       $X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result)/2);
170
-       $Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result)/2);
167
+        if ( $ShowLegend )
168
+        {
169
+        $X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result)/2);
170
+        $Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result)/2);
171 171
 
172
-       $LegendX = $X1 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
173
-       $LegendY = $Y1 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
172
+        $LegendX = $X1 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
173
+        $LegendY = $Y1 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
174 174
 
175
-       $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Angle"=>-$Angle,"Align"=>TEXT_ALIGN_TOPMIDDLE);
176
-       $this->pChartObject->drawText($LegendX,$LegendY,$TextString,$Settings);
177
-      }
175
+        $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Angle"=>-$Angle,"Align"=>TEXT_ALIGN_TOPMIDDLE);
176
+        $this->pChartObject->drawText($LegendX,$LegendY,$TextString,$Settings);
177
+        }
178 178
     }
179 179
 
180
-   function left($value,$NbChar) { return substr($value,0,$NbChar); }  
181
-   function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); }  
182
-   function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); }  
183
-  }
180
+    function left($value,$NbChar) { return substr($value,0,$NbChar); }  
181
+    function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); }  
182
+    function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); }  
183
+    }
184 184
 ?>
185 185
\ No newline at end of file
Please login to merge, or discard this patch.
default/boinc/modules/boincstats/includes/pchart/class/pBarcode39.class.php 2 patches
Doc Comments   +8 added lines patch added patch discarded remove patch
@@ -181,6 +181,9 @@  discard block
 block discarded – undo
181 181
       }
182 182
     }
183 183
 
184
+   /**
185
+    * @param string $string
186
+    */
184 187
    function checksum( $string )
185 188
     {
186 189
      $checksum = 0;
@@ -195,6 +198,11 @@  discard block
 block discarded – undo
195 198
 
196 199
    function left($value,$NbChar) { return substr($value,0,$NbChar); }  
197 200
    function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); }  
201
+
202
+   /**
203
+    * @param integer $Depart
204
+    * @param integer $NbChar
205
+    */
198 206
    function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); }  
199 207
   }
200 208
 ?>
201 209
\ No newline at end of file
Please login to merge, or discard this patch.
Indentation   +139 added lines, -139 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
- /*
2
+    /*
3 3
      pBarcode39 - class to create barcodes (39B)
4 4
 
5 5
      Version     : 2.1.3
@@ -13,188 +13,188 @@  discard block
 block discarded – undo
13 13
      You can find the whole class documentation on the pChart web site.
14 14
  */
15 15
 
16
- /* pData class definition */
17
- class pBarcode39
18
-  {
19
-   var $Codes;
20
-   var $Reverse;
21
-   var $Result;
22
-   var $pChartObject;
23
-   var $CRC;
24
-   var $MOD43;
25
-
26
-   /* Class creator */
27
-   function pBarcode39($BasePath="",$EnableMOD43=FALSE)
16
+    /* pData class definition */
17
+    class pBarcode39
28 18
     {
29
-     $this->MOD43  = $EnableMOD43;
30
-     $this->Codes   = "";
31
-     $this->Reverse = "";
19
+    var $Codes;
20
+    var $Reverse;
21
+    var $Result;
22
+    var $pChartObject;
23
+    var $CRC;
24
+    var $MOD43;
25
+
26
+    /* Class creator */
27
+    function pBarcode39($BasePath="",$EnableMOD43=FALSE)
28
+    {
29
+        $this->MOD43  = $EnableMOD43;
30
+        $this->Codes   = "";
31
+        $this->Reverse = "";
32 32
 
33
-     $FileHandle = @fopen($BasePath."data/39.db", "r");
33
+        $FileHandle = @fopen($BasePath."data/39.db", "r");
34 34
 
35
-     if (!$FileHandle) { die("Cannot find barcode database (".$BasePath."data/39.db)."); }
35
+        if (!$FileHandle) { die("Cannot find barcode database (".$BasePath."data/39.db)."); }
36 36
 
37
-     while (!feof($FileHandle))
38
-      {
39
-       $Buffer = fgets($FileHandle,4096);
40
-       $Buffer = str_replace(chr(10),"",$Buffer);
41
-       $Buffer = str_replace(chr(13),"",$Buffer);
42
-       $Values = preg_split("/;/",$Buffer);
37
+        while (!feof($FileHandle))
38
+        {
39
+        $Buffer = fgets($FileHandle,4096);
40
+        $Buffer = str_replace(chr(10),"",$Buffer);
41
+        $Buffer = str_replace(chr(13),"",$Buffer);
42
+        $Values = preg_split("/;/",$Buffer);
43 43
 
44
-       $this->Codes[$Values[0]] = $Values[1];
45
-      }
46
-     fclose($FileHandle);
44
+        $this->Codes[$Values[0]] = $Values[1];
45
+        }
46
+        fclose($FileHandle);
47 47
     }
48 48
 
49
-   /* Return the projected size of a barcode */
50
-   function getSize($TextString,$Format="")
49
+    /* Return the projected size of a barcode */
50
+    function getSize($TextString,$Format="")
51 51
     {
52
-     $Angle		= isset($Format["Angle"]) ? $Format["Angle"] : 0;
53
-     $ShowLegend	= isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
54
-     $LegendOffset	= isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
55
-     $DrawArea		= isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
56
-     $FontSize		= isset($Format["FontSize"]) ? $Format["FontSize"] : 12;
57
-     $Height		= isset($Format["Height"]) ? $Format["Height"] : 30;
52
+        $Angle		= isset($Format["Angle"]) ? $Format["Angle"] : 0;
53
+        $ShowLegend	= isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
54
+        $LegendOffset	= isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
55
+        $DrawArea		= isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
56
+        $FontSize		= isset($Format["FontSize"]) ? $Format["FontSize"] : 12;
57
+        $Height		= isset($Format["Height"]) ? $Format["Height"] : 30;
58 58
 
59
-     $TextString    = $this->encode39($TextString);
60
-     $BarcodeLength = strlen($this->Result);
59
+        $TextString    = $this->encode39($TextString);
60
+        $BarcodeLength = strlen($this->Result);
61 61
 
62
-     if ( $DrawArea )   { $WOffset = 20; } else { $WOffset = 0; }
63
-     if ( $ShowLegend ) { $HOffset = $FontSize+$LegendOffset+$WOffset; } else { $HOffset = 0; }
62
+        if ( $DrawArea )   { $WOffset = 20; } else { $WOffset = 0; }
63
+        if ( $ShowLegend ) { $HOffset = $FontSize+$LegendOffset+$WOffset; } else { $HOffset = 0; }
64 64
 
65
-     $X1 = cos($Angle * PI / 180) * ($WOffset+$BarcodeLength);
66
-     $Y1 = sin($Angle * PI / 180) * ($WOffset+$BarcodeLength);
65
+        $X1 = cos($Angle * PI / 180) * ($WOffset+$BarcodeLength);
66
+        $Y1 = sin($Angle * PI / 180) * ($WOffset+$BarcodeLength);
67 67
 
68
-     $X2 = $X1 + cos(($Angle+90) * PI / 180) * ($HOffset+$Height);
69
-     $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * ($HOffset+$Height);
68
+        $X2 = $X1 + cos(($Angle+90) * PI / 180) * ($HOffset+$Height);
69
+        $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * ($HOffset+$Height);
70 70
 
71 71
 
72
-     $AreaWidth  = max(abs($X1),abs($X2));
73
-     $AreaHeight = max(abs($Y1),abs($Y2));
72
+        $AreaWidth  = max(abs($X1),abs($X2));
73
+        $AreaHeight = max(abs($Y1),abs($Y2));
74 74
 
75
-     return(array("Width"=>$AreaWidth,"Height"=>$AreaHeight));
75
+        return(array("Width"=>$AreaWidth,"Height"=>$AreaHeight));
76 76
     }
77 77
 
78
-   /* Create the encoded string */
79
-   function encode39($Value)
78
+    /* Create the encoded string */
79
+    function encode39($Value)
80 80
     {
81
-     $this->Result = "100101101101"."0";
82
-     $TextString   = "";
83
-     for($i=1;$i<=strlen($Value);$i++)
84
-      {
85
-       $CharCode = ord($this->mid($Value,$i,1));
86
-       if ( $CharCode >= 97 && $CharCode <= 122 ) { $CharCode = $CharCode - 32; }
87
-
88
-       if ( isset($this->Codes[chr($CharCode)]) )
81
+        $this->Result = "100101101101"."0";
82
+        $TextString   = "";
83
+        for($i=1;$i<=strlen($Value);$i++)
84
+        {
85
+        $CharCode = ord($this->mid($Value,$i,1));
86
+        if ( $CharCode >= 97 && $CharCode <= 122 ) { $CharCode = $CharCode - 32; }
87
+
88
+        if ( isset($this->Codes[chr($CharCode)]) )
89 89
         {
90
-         $this->Result = $this->Result.$this->Codes[chr($CharCode)]."0";
91
-         $TextString = $TextString.chr($CharCode);
90
+            $this->Result = $this->Result.$this->Codes[chr($CharCode)]."0";
91
+            $TextString = $TextString.chr($CharCode);
92
+        }
92 93
         }
93
-      }
94 94
 
95
-     if ( $this->MOD43 )
96
-      {
97
-       $Checksum = $this->checksum($TextString);
98
-       $this->Result = $this->Result.$this->Codes[$Checksum]."0";
99
-      }
95
+        if ( $this->MOD43 )
96
+        {
97
+        $Checksum = $this->checksum($TextString);
98
+        $this->Result = $this->Result.$this->Codes[$Checksum]."0";
99
+        }
100 100
 
101
-     $this->Result = $this->Result."100101101101";
102
-     $TextString   = "*".$TextString."*";
101
+        $this->Result = $this->Result."100101101101";
102
+        $TextString   = "*".$TextString."*";
103 103
 
104
-     return($TextString);
104
+        return($TextString);
105 105
     }
106 106
 
107
-   /* Create the encoded string */
108
-   function draw($Object,$Value,$X,$Y,$Format="")
107
+    /* Create the encoded string */
108
+    function draw($Object,$Value,$X,$Y,$Format="")
109 109
     {
110
-     $this->pChartObject = $Object;
111
-
112
-     $R			= isset($Format["R"]) ? $Format["R"] : 0;
113
-     $G			= isset($Format["G"]) ? $Format["G"] : 0;
114
-     $B			= isset($Format["B"]) ? $Format["B"] : 0;
115
-     $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
116
-     $Height		= isset($Format["Height"]) ? $Format["Height"] : 30;
117
-     $Angle		= isset($Format["Angle"]) ? $Format["Angle"] : 0;
118
-     $ShowLegend	= isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
119
-     $LegendOffset	= isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
120
-     $DrawArea		= isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
121
-     $AreaR		= isset($Format["AreaR"]) ? $Format["AreaR"] : 255;
122
-     $AreaG		= isset($Format["AreaG"]) ? $Format["AreaG"] : 255;
123
-     $AreaB		= isset($Format["AreaB"]) ? $Format["AreaB"] : 255;
124
-     $AreaBorderR	= isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR;
125
-     $AreaBorderG	= isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG;
126
-     $AreaBorderB	= isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB;
127
-
128
-     $TextString   = $this->encode39($Value);
129
-
130
-     if ( $DrawArea )
131
-      {
132
-       $X1 = $X + cos(($Angle-135) * PI / 180) * 10;
133
-       $Y1 = $Y + sin(($Angle-135) * PI / 180) * 10;
134
-
135
-       $X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result)+20);
136
-       $Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result)+20);
137
-
138
-       if ( $ShowLegend )
110
+        $this->pChartObject = $Object;
111
+
112
+        $R			= isset($Format["R"]) ? $Format["R"] : 0;
113
+        $G			= isset($Format["G"]) ? $Format["G"] : 0;
114
+        $B			= isset($Format["B"]) ? $Format["B"] : 0;
115
+        $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
116
+        $Height		= isset($Format["Height"]) ? $Format["Height"] : 30;
117
+        $Angle		= isset($Format["Angle"]) ? $Format["Angle"] : 0;
118
+        $ShowLegend	= isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
119
+        $LegendOffset	= isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
120
+        $DrawArea		= isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
121
+        $AreaR		= isset($Format["AreaR"]) ? $Format["AreaR"] : 255;
122
+        $AreaG		= isset($Format["AreaG"]) ? $Format["AreaG"] : 255;
123
+        $AreaB		= isset($Format["AreaB"]) ? $Format["AreaB"] : 255;
124
+        $AreaBorderR	= isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR;
125
+        $AreaBorderG	= isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG;
126
+        $AreaBorderB	= isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB;
127
+
128
+        $TextString   = $this->encode39($Value);
129
+
130
+        if ( $DrawArea )
139 131
         {
140
-         $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
141
-         $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
132
+        $X1 = $X + cos(($Angle-135) * PI / 180) * 10;
133
+        $Y1 = $Y + sin(($Angle-135) * PI / 180) * 10;
134
+
135
+        $X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result)+20);
136
+        $Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result)+20);
137
+
138
+        if ( $ShowLegend )
139
+        {
140
+            $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
141
+            $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
142 142
         }
143
-       else
143
+        else
144 144
         {
145
-         $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+20);
146
-         $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+20);
145
+            $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+20);
146
+            $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+20);
147 147
         }
148 148
 
149
-       $X4 = $X3 + cos(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
150
-       $Y4 = $Y3 + sin(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
149
+        $X4 = $X3 + cos(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
150
+        $Y4 = $Y3 + sin(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
151 151
 
152
-       $Polygon  = array($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4);
153
-       $Settings = array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"BorderR"=>$AreaBorderR,"BorderG"=>$AreaBorderG,"BorderB"=>$AreaBorderB);
154
-       $this->pChartObject->drawPolygon($Polygon,$Settings);
155
-      }
152
+        $Polygon  = array($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4);
153
+        $Settings = array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"BorderR"=>$AreaBorderR,"BorderG"=>$AreaBorderG,"BorderB"=>$AreaBorderB);
154
+        $this->pChartObject->drawPolygon($Polygon,$Settings);
155
+        }
156 156
 
157
-     for($i=1;$i<=strlen($this->Result);$i++)
158
-      {
159
-       if ( $this->mid($this->Result,$i,1) == 1 )
157
+        for($i=1;$i<=strlen($this->Result);$i++)
158
+        {
159
+        if ( $this->mid($this->Result,$i,1) == 1 )
160 160
         {
161
-         $X1 = $X + cos($Angle * PI / 180) * $i;
162
-         $Y1 = $Y + sin($Angle * PI / 180) * $i;
163
-         $X2 = $X1 + cos(($Angle+90) * PI / 180) * $Height;
164
-         $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * $Height;
161
+            $X1 = $X + cos($Angle * PI / 180) * $i;
162
+            $Y1 = $Y + sin($Angle * PI / 180) * $i;
163
+            $X2 = $X1 + cos(($Angle+90) * PI / 180) * $Height;
164
+            $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * $Height;
165 165
 
166
-         $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
167
-         $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Settings);
166
+            $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
167
+            $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Settings);
168
+        }
168 169
         }
169
-      }
170 170
 
171
-     if ( $ShowLegend )
172
-      {
173
-       $X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result)/2);
174
-       $Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result)/2);
171
+        if ( $ShowLegend )
172
+        {
173
+        $X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result)/2);
174
+        $Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result)/2);
175 175
 
176
-       $LegendX = $X1 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
177
-       $LegendY = $Y1 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
176
+        $LegendX = $X1 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
177
+        $LegendY = $Y1 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
178 178
 
179
-       $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Angle"=>-$Angle,"Align"=>TEXT_ALIGN_TOPMIDDLE);
180
-       $this->pChartObject->drawText($LegendX,$LegendY,$TextString,$Settings);
181
-      }
179
+        $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Angle"=>-$Angle,"Align"=>TEXT_ALIGN_TOPMIDDLE);
180
+        $this->pChartObject->drawText($LegendX,$LegendY,$TextString,$Settings);
181
+        }
182 182
     }
183 183
 
184
-   function checksum( $string )
184
+    function checksum( $string )
185 185
     {
186
-     $checksum = 0;
187
-     $length   = strlen( $string );
188
-     $charset  = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%';
186
+        $checksum = 0;
187
+        $length   = strlen( $string );
188
+        $charset  = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%';
189 189
 
190
-     for( $i=0; $i < $length; ++$i )
191
-      $checksum += strpos( $charset, $string[$i] );
190
+        for( $i=0; $i < $length; ++$i )
191
+        $checksum += strpos( $charset, $string[$i] );
192 192
  
193
-     return substr( $charset, ($checksum % 43), 1 );
193
+        return substr( $charset, ($checksum % 43), 1 );
194 194
     }
195 195
 
196
-   function left($value,$NbChar) { return substr($value,0,$NbChar); }  
197
-   function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); }  
198
-   function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); }  
199
-  }
196
+    function left($value,$NbChar) { return substr($value,0,$NbChar); }  
197
+    function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); }  
198
+    function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); }  
199
+    }
200 200
 ?>
201 201
\ No newline at end of file
Please login to merge, or discard this patch.
default/boinc/modules/boincstats/includes/pchart/class/pCache.class.php 2 patches
Doc Comments   +11 added lines patch added patch discarded remove patch
@@ -47,6 +47,10 @@  discard block
 block discarded – undo
47 47
     { return(md5($Marker.serialize($Data->Data))); }
48 48
 
49 49
    /* Write the generated picture to the cache */
50
+
51
+   /**
52
+    * @param pImage $pChartObject
53
+    */
50 54
    function writeToCache($ID,$pChartObject)
51 55
     {
52 56
      /* Compute the paths */
@@ -81,6 +85,10 @@  discard block
 block discarded – undo
81 85
     }
82 86
 
83 87
    /* Remove object older than the specified TS */
88
+
89
+   /**
90
+    * @param integer $Expiry
91
+    */
84 92
    function removeOlderThan($Expiry)
85 93
     { $this->dbRemoval(array("Expiry"=>$Expiry)); }
86 94
 
@@ -235,6 +243,9 @@  discard block
 block discarded – undo
235 243
      return(TRUE);
236 244
     }
237 245
 
246
+   /**
247
+    * @param string $Destination
248
+    */
238 249
    function saveFromCache($ID,$Destination)
239 250
     {
240 251
      /* Get the raw picture from the cache */
Please login to merge, or discard this patch.
Indentation   +205 added lines, -205 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
- /*
2
+    /*
3 3
      pCache - speed up the rendering by caching up the pictures
4 4
 
5 5
      Version     : 2.1.3
@@ -13,268 +13,268 @@  discard block
 block discarded – undo
13 13
      You can find the whole class documentation on the pChart web site.
14 14
  */
15 15
 
16
- /* pData class definition */
17
- class pCache
18
-  {
19
-   var $CacheFolder;
20
-   var $CacheIndex;
21
-   var $CacheDB;
16
+    /* pData class definition */
17
+    class pCache
18
+    {
19
+    var $CacheFolder;
20
+    var $CacheIndex;
21
+    var $CacheDB;
22 22
 
23
-   /* Class creator */
24
-   function pCache($Settings="")
23
+    /* Class creator */
24
+    function pCache($Settings="")
25 25
     {
26
-     $CacheFolder	= isset($Settings["CacheFolder"]) ? $Settings["CacheFolder"] : "cache";
27
-     $CacheIndex	= isset($Settings["CacheIndex"]) ? $Settings["CacheIndex"] : "index.db";
28
-     $CacheDB		= isset($Settings["CacheDB"]) ? $Settings["CacheDB"] : "cache.db";
26
+        $CacheFolder	= isset($Settings["CacheFolder"]) ? $Settings["CacheFolder"] : "cache";
27
+        $CacheIndex	= isset($Settings["CacheIndex"]) ? $Settings["CacheIndex"] : "index.db";
28
+        $CacheDB		= isset($Settings["CacheDB"]) ? $Settings["CacheDB"] : "cache.db";
29 29
 
30
-     $this->CacheFolder	= $CacheFolder;
31
-     $this->CacheIndex	= $CacheIndex;
32
-     $this->CacheDB	= $CacheDB;
30
+        $this->CacheFolder	= $CacheFolder;
31
+        $this->CacheIndex	= $CacheIndex;
32
+        $this->CacheDB	= $CacheDB;
33 33
 
34
-     if (!file_exists($this->CacheFolder."/".$this->CacheIndex)) { touch($this->CacheFolder."/".$this->CacheIndex); }
35
-     if (!file_exists($this->CacheFolder."/".$this->CacheDB))    { touch($this->CacheFolder."/".$this->CacheDB); }
34
+        if (!file_exists($this->CacheFolder."/".$this->CacheIndex)) { touch($this->CacheFolder."/".$this->CacheIndex); }
35
+        if (!file_exists($this->CacheFolder."/".$this->CacheDB))    { touch($this->CacheFolder."/".$this->CacheDB); }
36 36
     }
37 37
 
38
-   /* Flush the cache contents */
39
-   function flush()
38
+    /* Flush the cache contents */
39
+    function flush()
40 40
     {
41
-     if (file_exists($this->CacheFolder."/".$this->CacheIndex)) { unlink($this->CacheFolder."/".$this->CacheIndex); touch($this->CacheFolder."/".$this->CacheIndex); }
42
-     if (file_exists($this->CacheFolder."/".$this->CacheDB))    { unlink($this->CacheFolder."/".$this->CacheDB); touch($this->CacheFolder."/".$this->CacheDB); }
41
+        if (file_exists($this->CacheFolder."/".$this->CacheIndex)) { unlink($this->CacheFolder."/".$this->CacheIndex); touch($this->CacheFolder."/".$this->CacheIndex); }
42
+        if (file_exists($this->CacheFolder."/".$this->CacheDB))    { unlink($this->CacheFolder."/".$this->CacheDB); touch($this->CacheFolder."/".$this->CacheDB); }
43 43
     }
44 44
 
45
-   /* Return the MD5 of the data array to clearly identify the chart */
46
-   function getHash($Data,$Marker="")
45
+    /* Return the MD5 of the data array to clearly identify the chart */
46
+    function getHash($Data,$Marker="")
47 47
     { return(md5($Marker.serialize($Data->Data))); }
48 48
 
49
-   /* Write the generated picture to the cache */
50
-   function writeToCache($ID,$pChartObject)
49
+    /* Write the generated picture to the cache */
50
+    function writeToCache($ID,$pChartObject)
51 51
     {
52
-     /* Compute the paths */
53
-     $TemporaryFile = $this->CacheFolder."/tmp_".rand(0,1000).".png";
54
-     $Database      = $this->CacheFolder."/".$this->CacheDB;
55
-     $Index         = $this->CacheFolder."/".$this->CacheIndex;
56
-
57
-     /* Flush the picture to a temporary file */
58
-     imagepng($pChartObject->Picture ,$TemporaryFile);
59
-
60
-     /* Retrieve the files size */
61
-     $PictureSize = filesize($TemporaryFile);
62
-     $DBSize      = filesize($Database);
63
-
64
-     /* Save the index */
65
-     $Handle = fopen($Index,"a");
66
-     fwrite($Handle, $ID.",".$DBSize.",".$PictureSize.",".time().",0      \r\n");
67
-     fclose($Handle);
68
-
69
-     /* Get the picture raw contents */
70
-     $Handle = fopen($TemporaryFile,"r");
71
-     $Raw    = fread($Handle,$PictureSize);
72
-     fclose($Handle);
73
-
74
-     /* Save the picture in the solid database file */
75
-     $Handle = fopen($Database,"a");
76
-     fwrite($Handle, $Raw);
77
-     fclose($Handle);
78
-
79
-     /* Remove temporary file */
80
-     unlink($TemporaryFile);
52
+        /* Compute the paths */
53
+        $TemporaryFile = $this->CacheFolder."/tmp_".rand(0,1000).".png";
54
+        $Database      = $this->CacheFolder."/".$this->CacheDB;
55
+        $Index         = $this->CacheFolder."/".$this->CacheIndex;
56
+
57
+        /* Flush the picture to a temporary file */
58
+        imagepng($pChartObject->Picture ,$TemporaryFile);
59
+
60
+        /* Retrieve the files size */
61
+        $PictureSize = filesize($TemporaryFile);
62
+        $DBSize      = filesize($Database);
63
+
64
+        /* Save the index */
65
+        $Handle = fopen($Index,"a");
66
+        fwrite($Handle, $ID.",".$DBSize.",".$PictureSize.",".time().",0      \r\n");
67
+        fclose($Handle);
68
+
69
+        /* Get the picture raw contents */
70
+        $Handle = fopen($TemporaryFile,"r");
71
+        $Raw    = fread($Handle,$PictureSize);
72
+        fclose($Handle);
73
+
74
+        /* Save the picture in the solid database file */
75
+        $Handle = fopen($Database,"a");
76
+        fwrite($Handle, $Raw);
77
+        fclose($Handle);
78
+
79
+        /* Remove temporary file */
80
+        unlink($TemporaryFile);
81 81
     }
82 82
 
83
-   /* Remove object older than the specified TS */
84
-   function removeOlderThan($Expiry)
83
+    /* Remove object older than the specified TS */
84
+    function removeOlderThan($Expiry)
85 85
     { $this->dbRemoval(array("Expiry"=>$Expiry)); }
86 86
 
87
-   /* Remove an object from the cache */
88
-   function remove($ID)
87
+    /* Remove an object from the cache */
88
+    function remove($ID)
89 89
     { $this->dbRemoval(array("Name"=>$ID)); }
90 90
 
91
-   /* Remove with specified criterias */
92
-   function dbRemoval($Settings)
91
+    /* Remove with specified criterias */
92
+    function dbRemoval($Settings)
93 93
     {
94
-     $ID     = isset($Settings["Name"]) ? $Settings["Name"] : NULL;
95
-     $Expiry = isset($Settings["Expiry"]) ? $Settings["Expiry"] : -(24*60*60);
96
-     $TS     = time()-$Expiry;
97
-
98
-     /* Compute the paths */
99
-     $Database     = $this->CacheFolder."/".$this->CacheDB;
100
-     $Index        = $this->CacheFolder."/".$this->CacheIndex;
101
-     $DatabaseTemp = $this->CacheFolder."/".$this->CacheDB.".tmp";
102
-     $IndexTemp    = $this->CacheFolder."/".$this->CacheIndex.".tmp";
103
-
104
-     /* Single file removal */
105
-     if ( $ID != NULL )
106
-      {
107
-       /* Retrieve object informations */
108
-       $Object = $this->isInCache($ID,TRUE);
109
-
110
-       /* If it's not in the cache DB, go away */
111
-       if ( !$Object ) { return(0); }
112
-      }
113
-
114
-     /* Create the temporary files */
115
-     if (!file_exists($DatabaseTemp)) { touch($DatabaseTemp); }
116
-     if (!file_exists($IndexTemp))    { touch($IndexTemp); }
117
-
118
-     /* Open the file handles */
119
-     $IndexHandle     = @fopen($Index, "r");
120
-     $IndexTempHandle = @fopen($IndexTemp, "w");
121
-     $DBHandle        = @fopen($Database, "r");
122
-     $DBTempHandle    = @fopen($DatabaseTemp, "w");
123
-
124
-     /* Remove the selected ID from the database */
125
-     while (!feof($IndexHandle))
126
-      {
127
-       $Entry    = fgets($IndexHandle, 4096);
128
-       $Entry    = str_replace("\r","",$Entry);
129
-       $Entry    = str_replace("\n","",$Entry);
130
-       $Settings = preg_split("/,/",$Entry);
131
-
132
-       if ( $Entry != "" )
94
+        $ID     = isset($Settings["Name"]) ? $Settings["Name"] : NULL;
95
+        $Expiry = isset($Settings["Expiry"]) ? $Settings["Expiry"] : -(24*60*60);
96
+        $TS     = time()-$Expiry;
97
+
98
+        /* Compute the paths */
99
+        $Database     = $this->CacheFolder."/".$this->CacheDB;
100
+        $Index        = $this->CacheFolder."/".$this->CacheIndex;
101
+        $DatabaseTemp = $this->CacheFolder."/".$this->CacheDB.".tmp";
102
+        $IndexTemp    = $this->CacheFolder."/".$this->CacheIndex.".tmp";
103
+
104
+        /* Single file removal */
105
+        if ( $ID != NULL )
133 106
         {
134
-         $PicID       = $Settings[0];
135
-         $DBPos       = $Settings[1];
136
-         $PicSize     = $Settings[2];
137
-         $GeneratedTS = $Settings[3];
138
-         $Hits        = $Settings[4];
139
-
140
-         if ( $Settings[0] != $ID && $GeneratedTS > $TS)
141
-          {
142
-           $CurrentPos  = ftell($DBTempHandle);
143
-           fwrite($IndexTempHandle, $PicID.",".$CurrentPos.",".$PicSize.",".$GeneratedTS.",".$Hits."\r\n");
144
-
145
-           fseek($DBHandle,$DBPos);
146
-           $Picture = fread($DBHandle,$PicSize);
147
-           fwrite($DBTempHandle,$Picture);
148
-          }
107
+        /* Retrieve object informations */
108
+        $Object = $this->isInCache($ID,TRUE);
109
+
110
+        /* If it's not in the cache DB, go away */
111
+        if ( !$Object ) { return(0); }
112
+        }
113
+
114
+        /* Create the temporary files */
115
+        if (!file_exists($DatabaseTemp)) { touch($DatabaseTemp); }
116
+        if (!file_exists($IndexTemp))    { touch($IndexTemp); }
117
+
118
+        /* Open the file handles */
119
+        $IndexHandle     = @fopen($Index, "r");
120
+        $IndexTempHandle = @fopen($IndexTemp, "w");
121
+        $DBHandle        = @fopen($Database, "r");
122
+        $DBTempHandle    = @fopen($DatabaseTemp, "w");
123
+
124
+        /* Remove the selected ID from the database */
125
+        while (!feof($IndexHandle))
126
+        {
127
+        $Entry    = fgets($IndexHandle, 4096);
128
+        $Entry    = str_replace("\r","",$Entry);
129
+        $Entry    = str_replace("\n","",$Entry);
130
+        $Settings = preg_split("/,/",$Entry);
131
+
132
+        if ( $Entry != "" )
133
+        {
134
+            $PicID       = $Settings[0];
135
+            $DBPos       = $Settings[1];
136
+            $PicSize     = $Settings[2];
137
+            $GeneratedTS = $Settings[3];
138
+            $Hits        = $Settings[4];
139
+
140
+            if ( $Settings[0] != $ID && $GeneratedTS > $TS)
141
+            {
142
+            $CurrentPos  = ftell($DBTempHandle);
143
+            fwrite($IndexTempHandle, $PicID.",".$CurrentPos.",".$PicSize.",".$GeneratedTS.",".$Hits."\r\n");
144
+
145
+            fseek($DBHandle,$DBPos);
146
+            $Picture = fread($DBHandle,$PicSize);
147
+            fwrite($DBTempHandle,$Picture);
148
+            }
149
+        }
149 150
         }
150
-      }
151 151
 
152
-     /* Close the handles */
153
-     fclose($IndexHandle);
154
-     fclose($IndexTempHandle);
155
-     fclose($DBHandle);
156
-     fclose($DBTempHandle);
152
+        /* Close the handles */
153
+        fclose($IndexHandle);
154
+        fclose($IndexTempHandle);
155
+        fclose($DBHandle);
156
+        fclose($DBTempHandle);
157 157
 
158
-     /* Remove the prod files */
159
-     unlink($Database);
160
-     unlink($Index);
158
+        /* Remove the prod files */
159
+        unlink($Database);
160
+        unlink($Index);
161 161
 
162
-     /* Swap the temp & prod DB */
163
-     rename($DatabaseTemp,$Database);
164
-     rename($IndexTemp,$Index);
162
+        /* Swap the temp & prod DB */
163
+        rename($DatabaseTemp,$Database);
164
+        rename($IndexTemp,$Index);
165 165
     }
166 166
 
167
-   function isInCache($ID,$Verbose=FALSE,$UpdateHitsCount=FALSE)
167
+    function isInCache($ID,$Verbose=FALSE,$UpdateHitsCount=FALSE)
168 168
     {
169
-     /* Compute the paths */
170
-     $Index = $this->CacheFolder."/".$this->CacheIndex;
171
-
172
-     /* Search the picture in the index file */
173
-     $Handle = @fopen($Index, "r");
174
-     while (!feof($Handle))
175
-      {
176
-       $IndexPos = ftell($Handle);
177
-       $Entry = fgets($Handle, 4096);
178
-       if ( $Entry != "" )
169
+        /* Compute the paths */
170
+        $Index = $this->CacheFolder."/".$this->CacheIndex;
171
+
172
+        /* Search the picture in the index file */
173
+        $Handle = @fopen($Index, "r");
174
+        while (!feof($Handle))
175
+        {
176
+        $IndexPos = ftell($Handle);
177
+        $Entry = fgets($Handle, 4096);
178
+        if ( $Entry != "" )
179 179
         {
180
-         $Settings = preg_split("/,/",$Entry);
181
-         $PicID    = $Settings[0];
182
-         if ( $PicID == $ID )
183
-          {
184
-           fclose($Handle);
185
-
186
-           $DBPos       = $Settings[1];
187
-           $PicSize     = $Settings[2];
188
-           $GeneratedTS = $Settings[3];
189
-           $Hits        = intval($Settings[4]);
190
-
191
-           if ( $UpdateHitsCount )
180
+            $Settings = preg_split("/,/",$Entry);
181
+            $PicID    = $Settings[0];
182
+            if ( $PicID == $ID )
192 183
             {
193
-             $Hits++;
194
-             if ( strlen($Hits) < 7 ) { $Hits = $Hits.str_repeat(" ",7-strlen($Hits)); }
184
+            fclose($Handle);
185
+
186
+            $DBPos       = $Settings[1];
187
+            $PicSize     = $Settings[2];
188
+            $GeneratedTS = $Settings[3];
189
+            $Hits        = intval($Settings[4]);
195 190
 
196
-             $Handle = @fopen($Index, "r+");
197
-             fseek($Handle,$IndexPos);
198
-             fwrite($Handle, $PicID.",".$DBPos.",".$PicSize.",".$GeneratedTS.",".$Hits."\r\n");
199
-             fclose($Handle);
191
+            if ( $UpdateHitsCount )
192
+            {
193
+                $Hits++;
194
+                if ( strlen($Hits) < 7 ) { $Hits = $Hits.str_repeat(" ",7-strlen($Hits)); }
195
+
196
+                $Handle = @fopen($Index, "r+");
197
+                fseek($Handle,$IndexPos);
198
+                fwrite($Handle, $PicID.",".$DBPos.",".$PicSize.",".$GeneratedTS.",".$Hits."\r\n");
199
+                fclose($Handle);
200 200
             }
201 201
 
202
-           if ($Verbose)
202
+            if ($Verbose)
203 203
             { return(array("DBPos"=>$DBPos,"PicSize"=>$PicSize,"GeneratedTS"=>$GeneratedTS,"Hits"=>$Hits)); }
204
-           else
204
+            else
205 205
             { return(TRUE); }
206
-          }
206
+            }
207 207
         }
208
-      }
209
-     fclose($Handle);
208
+        }
209
+        fclose($Handle);
210 210
 
211
-     /* Picture isn't in the cache */
212
-     return(FALSE);
211
+        /* Picture isn't in the cache */
212
+        return(FALSE);
213 213
     }
214 214
 
215
-   /* Automatic output method based on the calling interface */
216
-   function autoOutput($ID,$Destination="output.png")
215
+    /* Automatic output method based on the calling interface */
216
+    function autoOutput($ID,$Destination="output.png")
217 217
     {
218
-     if (php_sapi_name() == "cli")
219
-      $this->saveFromCache($ID,$Destination);
220
-     else
221
-      $this->strokeFromCache($ID);
218
+        if (php_sapi_name() == "cli")
219
+        $this->saveFromCache($ID,$Destination);
220
+        else
221
+        $this->strokeFromCache($ID);
222 222
     }
223 223
 
224
-   function strokeFromCache($ID)
224
+    function strokeFromCache($ID)
225 225
     {
226
-     /* Get the raw picture from the cache */
227
-     $Picture = $this->getFromCache($ID);
226
+        /* Get the raw picture from the cache */
227
+        $Picture = $this->getFromCache($ID);
228 228
 
229
-     /* Do we have a hit? */
230
-     if ( $Picture == NULL ) { return(FALSE); }
229
+        /* Do we have a hit? */
230
+        if ( $Picture == NULL ) { return(FALSE); }
231 231
 
232
-     header('Content-type: image/png');
233
-     echo $Picture;
232
+        header('Content-type: image/png');
233
+        echo $Picture;
234 234
 
235
-     return(TRUE);
235
+        return(TRUE);
236 236
     }
237 237
 
238
-   function saveFromCache($ID,$Destination)
238
+    function saveFromCache($ID,$Destination)
239 239
     {
240
-     /* Get the raw picture from the cache */
241
-     $Picture = $this->getFromCache($ID);
240
+        /* Get the raw picture from the cache */
241
+        $Picture = $this->getFromCache($ID);
242 242
 
243
-     /* Do we have a hit? */
244
-     if ( $Picture == NULL ) { return(FALSE); }
243
+        /* Do we have a hit? */
244
+        if ( $Picture == NULL ) { return(FALSE); }
245 245
 
246
-     /* Flush the picture to a file */
247
-     $Handle = fopen($Destination,"w");
248
-     fwrite($Handle,$Picture);
249
-     fclose($Handle);
246
+        /* Flush the picture to a file */
247
+        $Handle = fopen($Destination,"w");
248
+        fwrite($Handle,$Picture);
249
+        fclose($Handle);
250 250
 
251
-     /* All went fine */
252
-     return(TRUE);
251
+        /* All went fine */
252
+        return(TRUE);
253 253
     }
254 254
 
255
-   function getFromCache($ID)
255
+    function getFromCache($ID)
256 256
     {
257
-     /* Compute the path */
258
-     $Database = $this->CacheFolder."/".$this->CacheDB;
257
+        /* Compute the path */
258
+        $Database = $this->CacheFolder."/".$this->CacheDB;
259 259
 
260
-     /* Lookup for the picture in the cache */
261
-     $CacheInfo = $this->isInCache($ID,TRUE,TRUE);
260
+        /* Lookup for the picture in the cache */
261
+        $CacheInfo = $this->isInCache($ID,TRUE,TRUE);
262 262
 
263
-     /* Not in the cache */
264
-     if (!$CacheInfo) { return(NULL); }
263
+        /* Not in the cache */
264
+        if (!$CacheInfo) { return(NULL); }
265 265
 
266
-     /* Get the database extended information */     
267
-     $DBPos   = $CacheInfo["DBPos"];
268
-     $PicSize = $CacheInfo["PicSize"];
266
+        /* Get the database extended information */     
267
+        $DBPos   = $CacheInfo["DBPos"];
268
+        $PicSize = $CacheInfo["PicSize"];
269 269
 
270
-     /* Extract the picture from the solid cache file */
271
-     $Handle = @fopen($Database, "r");
272
-     fseek($Handle,$DBPos);
273
-     $Picture = fread($Handle,$PicSize);
274
-     fclose($Handle);
270
+        /* Extract the picture from the solid cache file */
271
+        $Handle = @fopen($Database, "r");
272
+        fseek($Handle,$DBPos);
273
+        $Picture = fread($Handle,$PicSize);
274
+        fclose($Handle);
275 275
 
276
-     /* Return back the raw picture data */
277
-     return($Picture);
276
+        /* Return back the raw picture data */
277
+        return($Picture);
278
+    }
278 279
     }
279
-  }
280 280
 ?>
281 281
\ No newline at end of file
Please login to merge, or discard this patch.
default/boinc/modules/boincstats/includes/pchart/class/pData.class.php 2 patches
Doc Comments   +25 added lines patch added patch discarded remove patch
@@ -105,6 +105,10 @@  discard block
 block discarded – undo
105 105
     }
106 106
 
107 107
    /* Strip VOID values */
108
+
109
+   /**
110
+    * @param string $Values
111
+    */
108 112
    function stripVOID($Values)
109 113
     { if (!is_array($Values)) { return(array()); } $Result = array(); foreach($Values as $Key => $Value) { if ( $Value != VOID ) { $Result[] = $Value; } } return($Result); }
110 114
 
@@ -414,6 +418,11 @@  discard block
 block discarded – undo
414 418
     }
415 419
 
416 420
    /* Set the position of an Axis */
421
+
422
+   /**
423
+    * @param integer $AxisID
424
+    * @param integer $Position
425
+    */
417 426
    function setAxisPosition($AxisID,$Position=AXIS_POSITION_LEFT)
418 427
     { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Position"] = $Position; } }
419 428
 
@@ -497,6 +506,10 @@  discard block
 block discarded – undo
497 506
     }
498 507
 
499 508
    /* Set the color of one serie */
509
+
510
+   /**
511
+    * @param string $Series
512
+    */
500 513
    function setPalette($Series,$Format=NULL)
501 514
     {
502 515
      if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
@@ -559,6 +572,10 @@  discard block
 block discarded – undo
559 572
     }
560 573
 
561 574
    /* Initialise a given scatter serie */
575
+
576
+   /**
577
+    * @param integer $ID
578
+    */
562 579
    function initScatterSerie($ID)
563 580
     {
564 581
      if ( isset($this->Data["ScatterSeries"][$ID]) ) { return(0); }
@@ -581,6 +598,10 @@  discard block
 block discarded – undo
581 598
     }
582 599
 
583 600
    /* Initialise a given serie */
601
+
602
+   /**
603
+    * @param string $Serie
604
+    */
584 605
    function initialise($Serie)
585 606
     {
586 607
      if ( isset($this->Data["Series"]) ) { $ID = count($this->Data["Series"]); } else { $ID = 0; }
@@ -781,6 +802,10 @@  discard block
 block discarded – undo
781 802
     { return("pData object."); }
782 803
 
783 804
    function left($value,$NbChar)	{ return substr($value,0,$NbChar); }  
805
+
806
+   /**
807
+    * @param integer $NbChar
808
+    */
784 809
    function right($value,$NbChar)	{ return substr($value,strlen($value)-$NbChar,$NbChar); }  
785 810
    function mid($value,$Depart,$NbChar)	{ return substr($value,$Depart-1,$NbChar); }  
786 811
   }
Please login to merge, or discard this patch.
Indentation   +524 added lines, -524 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
- /*
2
+    /*
3 3
      pDraw - class to manipulate data arrays
4 4
 
5 5
      Version     : 2.1.3
@@ -13,50 +13,50 @@  discard block
 block discarded – undo
13 13
      You can find the whole class documentation on the pChart web site.
14 14
  */
15 15
 
16
- /* Axis configuration */
17
- define("AXIS_FORMAT_DEFAULT"		, 680001);
18
- define("AXIS_FORMAT_TIME"		, 680002);
19
- define("AXIS_FORMAT_DATE"		, 680003);
20
- define("AXIS_FORMAT_METRIC"		, 680004);
21
- define("AXIS_FORMAT_CURRENCY"		, 680005);
22
- define("AXIS_FORMAT_CUSTOM"		, 680006);
23
-
24
- /* Axis position */
25
- define("AXIS_POSITION_LEFT"		, 681001);
26
- define("AXIS_POSITION_RIGHT"		, 681002);
27
- define("AXIS_POSITION_TOP"		, 681001);
28
- define("AXIS_POSITION_BOTTOM"		, 681002);
29
-
30
- /* Families of data points */
31
- define("SERIE_SHAPE_FILLEDCIRCLE"	, 681011);
32
- define("SERIE_SHAPE_FILLEDTRIANGLE"	, 681012);
33
- define("SERIE_SHAPE_FILLEDSQUARE"	, 681013);
34
- define("SERIE_SHAPE_FILLEDDIAMOND"	, 681017);
35
- define("SERIE_SHAPE_CIRCLE"		, 681014);
36
- define("SERIE_SHAPE_TRIANGLE"		, 681015);
37
- define("SERIE_SHAPE_SQUARE"		, 681016);
38
- define("SERIE_SHAPE_DIAMOND"		, 681018);
39
-
40
- /* Axis position */
41
- define("AXIS_X"			, 682001);
42
- define("AXIS_Y"			, 682002);
43
-
44
- /* Define value limits */
45
- define("ABSOLUTE_MIN"          	, -10000000000000);
46
- define("ABSOLUTE_MAX"          	, 10000000000000);
47
-
48
- /* Replacement to the PHP NULL keyword */
49
- define("VOID"                  	, 0.123456789);
50
-
51
- /* Euro symbol for GD fonts */
52
- define("EURO_SYMBOL"			, utf8_encode("&#8364;"));
53
-
54
- /* pData class definition */
55
- class pData
56
-  {
57
-   var $Data;
58
-
59
-   var $Palette = array("0"=>array("R"=>188,"G"=>224,"B"=>46,"Alpha"=>100),
16
+    /* Axis configuration */
17
+    define("AXIS_FORMAT_DEFAULT"		, 680001);
18
+    define("AXIS_FORMAT_TIME"		, 680002);
19
+    define("AXIS_FORMAT_DATE"		, 680003);
20
+    define("AXIS_FORMAT_METRIC"		, 680004);
21
+    define("AXIS_FORMAT_CURRENCY"		, 680005);
22
+    define("AXIS_FORMAT_CUSTOM"		, 680006);
23
+
24
+    /* Axis position */
25
+    define("AXIS_POSITION_LEFT"		, 681001);
26
+    define("AXIS_POSITION_RIGHT"		, 681002);
27
+    define("AXIS_POSITION_TOP"		, 681001);
28
+    define("AXIS_POSITION_BOTTOM"		, 681002);
29
+
30
+    /* Families of data points */
31
+    define("SERIE_SHAPE_FILLEDCIRCLE"	, 681011);
32
+    define("SERIE_SHAPE_FILLEDTRIANGLE"	, 681012);
33
+    define("SERIE_SHAPE_FILLEDSQUARE"	, 681013);
34
+    define("SERIE_SHAPE_FILLEDDIAMOND"	, 681017);
35
+    define("SERIE_SHAPE_CIRCLE"		, 681014);
36
+    define("SERIE_SHAPE_TRIANGLE"		, 681015);
37
+    define("SERIE_SHAPE_SQUARE"		, 681016);
38
+    define("SERIE_SHAPE_DIAMOND"		, 681018);
39
+
40
+    /* Axis position */
41
+    define("AXIS_X"			, 682001);
42
+    define("AXIS_Y"			, 682002);
43
+
44
+    /* Define value limits */
45
+    define("ABSOLUTE_MIN"          	, -10000000000000);
46
+    define("ABSOLUTE_MAX"          	, 10000000000000);
47
+
48
+    /* Replacement to the PHP NULL keyword */
49
+    define("VOID"                  	, 0.123456789);
50
+
51
+    /* Euro symbol for GD fonts */
52
+    define("EURO_SYMBOL"			, utf8_encode("&#8364;"));
53
+
54
+    /* pData class definition */
55
+    class pData
56
+    {
57
+    var $Data;
58
+
59
+    var $Palette = array("0"=>array("R"=>188,"G"=>224,"B"=>46,"Alpha"=>100),
60 60
                         "1"=>array("R"=>224,"G"=>100,"B"=>46,"Alpha"=>100),
61 61
                         "2"=>array("R"=>224,"G"=>214,"B"=>46,"Alpha"=>100),
62 62
                         "3"=>array("R"=>46,"G"=>151,"B"=>224,"Alpha"=>100),
@@ -65,723 +65,723 @@  discard block
 block discarded – undo
65 65
                         "6"=>array("R"=>92,"G"=>224,"B"=>46,"Alpha"=>100),
66 66
                         "7"=>array("R"=>224,"G"=>176,"B"=>46,"Alpha"=>100));
67 67
 
68
-   /* Class creator */
69
-   function pData()
68
+    /* Class creator */
69
+    function pData()
70 70
     {
71
-     $this->Data = "";
72
-     $this->Data["XAxisDisplay"]	= AXIS_FORMAT_DEFAULT;
73
-     $this->Data["XAxisFormat"]		= NULL;
74
-     $this->Data["XAxisName"]		= NULL;
75
-     $this->Data["XAxisUnit"]		= NULL;
76
-     $this->Data["Abscissa"]		= NULL;
77
-     $this->Data["AbsicssaPosition"]	= AXIS_POSITION_BOTTOM;
71
+        $this->Data = "";
72
+        $this->Data["XAxisDisplay"]	= AXIS_FORMAT_DEFAULT;
73
+        $this->Data["XAxisFormat"]		= NULL;
74
+        $this->Data["XAxisName"]		= NULL;
75
+        $this->Data["XAxisUnit"]		= NULL;
76
+        $this->Data["Abscissa"]		= NULL;
77
+        $this->Data["AbsicssaPosition"]	= AXIS_POSITION_BOTTOM;
78 78
 
79
-     $this->Data["Axis"][0]["Display"]  = AXIS_FORMAT_DEFAULT;
80
-     $this->Data["Axis"][0]["Position"] = AXIS_POSITION_LEFT;
81
-     $this->Data["Axis"][0]["Identity"] = AXIS_Y;
79
+        $this->Data["Axis"][0]["Display"]  = AXIS_FORMAT_DEFAULT;
80
+        $this->Data["Axis"][0]["Position"] = AXIS_POSITION_LEFT;
81
+        $this->Data["Axis"][0]["Identity"] = AXIS_Y;
82 82
     }
83 83
 
84
-   /* Add a single point or an array to the given serie */
85
-   function addPoints($Values,$SerieName="Serie1")
84
+    /* Add a single point or an array to the given serie */
85
+    function addPoints($Values,$SerieName="Serie1")
86 86
     {
87
-     if (!isset($this->Data["Series"][$SerieName]))
88
-      $this->initialise($SerieName);
87
+        if (!isset($this->Data["Series"][$SerieName]))
88
+        $this->initialise($SerieName);
89 89
 
90
-     if ( is_array($Values) )
91
-      {
92
-       foreach($Values as $Key => $Value)
90
+        if ( is_array($Values) )
91
+        {
92
+        foreach($Values as $Key => $Value)
93 93
         { $this->Data["Series"][$SerieName]["Data"][] = $Value; }
94
-      }
95
-     else
96
-      $this->Data["Series"][$SerieName]["Data"][] = $Values;
94
+        }
95
+        else
96
+        $this->Data["Series"][$SerieName]["Data"][] = $Values;
97 97
 
98
-     if ( $Values != VOID )
99
-      {
100
-       $StrippedData = $this->stripVOID($this->Data["Series"][$SerieName]["Data"]);
101
-       if ( empty($StrippedData) ) { $this->Data["Series"][$SerieName]["Max"] = 0; $this->Data["Series"][$SerieName]["Min"] =0; return(0); }
102
-       $this->Data["Series"][$SerieName]["Max"] = max($StrippedData);
103
-       $this->Data["Series"][$SerieName]["Min"] = min($StrippedData);
104
-      }
98
+        if ( $Values != VOID )
99
+        {
100
+        $StrippedData = $this->stripVOID($this->Data["Series"][$SerieName]["Data"]);
101
+        if ( empty($StrippedData) ) { $this->Data["Series"][$SerieName]["Max"] = 0; $this->Data["Series"][$SerieName]["Min"] =0; return(0); }
102
+        $this->Data["Series"][$SerieName]["Max"] = max($StrippedData);
103
+        $this->Data["Series"][$SerieName]["Min"] = min($StrippedData);
104
+        }
105 105
     }
106 106
 
107
-   /* Strip VOID values */
108
-   function stripVOID($Values)
107
+    /* Strip VOID values */
108
+    function stripVOID($Values)
109 109
     { if (!is_array($Values)) { return(array()); } $Result = array(); foreach($Values as $Key => $Value) { if ( $Value != VOID ) { $Result[] = $Value; } } return($Result); }
110 110
 
111
-   /* Return the number of values contained in a given serie */
112
-   function getSerieCount($Serie)
111
+    /* Return the number of values contained in a given serie */
112
+    function getSerieCount($Serie)
113 113
     { if (isset($this->Data["Series"][$Serie]["Data"])) { return(sizeof($this->Data["Series"][$Serie]["Data"])); } else { return(0); } }
114 114
 
115
-   /* Remove a serie from the pData object */
116
-   function removeSerie($Series)
115
+    /* Remove a serie from the pData object */
116
+    function removeSerie($Series)
117 117
     {
118
-     if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
119
-     foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie])) { unset($this->Data["Series"][$Serie]); } }
118
+        if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
119
+        foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie])) { unset($this->Data["Series"][$Serie]); } }
120 120
     }
121 121
 
122
-   /* Return a value from given serie & index */
123
-   function getValueAt($Serie,$Index=0)
122
+    /* Return a value from given serie & index */
123
+    function getValueAt($Serie,$Index=0)
124 124
     { if (isset($this->Data["Series"][$Serie]["Data"][$Index])) { return($this->Data["Series"][$Serie]["Data"][$Index]); } else { return(NULL); } }
125 125
 
126
-   /* Return the values array */
127
-   function getValues($Serie)
126
+    /* Return the values array */
127
+    function getValues($Serie)
128 128
     { if (isset($this->Data["Series"][$Serie]["Data"])) { return($this->Data["Series"][$Serie]["Data"]); } else { return(NULL); } }
129 129
 
130
-   /* Reverse the values in the given serie */
131
-   function reverseSerie($Series)
130
+    /* Reverse the values in the given serie */
131
+    function reverseSerie($Series)
132 132
     {
133
-     if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
134
-     foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]["Data"])) { $this->Data["Series"][$Serie]["Data"] = array_reverse($this->Data["Series"][$Serie]["Data"]); } }
133
+        if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
134
+        foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]["Data"])) { $this->Data["Series"][$Serie]["Data"] = array_reverse($this->Data["Series"][$Serie]["Data"]); } }
135 135
     }
136 136
 
137
-   /* Return the sum of the serie values */
138
-   function getSum($Serie)
137
+    /* Return the sum of the serie values */
138
+    function getSum($Serie)
139 139
     { if (isset($this->Data["Series"][$Serie])) { return(array_sum($this->Data["Series"][$Serie]["Data"])); } else { return(NULL); } }
140 140
 
141
-   /* Return the max value of a given serie */
142
-   function getMax($Serie)
141
+    /* Return the max value of a given serie */
142
+    function getMax($Serie)
143 143
     { if (isset($this->Data["Series"][$Serie]["Max"])) { return($this->Data["Series"][$Serie]["Max"]); } else { return(NULL); } }
144 144
 
145
-   /* Return the min value of a given serie */
146
-   function getMin($Serie)
145
+    /* Return the min value of a given serie */
146
+    function getMin($Serie)
147 147
     { if (isset($this->Data["Series"][$Serie]["Min"])) { return($this->Data["Series"][$Serie]["Min"]); } else { return(NULL); } }
148 148
 
149
-   /* Set the description of a given serie */
150
-   function setSerieShape($Series,$Shape=SERIE_SHAPE_FILLEDCIRCLE)
149
+    /* Set the description of a given serie */
150
+    function setSerieShape($Series,$Shape=SERIE_SHAPE_FILLEDCIRCLE)
151 151
     {
152
-     if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
153
-     foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Shape"] = $Shape; } }
152
+        if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
153
+        foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Shape"] = $Shape; } }
154 154
     }
155 155
 
156
-   /* Set the description of a given serie */
157
-   function setSerieDescription($Series,$Description="My serie")
156
+    /* Set the description of a given serie */
157
+    function setSerieDescription($Series,$Description="My serie")
158 158
     {
159
-     if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
160
-     foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Description"] = $Description; } }
159
+        if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
160
+        foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Description"] = $Description; } }
161 161
     }
162 162
 
163
-   /* Set a serie as "drawable" while calling a rendering function */
164
-   function setSerieDrawable($Series,$Drawable=TRUE)
163
+    /* Set a serie as "drawable" while calling a rendering function */
164
+    function setSerieDrawable($Series,$Drawable=TRUE)
165 165
     {
166
-     if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
167
-     foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["isDrawable"] = $Drawable; } }
166
+        if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
167
+        foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["isDrawable"] = $Drawable; } }
168 168
     }
169 169
 
170
-   /* Set the icon associated to a given serie */
171
-   function setSeriePicture($Series,$Picture=NULL)
170
+    /* Set the icon associated to a given serie */
171
+    function setSeriePicture($Series,$Picture=NULL)
172 172
     {
173
-     if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
174
-     foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Picture"] = $Picture; } }
173
+        if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
174
+        foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Picture"] = $Picture; } }
175 175
     }
176 176
 
177
-   /* Set the name of the X Axis */
178
-   function setXAxisName($Name)
177
+    /* Set the name of the X Axis */
178
+    function setXAxisName($Name)
179 179
     { $this->Data["XAxisName"] = $Name; }
180 180
 
181
-   /* Set the display mode of the  X Axis */
182
-   function setXAxisDisplay($Mode,$Format=NULL)
181
+    /* Set the display mode of the  X Axis */
182
+    function setXAxisDisplay($Mode,$Format=NULL)
183 183
     { $this->Data["XAxisDisplay"] = $Mode; $this->Data["XAxisFormat"]  = $Format; }
184 184
 
185
-   /* Set the unit that will be displayed on the X axis */
186
-   function setXAxisUnit($Unit)
185
+    /* Set the unit that will be displayed on the X axis */
186
+    function setXAxisUnit($Unit)
187 187
     { $this->Data["XAxisUnit"] = $Unit; }
188 188
 
189
-   /* Set the serie that will be used as abscissa */
190
-   function setAbscissa($Serie)
189
+    /* Set the serie that will be used as abscissa */
190
+    function setAbscissa($Serie)
191 191
     { if (isset($this->Data["Series"][$Serie])) { $this->Data["Abscissa"] = $Serie; } }
192 192
 
193
-   function setAbsicssaPosition($Position = AXIS_POSITION_BOTTOM)
193
+    function setAbsicssaPosition($Position = AXIS_POSITION_BOTTOM)
194 194
     { $this->Data["AbsicssaPosition"] = $Position; }
195 195
 
196
-   /* Set the name of the abscissa axis */
197
-   function setAbscissaName($Name)
196
+    /* Set the name of the abscissa axis */
197
+    function setAbscissaName($Name)
198 198
     { $this->Data["AbscissaName"] = $Name; }
199 199
 
200
-   /* Create a scatter group specifyin X and Y data series */
201
-   function setScatterSerie($SerieX,$SerieY,$ID=0)
200
+    /* Create a scatter group specifyin X and Y data series */
201
+    function setScatterSerie($SerieX,$SerieY,$ID=0)
202 202
     { if (isset($this->Data["Series"][$SerieX]) && isset($this->Data["Series"][$SerieY]) ) { $this->initScatterSerie($ID); $this->Data["ScatterSeries"][$ID]["X"] = $SerieX; $this->Data["ScatterSeries"][$ID]["Y"] = $SerieY; } }
203 203
 
204
-   /* Set the shape of a given sctatter serie */
205
-   function setScatterSerieShape($ID,$Shape=SERIE_SHAPE_FILLEDCIRCLE)
204
+    /* Set the shape of a given sctatter serie */
205
+    function setScatterSerieShape($ID,$Shape=SERIE_SHAPE_FILLEDCIRCLE)
206 206
     { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Shape"] = $Shape; } }
207 207
 
208
-   /* Set the description of a given scatter serie */
209
-   function setScatterSerieDescription($ID,$Description="My serie")
208
+    /* Set the description of a given scatter serie */
209
+    function setScatterSerieDescription($ID,$Description="My serie")
210 210
     { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Description"] = $Description; } }
211 211
 
212
-   /* Set the icon associated to a given scatter serie */
213
-   function setScatterSeriePicture($ID,$Picture=NULL)
212
+    /* Set the icon associated to a given scatter serie */
213
+    function setScatterSeriePicture($ID,$Picture=NULL)
214 214
     { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Picture"] = $Picture; } }
215 215
 
216
-   /* Set a scatter serie as "drawable" while calling a rendering function */
217
-   function setScatterSerieDrawable($ID ,$Drawable=TRUE)
216
+    /* Set a scatter serie as "drawable" while calling a rendering function */
217
+    function setScatterSerieDrawable($ID ,$Drawable=TRUE)
218 218
     { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["isDrawable"] = $Drawable; } }
219 219
 
220
-   /* Define if a scatter serie should be draw with ticks */
221
-   function setScatterSerieTicks($ID,$Width=0)
220
+    /* Define if a scatter serie should be draw with ticks */
221
+    function setScatterSerieTicks($ID,$Width=0)
222 222
     { if ( isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Ticks"] = $Width; } }
223 223
 
224
-   /* Define if a scatter serie should be draw with a special weight */
225
-   function setScatterSerieWeight($ID,$Weight=0)
224
+    /* Define if a scatter serie should be draw with a special weight */
225
+    function setScatterSerieWeight($ID,$Weight=0)
226 226
     { if ( isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Weight"] = $Weight; } }
227 227
 
228
-   /* Associate a color to a scatter serie */
229
-   function setScatterSerieColor($ID,$Format)
228
+    /* Associate a color to a scatter serie */
229
+    function setScatterSerieColor($ID,$Format)
230 230
     {
231
-     $R	    = isset($Format["R"]) ? $Format["R"] : 0;
232
-     $G	    = isset($Format["G"]) ? $Format["G"] : 0;
233
-     $B	    = isset($Format["B"]) ? $Format["B"] : 0;
234
-     $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
231
+        $R	    = isset($Format["R"]) ? $Format["R"] : 0;
232
+        $G	    = isset($Format["G"]) ? $Format["G"] : 0;
233
+        $B	    = isset($Format["B"]) ? $Format["B"] : 0;
234
+        $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
235 235
 
236
-     if ( isset($this->Data["ScatterSeries"][$ID]) )
237
-      {
238
-       $this->Data["ScatterSeries"][$ID]["Color"]["R"] = $R;
239
-       $this->Data["ScatterSeries"][$ID]["Color"]["G"] = $G;
240
-       $this->Data["ScatterSeries"][$ID]["Color"]["B"] = $B;
241
-       $this->Data["ScatterSeries"][$ID]["Color"]["Alpha"] = $Alpha;
242
-      }
236
+        if ( isset($this->Data["ScatterSeries"][$ID]) )
237
+        {
238
+        $this->Data["ScatterSeries"][$ID]["Color"]["R"] = $R;
239
+        $this->Data["ScatterSeries"][$ID]["Color"]["G"] = $G;
240
+        $this->Data["ScatterSeries"][$ID]["Color"]["B"] = $B;
241
+        $this->Data["ScatterSeries"][$ID]["Color"]["Alpha"] = $Alpha;
242
+        }
243 243
     }
244 244
 
245
-   /* Compute the series limits for an individual and global point of view */
246
-   function limits()
245
+    /* Compute the series limits for an individual and global point of view */
246
+    function limits()
247 247
     {
248
-     $GlobalMin = ABSOLUTE_MAX;
249
-     $GlobalMax = ABSOLUTE_MIN;
248
+        $GlobalMin = ABSOLUTE_MAX;
249
+        $GlobalMax = ABSOLUTE_MIN;
250 250
 
251
-     foreach($this->Data["Series"] as $Key => $Value)
252
-      {
253
-       if ( $this->Data["Abscissa"] != $Key && $this->Data["Series"][$Key]["isDrawable"] == TRUE)
251
+        foreach($this->Data["Series"] as $Key => $Value)
252
+        {
253
+        if ( $this->Data["Abscissa"] != $Key && $this->Data["Series"][$Key]["isDrawable"] == TRUE)
254 254
         {
255
-         if ( $GlobalMin > $this->Data["Series"][$Key]["Min"] ) { $GlobalMin = $this->Data["Series"][$Key]["Min"]; }
256
-         if ( $GlobalMax < $this->Data["Series"][$Key]["Max"] ) { $GlobalMax = $this->Data["Series"][$Key]["Max"]; }
255
+            if ( $GlobalMin > $this->Data["Series"][$Key]["Min"] ) { $GlobalMin = $this->Data["Series"][$Key]["Min"]; }
256
+            if ( $GlobalMax < $this->Data["Series"][$Key]["Max"] ) { $GlobalMax = $this->Data["Series"][$Key]["Max"]; }
257 257
         }
258
-      }
259
-     $this->Data["Min"] = $GlobalMin;
260
-     $this->Data["Max"] = $GlobalMax;
258
+        }
259
+        $this->Data["Min"] = $GlobalMin;
260
+        $this->Data["Max"] = $GlobalMax;
261 261
 
262
-     return(array($GlobalMin,$GlobalMax));
262
+        return(array($GlobalMin,$GlobalMax));
263 263
     }
264 264
 
265
-   /* Mark all series as drawable */
266
-   function drawAll()
265
+    /* Mark all series as drawable */
266
+    function drawAll()
267 267
     { foreach($this->Data["Series"] as $Key => $Value) { if ( $this->Data["Abscissa"] != $Key ) { $this->Data["Series"][$Key]["isDrawable"]=TRUE; } } }    
268 268
 
269
-   /* Return the average value of the given serie */
270
-   function getSerieAverage($Serie)
269
+    /* Return the average value of the given serie */
270
+    function getSerieAverage($Serie)
271 271
     {
272
-     if ( isset($this->Data["Series"][$Serie]) )
273
-      {
274
-       $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
275
-       return(array_sum($SerieData)/sizeof($SerieData));
276
-      }
277
-     else
278
-      return(NULL);
272
+        if ( isset($this->Data["Series"][$Serie]) )
273
+        {
274
+        $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
275
+        return(array_sum($SerieData)/sizeof($SerieData));
276
+        }
277
+        else
278
+        return(NULL);
279 279
     }
280 280
 
281
-   /* Return the geometric mean of the given serie */
282
-   function getGeometricMean($Serie)
281
+    /* Return the geometric mean of the given serie */
282
+    function getGeometricMean($Serie)
283 283
     {
284
-     if ( isset($this->Data["Series"][$Serie]) )
285
-      {
286
-       $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
287
-       $Seriesum  = 1; foreach($SerieData as $Key => $Value) { $Seriesum = $Seriesum * $Value; }
288
-       return(pow($Seriesum,1/sizeof($SerieData)));
289
-      }
290
-     else
291
-      return(NULL);
284
+        if ( isset($this->Data["Series"][$Serie]) )
285
+        {
286
+        $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
287
+        $Seriesum  = 1; foreach($SerieData as $Key => $Value) { $Seriesum = $Seriesum * $Value; }
288
+        return(pow($Seriesum,1/sizeof($SerieData)));
289
+        }
290
+        else
291
+        return(NULL);
292 292
     }
293 293
 
294
-   /* Return the harmonic mean of the given serie */
295
-   function getHarmonicMean($Serie)
294
+    /* Return the harmonic mean of the given serie */
295
+    function getHarmonicMean($Serie)
296 296
     {
297
-     if ( isset($this->Data["Series"][$Serie]) )
298
-      {
299
-       $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
300
-       $Seriesum  = 0; foreach($SerieData as $Key => $Value) { $Seriesum = $Seriesum + 1/$Value; }
301
-       return(sizeof($SerieData)/$Seriesum);
302
-      }
303
-     else
304
-      return(NULL);
297
+        if ( isset($this->Data["Series"][$Serie]) )
298
+        {
299
+        $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
300
+        $Seriesum  = 0; foreach($SerieData as $Key => $Value) { $Seriesum = $Seriesum + 1/$Value; }
301
+        return(sizeof($SerieData)/$Seriesum);
302
+        }
303
+        else
304
+        return(NULL);
305 305
     }
306 306
 
307
-   /* Return the standard deviation of the given serie */
308
-   function getStandardDeviation($Serie)
307
+    /* Return the standard deviation of the given serie */
308
+    function getStandardDeviation($Serie)
309 309
     {
310
-     if ( isset($this->Data["Series"][$Serie]) )
311
-      {
312
-       $Average   = $this->getSerieAverage($Serie);
313
-       $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
310
+        if ( isset($this->Data["Series"][$Serie]) )
311
+        {
312
+        $Average   = $this->getSerieAverage($Serie);
313
+        $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
314 314
 
315
-       $DeviationSum = 0;
316
-       foreach($SerieData as $Key => $Value)
315
+        $DeviationSum = 0;
316
+        foreach($SerieData as $Key => $Value)
317 317
         $DeviationSum = $DeviationSum + ($Value-$Average)*($Value-$Average);
318 318
 
319
-       $Deviation = sqrt($DeviationSum/count($SerieData));
319
+        $Deviation = sqrt($DeviationSum/count($SerieData));
320 320
 
321
-       return($Deviation);
322
-      }
323
-     else
324
-      return(NULL);
321
+        return($Deviation);
322
+        }
323
+        else
324
+        return(NULL);
325 325
     }
326 326
 
327
-   /* Return the Coefficient of variation of the given serie */
328
-   function getCoefficientOfVariation($Serie)
327
+    /* Return the Coefficient of variation of the given serie */
328
+    function getCoefficientOfVariation($Serie)
329 329
     {
330
-     if ( isset($this->Data["Series"][$Serie]) )
331
-      {
332
-       $Average           = $this->getSerieAverage($Serie);
333
-       $StandardDeviation = $this->getStandardDeviation($Serie);
330
+        if ( isset($this->Data["Series"][$Serie]) )
331
+        {
332
+        $Average           = $this->getSerieAverage($Serie);
333
+        $StandardDeviation = $this->getStandardDeviation($Serie);
334 334
 
335
-       if ( $StandardDeviation != 0 )
335
+        if ( $StandardDeviation != 0 )
336 336
         return($StandardDeviation/$Average);
337
-       else
337
+        else
338
+        return(NULL);
339
+        }
340
+        else
338 341
         return(NULL);
339
-      }
340
-     else
341
-      return(NULL);
342 342
     }
343 343
 
344
-   /* Return the median value of the given serie */
345
-   function getSerieMedian($Serie)
344
+    /* Return the median value of the given serie */
345
+    function getSerieMedian($Serie)
346 346
     {
347
-     if ( isset($this->Data["Series"][$Serie]) )
348
-      {
349
-       $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
350
-       sort($SerieData);
351
-       $SerieCenter = floor(sizeof($SerieData)/2);
347
+        if ( isset($this->Data["Series"][$Serie]) )
348
+        {
349
+        $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
350
+        sort($SerieData);
351
+        $SerieCenter = floor(sizeof($SerieData)/2);
352 352
 
353
-       if ( isset($SerieData[$SerieCenter]) )
353
+        if ( isset($SerieData[$SerieCenter]) )
354 354
         return($SerieData[$SerieCenter]);
355
-       else
355
+        else
356
+        return(NULL);
357
+        }
358
+        else
356 359
         return(NULL);
357
-      }
358
-     else
359
-      return(NULL);
360 360
     }
361 361
 
362
-   /* Return the x th percentil of the given serie */
363
-   function getSeriePercentile($Serie="Serie1",$Percentil=95)
362
+    /* Return the x th percentil of the given serie */
363
+    function getSeriePercentile($Serie="Serie1",$Percentil=95)
364 364
     {
365
-     if (!isset($this->Data["Series"][$Serie]["Data"])) { return(NULL); }
365
+        if (!isset($this->Data["Series"][$Serie]["Data"])) { return(NULL); }
366 366
 
367
-     $Values = count($this->Data["Series"][$Serie]["Data"])-1;
368
-     if ( $Values < 0 ) { $Values = 0; }
367
+        $Values = count($this->Data["Series"][$Serie]["Data"])-1;
368
+        if ( $Values < 0 ) { $Values = 0; }
369 369
 
370
-     $PercentilID  = floor(($Values/100)*$Percentil+.5);
371
-     $SortedValues = $this->Data["Series"][$Serie]["Data"];
372
-     sort($SortedValues);
370
+        $PercentilID  = floor(($Values/100)*$Percentil+.5);
371
+        $SortedValues = $this->Data["Series"][$Serie]["Data"];
372
+        sort($SortedValues);
373 373
 
374
-     if ( is_numeric($SortedValues[$PercentilID]) )
375
-      return($SortedValues[$PercentilID]);
376
-     else
377
-      return(NULL);
374
+        if ( is_numeric($SortedValues[$PercentilID]) )
375
+        return($SortedValues[$PercentilID]);
376
+        else
377
+        return(NULL);
378 378
     }
379 379
 
380
-   /* Add random values to a given serie */
381
-   function addRandomValues($SerieName="Serie1",$Options="")
380
+    /* Add random values to a given serie */
381
+    function addRandomValues($SerieName="Serie1",$Options="")
382 382
     {
383
-     $Values    = isset($Options["Values"]) ? $Options["Values"] : 20;
384
-     $Min       = isset($Options["Min"]) ? $Options["Min"] : 0;
385
-     $Max       = isset($Options["Max"]) ? $Options["Max"] : 100;
386
-     $withFloat = isset($Options["withFloat"]) ? $Options["withFloat"] : FALSE;
383
+        $Values    = isset($Options["Values"]) ? $Options["Values"] : 20;
384
+        $Min       = isset($Options["Min"]) ? $Options["Min"] : 0;
385
+        $Max       = isset($Options["Max"]) ? $Options["Max"] : 100;
386
+        $withFloat = isset($Options["withFloat"]) ? $Options["withFloat"] : FALSE;
387 387
 
388
-     for ($i=0;$i<=$Values;$i++)
389
-      {
390
-       if ( $withFloat ) { $Value = rand($Min*100,$Max*100)/100; } else { $Value = rand($Min,$Max); }
391
-       $this->addPoints($Value,$SerieName);
392
-      }
388
+        for ($i=0;$i<=$Values;$i++)
389
+        {
390
+        if ( $withFloat ) { $Value = rand($Min*100,$Max*100)/100; } else { $Value = rand($Min,$Max); }
391
+        $this->addPoints($Value,$SerieName);
392
+        }
393 393
     }
394 394
 
395
-   /* Test if we have valid data */
396
-   function containsData()
395
+    /* Test if we have valid data */
396
+    function containsData()
397 397
     {
398
-     if (!isset($this->Data["Series"])) { return(FALSE); }
398
+        if (!isset($this->Data["Series"])) { return(FALSE); }
399 399
 
400
-     $Result = FALSE;
401
-     foreach($this->Data["Series"] as $Key => $Value)
402
-      { if ( $this->Data["Abscissa"] != $Key && $this->Data["Series"][$Key]["isDrawable"]==TRUE) { $Result=TRUE; } }
403
-     return($Result);
400
+        $Result = FALSE;
401
+        foreach($this->Data["Series"] as $Key => $Value)
402
+        { if ( $this->Data["Abscissa"] != $Key && $this->Data["Series"][$Key]["isDrawable"]==TRUE) { $Result=TRUE; } }
403
+        return($Result);
404 404
     }
405 405
 
406
-   /* Set the display mode of an Axis */
407
-   function setAxisDisplay($AxisID,$Mode=AXIS_FORMAT_DEFAULT,$Format=NULL)
406
+    /* Set the display mode of an Axis */
407
+    function setAxisDisplay($AxisID,$Mode=AXIS_FORMAT_DEFAULT,$Format=NULL)
408 408
     {
409
-     if ( isset($this->Data["Axis"][$AxisID] ) )
410
-      {
411
-       $this->Data["Axis"][$AxisID]["Display"] = $Mode;
412
-       if ( $Format != NULL ) { $this->Data["Axis"][$AxisID]["Format"] = $Format; }
413
-      }
409
+        if ( isset($this->Data["Axis"][$AxisID] ) )
410
+        {
411
+        $this->Data["Axis"][$AxisID]["Display"] = $Mode;
412
+        if ( $Format != NULL ) { $this->Data["Axis"][$AxisID]["Format"] = $Format; }
413
+        }
414 414
     }
415 415
 
416
-   /* Set the position of an Axis */
417
-   function setAxisPosition($AxisID,$Position=AXIS_POSITION_LEFT)
416
+    /* Set the position of an Axis */
417
+    function setAxisPosition($AxisID,$Position=AXIS_POSITION_LEFT)
418 418
     { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Position"] = $Position; } }
419 419
 
420
-   /* Associate an unit to an axis */
421
-   function setAxisUnit($AxisID,$Unit)
420
+    /* Associate an unit to an axis */
421
+    function setAxisUnit($AxisID,$Unit)
422 422
     { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Unit"] = $Unit; } }
423 423
 
424
-   /* Associate a name to an axis */
425
-   function setAxisName($AxisID,$Name)
424
+    /* Associate a name to an axis */
425
+    function setAxisName($AxisID,$Name)
426 426
     { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Name"] = $Name; } }
427 427
 
428
-   /* Associate a color to an axis */
429
-   function setAxisColor($AxisID,$Format)
428
+    /* Associate a color to an axis */
429
+    function setAxisColor($AxisID,$Format)
430 430
     {
431
-     $R	    = isset($Format["R"]) ? $Format["R"] : 0;
432
-     $G	    = isset($Format["G"]) ? $Format["G"] : 0;
433
-     $B	    = isset($Format["B"]) ? $Format["B"] : 0;
434
-     $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
431
+        $R	    = isset($Format["R"]) ? $Format["R"] : 0;
432
+        $G	    = isset($Format["G"]) ? $Format["G"] : 0;
433
+        $B	    = isset($Format["B"]) ? $Format["B"] : 0;
434
+        $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
435 435
 
436
-     if ( isset($this->Data["Axis"][$AxisID] ) )
437
-      {
438
-       $this->Data["Axis"][$AxisID]["Color"]["R"] = $R;
439
-       $this->Data["Axis"][$AxisID]["Color"]["G"] = $G;
440
-       $this->Data["Axis"][$AxisID]["Color"]["B"] = $B;
441
-       $this->Data["Axis"][$AxisID]["Color"]["Alpha"] = $Alpha;
442
-      }
436
+        if ( isset($this->Data["Axis"][$AxisID] ) )
437
+        {
438
+        $this->Data["Axis"][$AxisID]["Color"]["R"] = $R;
439
+        $this->Data["Axis"][$AxisID]["Color"]["G"] = $G;
440
+        $this->Data["Axis"][$AxisID]["Color"]["B"] = $B;
441
+        $this->Data["Axis"][$AxisID]["Color"]["Alpha"] = $Alpha;
442
+        }
443 443
     }
444 444
 
445 445
 
446
-   /* Design an axis as X or Y member */
447
-   function setAxisXY($AxisID,$Identity=AXIS_Y)
446
+    /* Design an axis as X or Y member */
447
+    function setAxisXY($AxisID,$Identity=AXIS_Y)
448 448
     { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Identity"] = $Identity; } }
449 449
 
450
-   /* Associate one data serie with one axis */
451
-   function setSerieOnAxis($Series,$AxisID)
450
+    /* Associate one data serie with one axis */
451
+    function setSerieOnAxis($Series,$AxisID)
452 452
     {
453
-     if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
454
-     foreach($Series as $Key => $Serie)
455
-      {
456
-       $PreviousAxis = $this->Data["Series"][$Serie]["Axis"];
453
+        if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
454
+        foreach($Series as $Key => $Serie)
455
+        {
456
+        $PreviousAxis = $this->Data["Series"][$Serie]["Axis"];
457 457
 
458
-       /* Create missing axis */
459
-       if ( !isset($this->Data["Axis"][$AxisID] ) )
458
+        /* Create missing axis */
459
+        if ( !isset($this->Data["Axis"][$AxisID] ) )
460 460
         { $this->Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_LEFT; $this->Data["Axis"][$AxisID]["Identity"] = AXIS_Y;}
461 461
 
462
-       $this->Data["Series"][$Serie]["Axis"] = $AxisID;
462
+        $this->Data["Series"][$Serie]["Axis"] = $AxisID;
463 463
 
464
-       /* Cleanup unused axis */
465
-       $Found = FALSE;
466
-       foreach($this->Data["Series"] as $SerieName => $Values) { if ( $Values["Axis"] == $PreviousAxis ) { $Found = TRUE; } }
467
-       if (!$Found) { unset($this->Data["Axis"][$PreviousAxis]); }
468
-      }
464
+        /* Cleanup unused axis */
465
+        $Found = FALSE;
466
+        foreach($this->Data["Series"] as $SerieName => $Values) { if ( $Values["Axis"] == $PreviousAxis ) { $Found = TRUE; } }
467
+        if (!$Found) { unset($this->Data["Axis"][$PreviousAxis]); }
468
+        }
469 469
     }
470 470
 
471
-   /* Define if a serie should be draw with ticks */
472
-   function setSerieTicks($Series,$Width=0)
471
+    /* Define if a serie should be draw with ticks */
472
+    function setSerieTicks($Series,$Width=0)
473 473
     {
474
-     if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
475
-     foreach($Series as $Key => $Serie) { if ( isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Ticks"] = $Width; } }
474
+        if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
475
+        foreach($Series as $Key => $Serie) { if ( isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Ticks"] = $Width; } }
476 476
     }
477 477
 
478
-   /* Define if a serie should be draw with a special weight */
479
-   function setSerieWeight($Series,$Weight=0)
478
+    /* Define if a serie should be draw with a special weight */
479
+    function setSerieWeight($Series,$Weight=0)
480 480
     {
481
-     if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
482
-     foreach($Series as $Key => $Serie) { if ( isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Weight"] = $Weight; } }
481
+        if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
482
+        foreach($Series as $Key => $Serie) { if ( isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Weight"] = $Weight; } }
483 483
     }
484 484
 
485
-   /* Returns the palette of the given serie */
486
-   function getSeriePalette($Serie)
485
+    /* Returns the palette of the given serie */
486
+    function getSeriePalette($Serie)
487 487
     {
488
-     if ( !isset($this->Data["Series"][$Serie]) ) { return(NULL); }
488
+        if ( !isset($this->Data["Series"][$Serie]) ) { return(NULL); }
489 489
 
490
-     $Result = "";
491
-     $Result["R"] = $this->Data["Series"][$Serie]["Color"]["R"];
492
-     $Result["G"] = $this->Data["Series"][$Serie]["Color"]["G"];
493
-     $Result["B"] = $this->Data["Series"][$Serie]["Color"]["B"];
494
-     $Result["Alpha"] = $this->Data["Series"][$Serie]["Color"]["Alpha"];
490
+        $Result = "";
491
+        $Result["R"] = $this->Data["Series"][$Serie]["Color"]["R"];
492
+        $Result["G"] = $this->Data["Series"][$Serie]["Color"]["G"];
493
+        $Result["B"] = $this->Data["Series"][$Serie]["Color"]["B"];
494
+        $Result["Alpha"] = $this->Data["Series"][$Serie]["Color"]["Alpha"];
495 495
 
496
-     return($Result);
496
+        return($Result);
497 497
     }
498 498
 
499
-   /* Set the color of one serie */
500
-   function setPalette($Series,$Format=NULL)
499
+    /* Set the color of one serie */
500
+    function setPalette($Series,$Format=NULL)
501 501
     {
502
-     if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
503
-
504
-     foreach($Series as $Key => $Serie)
505
-      {
506
-       $R	    = isset($Format["R"]) ? $Format["R"] : 0;
507
-       $G	    = isset($Format["G"]) ? $Format["G"] : 0;
508
-       $B	    = isset($Format["B"]) ? $Format["B"] : 0;
509
-       $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
502
+        if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
510 503
 
511
-       if ( isset($this->Data["Series"][$Serie]) )
504
+        foreach($Series as $Key => $Serie)
512 505
         {
513
-         $OldR = $this->Data["Series"][$Serie]["Color"]["R"]; $OldG = $this->Data["Series"][$Serie]["Color"]["G"]; $OldB = $this->Data["Series"][$Serie]["Color"]["B"];
514
-         $this->Data["Series"][$Serie]["Color"]["R"] = $R;
515
-         $this->Data["Series"][$Serie]["Color"]["G"] = $G;
516
-         $this->Data["Series"][$Serie]["Color"]["B"] = $B;
517
-         $this->Data["Series"][$Serie]["Color"]["Alpha"] = $Alpha;
506
+        $R	    = isset($Format["R"]) ? $Format["R"] : 0;
507
+        $G	    = isset($Format["G"]) ? $Format["G"] : 0;
508
+        $B	    = isset($Format["B"]) ? $Format["B"] : 0;
509
+        $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
518 510
 
519
-         /* Do reverse processing on the internal palette array */
520
-         foreach ($this->Palette as $Key => $Value)
521
-          { if ($Value["R"] == $OldR && $Value["G"] == $OldG && $Value["B"] == $OldB) { $this->Palette[$Key]["R"] = $R; $this->Palette[$Key]["G"] = $G; $this->Palette[$Key]["B"] = $B; $this->Palette[$Key]["Alpha"] = $Alpha;} }
511
+        if ( isset($this->Data["Series"][$Serie]) )
512
+        {
513
+            $OldR = $this->Data["Series"][$Serie]["Color"]["R"]; $OldG = $this->Data["Series"][$Serie]["Color"]["G"]; $OldB = $this->Data["Series"][$Serie]["Color"]["B"];
514
+            $this->Data["Series"][$Serie]["Color"]["R"] = $R;
515
+            $this->Data["Series"][$Serie]["Color"]["G"] = $G;
516
+            $this->Data["Series"][$Serie]["Color"]["B"] = $B;
517
+            $this->Data["Series"][$Serie]["Color"]["Alpha"] = $Alpha;
518
+
519
+            /* Do reverse processing on the internal palette array */
520
+            foreach ($this->Palette as $Key => $Value)
521
+            { if ($Value["R"] == $OldR && $Value["G"] == $OldG && $Value["B"] == $OldB) { $this->Palette[$Key]["R"] = $R; $this->Palette[$Key]["G"] = $G; $this->Palette[$Key]["B"] = $B; $this->Palette[$Key]["Alpha"] = $Alpha;} }
522
+        }
522 523
         }
523
-      }
524 524
     }
525 525
 
526
-   /* Load a palette file */
527
-   function loadPalette($FileName,$Overwrite=FALSE)
526
+    /* Load a palette file */
527
+    function loadPalette($FileName,$Overwrite=FALSE)
528 528
     {
529
-     if ( !file_exists($FileName) ) { return(-1); }
530
-     if ( $Overwrite ) { $this->Palette = ""; }
529
+        if ( !file_exists($FileName) ) { return(-1); }
530
+        if ( $Overwrite ) { $this->Palette = ""; }
531 531
 
532
-     $fileHandle = @fopen($FileName, "r");
533
-     if (!$fileHandle) { return(-1); }
534
-     while (!feof($fileHandle))
535
-      {
536
-       $buffer = fgets($fileHandle, 4096);
537
-       if ( preg_match("/,/",$buffer) )
532
+        $fileHandle = @fopen($FileName, "r");
533
+        if (!$fileHandle) { return(-1); }
534
+        while (!feof($fileHandle))
538 535
         {
539
-         list($R,$G,$B,$Alpha) = preg_split("/,/",$buffer);
540
-         if ( $this->Palette == "" ) { $ID = 0; } else { $ID = count($this->Palette); }
541
-         $this->Palette[$ID] = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
536
+        $buffer = fgets($fileHandle, 4096);
537
+        if ( preg_match("/,/",$buffer) )
538
+        {
539
+            list($R,$G,$B,$Alpha) = preg_split("/,/",$buffer);
540
+            if ( $this->Palette == "" ) { $ID = 0; } else { $ID = count($this->Palette); }
541
+            $this->Palette[$ID] = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
542
+        }
542 543
         }
543
-      }
544
-     fclose($fileHandle);
544
+        fclose($fileHandle);
545 545
 
546
-     /* Apply changes to current series */
547
-     $ID = 0;
548
-     if ( isset($this->Data["Series"]))
549
-      {
550
-       foreach($this->Data["Series"] as $Key => $Value)
546
+        /* Apply changes to current series */
547
+        $ID = 0;
548
+        if ( isset($this->Data["Series"]))
551 549
         {
552
-         if ( !isset($this->Palette[$ID]) )
553
-          $this->Data["Series"][$Key]["Color"] = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>0);
554
-         else
555
-          $this->Data["Series"][$Key]["Color"] = $this->Palette[$ID];
556
-         $ID++;
550
+        foreach($this->Data["Series"] as $Key => $Value)
551
+        {
552
+            if ( !isset($this->Palette[$ID]) )
553
+            $this->Data["Series"][$Key]["Color"] = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>0);
554
+            else
555
+            $this->Data["Series"][$Key]["Color"] = $this->Palette[$ID];
556
+            $ID++;
557
+        }
557 558
         }
558
-      }
559 559
     }
560 560
 
561
-   /* Initialise a given scatter serie */
562
-   function initScatterSerie($ID)
561
+    /* Initialise a given scatter serie */
562
+    function initScatterSerie($ID)
563 563
     {
564
-     if ( isset($this->Data["ScatterSeries"][$ID]) ) { return(0); }
564
+        if ( isset($this->Data["ScatterSeries"][$ID]) ) { return(0); }
565 565
 
566
-     $this->Data["ScatterSeries"][$ID]["Description"]	= "Scatter ".$ID;
567
-     $this->Data["ScatterSeries"][$ID]["isDrawable"]	= TRUE;
568
-     $this->Data["ScatterSeries"][$ID]["Picture"]	= NULL;
569
-     $this->Data["ScatterSeries"][$ID]["Ticks"]		= 0;
570
-     $this->Data["ScatterSeries"][$ID]["Weight"]	= 0;
566
+        $this->Data["ScatterSeries"][$ID]["Description"]	= "Scatter ".$ID;
567
+        $this->Data["ScatterSeries"][$ID]["isDrawable"]	= TRUE;
568
+        $this->Data["ScatterSeries"][$ID]["Picture"]	= NULL;
569
+        $this->Data["ScatterSeries"][$ID]["Ticks"]		= 0;
570
+        $this->Data["ScatterSeries"][$ID]["Weight"]	= 0;
571 571
 
572
-     if ( isset($this->Palette[$ID]) )
573
-      $this->Data["ScatterSeries"][$ID]["Color"] = $this->Palette[$ID];
574
-     else
575
-      {
576
-       $this->Data["ScatterSeries"][$ID]["Color"]["R"] = rand(0,255);
577
-       $this->Data["ScatterSeries"][$ID]["Color"]["G"] = rand(0,255);
578
-       $this->Data["ScatterSeries"][$ID]["Color"]["B"] = rand(0,255);
579
-       $this->Data["ScatterSeries"][$ID]["Color"]["Alpha"] = 100;
580
-      }
572
+        if ( isset($this->Palette[$ID]) )
573
+        $this->Data["ScatterSeries"][$ID]["Color"] = $this->Palette[$ID];
574
+        else
575
+        {
576
+        $this->Data["ScatterSeries"][$ID]["Color"]["R"] = rand(0,255);
577
+        $this->Data["ScatterSeries"][$ID]["Color"]["G"] = rand(0,255);
578
+        $this->Data["ScatterSeries"][$ID]["Color"]["B"] = rand(0,255);
579
+        $this->Data["ScatterSeries"][$ID]["Color"]["Alpha"] = 100;
580
+        }
581 581
     }
582 582
 
583
-   /* Initialise a given serie */
584
-   function initialise($Serie)
583
+    /* Initialise a given serie */
584
+    function initialise($Serie)
585 585
     {
586
-     if ( isset($this->Data["Series"]) ) { $ID = count($this->Data["Series"]); } else { $ID = 0; }
586
+        if ( isset($this->Data["Series"]) ) { $ID = count($this->Data["Series"]); } else { $ID = 0; }
587 587
 
588
-     $this->Data["Series"][$Serie]["Description"]	= $Serie;
589
-     $this->Data["Series"][$Serie]["isDrawable"]	= TRUE;
590
-     $this->Data["Series"][$Serie]["Picture"]		= NULL;
591
-     $this->Data["Series"][$Serie]["Max"]		= NULL;
592
-     $this->Data["Series"][$Serie]["Min"]		= NULL;
593
-     $this->Data["Series"][$Serie]["Axis"]		= 0;
594
-     $this->Data["Series"][$Serie]["Ticks"]		= 0;
595
-     $this->Data["Series"][$Serie]["Weight"]		= 0;
596
-     $this->Data["Series"][$Serie]["Shape"]		= SERIE_SHAPE_FILLEDCIRCLE;
588
+        $this->Data["Series"][$Serie]["Description"]	= $Serie;
589
+        $this->Data["Series"][$Serie]["isDrawable"]	= TRUE;
590
+        $this->Data["Series"][$Serie]["Picture"]		= NULL;
591
+        $this->Data["Series"][$Serie]["Max"]		= NULL;
592
+        $this->Data["Series"][$Serie]["Min"]		= NULL;
593
+        $this->Data["Series"][$Serie]["Axis"]		= 0;
594
+        $this->Data["Series"][$Serie]["Ticks"]		= 0;
595
+        $this->Data["Series"][$Serie]["Weight"]		= 0;
596
+        $this->Data["Series"][$Serie]["Shape"]		= SERIE_SHAPE_FILLEDCIRCLE;
597 597
 
598
-     if ( isset($this->Palette[$ID]) )
599
-      $this->Data["Series"][$Serie]["Color"] = $this->Palette[$ID];
600
-     else
601
-      {
602
-       $this->Data["Series"][$Serie]["Color"]["R"] = rand(0,255);
603
-       $this->Data["Series"][$Serie]["Color"]["G"] = rand(0,255);
604
-       $this->Data["Series"][$Serie]["Color"]["B"] = rand(0,255);
605
-       $this->Data["Series"][$Serie]["Color"]["Alpha"] = 100;
606
-      }
598
+        if ( isset($this->Palette[$ID]) )
599
+        $this->Data["Series"][$Serie]["Color"] = $this->Palette[$ID];
600
+        else
601
+        {
602
+        $this->Data["Series"][$Serie]["Color"]["R"] = rand(0,255);
603
+        $this->Data["Series"][$Serie]["Color"]["G"] = rand(0,255);
604
+        $this->Data["Series"][$Serie]["Color"]["B"] = rand(0,255);
605
+        $this->Data["Series"][$Serie]["Color"]["Alpha"] = 100;
606
+        }
607 607
     }
608 608
      
609
-   function normalize($NormalizationFactor=100,$UnitChange=NULL,$Round=1)
609
+    function normalize($NormalizationFactor=100,$UnitChange=NULL,$Round=1)
610 610
     {
611
-     $Abscissa = $this->Data["Abscissa"];
611
+        $Abscissa = $this->Data["Abscissa"];
612 612
 
613
-     $SelectedSeries = "";
614
-     $MaxVal         = 0;
615
-     foreach($this->Data["Axis"] as $AxisID => $Axis)
616
-      {
617
-       if ( $UnitChange != NULL ) { $this->Data["Axis"][$AxisID]["Unit"] = $UnitChange; }
613
+        $SelectedSeries = "";
614
+        $MaxVal         = 0;
615
+        foreach($this->Data["Axis"] as $AxisID => $Axis)
616
+        {
617
+        if ( $UnitChange != NULL ) { $this->Data["Axis"][$AxisID]["Unit"] = $UnitChange; }
618 618
 
619
-       foreach($this->Data["Series"] as $SerieName => $Serie)
619
+        foreach($this->Data["Series"] as $SerieName => $Serie)
620 620
         {
621
-         if ($Serie["Axis"] == $AxisID && $Serie["isDrawable"] == TRUE && $SerieName != $Abscissa)
622
-          {
623
-           $SelectedSeries[$SerieName] = $SerieName;
621
+            if ($Serie["Axis"] == $AxisID && $Serie["isDrawable"] == TRUE && $SerieName != $Abscissa)
622
+            {
623
+            $SelectedSeries[$SerieName] = $SerieName;
624 624
 
625
-           if ( count($Serie["Data"] ) > $MaxVal ) { $MaxVal = count($Serie["Data"]); }
626
-          }
625
+            if ( count($Serie["Data"] ) > $MaxVal ) { $MaxVal = count($Serie["Data"]); }
626
+            }
627
+        }
627 628
         }
628
-      }
629 629
 
630
-     for($i=0;$i<=$MaxVal-1;$i++)
631
-      {
632
-       $Factor = 0;
633
-       foreach ($SelectedSeries as $Key => $SerieName )
630
+        for($i=0;$i<=$MaxVal-1;$i++)
634 631
         {
635
-         $Value = $this->Data["Series"][$SerieName]["Data"][$i];
636
-         if ( $Value != VOID )
637
-          $Factor = $Factor + abs($Value);
632
+        $Factor = 0;
633
+        foreach ($SelectedSeries as $Key => $SerieName )
634
+        {
635
+            $Value = $this->Data["Series"][$SerieName]["Data"][$i];
636
+            if ( $Value != VOID )
637
+            $Factor = $Factor + abs($Value);
638 638
         }
639 639
 
640
-       if ( $Factor != 0 )
640
+        if ( $Factor != 0 )
641 641
         {
642
-         $Factor = $NormalizationFactor / $Factor;
642
+            $Factor = $NormalizationFactor / $Factor;
643 643
 
644
-         foreach ($SelectedSeries as $Key => $SerieName )
645
-          {
646
-           $Value = $this->Data["Series"][$SerieName]["Data"][$i];
644
+            foreach ($SelectedSeries as $Key => $SerieName )
645
+            {
646
+            $Value = $this->Data["Series"][$SerieName]["Data"][$i];
647 647
 
648
-           if ( $Value != VOID && $Factor != $NormalizationFactor )
648
+            if ( $Value != VOID && $Factor != $NormalizationFactor )
649 649
             $this->Data["Series"][$SerieName]["Data"][$i] = round(abs($Value)*$Factor,$Round);
650
-           elseif ( $Value == VOID || $Value == 0 )
650
+            elseif ( $Value == VOID || $Value == 0 )
651 651
             $this->Data["Series"][$SerieName]["Data"][$i] = VOID;
652
-           elseif ( $Factor == $NormalizationFactor )
652
+            elseif ( $Factor == $NormalizationFactor )
653 653
             $this->Data["Series"][$SerieName]["Data"][$i] = $NormalizationFactor;
654
-          }
654
+            }
655
+        }
655 656
         }
656
-      }
657 657
 
658
-     foreach ($SelectedSeries as $Key => $SerieName )
659
-      {
660
-       $this->Data["Series"][$SerieName]["Max"] = max($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
661
-       $this->Data["Series"][$SerieName]["Min"] = min($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
662
-      }
658
+        foreach ($SelectedSeries as $Key => $SerieName )
659
+        {
660
+        $this->Data["Series"][$SerieName]["Max"] = max($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
661
+        $this->Data["Series"][$SerieName]["Min"] = min($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
662
+        }
663 663
     }
664 664
 
665
-   /* Load data from a CSV (or similar) data source */
666
-   function importFromCSV($FileName,$Options="")
665
+    /* Load data from a CSV (or similar) data source */
666
+    function importFromCSV($FileName,$Options="")
667 667
     {
668
-     $Delimiter		= isset($Options["Delimiter"]) ? $Options["Delimiter"] : ",";
669
-     $GotHeader		= isset($Options["GotHeader"]) ? $Options["GotHeader"] : FALSE;
670
-     $SkipColumns	= isset($Options["SkipColumns"]) ? $Options["SkipColumns"] : array(-1);
671
-     $DefaultSerieName	= isset($Options["DefaultSerieName"]) ? $Options["DefaultSerieName"] : "Serie";
668
+        $Delimiter		= isset($Options["Delimiter"]) ? $Options["Delimiter"] : ",";
669
+        $GotHeader		= isset($Options["GotHeader"]) ? $Options["GotHeader"] : FALSE;
670
+        $SkipColumns	= isset($Options["SkipColumns"]) ? $Options["SkipColumns"] : array(-1);
671
+        $DefaultSerieName	= isset($Options["DefaultSerieName"]) ? $Options["DefaultSerieName"] : "Serie";
672 672
 
673
-     $Handle = @fopen($FileName,"r");
674
-     if ($Handle)
675
-      {
676
-       $HeaderParsed = FALSE; $SerieNames = "";
677
-       while (!feof($Handle))
673
+        $Handle = @fopen($FileName,"r");
674
+        if ($Handle)
678 675
         {
679
-         $Buffer = fgets($Handle, 4096);
680
-         $Buffer = str_replace(chr(10),"",$Buffer);
681
-         $Buffer = str_replace(chr(13),"",$Buffer);
682
-         $Values = preg_split("/".$Delimiter."/",$Buffer);
676
+        $HeaderParsed = FALSE; $SerieNames = "";
677
+        while (!feof($Handle))
678
+        {
679
+            $Buffer = fgets($Handle, 4096);
680
+            $Buffer = str_replace(chr(10),"",$Buffer);
681
+            $Buffer = str_replace(chr(13),"",$Buffer);
682
+            $Values = preg_split("/".$Delimiter."/",$Buffer);
683 683
 
684
-         if ( $Buffer != "" )
685
-          {
686
-           if ( $GotHeader && !$HeaderParsed )
684
+            if ( $Buffer != "" )
685
+            {
686
+            if ( $GotHeader && !$HeaderParsed )
687 687
             {
688
-             foreach($Values as $Key => $Name) { if ( !in_array($Key,$SkipColumns) ) { $SerieNames[$Key] = $Name; } }
689
-             $HeaderParsed = TRUE;
688
+                foreach($Values as $Key => $Name) { if ( !in_array($Key,$SkipColumns) ) { $SerieNames[$Key] = $Name; } }
689
+                $HeaderParsed = TRUE;
690 690
             }
691
-           else
691
+            else
692 692
             {
693
-             if ($SerieNames == "" ) { foreach($Values as $Key => $Name) {  if ( !in_array($Key,$SkipColumns) ) { $SerieNames[$Key] = $DefaultSerieName.$Key; } } }
694
-             foreach($Values as $Key => $Value) {  if ( !in_array($Key,$SkipColumns) ) { $this->addPoints($Value,$SerieNames[$Key]); } }
693
+                if ($SerieNames == "" ) { foreach($Values as $Key => $Name) {  if ( !in_array($Key,$SkipColumns) ) { $SerieNames[$Key] = $DefaultSerieName.$Key; } } }
694
+                foreach($Values as $Key => $Value) {  if ( !in_array($Key,$SkipColumns) ) { $this->addPoints($Value,$SerieNames[$Key]); } }
695 695
             }
696
-          }
696
+            }
697
+        }
698
+        fclose($Handle);
697 699
         }
698
-       fclose($Handle);
699
-      }
700 700
     }
701 701
 
702
-   /* Create a dataset based on a formula */
703
-   function createFunctionSerie($SerieName,$Formula="",$Options="")
702
+    /* Create a dataset based on a formula */
703
+    function createFunctionSerie($SerieName,$Formula="",$Options="")
704 704
     {
705
-     $MinX		= isset($Options["MinX"]) ? $Options["MinX"] : -10;
706
-     $MaxX		= isset($Options["MaxX"]) ? $Options["MaxX"] : 10;
707
-     $XStep		= isset($Options["XStep"]) ? $Options["XStep"] : 1;
708
-     $AutoDescription	= isset($Options["AutoDescription"]) ? $Options["AutoDescription"] : FALSE;
709
-     $RecordAbscissa	= isset($Options["RecordAbscissa"]) ? $Options["RecordAbscissa"] : FALSE;
710
-     $AbscissaSerie	= isset($Options["AbscissaSerie"]) ? $Options["AbscissaSerie"] : "Abscissa";
705
+        $MinX		= isset($Options["MinX"]) ? $Options["MinX"] : -10;
706
+        $MaxX		= isset($Options["MaxX"]) ? $Options["MaxX"] : 10;
707
+        $XStep		= isset($Options["XStep"]) ? $Options["XStep"] : 1;
708
+        $AutoDescription	= isset($Options["AutoDescription"]) ? $Options["AutoDescription"] : FALSE;
709
+        $RecordAbscissa	= isset($Options["RecordAbscissa"]) ? $Options["RecordAbscissa"] : FALSE;
710
+        $AbscissaSerie	= isset($Options["AbscissaSerie"]) ? $Options["AbscissaSerie"] : "Abscissa";
711 711
 
712
-     if ( $Formula == "" ) { return(0); }
712
+        if ( $Formula == "" ) { return(0); }
713 713
 
714
-     $Result = ""; $Abscissa = "";
715
-     for($i=$MinX; $i<=$MaxX; $i=$i+$XStep)
716
-      {
717
-       $Expression = "\$return = '!'.(".str_replace("z",$i,$Formula).");";
718
-       if ( @eval($Expression) === FALSE ) { $return = VOID; }
719
-       if ( $return == "!" ) { $return = VOID; } else { $return = $this->right($return,strlen($return)-1); }
720
-       if ( $return == "NAN" ) { $return = VOID; }
721
-       if ( $return == "INF" ) { $return = VOID; }
722
-       if ( $return == "-INF" ) { $return = VOID; }
723
-
724
-       $Abscissa[] = $i;
725
-       $Result[]   = $return;
726
-      }
714
+        $Result = ""; $Abscissa = "";
715
+        for($i=$MinX; $i<=$MaxX; $i=$i+$XStep)
716
+        {
717
+        $Expression = "\$return = '!'.(".str_replace("z",$i,$Formula).");";
718
+        if ( @eval($Expression) === FALSE ) { $return = VOID; }
719
+        if ( $return == "!" ) { $return = VOID; } else { $return = $this->right($return,strlen($return)-1); }
720
+        if ( $return == "NAN" ) { $return = VOID; }
721
+        if ( $return == "INF" ) { $return = VOID; }
722
+        if ( $return == "-INF" ) { $return = VOID; }
723
+
724
+        $Abscissa[] = $i;
725
+        $Result[]   = $return;
726
+        }
727 727
 
728
-     $this->addPoints($Result,$SerieName);
729
-     if ( $AutoDescription ) { $this->setSerieDescription($SerieName,$Formula); }
730
-     if ( $RecordAbscissa ) { $this->addPoints($Abscissa,$AbscissaSerie); }
728
+        $this->addPoints($Result,$SerieName);
729
+        if ( $AutoDescription ) { $this->setSerieDescription($SerieName,$Formula); }
730
+        if ( $RecordAbscissa ) { $this->addPoints($Abscissa,$AbscissaSerie); }
731 731
     }
732 732
 
733
-   function negateValues($Series)
733
+    function negateValues($Series)
734 734
     {
735
-     if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
736
-     foreach($Series as $Key => $SerieName)
737
-      {
738
-       if (isset($this->Data["Series"][$SerieName]))
735
+        if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
736
+        foreach($Series as $Key => $SerieName)
737
+        {
738
+        if (isset($this->Data["Series"][$SerieName]))
739 739
         {
740
-         $Data = "";
741
-         foreach($this->Data["Series"][$SerieName]["Data"] as $Key => $Value)
742
-          { if ( $Value == VOID ) { $Data[] = VOID; } else { $Data[] = -$Value; } }
743
-         $this->Data["Series"][$SerieName]["Data"] = $Data;
740
+            $Data = "";
741
+            foreach($this->Data["Series"][$SerieName]["Data"] as $Key => $Value)
742
+            { if ( $Value == VOID ) { $Data[] = VOID; } else { $Data[] = -$Value; } }
743
+            $this->Data["Series"][$SerieName]["Data"] = $Data;
744 744
 
745
-         $this->Data["Series"][$SerieName]["Max"] = max($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
746
-         $this->Data["Series"][$SerieName]["Min"] = min($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
745
+            $this->Data["Series"][$SerieName]["Max"] = max($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
746
+            $this->Data["Series"][$SerieName]["Min"] = min($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
747
+        }
747 748
         }
748
-      }
749 749
     }
750 750
 
751
-   /* Return the data & configuration of the series */
752
-   function getData()
751
+    /* Return the data & configuration of the series */
752
+    function getData()
753 753
     { return($this->Data); }
754 754
 
755
-   /* Save a palette element */
756
-   function savePalette($ID,$Color)
755
+    /* Save a palette element */
756
+    function savePalette($ID,$Color)
757 757
     { $this->Palette[$ID] = $Color; }
758 758
 
759
-   /* Return the palette of the series */
760
-   function getPalette()
759
+    /* Return the palette of the series */
760
+    function getPalette()
761 761
     { return($this->Palette); }
762 762
 
763
-   /* Called by the scaling algorithm to save the config */
764
-   function saveAxisConfig($Axis) { $this->Data["Axis"]=$Axis; }
763
+    /* Called by the scaling algorithm to save the config */
764
+    function saveAxisConfig($Axis) { $this->Data["Axis"]=$Axis; }
765 765
 
766
-   /* Save the Y Margin if set */
767
-   function saveYMargin($Value) { $this->Data["YMargin"]=$Value; }
766
+    /* Save the Y Margin if set */
767
+    function saveYMargin($Value) { $this->Data["YMargin"]=$Value; }
768 768
 
769
-   /* Save extended configuration to the pData object */
770
-   function saveExtendedData($Tag,$Values) { $this->Data["Extended"][$Tag]=$Values; }
769
+    /* Save extended configuration to the pData object */
770
+    function saveExtendedData($Tag,$Values) { $this->Data["Extended"][$Tag]=$Values; }
771 771
 
772
-   /* Called by the scaling algorithm to save the orientation of the scale */
773
-   function saveOrientation($Orientation) { $this->Data["Orientation"]=$Orientation; }
772
+    /* Called by the scaling algorithm to save the orientation of the scale */
773
+    function saveOrientation($Orientation) { $this->Data["Orientation"]=$Orientation; }
774 774
 
775
-   /* Convert a string to a single elements array */
776
-   function convertToArray($Value)
775
+    /* Convert a string to a single elements array */
776
+    function convertToArray($Value)
777 777
     { $Values = ""; $Values[] = $Value; return($Values); }
778 778
 
779
-   /* Class string wrapper */
780
-   function __toString()
779
+    /* Class string wrapper */
780
+    function __toString()
781 781
     { return("pData object."); }
782 782
 
783
-   function left($value,$NbChar)	{ return substr($value,0,$NbChar); }  
784
-   function right($value,$NbChar)	{ return substr($value,strlen($value)-$NbChar,$NbChar); }  
785
-   function mid($value,$Depart,$NbChar)	{ return substr($value,$Depart-1,$NbChar); }  
786
-  }
783
+    function left($value,$NbChar)	{ return substr($value,0,$NbChar); }  
784
+    function right($value,$NbChar)	{ return substr($value,strlen($value)-$NbChar,$NbChar); }  
785
+    function mid($value,$Depart,$NbChar)	{ return substr($value,$Depart-1,$NbChar); }  
786
+    }
787 787
 ?>
788 788
\ No newline at end of file
Please login to merge, or discard this patch.
default/boinc/modules/boincstats/includes/pchart/class/pDraw.class.php 2 patches
Doc Comments   +44 added lines patch added patch discarded remove patch
@@ -124,6 +124,10 @@  discard block
 block discarded – undo
124 124
     }
125 125
 
126 126
    /* Draw a polygon */
127
+
128
+   /**
129
+    * @param string $Points
130
+    */
127 131
    function drawPolygon($Points,$Format="")
128 132
     {
129 133
      $R			= isset($Format["R"]) ? $Format["R"] : 0;
@@ -573,6 +577,10 @@  discard block
 block discarded – undo
573 577
     }
574 578
 
575 579
    /* Drawn a spline based on the bezier function */
580
+
581
+   /**
582
+    * @param string $Coordinates
583
+    */
576 584
    function drawSpline($Coordinates,$Format="")
577 585
     {
578 586
      $R		= isset($Format["R"]) ? $Format["R"] : 0;
@@ -1028,6 +1036,10 @@  discard block
 block discarded – undo
1028 1036
     }
1029 1037
 
1030 1038
    /* Draw a gradient within a defined area */
1039
+
1040
+   /**
1041
+    * @param integer $Direction
1042
+    */
1031 1043
    function drawGradientArea($X1,$Y1,$X2,$Y2,$Direction,$Format="")
1032 1044
     {
1033 1045
      $StartR	= isset($Format["StartR"]) ? $Format["StartR"] : 90;
@@ -1109,6 +1121,11 @@  discard block
 block discarded – undo
1109 1121
     }
1110 1122
 
1111 1123
    /* Draw an aliased pixel */
1124
+
1125
+   /**
1126
+    * @param double $X
1127
+    * @param double $Y
1128
+    */
1112 1129
    function drawAntialiasPixel($X,$Y,$Format="")
1113 1130
     {
1114 1131
      $R     = isset($Format["R"]) ? $Format["R"] : 0;
@@ -1188,6 +1205,10 @@  discard block
 block discarded – undo
1188 1205
     }
1189 1206
 
1190 1207
    /* Convert apha to base 10 */
1208
+
1209
+   /**
1210
+    * @param integer $AlphaValue
1211
+    */
1191 1212
    function convertAlpha($AlphaValue)
1192 1213
     { return((127/100)*(100-$AlphaValue)); }
1193 1214
 
@@ -1205,6 +1226,11 @@  discard block
 block discarded – undo
1205 1226
     }
1206 1227
 
1207 1228
    /* Load a PNG file and draw it over the chart */
1229
+
1230
+   /**
1231
+    * @param double $X
1232
+    * @param double $Y
1233
+    */
1208 1234
    function drawFromPNG($X,$Y,$FileName)
1209 1235
     { $this->drawFromPicture(1,$FileName,$X,$Y); }
1210 1236
 
@@ -2483,6 +2509,9 @@  discard block
 block discarded – undo
2483 2509
       }
2484 2510
     }
2485 2511
 
2512
+   /**
2513
+    * @param integer $ID
2514
+    */
2486 2515
    function isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip)
2487 2516
     {
2488 2517
      if ( $LabelingMethod == LABELING_DIFFERENT && $Value != $LastValue ) { return(TRUE); }
@@ -2494,6 +2523,10 @@  discard block
 block discarded – undo
2494 2523
     }
2495 2524
 
2496 2525
    /* Compute the scale, check for the best visual factors */
2526
+
2527
+   /**
2528
+    * @param double $MaxDivs
2529
+    */
2497 2530
    function computeScale($XMin,$XMax,$MaxDivs,$Factors,$AxisID=0)
2498 2531
     {
2499 2532
      /* Compute each factors */
@@ -2522,6 +2555,10 @@  discard block
 block discarded – undo
2522 2555
     }
2523 2556
 
2524 2557
    /* Compute the best matching scale based on size & factors */
2558
+
2559
+   /**
2560
+    * @param integer $AxisID
2561
+    */
2525 2562
    function processScale($XMin,$XMax,$MaxDivs,$Factors,$AxisID)
2526 2563
     {
2527 2564
      $ScaleHeight = abs(ceil($XMax)-floor($XMin));
@@ -2602,6 +2639,9 @@  discard block
 block discarded – undo
2602 2639
      return($Scale);
2603 2640
     }
2604 2641
 
2642
+   /**
2643
+    * @param double $Value2
2644
+    */
2605 2645
    function modulo($Value1,$Value2)
2606 2646
     {
2607 2647
      if (floor($Value2) == 0) { return(0); }
@@ -5772,6 +5812,10 @@  discard block
 block discarded – undo
5772 5812
     }
5773 5813
 
5774 5814
    /* Draw a label box */
5815
+
5816
+   /**
5817
+    * @param string $Captions
5818
+    */
5775 5819
    function drawLabelBox($X,$Y,$Title,$Captions,$Format="")
5776 5820
     {
5777 5821
      $NoTitle		= isset($Format["NoTitle"]) ? $Format["NoTitle"] : NULL;
Please login to merge, or discard this patch.
Indentation   +5013 added lines, -5013 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
- /*
2
+    /*
3 3
      pDraw - class extension with drawing methods
4 4
 
5 5
      Version     : 2.1.3
@@ -13,6181 +13,6181 @@  discard block
 block discarded – undo
13 13
      You can find the whole class documentation on the pChart web site.
14 14
  */
15 15
 
16
- define("DIRECTION_VERTICAL"		, 690001);
17
- define("DIRECTION_HORIZONTAL"		, 690002);
18
-
19
- define("SCALE_POS_LEFTRIGHT"		, 690101);
20
- define("SCALE_POS_TOPBOTTOM"		, 690102);
21
-
22
- define("SCALE_MODE_FLOATING"		, 690201);
23
- define("SCALE_MODE_START0"		, 690202);
24
- define("SCALE_MODE_ADDALL"		, 690203);
25
- define("SCALE_MODE_ADDALL_START0"	, 690204);
26
- define("SCALE_MODE_MANUAL"		, 690205);
27
-
28
- define("SCALE_SKIP_NONE"		, 690301);
29
- define("SCALE_SKIP_SAME"		, 690302);
30
- define("SCALE_SKIP_NUMBERS"		, 690303);
31
-
32
- define("TEXT_ALIGN_TOPLEFT"		, 690401);
33
- define("TEXT_ALIGN_TOPMIDDLE"		, 690402);
34
- define("TEXT_ALIGN_TOPRIGHT"		, 690403);
35
- define("TEXT_ALIGN_MIDDLELEFT"		, 690404);
36
- define("TEXT_ALIGN_MIDDLEMIDDLE"	, 690405);
37
- define("TEXT_ALIGN_MIDDLERIGHT"	, 690406);
38
- define("TEXT_ALIGN_BOTTOMLEFT"		, 690407);
39
- define("TEXT_ALIGN_BOTTOMMIDDLE"	, 690408);
40
- define("TEXT_ALIGN_BOTTOMRIGHT"	, 690409);
41
-
42
- define("POSITION_TOP"                  , 690501);
43
- define("POSITION_BOTTOM"               , 690502);
44
-
45
- define("LABEL_POS_LEFT"		, 690601);
46
- define("LABEL_POS_CENTER"		, 690602);
47
- define("LABEL_POS_RIGHT"		, 690603);
48
- define("LABEL_POS_TOP"			, 690604);
49
- define("LABEL_POS_BOTTOM"		, 690605);
50
- define("LABEL_POS_INSIDE"		, 690606);
51
- define("LABEL_POS_OUTSIDE"		, 690607);
52
-
53
- define("ORIENTATION_HORIZONTAL"	, 690701);
54
- define("ORIENTATION_VERTICAL"		, 690702);
55
- define("ORIENTATION_AUTO"		, 690703);
56
-
57
- define("LEGEND_NOBORDER"		, 690800);
58
- define("LEGEND_BOX"			, 690801);
59
- define("LEGEND_ROUND"			, 690802);
60
-
61
- define("LEGEND_VERTICAL"		, 690901);
62
- define("LEGEND_HORIZONTAL"		, 690902);
63
-
64
- define("LEGEND_FAMILY_BOX"		, 691051);
65
- define("LEGEND_FAMILY_CIRCLE"		, 691052);
66
- define("LEGEND_FAMILY_LINE"		, 691053);
67
-
68
- define("DISPLAY_AUTO"			, 691001);
69
- define("DISPLAY_MANUAL"		, 691002);
70
-
71
- define("LABELING_ALL"			, 691011);
72
- define("LABELING_DIFFERENT"		, 691012);
73
-
74
- define("BOUND_MIN"			, 691021);
75
- define("BOUND_MAX"			, 691022);
76
- define("BOUND_BOTH"			, 691023);
77
-
78
- define("BOUND_LABEL_POS_TOP"		, 691031);
79
- define("BOUND_LABEL_POS_BOTTOM"	, 691032);
80
- define("BOUND_LABEL_POS_AUTO"		, 691033);
81
-
82
- define("CAPTION_LEFT_TOP"		, 691041);
83
- define("CAPTION_RIGHT_BOTTOM"		, 691042);
84
-
85
- define("GRADIENT_SIMPLE"		, 691051);
86
- define("GRADIENT_EFFECT_CAN"		, 691052);
87
-
88
- define("LABEL_TITLE_NOBACKGROUND"	, 691061);
89
- define("LABEL_TITLE_BACKGROUND"	, 691062);
90
-
91
- define("LABEL_POINT_NONE"		, 691071);
92
- define("LABEL_POINT_CIRCLE"		, 691072);
93
- define("LABEL_POINT_BOX"		, 691073);
94
-
95
- define("ZONE_NAME_ANGLE_AUTO"		, 691081);
96
-
97
- define("PI"		, 3.14159265);
98
- define("ALL"		, 69);
99
- define("NONE"		, 31);
100
- define("AUTO"		, 690000);
101
- define("OUT_OF_SIGHT"	, -10000000000000);
102
-
103
- class pDraw
104
-  {
105
-   /* Returns the number of drawable series */
106
-   function countDrawableSeries()
16
+    define("DIRECTION_VERTICAL"		, 690001);
17
+    define("DIRECTION_HORIZONTAL"		, 690002);
18
+
19
+    define("SCALE_POS_LEFTRIGHT"		, 690101);
20
+    define("SCALE_POS_TOPBOTTOM"		, 690102);
21
+
22
+    define("SCALE_MODE_FLOATING"		, 690201);
23
+    define("SCALE_MODE_START0"		, 690202);
24
+    define("SCALE_MODE_ADDALL"		, 690203);
25
+    define("SCALE_MODE_ADDALL_START0"	, 690204);
26
+    define("SCALE_MODE_MANUAL"		, 690205);
27
+
28
+    define("SCALE_SKIP_NONE"		, 690301);
29
+    define("SCALE_SKIP_SAME"		, 690302);
30
+    define("SCALE_SKIP_NUMBERS"		, 690303);
31
+
32
+    define("TEXT_ALIGN_TOPLEFT"		, 690401);
33
+    define("TEXT_ALIGN_TOPMIDDLE"		, 690402);
34
+    define("TEXT_ALIGN_TOPRIGHT"		, 690403);
35
+    define("TEXT_ALIGN_MIDDLELEFT"		, 690404);
36
+    define("TEXT_ALIGN_MIDDLEMIDDLE"	, 690405);
37
+    define("TEXT_ALIGN_MIDDLERIGHT"	, 690406);
38
+    define("TEXT_ALIGN_BOTTOMLEFT"		, 690407);
39
+    define("TEXT_ALIGN_BOTTOMMIDDLE"	, 690408);
40
+    define("TEXT_ALIGN_BOTTOMRIGHT"	, 690409);
41
+
42
+    define("POSITION_TOP"                  , 690501);
43
+    define("POSITION_BOTTOM"               , 690502);
44
+
45
+    define("LABEL_POS_LEFT"		, 690601);
46
+    define("LABEL_POS_CENTER"		, 690602);
47
+    define("LABEL_POS_RIGHT"		, 690603);
48
+    define("LABEL_POS_TOP"			, 690604);
49
+    define("LABEL_POS_BOTTOM"		, 690605);
50
+    define("LABEL_POS_INSIDE"		, 690606);
51
+    define("LABEL_POS_OUTSIDE"		, 690607);
52
+
53
+    define("ORIENTATION_HORIZONTAL"	, 690701);
54
+    define("ORIENTATION_VERTICAL"		, 690702);
55
+    define("ORIENTATION_AUTO"		, 690703);
56
+
57
+    define("LEGEND_NOBORDER"		, 690800);
58
+    define("LEGEND_BOX"			, 690801);
59
+    define("LEGEND_ROUND"			, 690802);
60
+
61
+    define("LEGEND_VERTICAL"		, 690901);
62
+    define("LEGEND_HORIZONTAL"		, 690902);
63
+
64
+    define("LEGEND_FAMILY_BOX"		, 691051);
65
+    define("LEGEND_FAMILY_CIRCLE"		, 691052);
66
+    define("LEGEND_FAMILY_LINE"		, 691053);
67
+
68
+    define("DISPLAY_AUTO"			, 691001);
69
+    define("DISPLAY_MANUAL"		, 691002);
70
+
71
+    define("LABELING_ALL"			, 691011);
72
+    define("LABELING_DIFFERENT"		, 691012);
73
+
74
+    define("BOUND_MIN"			, 691021);
75
+    define("BOUND_MAX"			, 691022);
76
+    define("BOUND_BOTH"			, 691023);
77
+
78
+    define("BOUND_LABEL_POS_TOP"		, 691031);
79
+    define("BOUND_LABEL_POS_BOTTOM"	, 691032);
80
+    define("BOUND_LABEL_POS_AUTO"		, 691033);
81
+
82
+    define("CAPTION_LEFT_TOP"		, 691041);
83
+    define("CAPTION_RIGHT_BOTTOM"		, 691042);
84
+
85
+    define("GRADIENT_SIMPLE"		, 691051);
86
+    define("GRADIENT_EFFECT_CAN"		, 691052);
87
+
88
+    define("LABEL_TITLE_NOBACKGROUND"	, 691061);
89
+    define("LABEL_TITLE_BACKGROUND"	, 691062);
90
+
91
+    define("LABEL_POINT_NONE"		, 691071);
92
+    define("LABEL_POINT_CIRCLE"		, 691072);
93
+    define("LABEL_POINT_BOX"		, 691073);
94
+
95
+    define("ZONE_NAME_ANGLE_AUTO"		, 691081);
96
+
97
+    define("PI"		, 3.14159265);
98
+    define("ALL"		, 69);
99
+    define("NONE"		, 31);
100
+    define("AUTO"		, 690000);
101
+    define("OUT_OF_SIGHT"	, -10000000000000);
102
+
103
+    class pDraw
104
+    {
105
+    /* Returns the number of drawable series */
106
+    function countDrawableSeries()
107 107
     {
108
-     $Results = 0;
109
-     $Data = $this->DataSet->getData();
108
+        $Results = 0;
109
+        $Data = $this->DataSet->getData();
110 110
 
111
-     foreach($Data["Series"] as $SerieName => $Serie)
112
-      { if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) { $Results++; } }
111
+        foreach($Data["Series"] as $SerieName => $Serie)
112
+        { if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) { $Results++; } }
113 113
 
114
-     return($Results);
114
+        return($Results);
115 115
     }
116 116
 
117
-   /* Fix box coordinates */
118
-   function fixBoxCoordinates($Xa,$Ya,$Xb,$Yb)
117
+    /* Fix box coordinates */
118
+    function fixBoxCoordinates($Xa,$Ya,$Xb,$Yb)
119 119
     {
120
-     $X1 = min($Xa,$Xb); $Y1 = min($Ya,$Yb);
121
-     $X2 = max($Xa,$Xb); $Y2 = max($Ya,$Yb);
120
+        $X1 = min($Xa,$Xb); $Y1 = min($Ya,$Yb);
121
+        $X2 = max($Xa,$Xb); $Y2 = max($Ya,$Yb);
122 122
 
123
-     return(array($X1,$Y1,$X2,$Y2));
123
+        return(array($X1,$Y1,$X2,$Y2));
124 124
     }
125 125
 
126
-   /* Draw a polygon */
127
-   function drawPolygon($Points,$Format="")
126
+    /* Draw a polygon */
127
+    function drawPolygon($Points,$Format="")
128 128
     {
129
-     $R			= isset($Format["R"]) ? $Format["R"] : 0;
130
-     $G			= isset($Format["G"]) ? $Format["G"] : 0;
131
-     $B			= isset($Format["B"]) ? $Format["B"] : 0;
132
-     $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
133
-     $NoFill		= isset($Format["NoFill"]) ? $Format["NoFill"] : FALSE;
134
-     $NoBorder		= isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE;
135
-     $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
136
-     $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
137
-     $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
138
-     $BorderAlpha 	= isset($Format["Alpha"]) ? $Format["Alpha"] : $Alpha / 2;
139
-     $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
140
-     $SkipX		= isset($Format["SkipX"]) ? $Format["SkipX"] : OUT_OF_SIGHT;
141
-     $SkipY		= isset($Format["SkipY"]) ? $Format["SkipY"] : OUT_OF_SIGHT;
142
-
143
-     /* Calling the ImageFilledPolygon() function over the $Points array will round it */ 	
144
-     $Backup = $Points;
145
-
146
-     if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
147
-
148
-     if ( $SkipX != OUT_OF_SIGHT ) { $SkipX = floor($SkipX); }
149
-     if ( $SkipY != OUT_OF_SIGHT ) { $SkipY = floor($SkipY); }
150
-
151
-     $RestoreShadow = $this->Shadow;
152
-     if ( !$NoFill )
153
-      {
154
-       if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
155
-        {
156
-         $this->Shadow = FALSE;
157
-         for($i=0;$i<=count($Points)-1;$i=$i+2)
158
-          { $Shadow[] = $Points[$i] + $this->ShadowX; $Shadow[] = $Points[$i+1] + $this->ShadowY; }
159
-         $this->drawPolygon($Shadow,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"NoBorder"=>TRUE));
160
-        }
161
-
162
-       $FillColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
163
-
164
-       if ( count($Points) >= 6 )
129
+        $R			= isset($Format["R"]) ? $Format["R"] : 0;
130
+        $G			= isset($Format["G"]) ? $Format["G"] : 0;
131
+        $B			= isset($Format["B"]) ? $Format["B"] : 0;
132
+        $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
133
+        $NoFill		= isset($Format["NoFill"]) ? $Format["NoFill"] : FALSE;
134
+        $NoBorder		= isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE;
135
+        $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
136
+        $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
137
+        $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
138
+        $BorderAlpha 	= isset($Format["Alpha"]) ? $Format["Alpha"] : $Alpha / 2;
139
+        $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
140
+        $SkipX		= isset($Format["SkipX"]) ? $Format["SkipX"] : OUT_OF_SIGHT;
141
+        $SkipY		= isset($Format["SkipY"]) ? $Format["SkipY"] : OUT_OF_SIGHT;
142
+
143
+        /* Calling the ImageFilledPolygon() function over the $Points array will round it */ 	
144
+        $Backup = $Points;
145
+
146
+        if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
147
+
148
+        if ( $SkipX != OUT_OF_SIGHT ) { $SkipX = floor($SkipX); }
149
+        if ( $SkipY != OUT_OF_SIGHT ) { $SkipY = floor($SkipY); }
150
+
151
+        $RestoreShadow = $this->Shadow;
152
+        if ( !$NoFill )
153
+        {
154
+        if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
155
+        {
156
+            $this->Shadow = FALSE;
157
+            for($i=0;$i<=count($Points)-1;$i=$i+2)
158
+            { $Shadow[] = $Points[$i] + $this->ShadowX; $Shadow[] = $Points[$i+1] + $this->ShadowY; }
159
+            $this->drawPolygon($Shadow,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"NoBorder"=>TRUE));
160
+        }
161
+
162
+        $FillColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
163
+
164
+        if ( count($Points) >= 6 )
165 165
         { ImageFilledPolygon($this->Picture,$Points,count($Points)/2,$FillColor); }
166
-      }
166
+        }
167 167
 
168
-     if ( !$NoBorder )
169
-      {
170
-       $Points = $Backup;
168
+        if ( !$NoBorder )
169
+        {
170
+        $Points = $Backup;
171 171
 
172
-       if ( $NoFill )
172
+        if ( $NoFill )
173 173
         $BorderSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
174
-       else
174
+        else
175 175
         $BorderSettings = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha);
176 176
 
177
-       for($i=0;$i<=count($Points)-1;$i=$i+2)
177
+        for($i=0;$i<=count($Points)-1;$i=$i+2)
178 178
         {
179
-         if ( isset($Points[$i+2]) )
180
-          {
181
-           if ( !($Points[$i] == $Points[$i+2] && $Points[$i] == $SkipX ) && !($Points[$i+1] == $Points[$i+3] && $Points[$i+1] == $SkipY ) )
179
+            if ( isset($Points[$i+2]) )
180
+            {
181
+            if ( !($Points[$i] == $Points[$i+2] && $Points[$i] == $SkipX ) && !($Points[$i+1] == $Points[$i+3] && $Points[$i+1] == $SkipY ) )
182 182
             $this->drawLine($Points[$i],$Points[$i+1],$Points[$i+2],$Points[$i+3],$BorderSettings);
183
-          }
184
-         else
185
-          {
186
-           if ( !($Points[$i] == $Points[0] && $Points[$i] == $SkipX ) && !($Points[$i+1] == $Points[1] && $Points[$i+1] == $SkipY ) )
183
+            }
184
+            else
185
+            {
186
+            if ( !($Points[$i] == $Points[0] && $Points[$i] == $SkipX ) && !($Points[$i+1] == $Points[1] && $Points[$i+1] == $SkipY ) )
187 187
             $this->drawLine($Points[$i],$Points[$i+1],$Points[0],$Points[1],$BorderSettings);
188
-          }
188
+            }
189
+        }
189 190
         }
190
-      }
191 191
 
192
-     $this->Shadow = $RestoreShadow;
192
+        $this->Shadow = $RestoreShadow;
193 193
     }
194 194
 
195
-   /* Apply AALias correction to the rounded box boundaries */
196
-   function offsetCorrection($Value,$Mode)
195
+    /* Apply AALias correction to the rounded box boundaries */
196
+    function offsetCorrection($Value,$Mode)
197 197
     {
198
-     $Value = round($Value,1);
198
+        $Value = round($Value,1);
199 199
 
200
-     if ( $Value == 0 && $Mode == 1 ) { return(.9); }
201
-     if ( $Value == 0 ) { return(0); }
200
+        if ( $Value == 0 && $Mode == 1 ) { return(.9); }
201
+        if ( $Value == 0 ) { return(0); }
202 202
 
203
-     if ( $Mode == 1) 
204
-      { if ( $Value == 1 ) { return(.9); }; if ( $Value == .1 ) { return(.9); }; if ( $Value == .2 ) { return(.8); }; if ( $Value == .3 ) { return(.8); }; if ( $Value == .4 ) { return(.7); }; if ( $Value == .5 ) { return(.5); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.6); }; if ( $Value == .9 ) { return(.9); }; }
203
+        if ( $Mode == 1) 
204
+        { if ( $Value == 1 ) { return(.9); }; if ( $Value == .1 ) { return(.9); }; if ( $Value == .2 ) { return(.8); }; if ( $Value == .3 ) { return(.8); }; if ( $Value == .4 ) { return(.7); }; if ( $Value == .5 ) { return(.5); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.6); }; if ( $Value == .9 ) { return(.9); }; }
205 205
 
206
-     if ( $Mode == 2) 
207
-      { if ( $Value == 1 ) { return(.9); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.4); }; if ( $Value == .5 ) { return(.5); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.8); }; if ( $Value == .9 ) { return(.9); }; }
206
+        if ( $Mode == 2) 
207
+        { if ( $Value == 1 ) { return(.9); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.4); }; if ( $Value == .5 ) { return(.5); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.8); }; if ( $Value == .9 ) { return(.9); }; }
208 208
 
209
-     if ( $Mode == 3) 
210
-      { if ( $Value == 1 ) { return(.1); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.4); }; if ( $Value == .5 ) { return(.9); }; if ( $Value == .6 ) { return(.6); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.4); }; if ( $Value == .9 ) { return(.5); }; }
209
+        if ( $Mode == 3) 
210
+        { if ( $Value == 1 ) { return(.1); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.4); }; if ( $Value == .5 ) { return(.9); }; if ( $Value == .6 ) { return(.6); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.4); }; if ( $Value == .9 ) { return(.5); }; }
211 211
 
212
-     if ( $Mode == 4) 
213
-      { if ( $Value == 1 ) { return(-1); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.1); }; if ( $Value == .5 ) { return(-.1); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.1); }; if ( $Value == .8 ) { return(.1); }; if ( $Value == .9 ) { return(.1); }; }
212
+        if ( $Mode == 4) 
213
+        { if ( $Value == 1 ) { return(-1); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.1); }; if ( $Value == .5 ) { return(-.1); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.1); }; if ( $Value == .8 ) { return(.1); }; if ( $Value == .9 ) { return(.1); }; }
214 214
     }
215 215
 
216
-   /* Draw a rectangle with rounded corners */
217
-   function drawRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,$Format="")
216
+    /* Draw a rectangle with rounded corners */
217
+    function drawRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,$Format="")
218 218
     {
219
-     $R	    = isset($Format["R"]) ? $Format["R"] : 0;
220
-     $G	    = isset($Format["G"]) ? $Format["G"] : 0;
221
-     $B	    = isset($Format["B"]) ? $Format["B"] : 0;
222
-     $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
223
-
224
-     list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2);
225
-
226
-     if ( $X2 - $X1 < $Radius ) { $Radius = floor((($X2-$X1))/2); }
227
-     if ( $Y2 - $Y1 < $Radius ) { $Radius = floor((($Y2-$Y1))/2); }
228
-
229
-     $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE);
230
-
231
-     if ( $Radius <= 0 ) { $this->drawRectangle($X1,$Y1,$X2,$Y2,$Color); return(0); }
232
-
233
-     if ( $this->Antialias )
234
-      {
235
-       $this->drawLine($X1+$Radius,$Y1,$X2-$Radius,$Y1,$Color);
236
-       $this->drawLine($X2,$Y1+$Radius,$X2,$Y2-$Radius,$Color);
237
-       $this->drawLine($X2-$Radius,$Y2,$X1+$Radius,$Y2,$Color);
238
-       $this->drawLine($X1,$Y1+$Radius,$X1,$Y2-$Radius,$Color);
239
-      }
240
-     else
241
-      {
242
-       $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
243
-       imageline($this->Picture,$X1+$Radius,$Y1,$X2-$Radius,$Y1,$Color);
244
-       imageline($this->Picture,$X2,$Y1+$Radius,$X2,$Y2-$Radius,$Color);
245
-       imageline($this->Picture,$X2-$Radius,$Y2,$X1+$Radius,$Y2,$Color);
246
-       imageline($this->Picture,$X1,$Y1+$Radius,$X1,$Y2-$Radius,$Color);
247
-      }
248
-
249
-     $Step = 360 / (2 * PI * $Radius);
250
-     for($i=0;$i<=90;$i=$i+$Step)
251
-      {
252
-       $X = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius;
253
-       $Y = sin(($i+180)*PI/180) * $Radius + $Y1 + $Radius;
254
-       $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
255
-
256
-       $X = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius;
257
-       $Y = sin(($i+90)*PI/180) * $Radius + $Y2 - $Radius;
258
-       $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
259
-
260
-       $X = cos($i*PI/180) * $Radius + $X2 - $Radius;
261
-       $Y = sin($i*PI/180) * $Radius + $Y2 - $Radius;
262
-       $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
263
-
264
-       $X = cos(($i+270)*PI/180) * $Radius + $X2 - $Radius;
265
-       $Y = sin(($i+270)*PI/180) * $Radius + $Y1 + $Radius;
266
-       $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
267
-      }
219
+        $R	    = isset($Format["R"]) ? $Format["R"] : 0;
220
+        $G	    = isset($Format["G"]) ? $Format["G"] : 0;
221
+        $B	    = isset($Format["B"]) ? $Format["B"] : 0;
222
+        $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
223
+
224
+        list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2);
225
+
226
+        if ( $X2 - $X1 < $Radius ) { $Radius = floor((($X2-$X1))/2); }
227
+        if ( $Y2 - $Y1 < $Radius ) { $Radius = floor((($Y2-$Y1))/2); }
228
+
229
+        $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE);
230
+
231
+        if ( $Radius <= 0 ) { $this->drawRectangle($X1,$Y1,$X2,$Y2,$Color); return(0); }
232
+
233
+        if ( $this->Antialias )
234
+        {
235
+        $this->drawLine($X1+$Radius,$Y1,$X2-$Radius,$Y1,$Color);
236
+        $this->drawLine($X2,$Y1+$Radius,$X2,$Y2-$Radius,$Color);
237
+        $this->drawLine($X2-$Radius,$Y2,$X1+$Radius,$Y2,$Color);
238
+        $this->drawLine($X1,$Y1+$Radius,$X1,$Y2-$Radius,$Color);
239
+        }
240
+        else
241
+        {
242
+        $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
243
+        imageline($this->Picture,$X1+$Radius,$Y1,$X2-$Radius,$Y1,$Color);
244
+        imageline($this->Picture,$X2,$Y1+$Radius,$X2,$Y2-$Radius,$Color);
245
+        imageline($this->Picture,$X2-$Radius,$Y2,$X1+$Radius,$Y2,$Color);
246
+        imageline($this->Picture,$X1,$Y1+$Radius,$X1,$Y2-$Radius,$Color);
247
+        }
248
+
249
+        $Step = 360 / (2 * PI * $Radius);
250
+        for($i=0;$i<=90;$i=$i+$Step)
251
+        {
252
+        $X = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius;
253
+        $Y = sin(($i+180)*PI/180) * $Radius + $Y1 + $Radius;
254
+        $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
255
+
256
+        $X = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius;
257
+        $Y = sin(($i+90)*PI/180) * $Radius + $Y2 - $Radius;
258
+        $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
259
+
260
+        $X = cos($i*PI/180) * $Radius + $X2 - $Radius;
261
+        $Y = sin($i*PI/180) * $Radius + $Y2 - $Radius;
262
+        $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
263
+
264
+        $X = cos(($i+270)*PI/180) * $Radius + $X2 - $Radius;
265
+        $Y = sin(($i+270)*PI/180) * $Radius + $Y1 + $Radius;
266
+        $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
267
+        }
268 268
     }
269 269
 
270
-   /* Draw a rectangle with rounded corners */
271
-   function drawRoundedFilledRectangle($X1,$Y1,$X2,$Y2,$Radius,$Format="")
270
+    /* Draw a rectangle with rounded corners */
271
+    function drawRoundedFilledRectangle($X1,$Y1,$X2,$Y2,$Radius,$Format="")
272 272
     {
273
-     $R			= isset($Format["R"]) ? $Format["R"] : 0;
274
-     $G			= isset($Format["G"]) ? $Format["G"] : 0;
275
-     $B			= isset($Format["B"]) ? $Format["B"] : 0;
276
-     $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
277
-     $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
278
-     $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
279
-     $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
280
-     $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
281
-
282
-     /* Temporary fix for AA issue */
283
-     $Y1 = floor($Y1); $Y2 = floor($Y2); $X1 = floor($X1); $X2 = floor($X2);
284
-
285
-     if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
286
-     if ( $BorderR == -1 ) { $BorderR = $R; $BorderG = $G; $BorderB = $B; }
287
-
288
-     list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2);
289
-
290
-     if ( $X2 - $X1 < $Radius*2 ) { $Radius = floor((($X2-$X1))/4); }
291
-     if ( $Y2 - $Y1 < $Radius*2 ) { $Radius = floor((($Y2-$Y1))/4); }
292
-
293
-     $RestoreShadow = $this->Shadow;
294
-     if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
295
-      {
296
-       $this->Shadow = FALSE;
297
-       $this->drawRoundedFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
298
-      }
299
-
300
-     $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE);
301
-
302
-     if ( $Radius <= 0 ) { $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color); return(0); }
303
-
304
-     $YTop    = $Y1+$Radius;
305
-     $YBottom = $Y2-$Radius;
306
-
307
-     $Step = 360 / (2 * PI * $Radius);
308
-     $Positions = ""; $Radius--; $MinY = ""; $MaxY = "";
309
-     for($i=0;$i<=90;$i=$i+$Step)
310
-      {
311
-       $Xp1 = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius;
312
-       $Xp2 = cos(((90-$i)+270)*PI/180) * $Radius + $X2 - $Radius;
313
-       $Yp  = floor(sin(($i+180)*PI/180) * $Radius + $YTop);
314
-       if ( $MinY == "" || $Yp > $MinY ) { $MinY = $Yp; }
315
-
316
-       if ( $Xp1 <= floor($X1) )  { $Xp1++; }
317
-       if ( $Xp2 >= floor($X2) )  { $Xp2--; }
318
-       $Xp1++;
319
-
320
-       if ( !isset($Positions[$Yp]) )
273
+        $R			= isset($Format["R"]) ? $Format["R"] : 0;
274
+        $G			= isset($Format["G"]) ? $Format["G"] : 0;
275
+        $B			= isset($Format["B"]) ? $Format["B"] : 0;
276
+        $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
277
+        $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
278
+        $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
279
+        $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
280
+        $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
281
+
282
+        /* Temporary fix for AA issue */
283
+        $Y1 = floor($Y1); $Y2 = floor($Y2); $X1 = floor($X1); $X2 = floor($X2);
284
+
285
+        if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
286
+        if ( $BorderR == -1 ) { $BorderR = $R; $BorderG = $G; $BorderB = $B; }
287
+
288
+        list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2);
289
+
290
+        if ( $X2 - $X1 < $Radius*2 ) { $Radius = floor((($X2-$X1))/4); }
291
+        if ( $Y2 - $Y1 < $Radius*2 ) { $Radius = floor((($Y2-$Y1))/4); }
292
+
293
+        $RestoreShadow = $this->Shadow;
294
+        if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
295
+        {
296
+        $this->Shadow = FALSE;
297
+        $this->drawRoundedFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
298
+        }
299
+
300
+        $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE);
301
+
302
+        if ( $Radius <= 0 ) { $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color); return(0); }
303
+
304
+        $YTop    = $Y1+$Radius;
305
+        $YBottom = $Y2-$Radius;
306
+
307
+        $Step = 360 / (2 * PI * $Radius);
308
+        $Positions = ""; $Radius--; $MinY = ""; $MaxY = "";
309
+        for($i=0;$i<=90;$i=$i+$Step)
310
+        {
311
+        $Xp1 = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius;
312
+        $Xp2 = cos(((90-$i)+270)*PI/180) * $Radius + $X2 - $Radius;
313
+        $Yp  = floor(sin(($i+180)*PI/180) * $Radius + $YTop);
314
+        if ( $MinY == "" || $Yp > $MinY ) { $MinY = $Yp; }
315
+
316
+        if ( $Xp1 <= floor($X1) )  { $Xp1++; }
317
+        if ( $Xp2 >= floor($X2) )  { $Xp2--; }
318
+        $Xp1++;
319
+
320
+        if ( !isset($Positions[$Yp]) )
321 321
         { $Positions[$Yp]["X1"] = $Xp1; $Positions[$Yp]["X2"] = $Xp2; }
322
-       else
322
+        else
323 323
         { $Positions[$Yp]["X1"] = ($Positions[$Yp]["X1"]+$Xp1)/2; $Positions[$Yp]["X2"] = ($Positions[$Yp]["X2"]+$Xp2)/2; }
324 324
 
325
-       $Xp1 = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius;
326
-       $Xp2 = cos((90-$i)*PI/180) * $Radius + $X2 - $Radius;
327
-       $Yp  = floor(sin(($i+90)*PI/180) * $Radius + $YBottom);
328
-       if ( $MaxY == "" || $Yp < $MaxY ) { $MaxY = $Yp; }
325
+        $Xp1 = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius;
326
+        $Xp2 = cos((90-$i)*PI/180) * $Radius + $X2 - $Radius;
327
+        $Yp  = floor(sin(($i+90)*PI/180) * $Radius + $YBottom);
328
+        if ( $MaxY == "" || $Yp < $MaxY ) { $MaxY = $Yp; }
329 329
 
330
-       if ( $Xp1 <= floor($X1) ) { $Xp1++; }
331
-       if ( $Xp2 >= floor($X2) ) { $Xp2--; }
332
-       $Xp1++;
330
+        if ( $Xp1 <= floor($X1) ) { $Xp1++; }
331
+        if ( $Xp2 >= floor($X2) ) { $Xp2--; }
332
+        $Xp1++;
333 333
 
334
-       if ( !isset($Positions[$Yp]) )
334
+        if ( !isset($Positions[$Yp]) )
335 335
         { $Positions[$Yp]["X1"] = $Xp1; $Positions[$Yp]["X2"] = $Xp2; }
336
-       else
336
+        else
337 337
         { $Positions[$Yp]["X1"] = ($Positions[$Yp]["X1"]+$Xp1)/2; $Positions[$Yp]["X2"] = ($Positions[$Yp]["X2"]+$Xp2)/2; }
338
-      }
338
+        }
339 339
 
340
-     $ManualColor  = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
341
-     foreach($Positions as $Yp => $Bounds)
342
-      {
343
-       $X1 = $Bounds["X1"]; $X1Dec = $this->getFirstDecimal($X1); if ( $X1Dec != 0 ) { $X1 = floor($X1)+1; }
344
-       $X2 = $Bounds["X2"]; $X2Dec = $this->getFirstDecimal($X2); if ( $X2Dec != 0 ) { $X2 = floor($X2)-1; }
345
-       imageline($this->Picture,$X1,$Yp,$X2,$Yp,$ManualColor);
346
-      }
347
-     $this->drawFilledRectangle($X1,$MinY+1,floor($X2),$MaxY-1,$Color);
340
+        $ManualColor  = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
341
+        foreach($Positions as $Yp => $Bounds)
342
+        {
343
+        $X1 = $Bounds["X1"]; $X1Dec = $this->getFirstDecimal($X1); if ( $X1Dec != 0 ) { $X1 = floor($X1)+1; }
344
+        $X2 = $Bounds["X2"]; $X2Dec = $this->getFirstDecimal($X2); if ( $X2Dec != 0 ) { $X2 = floor($X2)-1; }
345
+        imageline($this->Picture,$X1,$Yp,$X2,$Yp,$ManualColor);
346
+        }
347
+        $this->drawFilledRectangle($X1,$MinY+1,floor($X2),$MaxY-1,$Color);
348 348
 
349
-     $Radius++;
350
-     $this->drawRoundedRectangle($X1,$Y1,$X2+1,$Y2-1,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
349
+        $Radius++;
350
+        $this->drawRoundedRectangle($X1,$Y1,$X2+1,$Y2-1,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
351 351
 
352
-     $this->Shadow = $RestoreShadow;
352
+        $this->Shadow = $RestoreShadow;
353 353
     }
354 354
 
355
-   /* Draw a rectangle with rounded corners */
356
-   function drawRoundedFilledRectangle_deprecated($X1,$Y1,$X2,$Y2,$Radius,$Format="")
355
+    /* Draw a rectangle with rounded corners */
356
+    function drawRoundedFilledRectangle_deprecated($X1,$Y1,$X2,$Y2,$Radius,$Format="")
357 357
     {
358
-     $R			= isset($Format["R"]) ? $Format["R"] : 0;
359
-     $G			= isset($Format["G"]) ? $Format["G"] : 0;
360
-     $B			= isset($Format["B"]) ? $Format["B"] : 0;
361
-     $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
362
-     $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
363
-     $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
364
-     $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
365
-     $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
358
+        $R			= isset($Format["R"]) ? $Format["R"] : 0;
359
+        $G			= isset($Format["G"]) ? $Format["G"] : 0;
360
+        $B			= isset($Format["B"]) ? $Format["B"] : 0;
361
+        $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
362
+        $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
363
+        $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
364
+        $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
365
+        $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
366 366
 
367
-     if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
368
-     if ( $BorderR == -1 ) { $BorderR = $R; $BorderG = $G; $BorderB = $B; }
367
+        if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
368
+        if ( $BorderR == -1 ) { $BorderR = $R; $BorderG = $G; $BorderB = $B; }
369 369
 
370
-     list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2);
370
+        list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2);
371 371
 
372
-     if ( $X2 - $X1 < $Radius ) { $Radius = floor((($X2-$X1)+2)/2); }
373
-     if ( $Y2 - $Y1 < $Radius ) { $Radius = floor((($Y2-$Y1)+2)/2); }
372
+        if ( $X2 - $X1 < $Radius ) { $Radius = floor((($X2-$X1)+2)/2); }
373
+        if ( $Y2 - $Y1 < $Radius ) { $Radius = floor((($Y2-$Y1)+2)/2); }
374 374
 
375
-     $RestoreShadow = $this->Shadow;
376
-     if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
377
-      {
378
-       $this->Shadow = FALSE;
379
-       $this->drawRoundedFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
380
-      }
375
+        $RestoreShadow = $this->Shadow;
376
+        if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
377
+        {
378
+        $this->Shadow = FALSE;
379
+        $this->drawRoundedFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
380
+        }
381 381
 
382
-     if ( $this->getFirstDecimal($X2) >= 5 )  { $XOffset2 = 1; } else { $XOffset2 = 0; }
383
-     if ( $this->getFirstDecimal($X1) <= 5 )  { $XOffset1 = 1; } else { $XOffset1 = 0; }
382
+        if ( $this->getFirstDecimal($X2) >= 5 )  { $XOffset2 = 1; } else { $XOffset2 = 0; }
383
+        if ( $this->getFirstDecimal($X1) <= 5 )  { $XOffset1 = 1; } else { $XOffset1 = 0; }
384 384
 
385
-     if ( !$this->Antialias ) { $XOffset1 = 1; $XOffset2 = 1; }
385
+        if ( !$this->Antialias ) { $XOffset1 = 1; $XOffset2 = 1; }
386 386
 
387
-     $YTop    = floor($Y1+$Radius);
388
-     $YBottom = floor($Y2-$Radius);
387
+        $YTop    = floor($Y1+$Radius);
388
+        $YBottom = floor($Y2-$Radius);
389 389
 
390
-     $this->drawFilledRectangle($X1-$XOffset1,$YTop,$X2+$XOffset2,$YBottom,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE));
390
+        $this->drawFilledRectangle($X1-$XOffset1,$YTop,$X2+$XOffset2,$YBottom,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE));
391 391
 
392
-     $Step = 360 / (2 * PI * $Radius);
393
-     $Color  = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
394
-     $Color2 = $this->allocateColor($this->Picture,255,0,0,$Alpha);
395
-     $Drawn = "";
392
+        $Step = 360 / (2 * PI * $Radius);
393
+        $Color  = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
394
+        $Color2 = $this->allocateColor($this->Picture,255,0,0,$Alpha);
395
+        $Drawn = "";
396 396
 
397
-     if ( $Alpha < 100 )  { $Drawn[$YTop] = FALSE; }
398
-     if ( $Alpha < 100 )  { $Drawn[$YBottom] = TRUE; }
397
+        if ( $Alpha < 100 )  { $Drawn[$YTop] = FALSE; }
398
+        if ( $Alpha < 100 )  { $Drawn[$YBottom] = TRUE; }
399 399
      
400
-     for($i=0;$i<=90;$i=$i+$Step)
401
-      {
402
-       $Xp1 = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius;
403
-       $Xp2 = cos(((90-$i)+270)*PI/180) * $Radius + $X2 - $Radius;
404
-       $Yp  = sin(($i+180)*PI/180) * $Radius + $YTop;
400
+        for($i=0;$i<=90;$i=$i+$Step)
401
+        {
402
+        $Xp1 = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius;
403
+        $Xp2 = cos(((90-$i)+270)*PI/180) * $Radius + $X2 - $Radius;
404
+        $Yp  = sin(($i+180)*PI/180) * $Radius + $YTop;
405 405
 
406
-       if ( $this->getFirstDecimal($Xp1) > 5 )  { $XOffset1 = 1; } else { $XOffset1 = 0; }
407
-       if ( $this->getFirstDecimal($Xp2) > 5 )  { $XOffset2 = 1; } else { $XOffset2 = 0; }
408
-       if ( $this->getFirstDecimal($Yp) > 5 )  { $YOffset = 1; } else { $YOffset = 0; }
406
+        if ( $this->getFirstDecimal($Xp1) > 5 )  { $XOffset1 = 1; } else { $XOffset1 = 0; }
407
+        if ( $this->getFirstDecimal($Xp2) > 5 )  { $XOffset2 = 1; } else { $XOffset2 = 0; }
408
+        if ( $this->getFirstDecimal($Yp) > 5 )  { $YOffset = 1; } else { $YOffset = 0; }
409 409
 
410
-       if ( !isset($Drawn[$Yp+$YOffset]) || $Alpha == 100 )
410
+        if ( !isset($Drawn[$Yp+$YOffset]) || $Alpha == 100 )
411 411
         imageline($this->Picture,$Xp1+$XOffset1,$Yp+$YOffset,$Xp2+$XOffset2,$Yp+$YOffset,$Color);
412 412
 
413
-       $Drawn[$Yp+$YOffset] = $Xp2;
413
+        $Drawn[$Yp+$YOffset] = $Xp2;
414 414
 
415
-       $Xp1 = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius;
416
-       $Xp2 = cos((90-$i)*PI/180) * $Radius + $X2 - $Radius;
417
-       $Yp  = sin(($i+90)*PI/180) * $Radius + $YBottom;
415
+        $Xp1 = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius;
416
+        $Xp2 = cos((90-$i)*PI/180) * $Radius + $X2 - $Radius;
417
+        $Yp  = sin(($i+90)*PI/180) * $Radius + $YBottom;
418 418
 
419
-       if ( $this->getFirstDecimal($Xp1) > 7 )  { $XOffset1 = 1; } else { $XOffset1 = 0; }
420
-       if ( $this->getFirstDecimal($Xp2) > 7 )  { $XOffset2 = 1; } else { $XOffset2 = 0; }
421
-       if ( $this->getFirstDecimal($Yp) > 5 )  { $YOffset = 1; } else { $YOffset = 0; }
419
+        if ( $this->getFirstDecimal($Xp1) > 7 )  { $XOffset1 = 1; } else { $XOffset1 = 0; }
420
+        if ( $this->getFirstDecimal($Xp2) > 7 )  { $XOffset2 = 1; } else { $XOffset2 = 0; }
421
+        if ( $this->getFirstDecimal($Yp) > 5 )  { $YOffset = 1; } else { $YOffset = 0; }
422 422
 
423
-       if ( !isset($Drawn[$Yp+$YOffset]) || $Alpha == 100 )
423
+        if ( !isset($Drawn[$Yp+$YOffset]) || $Alpha == 100 )
424 424
         imageline($this->Picture,$Xp1+$XOffset1,$Yp+$YOffset,$Xp2+$XOffset2,$Yp+$YOffset,$Color);
425 425
 
426
-       $Drawn[$Yp+$YOffset] = $Xp2;
427
-      }
426
+        $Drawn[$Yp+$YOffset] = $Xp2;
427
+        }
428 428
 
429
-     $this->drawRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
429
+        $this->drawRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
430 430
 
431
-     $this->Shadow = $RestoreShadow;
431
+        $this->Shadow = $RestoreShadow;
432 432
     }
433 433
 
434
-   /* Draw a rectangle */
435
-   function drawRectangle($X1,$Y1,$X2,$Y2,$Format="")
434
+    /* Draw a rectangle */
435
+    function drawRectangle($X1,$Y1,$X2,$Y2,$Format="")
436 436
     {
437
-     $R		= isset($Format["R"]) ? $Format["R"] : 0;
438
-     $G		= isset($Format["G"]) ? $Format["G"] : 0;
439
-     $B		= isset($Format["B"]) ? $Format["B"] : 0;
440
-     $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
441
-     $Ticks	= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
442
-     $NoAngle	= isset($Format["NoAngle"]) ? $Format["NoAngle"] : FALSE;
443
-
444
-     if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); }
445
-     if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); }
446
-
447
-     if ( $this->Antialias )
448
-      {
449
-       if ( $NoAngle )
450
-        {
451
-         $this->drawLine($X1+1,$Y1,$X2-1,$Y1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
452
-         $this->drawLine($X2,$Y1+1,$X2,$Y2-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
453
-         $this->drawLine($X2-1,$Y2,$X1+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
454
-         $this->drawLine($X1,$Y1+1,$X1,$Y2-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
455
-        }
456
-       else
457
-        {
458
-         $this->drawLine($X1+1,$Y1,$X2-1,$Y1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
459
-         $this->drawLine($X2,$Y1,$X2,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
460
-         $this->drawLine($X2-1,$Y2,$X1+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
461
-         $this->drawLine($X1,$Y1,$X1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
462
-        }
463
-      }
464
-     else
465
-      {
466
-       $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
467
-       imagerectangle($this->Picture,$X1,$Y1,$X2,$Y2,$Color);
468
-      }
437
+        $R		= isset($Format["R"]) ? $Format["R"] : 0;
438
+        $G		= isset($Format["G"]) ? $Format["G"] : 0;
439
+        $B		= isset($Format["B"]) ? $Format["B"] : 0;
440
+        $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
441
+        $Ticks	= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
442
+        $NoAngle	= isset($Format["NoAngle"]) ? $Format["NoAngle"] : FALSE;
443
+
444
+        if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); }
445
+        if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); }
446
+
447
+        if ( $this->Antialias )
448
+        {
449
+        if ( $NoAngle )
450
+        {
451
+            $this->drawLine($X1+1,$Y1,$X2-1,$Y1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
452
+            $this->drawLine($X2,$Y1+1,$X2,$Y2-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
453
+            $this->drawLine($X2-1,$Y2,$X1+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
454
+            $this->drawLine($X1,$Y1+1,$X1,$Y2-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
455
+        }
456
+        else
457
+        {
458
+            $this->drawLine($X1+1,$Y1,$X2-1,$Y1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
459
+            $this->drawLine($X2,$Y1,$X2,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
460
+            $this->drawLine($X2-1,$Y2,$X1+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
461
+            $this->drawLine($X1,$Y1,$X1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
462
+        }
463
+        }
464
+        else
465
+        {
466
+        $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
467
+        imagerectangle($this->Picture,$X1,$Y1,$X2,$Y2,$Color);
468
+        }
469 469
     }
470 470
 
471
-   /* Draw a filled rectangle */
472
-   function drawFilledRectangle($X1,$Y1,$X2,$Y2,$Format="")
471
+    /* Draw a filled rectangle */
472
+    function drawFilledRectangle($X1,$Y1,$X2,$Y2,$Format="")
473 473
     {
474
-     $R			= isset($Format["R"]) ? $Format["R"] : 0;
475
-     $G			= isset($Format["G"]) ? $Format["G"] : 0;
476
-     $B			= isset($Format["B"]) ? $Format["B"] : 0;
477
-     $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
478
-     $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
479
-     $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
480
-     $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
481
-     $BorderAlpha	= isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha;
482
-     $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
483
-     $Ticks		= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
484
-     $NoAngle		= isset($Format["NoAngle"]) ? $Format["NoAngle"] : NULL;
485
-     $Dash		= isset($Format["Dash"]) ? $Format["Dash"] : FALSE;
486
-     $DashStep		= isset($Format["DashStep"]) ? $Format["DashStep"] : 4;
487
-     $DashR		= isset($Format["DashR"]) ? $Format["DashR"] : 0;
488
-     $DashG		= isset($Format["DashG"]) ? $Format["DashG"] : 0;
489
-     $DashB		= isset($Format["DashB"]) ? $Format["DashB"] : 0;
490
-     $NoBorder		= isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE;
491
-
492
-     if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
493
-
494
-     if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); }
495
-     if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); }
496
-
497
-     $RestoreShadow = $this->Shadow;
498
-     if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
499
-      {
500
-       $this->Shadow = FALSE;
501
-       $this->drawFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks,"NoAngle"=>$NoAngle));
502
-      }
503
-
504
-     $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
505
-     if ( $NoAngle )
506
-      {
507
-       imagefilledrectangle($this->Picture,ceil($X1)+1,ceil($Y1),floor($X2)-1,floor($Y2),$Color);
508
-       imageline($this->Picture,ceil($X1),ceil($Y1)+1,ceil($X1),floor($Y2)-1,$Color);
509
-       imageline($this->Picture,floor($X2),ceil($Y1)+1,floor($X2),floor($Y2)-1,$Color);
510
-      }
511
-     else
512
-      imagefilledrectangle($this->Picture,ceil($X1),ceil($Y1),floor($X2),floor($Y2),$Color);
513
-
514
-     if ( $Dash )
515
-      {
516
-       if ( $BorderR != -1 ) { $iX1=$X1+1; $iY1=$Y1+1; $iX2=$X2-1; $iY2=$Y2-1; } else { $iX1=$X1; $iY1=$Y1; $iX2=$X2; $iY2=$Y2; }
517
-
518
-       $Color = $this->allocateColor($this->Picture,$DashR,$DashG,$DashB,$Alpha);
519
-       $Y=$iY1-$DashStep;
520
-       for($X=$iX1; $X<=$iX2+($iY2-$iY1); $X=$X+$DashStep)
521
-        {
522
-         $Y=$Y+$DashStep;
523
-         if ( $X > $iX2 ) { $Xa = $X-($X-$iX2); $Ya = $iY1+($X-$iX2); } else { $Xa = $X; $Ya = $iY1; }
524
-         if ( $Y > $iY2 ) { $Xb = $iX1+($Y-$iY2); $Yb = $Y-($Y-$iY2); } else { $Xb = $iX1; $Yb = $Y; }
525
-         imageline($this->Picture,$Xa,$Ya,$Xb,$Yb,$Color);
526
-        }
527
-      }
528
-
529
-     if ( $this->Antialias && !$NoBorder )
530
-      {
531
-       if ( $X1 < ceil($X1) )
532
-        {
533
-         $AlphaA = $Alpha * (ceil($X1) - $X1);
534
-         $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
535
-         imageline($this->Picture,ceil($X1)-1,ceil($Y1),ceil($X1)-1,floor($Y2),$Color);
536
-        }
537
-
538
-       if ( $Y1 < ceil($Y1) )
539
-        {
540
-         $AlphaA = $Alpha * (ceil($Y1) - $Y1);
541
-         $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
542
-         imageline($this->Picture,ceil($X1),ceil($Y1)-1,floor($X2),ceil($Y1)-1,$Color);
543
-        }
544
-
545
-       if ( $X2 > floor($X2) )
546
-        {
547
-         $AlphaA = $Alpha * (.5-($X2 - floor($X2)));
548
-         $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
549
-         imageline($this->Picture,floor($X2)+1,ceil($Y1),floor($X2)+1,floor($Y2),$Color);
474
+        $R			= isset($Format["R"]) ? $Format["R"] : 0;
475
+        $G			= isset($Format["G"]) ? $Format["G"] : 0;
476
+        $B			= isset($Format["B"]) ? $Format["B"] : 0;
477
+        $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
478
+        $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
479
+        $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
480
+        $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
481
+        $BorderAlpha	= isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha;
482
+        $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
483
+        $Ticks		= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
484
+        $NoAngle		= isset($Format["NoAngle"]) ? $Format["NoAngle"] : NULL;
485
+        $Dash		= isset($Format["Dash"]) ? $Format["Dash"] : FALSE;
486
+        $DashStep		= isset($Format["DashStep"]) ? $Format["DashStep"] : 4;
487
+        $DashR		= isset($Format["DashR"]) ? $Format["DashR"] : 0;
488
+        $DashG		= isset($Format["DashG"]) ? $Format["DashG"] : 0;
489
+        $DashB		= isset($Format["DashB"]) ? $Format["DashB"] : 0;
490
+        $NoBorder		= isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE;
491
+
492
+        if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
493
+
494
+        if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); }
495
+        if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); }
496
+
497
+        $RestoreShadow = $this->Shadow;
498
+        if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
499
+        {
500
+        $this->Shadow = FALSE;
501
+        $this->drawFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks,"NoAngle"=>$NoAngle));
502
+        }
503
+
504
+        $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
505
+        if ( $NoAngle )
506
+        {
507
+        imagefilledrectangle($this->Picture,ceil($X1)+1,ceil($Y1),floor($X2)-1,floor($Y2),$Color);
508
+        imageline($this->Picture,ceil($X1),ceil($Y1)+1,ceil($X1),floor($Y2)-1,$Color);
509
+        imageline($this->Picture,floor($X2),ceil($Y1)+1,floor($X2),floor($Y2)-1,$Color);
510
+        }
511
+        else
512
+        imagefilledrectangle($this->Picture,ceil($X1),ceil($Y1),floor($X2),floor($Y2),$Color);
513
+
514
+        if ( $Dash )
515
+        {
516
+        if ( $BorderR != -1 ) { $iX1=$X1+1; $iY1=$Y1+1; $iX2=$X2-1; $iY2=$Y2-1; } else { $iX1=$X1; $iY1=$Y1; $iX2=$X2; $iY2=$Y2; }
517
+
518
+        $Color = $this->allocateColor($this->Picture,$DashR,$DashG,$DashB,$Alpha);
519
+        $Y=$iY1-$DashStep;
520
+        for($X=$iX1; $X<=$iX2+($iY2-$iY1); $X=$X+$DashStep)
521
+        {
522
+            $Y=$Y+$DashStep;
523
+            if ( $X > $iX2 ) { $Xa = $X-($X-$iX2); $Ya = $iY1+($X-$iX2); } else { $Xa = $X; $Ya = $iY1; }
524
+            if ( $Y > $iY2 ) { $Xb = $iX1+($Y-$iY2); $Yb = $Y-($Y-$iY2); } else { $Xb = $iX1; $Yb = $Y; }
525
+            imageline($this->Picture,$Xa,$Ya,$Xb,$Yb,$Color);
526
+        }
527
+        }
528
+
529
+        if ( $this->Antialias && !$NoBorder )
530
+        {
531
+        if ( $X1 < ceil($X1) )
532
+        {
533
+            $AlphaA = $Alpha * (ceil($X1) - $X1);
534
+            $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
535
+            imageline($this->Picture,ceil($X1)-1,ceil($Y1),ceil($X1)-1,floor($Y2),$Color);
536
+        }
537
+
538
+        if ( $Y1 < ceil($Y1) )
539
+        {
540
+            $AlphaA = $Alpha * (ceil($Y1) - $Y1);
541
+            $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
542
+            imageline($this->Picture,ceil($X1),ceil($Y1)-1,floor($X2),ceil($Y1)-1,$Color);
543
+        }
544
+
545
+        if ( $X2 > floor($X2) )
546
+        {
547
+            $AlphaA = $Alpha * (.5-($X2 - floor($X2)));
548
+            $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
549
+            imageline($this->Picture,floor($X2)+1,ceil($Y1),floor($X2)+1,floor($Y2),$Color);
550 550
         } 
551 551
 
552
-       if ( $Y2 > floor($Y2) )
552
+        if ( $Y2 > floor($Y2) )
553 553
         {
554
-         $AlphaA = $Alpha * (.5-($Y2 - floor($Y2)));
555
-         $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
556
-         imageline($this->Picture,ceil($X1),floor($Y2)+1,floor($X2),floor($Y2)+1,$Color);
554
+            $AlphaA = $Alpha * (.5-($Y2 - floor($Y2)));
555
+            $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
556
+            imageline($this->Picture,ceil($X1),floor($Y2)+1,floor($X2),floor($Y2)+1,$Color);
557
+        }
557 558
         }
558
-      }
559 559
 
560
-     if ( $BorderR != -1 )
561
-      $this->drawRectangle($X1,$Y1,$X2,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$Ticks,"NoAngle"=>$NoAngle));
560
+        if ( $BorderR != -1 )
561
+        $this->drawRectangle($X1,$Y1,$X2,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$Ticks,"NoAngle"=>$NoAngle));
562 562
 
563
-     $this->Shadow = $RestoreShadow;
563
+        $this->Shadow = $RestoreShadow;
564 564
     }
565 565
 
566
-   /* Draw a rectangular marker of the specified size */
567
-   function drawRectangleMarker($X,$Y,$Format="")
566
+    /* Draw a rectangular marker of the specified size */
567
+    function drawRectangleMarker($X,$Y,$Format="")
568 568
     {
569
-     $Size = isset($Format["Size"]) ? $Format["Size"] : 4;
569
+        $Size = isset($Format["Size"]) ? $Format["Size"] : 4;
570 570
 
571
-     $HalfSize = floor($Size/2);
572
-     $this->drawFilledRectangle($X-$HalfSize,$Y-$HalfSize,$X+$HalfSize,$Y+$HalfSize,$Format);
571
+        $HalfSize = floor($Size/2);
572
+        $this->drawFilledRectangle($X-$HalfSize,$Y-$HalfSize,$X+$HalfSize,$Y+$HalfSize,$Format);
573 573
     }
574 574
 
575
-   /* Drawn a spline based on the bezier function */
576
-   function drawSpline($Coordinates,$Format="")
575
+    /* Drawn a spline based on the bezier function */
576
+    function drawSpline($Coordinates,$Format="")
577 577
     {
578
-     $R		= isset($Format["R"]) ? $Format["R"] : 0;
579
-     $G		= isset($Format["G"]) ? $Format["G"] : 0;
580
-     $B		= isset($Format["B"]) ? $Format["B"] : 0;
581
-     $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
582
-     $Force	= isset($Format["Force"]) ? $Format["Force"] : 30;
583
-     $Forces	= isset($Format["Forces"]) ? $Format["Forces"] : NULL;
584
-     $ShowC	= isset($Format["ShowControl"]) ? $Format["ShowControl"] : FALSE;
585
-     $Ticks	= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
586
-     $PathOnly	= isset($Format["PathOnly"]) ? $Format["PathOnly"] : FALSE;
587
-     $Weight	= isset($Format["Weight"]) ? $Format["Weight"] : NULL;
588
-
589
-     $Cpt = NULL; $Mode = NULL; $Result = "";
590
-     for($i=1;$i<=count($Coordinates)-1;$i++)
591
-      {
592
-       $X1 = $Coordinates[$i-1][0]; $Y1 = $Coordinates[$i-1][1];
593
-       $X2 = $Coordinates[$i][0];   $Y2 = $Coordinates[$i][1];
594
-
595
-       if ( $Forces != NULL ) { $Force = $Forces[$i]; }
596
-
597
-       /* First segment */
598
-       if ( $i == 1 )
578
+        $R		= isset($Format["R"]) ? $Format["R"] : 0;
579
+        $G		= isset($Format["G"]) ? $Format["G"] : 0;
580
+        $B		= isset($Format["B"]) ? $Format["B"] : 0;
581
+        $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
582
+        $Force	= isset($Format["Force"]) ? $Format["Force"] : 30;
583
+        $Forces	= isset($Format["Forces"]) ? $Format["Forces"] : NULL;
584
+        $ShowC	= isset($Format["ShowControl"]) ? $Format["ShowControl"] : FALSE;
585
+        $Ticks	= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
586
+        $PathOnly	= isset($Format["PathOnly"]) ? $Format["PathOnly"] : FALSE;
587
+        $Weight	= isset($Format["Weight"]) ? $Format["Weight"] : NULL;
588
+
589
+        $Cpt = NULL; $Mode = NULL; $Result = "";
590
+        for($i=1;$i<=count($Coordinates)-1;$i++)
591
+        {
592
+        $X1 = $Coordinates[$i-1][0]; $Y1 = $Coordinates[$i-1][1];
593
+        $X2 = $Coordinates[$i][0];   $Y2 = $Coordinates[$i][1];
594
+
595
+        if ( $Forces != NULL ) { $Force = $Forces[$i]; }
596
+
597
+        /* First segment */
598
+        if ( $i == 1 )
599 599
         { $Xv1 = $X1; $Yv1 = $Y1; }
600
-       else
600
+        else
601 601
         {
602
-         $Angle1 = $this->getAngle($XLast,$YLast,$X1,$Y1);
603
-         $Angle2 = $this->getAngle($X1,$Y1,$X2,$Y2);
604
-         $XOff = cos($Angle2 * PI / 180) * $Force + $X1;
605
-         $YOff = sin($Angle2 * PI / 180) * $Force + $Y1;
602
+            $Angle1 = $this->getAngle($XLast,$YLast,$X1,$Y1);
603
+            $Angle2 = $this->getAngle($X1,$Y1,$X2,$Y2);
604
+            $XOff = cos($Angle2 * PI / 180) * $Force + $X1;
605
+            $YOff = sin($Angle2 * PI / 180) * $Force + $Y1;
606 606
 
607
-         $Xv1 = cos($Angle1 * PI / 180) * $Force + $XOff;
608
-         $Yv1 = sin($Angle1 * PI / 180) * $Force + $YOff;
607
+            $Xv1 = cos($Angle1 * PI / 180) * $Force + $XOff;
608
+            $Yv1 = sin($Angle1 * PI / 180) * $Force + $YOff;
609 609
         }
610 610
 
611
-       /* Last segment */
612
-       if ( $i == count($Coordinates)-1 )
611
+        /* Last segment */
612
+        if ( $i == count($Coordinates)-1 )
613 613
         { $Xv2 = $X2; $Yv2 = $Y2; }
614
-       else
614
+        else
615 615
         {
616
-         $Angle1 = $this->getAngle($X2,$Y2,$Coordinates[$i+1][0],$Coordinates[$i+1][1]);
617
-         $Angle2 = $this->getAngle($X1,$Y1,$X2,$Y2);
618
-         $XOff = cos(($Angle2+180) * PI / 180) * $Force + $X2;
619
-         $YOff = sin(($Angle2+180) * PI / 180) * $Force + $Y2;
616
+            $Angle1 = $this->getAngle($X2,$Y2,$Coordinates[$i+1][0],$Coordinates[$i+1][1]);
617
+            $Angle2 = $this->getAngle($X1,$Y1,$X2,$Y2);
618
+            $XOff = cos(($Angle2+180) * PI / 180) * $Force + $X2;
619
+            $YOff = sin(($Angle2+180) * PI / 180) * $Force + $Y2;
620 620
 
621
-         $Xv2 = cos(($Angle1+180) * PI / 180) * $Force + $XOff;
622
-         $Yv2 = sin(($Angle1+180) * PI / 180) * $Force + $YOff;
621
+            $Xv2 = cos(($Angle1+180) * PI / 180) * $Force + $XOff;
622
+            $Yv2 = sin(($Angle1+180) * PI / 180) * $Force + $YOff;
623 623
         }
624 624
 
625
-       $Path = $this->drawBezier($X1,$Y1,$X2,$Y2,$Xv1,$Yv1,$Xv2,$Yv2,$Format);
626
-       if ($PathOnly) { $Result[] = $Path; }
625
+        $Path = $this->drawBezier($X1,$Y1,$X2,$Y2,$Xv1,$Yv1,$Xv2,$Yv2,$Format);
626
+        if ($PathOnly) { $Result[] = $Path; }
627 627
 
628
-       $XLast = $X1; $YLast = $Y1;
629
-      }
628
+        $XLast = $X1; $YLast = $Y1;
629
+        }
630 630
 
631
-     return($Result);
631
+        return($Result);
632 632
     }
633 633
 
634
-   /* Draw a bezier curve with two controls points */
635
-   function drawBezier($X1,$Y1,$X2,$Y2,$Xv1,$Yv1,$Xv2,$Yv2,$Format="")
634
+    /* Draw a bezier curve with two controls points */
635
+    function drawBezier($X1,$Y1,$X2,$Y2,$Xv1,$Yv1,$Xv2,$Yv2,$Format="")
636 636
     {
637
-     $R		= isset($Format["R"]) ? $Format["R"] : 0;
638
-     $G		= isset($Format["G"]) ? $Format["G"] : 0;
639
-     $B		= isset($Format["B"]) ? $Format["B"] : 0;
640
-     $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
641
-     $ShowC	= isset($Format["ShowControl"]) ? $Format["ShowControl"] : FALSE;
642
-     $Segments	= isset($Format["Segments"]) ? $Format["Segments"] : NULL;
643
-     $Ticks	= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
644
-     $NoDraw    = isset($Format["NoDraw"]) ? $Format["NoDraw"] : FALSE;
645
-     $PathOnly  = isset($Format["PathOnly"]) ? $Format["PathOnly"] : FALSE;
646
-     $Weight    = isset($Format["Weight"]) ? $Format["Weight"] : NULL;
647
-     $DrawArrow		= isset($Format["DrawArrow"]) ? $Format["DrawArrow"] : FALSE;
648
-     $ArrowSize		= isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 10;
649
-     $ArrowRatio	= isset($Format["ArrowRatio"]) ? $Format["ArrowRatio"] : .5;
650
-     $ArrowTwoHeads	= isset($Format["ArrowTwoHeads"]) ? $Format["ArrowTwoHeads"] : FALSE;
651
-
652
-     if ( $Segments == NULL )
653
-      {
654
-       $Length    = $this->getLength($X1,$Y1,$X2,$Y2);
655
-       $Precision = ($Length*125)/1000;
656
-      }
657
-     else
658
-      $Precision = $Segments;
637
+        $R		= isset($Format["R"]) ? $Format["R"] : 0;
638
+        $G		= isset($Format["G"]) ? $Format["G"] : 0;
639
+        $B		= isset($Format["B"]) ? $Format["B"] : 0;
640
+        $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
641
+        $ShowC	= isset($Format["ShowControl"]) ? $Format["ShowControl"] : FALSE;
642
+        $Segments	= isset($Format["Segments"]) ? $Format["Segments"] : NULL;
643
+        $Ticks	= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
644
+        $NoDraw    = isset($Format["NoDraw"]) ? $Format["NoDraw"] : FALSE;
645
+        $PathOnly  = isset($Format["PathOnly"]) ? $Format["PathOnly"] : FALSE;
646
+        $Weight    = isset($Format["Weight"]) ? $Format["Weight"] : NULL;
647
+        $DrawArrow		= isset($Format["DrawArrow"]) ? $Format["DrawArrow"] : FALSE;
648
+        $ArrowSize		= isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 10;
649
+        $ArrowRatio	= isset($Format["ArrowRatio"]) ? $Format["ArrowRatio"] : .5;
650
+        $ArrowTwoHeads	= isset($Format["ArrowTwoHeads"]) ? $Format["ArrowTwoHeads"] : FALSE;
651
+
652
+        if ( $Segments == NULL )
653
+        {
654
+        $Length    = $this->getLength($X1,$Y1,$X2,$Y2);
655
+        $Precision = ($Length*125)/1000;
656
+        }
657
+        else
658
+        $Precision = $Segments;
659 659
 
660
-     $P[0]["X"] = $X1;  $P[0]["Y"] = $Y1;
661
-     $P[1]["X"] = $Xv1; $P[1]["Y"] = $Yv1;
662
-     $P[2]["X"] = $Xv2; $P[2]["Y"] = $Yv2;
663
-     $P[3]["X"] = $X2;  $P[3]["Y"] = $Y2;
660
+        $P[0]["X"] = $X1;  $P[0]["Y"] = $Y1;
661
+        $P[1]["X"] = $Xv1; $P[1]["Y"] = $Yv1;
662
+        $P[2]["X"] = $Xv2; $P[2]["Y"] = $Yv2;
663
+        $P[3]["X"] = $X2;  $P[3]["Y"] = $Y2;
664 664
 
665
-     /* Compute the bezier points */
666
-     $Q = ""; $ID = 0; $Path = "";
667
-     for($i=0;$i<=$Precision;$i=$i+1)
668
-      {
669
-       $u = $i / $Precision;
665
+        /* Compute the bezier points */
666
+        $Q = ""; $ID = 0; $Path = "";
667
+        for($i=0;$i<=$Precision;$i=$i+1)
668
+        {
669
+        $u = $i / $Precision;
670 670
 
671
-       $C    = "";
672
-       $C[0] = (1 - $u) * (1 - $u) * (1 - $u);
673
-       $C[1] = ($u * 3) * (1 - $u) * (1 - $u);
674
-       $C[2] = 3 * $u * $u * (1 - $u);
675
-       $C[3] = $u * $u * $u;
671
+        $C    = "";
672
+        $C[0] = (1 - $u) * (1 - $u) * (1 - $u);
673
+        $C[1] = ($u * 3) * (1 - $u) * (1 - $u);
674
+        $C[2] = 3 * $u * $u * (1 - $u);
675
+        $C[3] = $u * $u * $u;
676 676
 
677
-       for($j=0;$j<=3;$j++)
677
+        for($j=0;$j<=3;$j++)
678 678
         {
679
-         if ( !isset($Q[$ID]) ) { $Q[$ID] = ""; }
680
-         if ( !isset($Q[$ID]["X"]) ) { $Q[$ID]["X"] = 0; }
681
-         if ( !isset($Q[$ID]["Y"]) ) { $Q[$ID]["Y"] = 0; }
679
+            if ( !isset($Q[$ID]) ) { $Q[$ID] = ""; }
680
+            if ( !isset($Q[$ID]["X"]) ) { $Q[$ID]["X"] = 0; }
681
+            if ( !isset($Q[$ID]["Y"]) ) { $Q[$ID]["Y"] = 0; }
682 682
 
683
-         $Q[$ID]["X"] = $Q[$ID]["X"] + $P[$j]["X"] * $C[$j];
684
-         $Q[$ID]["Y"] = $Q[$ID]["Y"] + $P[$j]["Y"] * $C[$j];
683
+            $Q[$ID]["X"] = $Q[$ID]["X"] + $P[$j]["X"] * $C[$j];
684
+            $Q[$ID]["Y"] = $Q[$ID]["Y"] + $P[$j]["Y"] * $C[$j];
685 685
         }
686
-       $ID++;
687
-      }        
688
-     $Q[$ID]["X"] = $X2; $Q[$ID]["Y"] = $Y2;
686
+        $ID++;
687
+        }        
688
+        $Q[$ID]["X"] = $X2; $Q[$ID]["Y"] = $Y2;
689 689
 
690
-     if ( !$NoDraw )
691
-      {
692
-       /* Display the control points */
693
-       if ( $ShowC && !$PathOnly )
690
+        if ( !$NoDraw )
691
+        {
692
+        /* Display the control points */
693
+        if ( $ShowC && !$PathOnly )
694 694
         {
695
-         $Xv1 = floor($Xv1); $Yv1 = floor($Yv1); $Xv2 = floor($Xv2); $Yv2 = floor($Yv2);
695
+            $Xv1 = floor($Xv1); $Yv1 = floor($Yv1); $Xv2 = floor($Xv2); $Yv2 = floor($Yv2);
696 696
 
697
-         $this->drawLine($X1,$Y1,$X2,$Y2,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>30));
697
+            $this->drawLine($X1,$Y1,$X2,$Y2,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>30));
698 698
 
699
-         $MyMarkerSettings = array("R"=>255,"G"=>0,"B"=>0,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4);
700
-         $this->drawRectangleMarker($Xv1,$Yv1,$MyMarkerSettings);
701
-         $this->drawText($Xv1+4,$Yv1,"v1");
702
-         $MyMarkerSettings = array("R"=>0,"G"=>0,"B"=>255,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4);
703
-         $this->drawRectangleMarker($Xv2,$Yv2,$MyMarkerSettings);
704
-         $this->drawText($Xv2+4,$Yv2,"v2");
699
+            $MyMarkerSettings = array("R"=>255,"G"=>0,"B"=>0,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4);
700
+            $this->drawRectangleMarker($Xv1,$Yv1,$MyMarkerSettings);
701
+            $this->drawText($Xv1+4,$Yv1,"v1");
702
+            $MyMarkerSettings = array("R"=>0,"G"=>0,"B"=>255,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4);
703
+            $this->drawRectangleMarker($Xv2,$Yv2,$MyMarkerSettings);
704
+            $this->drawText($Xv2+4,$Yv2,"v2");
705 705
         }
706 706
 
707
-       /* Draw the bezier */
708
-       $LastX = NULL; $LastY = NULL; $Cpt = NULL; $Mode = NULL; $ArrowS = NULL;
709
-       foreach ($Q as $Key => $Point)
707
+        /* Draw the bezier */
708
+        $LastX = NULL; $LastY = NULL; $Cpt = NULL; $Mode = NULL; $ArrowS = NULL;
709
+        foreach ($Q as $Key => $Point)
710 710
         {
711
-         $X = $Point["X"]; $Y = $Point["Y"];
711
+            $X = $Point["X"]; $Y = $Point["Y"];
712 712
 
713
-         /* Get the first segment */
714
-         if ( $ArrowS == NULL && $LastX != NULL && $LastY != NULL )
715
-          { $ArrowS["X2"] = $LastX; $ArrowS["Y2"] = $LastY; $ArrowS["X1"] = $X; $ArrowS["Y1"] = $Y; }
713
+            /* Get the first segment */
714
+            if ( $ArrowS == NULL && $LastX != NULL && $LastY != NULL )
715
+            { $ArrowS["X2"] = $LastX; $ArrowS["Y2"] = $LastY; $ArrowS["X1"] = $X; $ArrowS["Y1"] = $Y; }
716 716
 
717
-         if ( $LastX != NULL && $LastY != NULL && !$PathOnly)
718
-          list($Cpt,$Mode) = $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Cpt"=>$Cpt,"Mode"=>$Mode,"Weight"=>$Weight));
717
+            if ( $LastX != NULL && $LastY != NULL && !$PathOnly)
718
+            list($Cpt,$Mode) = $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Cpt"=>$Cpt,"Mode"=>$Mode,"Weight"=>$Weight));
719 719
 
720
-         /* Get the last segment */
721
-         $ArrowE["X1"] = $LastX; $ArrowE["Y1"] = $LastY; $ArrowE["X2"] = $X; $ArrowE["Y2"] = $Y;
720
+            /* Get the last segment */
721
+            $ArrowE["X1"] = $LastX; $ArrowE["Y1"] = $LastY; $ArrowE["X2"] = $X; $ArrowE["Y2"] = $Y;
722 722
 
723
-         $LastX = $X; $LastY = $Y;
723
+            $LastX = $X; $LastY = $Y;
724 724
         }
725 725
 
726
-       if ( $DrawArrow && !$PathOnly )
726
+        if ( $DrawArrow && !$PathOnly )
727 727
         {
728
-         $ArrowSettings = array("FillR"=>$R,"FillG"=>$G,"FillB"=>$B,"Alpha"=>$Alpha,"Size"=>$ArrowSize,"Ratio"=>$ArrowRatio);
729
-         if ( $ArrowTwoHeads )
730
-          $this->drawArrow($ArrowS["X1"],$ArrowS["Y1"],$ArrowS["X2"],$ArrowS["Y2"],$ArrowSettings);
728
+            $ArrowSettings = array("FillR"=>$R,"FillG"=>$G,"FillB"=>$B,"Alpha"=>$Alpha,"Size"=>$ArrowSize,"Ratio"=>$ArrowRatio);
729
+            if ( $ArrowTwoHeads )
730
+            $this->drawArrow($ArrowS["X1"],$ArrowS["Y1"],$ArrowS["X2"],$ArrowS["Y2"],$ArrowSettings);
731 731
 
732
-         $this->drawArrow($ArrowE["X1"],$ArrowE["Y1"],$ArrowE["X2"],$ArrowE["Y2"],$ArrowSettings);
732
+            $this->drawArrow($ArrowE["X1"],$ArrowE["Y1"],$ArrowE["X2"],$ArrowE["Y2"],$ArrowSettings);
733 733
         }
734
-      }
735
-     return($Q);
734
+        }
735
+        return($Q);
736 736
     }
737 737
 
738
-   /* Draw a line between two points */
739
-   function drawLine($X1,$Y1,$X2,$Y2,$Format="")
738
+    /* Draw a line between two points */
739
+    function drawLine($X1,$Y1,$X2,$Y2,$Format="")
740 740
     {
741
-     $R		= isset($Format["R"]) ? $Format["R"] : 0;
742
-     $G		= isset($Format["G"]) ? $Format["G"] : 0;
743
-     $B		= isset($Format["B"]) ? $Format["B"] : 0;
744
-     $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
745
-     $Ticks	= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
746
-     $Cpt	= isset($Format["Cpt"]) ? $Format["Cpt"] : 1;
747
-     $Mode	= isset($Format["Mode"]) ? $Format["Mode"] : 1;
748
-     $Weight	= isset($Format["Weight"]) ? $Format["Weight"] : NULL;
749
-     $Threshold	= isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
750
-
751
-     if ( $this->Antialias == FALSE && $Ticks == NULL )
752
-      {
753
-       if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
741
+        $R		= isset($Format["R"]) ? $Format["R"] : 0;
742
+        $G		= isset($Format["G"]) ? $Format["G"] : 0;
743
+        $B		= isset($Format["B"]) ? $Format["B"] : 0;
744
+        $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
745
+        $Ticks	= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
746
+        $Cpt	= isset($Format["Cpt"]) ? $Format["Cpt"] : 1;
747
+        $Mode	= isset($Format["Mode"]) ? $Format["Mode"] : 1;
748
+        $Weight	= isset($Format["Weight"]) ? $Format["Weight"] : NULL;
749
+        $Threshold	= isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
750
+
751
+        if ( $this->Antialias == FALSE && $Ticks == NULL )
754 752
         {
755
-         $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa);
756
-         imageline($this->Picture,$X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$ShadowColor);
753
+        if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
754
+        {
755
+            $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa);
756
+            imageline($this->Picture,$X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$ShadowColor);
757 757
         }
758 758
 
759
-       $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
760
-       imageline($this->Picture,$X1,$Y1,$X2,$Y2,$Color);
761
-       return(0);
762
-      }
759
+        $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
760
+        imageline($this->Picture,$X1,$Y1,$X2,$Y2,$Color);
761
+        return(0);
762
+        }
763 763
 
764
-     $Distance = sqrt(($X2-$X1)*($X2-$X1)+($Y2-$Y1)*($Y2-$Y1));  
765
-     if ( $Distance == 0 ) { return(-1); }
764
+        $Distance = sqrt(($X2-$X1)*($X2-$X1)+($Y2-$Y1)*($Y2-$Y1));  
765
+        if ( $Distance == 0 ) { return(-1); }
766 766
 
767
-     /* Derivative algorithm for overweighted lines, re-route to polygons primitives */
768
-     if ( $Weight != NULL )
769
-      {
770
-       $Angle        = $this->getAngle($X1,$Y1,$X2,$Y2);
771
-       $PolySettings = array ("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderAlpha"=>$Alpha);
767
+        /* Derivative algorithm for overweighted lines, re-route to polygons primitives */
768
+        if ( $Weight != NULL )
769
+        {
770
+        $Angle        = $this->getAngle($X1,$Y1,$X2,$Y2);
771
+        $PolySettings = array ("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderAlpha"=>$Alpha);
772 772
 
773
-       if ( $Ticks == NULL )
773
+        if ( $Ticks == NULL )
774 774
         {
775
-         $Points   = ""; 
776
-         $Points[] = cos(deg2rad($Angle-90)) * $Weight + $X1; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Y1;
777
-         $Points[] = cos(deg2rad($Angle+90)) * $Weight + $X1; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Y1;
778
-         $Points[] = cos(deg2rad($Angle+90)) * $Weight + $X2; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Y2;
779
-         $Points[] = cos(deg2rad($Angle-90)) * $Weight + $X2; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Y2;
775
+            $Points   = ""; 
776
+            $Points[] = cos(deg2rad($Angle-90)) * $Weight + $X1; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Y1;
777
+            $Points[] = cos(deg2rad($Angle+90)) * $Weight + $X1; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Y1;
778
+            $Points[] = cos(deg2rad($Angle+90)) * $Weight + $X2; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Y2;
779
+            $Points[] = cos(deg2rad($Angle-90)) * $Weight + $X2; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Y2;
780 780
 
781
-         $this->drawPolygon($Points,$PolySettings);
781
+            $this->drawPolygon($Points,$PolySettings);
782 782
         }
783
-       else
783
+        else
784 784
         {
785
-         for($i=0;$i<=$Distance;$i=$i+$Ticks*2)
786
-          {
787
-           $Xa = (($X2-$X1)/$Distance) * $i + $X1; $Ya = (($Y2-$Y1)/$Distance) * $i + $Y1;
788
-           $Xb = (($X2-$X1)/$Distance) * ($i+$Ticks) + $X1; $Yb = (($Y2-$Y1)/$Distance) * ($i+$Ticks) + $Y1;
785
+            for($i=0;$i<=$Distance;$i=$i+$Ticks*2)
786
+            {
787
+            $Xa = (($X2-$X1)/$Distance) * $i + $X1; $Ya = (($Y2-$Y1)/$Distance) * $i + $Y1;
788
+            $Xb = (($X2-$X1)/$Distance) * ($i+$Ticks) + $X1; $Yb = (($Y2-$Y1)/$Distance) * ($i+$Ticks) + $Y1;
789 789
 
790
-           $Points   = ""; 
791
-           $Points[] = cos(deg2rad($Angle-90)) * $Weight + $Xa; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Ya;
792
-           $Points[] = cos(deg2rad($Angle+90)) * $Weight + $Xa; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Ya;
793
-           $Points[] = cos(deg2rad($Angle+90)) * $Weight + $Xb; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Yb;
794
-           $Points[] = cos(deg2rad($Angle-90)) * $Weight + $Xb; $Points[] = sin(deg2rad($Angle-90)) * $Weight 	+ $Yb;
790
+            $Points   = ""; 
791
+            $Points[] = cos(deg2rad($Angle-90)) * $Weight + $Xa; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Ya;
792
+            $Points[] = cos(deg2rad($Angle+90)) * $Weight + $Xa; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Ya;
793
+            $Points[] = cos(deg2rad($Angle+90)) * $Weight + $Xb; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Yb;
794
+            $Points[] = cos(deg2rad($Angle-90)) * $Weight + $Xb; $Points[] = sin(deg2rad($Angle-90)) * $Weight 	+ $Yb;
795 795
 
796
-           $this->drawPolygon($Points,$PolySettings);
797
-          }
796
+            $this->drawPolygon($Points,$PolySettings);
797
+            }
798 798
         }
799 799
 
800
-       return(1);
801
-      }
800
+        return(1);
801
+        }
802 802
 
803
-     $XStep = ($X2-$X1) / $Distance;
804
-     $YStep = ($Y2-$Y1) / $Distance;
803
+        $XStep = ($X2-$X1) / $Distance;
804
+        $YStep = ($Y2-$Y1) / $Distance;
805 805
 
806
-     for($i=0;$i<=$Distance;$i++)
807
-      {
808
-       $X = $i * $XStep + $X1;
809
-       $Y = $i * $YStep + $Y1;
806
+        for($i=0;$i<=$Distance;$i++)
807
+        {
808
+        $X = $i * $XStep + $X1;
809
+        $Y = $i * $YStep + $Y1;
810 810
 
811
-       $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
811
+        $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
812 812
 
813
-       if ( $Threshold != NULL )
813
+        if ( $Threshold != NULL )
814 814
         {
815
-         foreach($Threshold as $Key => $Parameters)
816
-          {
817
-           if ( $Y <= $Parameters["MinX"] && $Y >= $Parameters["MaxX"])
815
+            foreach($Threshold as $Key => $Parameters)
816
+            {
817
+            if ( $Y <= $Parameters["MinX"] && $Y >= $Parameters["MaxX"])
818 818
             {
819
-             if ( isset($Parameters["R"]) ) { $RT = $Parameters["R"]; } else { $RT = 0; }
820
-             if ( isset($Parameters["G"]) ) { $GT = $Parameters["G"]; } else { $GT = 0; }
821
-             if ( isset($Parameters["B"]) ) { $BT = $Parameters["B"]; } else { $BT = 0; }
822
-             if ( isset($Parameters["Alpha"]) ) { $AlphaT = $Parameters["Alpha"]; } else { $AlphaT = 0; }
823
-             $Color = array("R"=>$RT,"G"=>$GT,"B"=>$BT,"Alpha"=>$AlphaT);
819
+                if ( isset($Parameters["R"]) ) { $RT = $Parameters["R"]; } else { $RT = 0; }
820
+                if ( isset($Parameters["G"]) ) { $GT = $Parameters["G"]; } else { $GT = 0; }
821
+                if ( isset($Parameters["B"]) ) { $BT = $Parameters["B"]; } else { $BT = 0; }
822
+                if ( isset($Parameters["Alpha"]) ) { $AlphaT = $Parameters["Alpha"]; } else { $AlphaT = 0; }
823
+                $Color = array("R"=>$RT,"G"=>$GT,"B"=>$BT,"Alpha"=>$AlphaT);
824
+            }
824 825
             }
825
-          }
826 826
         }
827 827
 
828
-       if ( $Ticks != NULL )
828
+        if ( $Ticks != NULL )
829 829
         {
830
-         if ( $Cpt % $Ticks == 0 )
831
-          { $Cpt = 0; if ( $Mode == 1 ) { $Mode = 0; } else { $Mode = 1; } }
830
+            if ( $Cpt % $Ticks == 0 )
831
+            { $Cpt = 0; if ( $Mode == 1 ) { $Mode = 0; } else { $Mode = 1; } }
832 832
 
833
-         if ( $Mode == 1 )
834
-          $this->drawAntialiasPixel($X,$Y,$Color);
833
+            if ( $Mode == 1 )
834
+            $this->drawAntialiasPixel($X,$Y,$Color);
835 835
 
836
-         $Cpt++;
836
+            $Cpt++;
837 837
         }
838
-       else
838
+        else
839 839
         $this->drawAntialiasPixel($X,$Y,$Color);
840
-      }
840
+        }
841 841
 
842
-     return(array($Cpt,$Mode));
842
+        return(array($Cpt,$Mode));
843 843
     }
844 844
 
845
-   /* Draw a circle */
846
-   function drawCircle($Xc,$Yc,$Height,$Width,$Format="")
845
+    /* Draw a circle */
846
+    function drawCircle($Xc,$Yc,$Height,$Width,$Format="")
847 847
     {
848
-     $R	    = isset($Format["R"]) ? $Format["R"] : 0;
849
-     $G	    = isset($Format["G"]) ? $Format["G"] : 0;
850
-     $B	    = isset($Format["B"]) ? $Format["B"] : 0;
851
-     $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
852
-     $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
848
+        $R	    = isset($Format["R"]) ? $Format["R"] : 0;
849
+        $G	    = isset($Format["G"]) ? $Format["G"] : 0;
850
+        $B	    = isset($Format["B"]) ? $Format["B"] : 0;
851
+        $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
852
+        $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
853 853
 
854
-     $Height	= abs($Height);
855
-     $Width	= abs($Width);
854
+        $Height	= abs($Height);
855
+        $Width	= abs($Width);
856 856
 
857
-     if ( $Height == 0 ) { $Height = 1; }
858
-     if ( $Width == 0 )  { $Width = 1; }
859
-     $Xc = floor($Xc); $Yc = floor($Yc);
857
+        if ( $Height == 0 ) { $Height = 1; }
858
+        if ( $Width == 0 )  { $Width = 1; }
859
+        $Xc = floor($Xc); $Yc = floor($Yc);
860 860
 
861
-     $RestoreShadow = $this->Shadow;
862
-     if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
863
-      {
864
-       $this->Shadow = FALSE;
865
-       $this->drawCircle($Xc+$this->ShadowX,$Yc+$this->ShadowY,$Height,$Width,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks));
866
-      }
861
+        $RestoreShadow = $this->Shadow;
862
+        if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
863
+        {
864
+        $this->Shadow = FALSE;
865
+        $this->drawCircle($Xc+$this->ShadowX,$Yc+$this->ShadowY,$Height,$Width,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks));
866
+        }
867 867
 
868
-     if ( $Width == 0 ) { $Width = $Height; }
869
-     if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
870
-     if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
871
-     if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
868
+        if ( $Width == 0 ) { $Width = $Height; }
869
+        if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
870
+        if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
871
+        if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
872 872
 
873
-     $Step = 360 / (2 * PI * max($Width,$Height));
874
-     $Mode = 1; $Cpt = 1;
875
-     for($i=0;$i<=360;$i=$i+$Step)
876
-      {
877
-       $X = cos($i*PI/180) * $Height + $Xc;
878
-       $Y = sin($i*PI/180) * $Width + $Yc;
873
+        $Step = 360 / (2 * PI * max($Width,$Height));
874
+        $Mode = 1; $Cpt = 1;
875
+        for($i=0;$i<=360;$i=$i+$Step)
876
+        {
877
+        $X = cos($i*PI/180) * $Height + $Xc;
878
+        $Y = sin($i*PI/180) * $Width + $Yc;
879 879
 
880
-       if ( $Ticks != NULL )
880
+        if ( $Ticks != NULL )
881 881
         {
882
-         if ( $Cpt % $Ticks == 0 )
883
-          { $Cpt = 0; if ( $Mode == 1 ) { $Mode = 0; } else { $Mode = 1; } }
882
+            if ( $Cpt % $Ticks == 0 )
883
+            { $Cpt = 0; if ( $Mode == 1 ) { $Mode = 0; } else { $Mode = 1; } }
884 884
 
885
-         if ( $Mode == 1 )
886
-          $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
885
+            if ( $Mode == 1 )
886
+            $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
887 887
 
888
-         $Cpt++;
888
+            $Cpt++;
889 889
         }
890
-       else
890
+        else
891 891
         $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
892 892
 
893
-      }
894
-     $this->Shadow = $RestoreShadow;
893
+        }
894
+        $this->Shadow = $RestoreShadow;
895 895
     }
896 896
 
897
-   /* Draw a filled circle */
898
-   function drawFilledCircle($X,$Y,$Radius,$Format="")
897
+    /* Draw a filled circle */
898
+    function drawFilledCircle($X,$Y,$Radius,$Format="")
899 899
     {
900
-     $R			= isset($Format["R"]) ? $Format["R"] : 0;
901
-     $G			= isset($Format["G"]) ? $Format["G"] : 0;
902
-     $B			= isset($Format["B"]) ? $Format["B"] : 0;
903
-     $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
904
-     $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
905
-     $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
906
-     $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
907
-     $BorderAlpha	= isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha;
908
-     $Ticks     	= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
909
-     $Surrounding 	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
910
-
911
-     if ( $Radius == 0 ) { $Radius = 1; }
912
-     if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
913
-     $X = floor($X); $Y = floor($Y);
914
-
915
-     $Radius = abs($Radius);
916
-
917
-     $RestoreShadow = $this->Shadow;
918
-     if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
919
-      {
920
-       $this->Shadow = FALSE;
921
-       $this->drawFilledCircle($X+$this->ShadowX,$Y+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks));
922
-      }
923
-
924
-     $this->Mask  = "";
925
-     $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
926
-     for ($i=0; $i<=$Radius*2; $i++)
927
-      {
928
-       $Slice  = sqrt($Radius * $Radius - ($Radius - $i) * ($Radius - $i));
929
-       $XPos   = floor($Slice);
930
-       $YPos   = $Y + $i - $Radius;
931
-       $AAlias = $Slice - floor($Slice);
932
-
933
-       $this->Mask[$X-$XPos][$YPos] = TRUE;
934
-       $this->Mask[$X+$XPos][$YPos] = TRUE;
935
-       imageline($this->Picture,$X-$XPos,$YPos,$X+$XPos,$YPos,$Color);
936
-      }
937
-     if ( $this->Antialias )
938
-      $this->drawCircle($X,$Y,$Radius,$Radius,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
939
-
940
-     $this->Mask = "";
941
-
942
-     if ( $BorderR != -1 )
943
-      $this->drawCircle($X,$Y,$Radius,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$Ticks));
944
-
945
-     $this->Shadow	= $RestoreShadow;
900
+        $R			= isset($Format["R"]) ? $Format["R"] : 0;
901
+        $G			= isset($Format["G"]) ? $Format["G"] : 0;
902
+        $B			= isset($Format["B"]) ? $Format["B"] : 0;
903
+        $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
904
+        $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
905
+        $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
906
+        $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
907
+        $BorderAlpha	= isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha;
908
+        $Ticks     	= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
909
+        $Surrounding 	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
910
+
911
+        if ( $Radius == 0 ) { $Radius = 1; }
912
+        if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
913
+        $X = floor($X); $Y = floor($Y);
914
+
915
+        $Radius = abs($Radius);
916
+
917
+        $RestoreShadow = $this->Shadow;
918
+        if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
919
+        {
920
+        $this->Shadow = FALSE;
921
+        $this->drawFilledCircle($X+$this->ShadowX,$Y+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks));
922
+        }
923
+
924
+        $this->Mask  = "";
925
+        $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
926
+        for ($i=0; $i<=$Radius*2; $i++)
927
+        {
928
+        $Slice  = sqrt($Radius * $Radius - ($Radius - $i) * ($Radius - $i));
929
+        $XPos   = floor($Slice);
930
+        $YPos   = $Y + $i - $Radius;
931
+        $AAlias = $Slice - floor($Slice);
932
+
933
+        $this->Mask[$X-$XPos][$YPos] = TRUE;
934
+        $this->Mask[$X+$XPos][$YPos] = TRUE;
935
+        imageline($this->Picture,$X-$XPos,$YPos,$X+$XPos,$YPos,$Color);
936
+        }
937
+        if ( $this->Antialias )
938
+        $this->drawCircle($X,$Y,$Radius,$Radius,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
939
+
940
+        $this->Mask = "";
941
+
942
+        if ( $BorderR != -1 )
943
+        $this->drawCircle($X,$Y,$Radius,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$Ticks));
944
+
945
+        $this->Shadow	= $RestoreShadow;
946 946
     }
947 947
 
948
-   /* Write text */
949
-   function drawText($X,$Y,$Text,$Format="")
948
+    /* Write text */
949
+    function drawText($X,$Y,$Text,$Format="")
950 950
     {
951
-     $R			= isset($Format["R"]) ? $Format["R"] : $this->FontColorR;
952
-     $G			= isset($Format["G"]) ? $Format["G"] : $this->FontColorG;
953
-     $B			= isset($Format["B"]) ? $Format["B"] : $this->FontColorB;
954
-     $Angle		= isset($Format["Angle"]) ? $Format["Angle"] : 0;
955
-     $Align		= isset($Format["Align"]) ? $Format["Align"] : TEXT_ALIGN_BOTTOMLEFT;
956
-     $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : $this->FontColorA;
957
-     $FontName		= isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
958
-     $FontSize		= isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
959
-     $ShowOrigine	= isset($Format["ShowOrigine"]) ? $Format["ShowOrigine"] : FALSE;
960
-     $TOffset		= isset($Format["TOffset"]) ? $Format["TOffset"] : 2;
961
-     $DrawBox		= isset($Format["DrawBox"]) ? $Format["DrawBox"] : FALSE;
962
-     $DrawBoxBorder	= isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : TRUE;
963
-     $BorderOffset	= isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 6;
964
-     $BoxRounded	= isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : FALSE;
965
-     $RoundedRadius	= isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 6;
966
-     $BoxR		= isset($Format["BoxR"]) ? $Format["BoxR"] : 255;
967
-     $BoxG		= isset($Format["BoxG"]) ? $Format["BoxG"] : 255;
968
-     $BoxB		= isset($Format["BoxB"]) ? $Format["BoxB"] : 255;
969
-     $BoxAlpha		= isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 50;
970
-     $BoxSurrounding	= isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
971
-     $BoxBorderR	= isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
972
-     $BoxBorderG	= isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
973
-     $BoxBorderB	= isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
974
-     $BoxBorderAlpha	= isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 50;
975
-     $NoShadow		= isset($Format["NoShadow"]) ? $Format["NoShadow"] : FALSE;
976
-
977
-     $Shadow = $this->Shadow;
978
-     if ( $NoShadow ) { $this->Shadow = FALSE; }
979
-
980
-     if ( $BoxSurrounding != "" ) { $BoxBorderR = $BoxR - $BoxSurrounding; $BoxBorderG = $BoxG - $BoxSurrounding; $BoxBorderB = $BoxB - $BoxSurrounding; $BoxBorderAlpha = $BoxAlpha; }
981
-
982
-     if ( $ShowOrigine )
983
-      {
984
-       $MyMarkerSettings = array("R"=>255,"G"=>0,"B"=>0,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4);
985
-       $this->drawRectangleMarker($X,$Y,$MyMarkerSettings);
986
-      }
987
-
988
-     $TxtPos = $this->getTextBox($X,$Y,$FontName,$FontSize,$Angle,$Text);
989
-
990
-     if ( $DrawBox && ($Angle == 0 || $Angle == 90 || $Angle == 180 || $Angle == 270))
991
-      {
992
-       $T[0]["X"]=0;$T[0]["Y"]=0;$T[1]["X"]=0;$T[1]["Y"]=0;$T[2]["X"]=0;$T[2]["Y"]=0;$T[3]["X"]=0;$T[3]["Y"]=0;
993
-       if ( $Angle == 0 ) { $T[0]["X"]=-$TOffset;$T[0]["Y"]=$TOffset;$T[1]["X"]=$TOffset;$T[1]["Y"]=$TOffset;$T[2]["X"]=$TOffset;$T[2]["Y"]=-$TOffset;$T[3]["X"]=-$TOffset;$T[3]["Y"]=-$TOffset; }
994
-
995
-       $X1 = min($TxtPos[0]["X"],$TxtPos[1]["X"],$TxtPos[2]["X"],$TxtPos[3]["X"]) - $BorderOffset + 3;
996
-       $Y1 = min($TxtPos[0]["Y"],$TxtPos[1]["Y"],$TxtPos[2]["Y"],$TxtPos[3]["Y"]) - $BorderOffset;
997
-       $X2 = max($TxtPos[0]["X"],$TxtPos[1]["X"],$TxtPos[2]["X"],$TxtPos[3]["X"]) + $BorderOffset + 3;
998
-       $Y2 = max($TxtPos[0]["Y"],$TxtPos[1]["Y"],$TxtPos[2]["Y"],$TxtPos[3]["Y"]) + $BorderOffset - 3;
999
-
1000
-       $X1 = $X1 - $TxtPos[$Align]["X"] + $X + $T[0]["X"];
1001
-       $Y1 = $Y1 - $TxtPos[$Align]["Y"] + $Y + $T[0]["Y"];
1002
-       $X2 = $X2 - $TxtPos[$Align]["X"] + $X + $T[0]["X"];
1003
-       $Y2 = $Y2 - $TxtPos[$Align]["Y"] + $Y + $T[0]["Y"];
1004
-
1005
-       $Settings = array("R"=>$BoxR,"G"=>$BoxG,"B"=>$BoxB,"Alpha"=>$BoxAlpha,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"BorderAlpha"=>$BoxBorderAlpha);
1006
-
1007
-       if ( $BoxRounded )
951
+        $R			= isset($Format["R"]) ? $Format["R"] : $this->FontColorR;
952
+        $G			= isset($Format["G"]) ? $Format["G"] : $this->FontColorG;
953
+        $B			= isset($Format["B"]) ? $Format["B"] : $this->FontColorB;
954
+        $Angle		= isset($Format["Angle"]) ? $Format["Angle"] : 0;
955
+        $Align		= isset($Format["Align"]) ? $Format["Align"] : TEXT_ALIGN_BOTTOMLEFT;
956
+        $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : $this->FontColorA;
957
+        $FontName		= isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
958
+        $FontSize		= isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
959
+        $ShowOrigine	= isset($Format["ShowOrigine"]) ? $Format["ShowOrigine"] : FALSE;
960
+        $TOffset		= isset($Format["TOffset"]) ? $Format["TOffset"] : 2;
961
+        $DrawBox		= isset($Format["DrawBox"]) ? $Format["DrawBox"] : FALSE;
962
+        $DrawBoxBorder	= isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : TRUE;
963
+        $BorderOffset	= isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 6;
964
+        $BoxRounded	= isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : FALSE;
965
+        $RoundedRadius	= isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 6;
966
+        $BoxR		= isset($Format["BoxR"]) ? $Format["BoxR"] : 255;
967
+        $BoxG		= isset($Format["BoxG"]) ? $Format["BoxG"] : 255;
968
+        $BoxB		= isset($Format["BoxB"]) ? $Format["BoxB"] : 255;
969
+        $BoxAlpha		= isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 50;
970
+        $BoxSurrounding	= isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
971
+        $BoxBorderR	= isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
972
+        $BoxBorderG	= isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
973
+        $BoxBorderB	= isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
974
+        $BoxBorderAlpha	= isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 50;
975
+        $NoShadow		= isset($Format["NoShadow"]) ? $Format["NoShadow"] : FALSE;
976
+
977
+        $Shadow = $this->Shadow;
978
+        if ( $NoShadow ) { $this->Shadow = FALSE; }
979
+
980
+        if ( $BoxSurrounding != "" ) { $BoxBorderR = $BoxR - $BoxSurrounding; $BoxBorderG = $BoxG - $BoxSurrounding; $BoxBorderB = $BoxB - $BoxSurrounding; $BoxBorderAlpha = $BoxAlpha; }
981
+
982
+        if ( $ShowOrigine )
983
+        {
984
+        $MyMarkerSettings = array("R"=>255,"G"=>0,"B"=>0,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4);
985
+        $this->drawRectangleMarker($X,$Y,$MyMarkerSettings);
986
+        }
987
+
988
+        $TxtPos = $this->getTextBox($X,$Y,$FontName,$FontSize,$Angle,$Text);
989
+
990
+        if ( $DrawBox && ($Angle == 0 || $Angle == 90 || $Angle == 180 || $Angle == 270))
991
+        {
992
+        $T[0]["X"]=0;$T[0]["Y"]=0;$T[1]["X"]=0;$T[1]["Y"]=0;$T[2]["X"]=0;$T[2]["Y"]=0;$T[3]["X"]=0;$T[3]["Y"]=0;
993
+        if ( $Angle == 0 ) { $T[0]["X"]=-$TOffset;$T[0]["Y"]=$TOffset;$T[1]["X"]=$TOffset;$T[1]["Y"]=$TOffset;$T[2]["X"]=$TOffset;$T[2]["Y"]=-$TOffset;$T[3]["X"]=-$TOffset;$T[3]["Y"]=-$TOffset; }
994
+
995
+        $X1 = min($TxtPos[0]["X"],$TxtPos[1]["X"],$TxtPos[2]["X"],$TxtPos[3]["X"]) - $BorderOffset + 3;
996
+        $Y1 = min($TxtPos[0]["Y"],$TxtPos[1]["Y"],$TxtPos[2]["Y"],$TxtPos[3]["Y"]) - $BorderOffset;
997
+        $X2 = max($TxtPos[0]["X"],$TxtPos[1]["X"],$TxtPos[2]["X"],$TxtPos[3]["X"]) + $BorderOffset + 3;
998
+        $Y2 = max($TxtPos[0]["Y"],$TxtPos[1]["Y"],$TxtPos[2]["Y"],$TxtPos[3]["Y"]) + $BorderOffset - 3;
999
+
1000
+        $X1 = $X1 - $TxtPos[$Align]["X"] + $X + $T[0]["X"];
1001
+        $Y1 = $Y1 - $TxtPos[$Align]["Y"] + $Y + $T[0]["Y"];
1002
+        $X2 = $X2 - $TxtPos[$Align]["X"] + $X + $T[0]["X"];
1003
+        $Y2 = $Y2 - $TxtPos[$Align]["Y"] + $Y + $T[0]["Y"];
1004
+
1005
+        $Settings = array("R"=>$BoxR,"G"=>$BoxG,"B"=>$BoxB,"Alpha"=>$BoxAlpha,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"BorderAlpha"=>$BoxBorderAlpha);
1006
+
1007
+        if ( $BoxRounded )
1008 1008
         { $this->drawRoundedFilledRectangle($X1,$Y1,$X2,$Y2,$RoundedRadius,$Settings); }
1009
-       else
1009
+        else
1010 1010
         { $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Settings); }
1011
-      }
1011
+        }
1012 1012
 
1013
-     $X = $X - $TxtPos[$Align]["X"] + $X;
1014
-     $Y = $Y - $TxtPos[$Align]["Y"] + $Y;
1013
+        $X = $X - $TxtPos[$Align]["X"] + $X;
1014
+        $Y = $Y - $TxtPos[$Align]["Y"] + $Y;
1015 1015
 
1016
-     if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
1017
-      {
1018
-       $C_ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa);
1019
-       imagettftext($this->Picture,$FontSize,$Angle,$X+$this->ShadowX,$Y+$this->ShadowY,$C_ShadowColor,$FontName,$Text);
1020
-      }
1016
+        if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
1017
+        {
1018
+        $C_ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa);
1019
+        imagettftext($this->Picture,$FontSize,$Angle,$X+$this->ShadowX,$Y+$this->ShadowY,$C_ShadowColor,$FontName,$Text);
1020
+        }
1021 1021
 
1022
-     $C_TextColor = $this->AllocateColor($this->Picture,$R,$G,$B,$Alpha);
1023
-     imagettftext($this->Picture,$FontSize,$Angle,$X,$Y,$C_TextColor,$FontName,$Text);
1022
+        $C_TextColor = $this->AllocateColor($this->Picture,$R,$G,$B,$Alpha);
1023
+        imagettftext($this->Picture,$FontSize,$Angle,$X,$Y,$C_TextColor,$FontName,$Text);
1024 1024
 
1025
-     $this->Shadow = $Shadow;
1025
+        $this->Shadow = $Shadow;
1026 1026
 
1027
-     return($TxtPos);
1027
+        return($TxtPos);
1028 1028
     }
1029 1029
 
1030
-   /* Draw a gradient within a defined area */
1031
-   function drawGradientArea($X1,$Y1,$X2,$Y2,$Direction,$Format="")
1030
+    /* Draw a gradient within a defined area */
1031
+    function drawGradientArea($X1,$Y1,$X2,$Y2,$Direction,$Format="")
1032 1032
     {
1033
-     $StartR	= isset($Format["StartR"]) ? $Format["StartR"] : 90;
1034
-     $StartG	= isset($Format["StartG"]) ? $Format["StartG"] : 90;
1035
-     $StartB	= isset($Format["StartB"]) ? $Format["StartB"] : 90;
1036
-     $EndR	= isset($Format["EndR"]) ? $Format["EndR"] : 0;
1037
-     $EndG	= isset($Format["EndG"]) ? $Format["EndG"] : 0;
1038
-     $EndB	= isset($Format["EndB"]) ? $Format["EndB"] : 0;
1039
-     $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
1040
-     $Levels	= isset($Format["Levels"]) ? $Format["Levels"] : NULL;
1041
-
1042
-     $Shadow = $this->Shadow;
1043
-     $this->Shadow = FALSE;
1044
-
1045
-     if ( $StartR == $EndR && $StartG == $EndG && $StartB == $EndB )
1046
-      {
1047
-       $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,array("R"=>$StartR,"G"=>$StartG,"B"=>$StartB,"Alpha"=>$Alpha));
1048
-       return(0);
1049
-      }
1050
-
1051
-     if ( $Levels != NULL )
1052
-      { $EndR=$StartR+$Levels; $EndG=$StartG+$Levels; $EndB=$StartB+$Levels; }
1053
-
1054
-     if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); }
1055
-     if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); }
1056
-
1057
-     if ( $Direction == DIRECTION_VERTICAL )   { $Width = abs($Y2-$Y1); }
1058
-     if ( $Direction == DIRECTION_HORIZONTAL ) { $Width = abs($X2-$X1); }
1059
-
1060
-     $Step     = max(abs($EndR-$StartR),abs($EndG-$StartG),abs($EndB-$StartB));
1061
-     $StepSize = $Width/$Step;
1062
-     $RStep    = ($EndR-$StartR)/$Step;
1063
-     $GStep    = ($EndG-$StartG)/$Step;
1064
-     $BStep    = ($EndB-$StartB)/$Step;
1065
-
1066
-     $R=$StartR;$G=$StartG;$B=$StartB;
1067
-     switch($Direction)
1068
-      {
1069
-       case DIRECTION_VERTICAL:
1033
+        $StartR	= isset($Format["StartR"]) ? $Format["StartR"] : 90;
1034
+        $StartG	= isset($Format["StartG"]) ? $Format["StartG"] : 90;
1035
+        $StartB	= isset($Format["StartB"]) ? $Format["StartB"] : 90;
1036
+        $EndR	= isset($Format["EndR"]) ? $Format["EndR"] : 0;
1037
+        $EndG	= isset($Format["EndG"]) ? $Format["EndG"] : 0;
1038
+        $EndB	= isset($Format["EndB"]) ? $Format["EndB"] : 0;
1039
+        $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
1040
+        $Levels	= isset($Format["Levels"]) ? $Format["Levels"] : NULL;
1041
+
1042
+        $Shadow = $this->Shadow;
1043
+        $this->Shadow = FALSE;
1044
+
1045
+        if ( $StartR == $EndR && $StartG == $EndG && $StartB == $EndB )
1046
+        {
1047
+        $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,array("R"=>$StartR,"G"=>$StartG,"B"=>$StartB,"Alpha"=>$Alpha));
1048
+        return(0);
1049
+        }
1050
+
1051
+        if ( $Levels != NULL )
1052
+        { $EndR=$StartR+$Levels; $EndG=$StartG+$Levels; $EndB=$StartB+$Levels; }
1053
+
1054
+        if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); }
1055
+        if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); }
1056
+
1057
+        if ( $Direction == DIRECTION_VERTICAL )   { $Width = abs($Y2-$Y1); }
1058
+        if ( $Direction == DIRECTION_HORIZONTAL ) { $Width = abs($X2-$X1); }
1059
+
1060
+        $Step     = max(abs($EndR-$StartR),abs($EndG-$StartG),abs($EndB-$StartB));
1061
+        $StepSize = $Width/$Step;
1062
+        $RStep    = ($EndR-$StartR)/$Step;
1063
+        $GStep    = ($EndG-$StartG)/$Step;
1064
+        $BStep    = ($EndB-$StartB)/$Step;
1065
+
1066
+        $R=$StartR;$G=$StartG;$B=$StartB;
1067
+        switch($Direction)
1068
+        {
1069
+        case DIRECTION_VERTICAL:
1070 1070
         $StartY = $Y1; $EndY = floor($Y2)+1; $LastY2 = $StartY;
1071 1071
         for($i=0;$i<=$Step;$i++)
1072
-         {
1073
-          $Y2 = floor($StartY + ($i * $StepSize));
1072
+            {
1073
+            $Y2 = floor($StartY + ($i * $StepSize));
1074 1074
 
1075
-          if ($Y2 > $EndY) { $Y2 = $EndY; }
1076
-          if (($Y1 != $Y2 && $Y1 < $Y2) || $Y2 == $EndY)
1077
-           {
1075
+            if ($Y2 > $EndY) { $Y2 = $EndY; }
1076
+            if (($Y1 != $Y2 && $Y1 < $Y2) || $Y2 == $EndY)
1077
+            {
1078 1078
             $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
1079 1079
             $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color);
1080 1080
             $LastY2 = max($LastY2,$Y2);
1081 1081
             $Y1 = $Y2+1;
1082
-           }
1083
-          $R = $R + $RStep; $G = $G + $GStep; $B = $B + $BStep;
1084
-         }
1082
+            }
1083
+            $R = $R + $RStep; $G = $G + $GStep; $B = $B + $BStep;
1084
+            }
1085 1085
         if ( $LastY2 < $EndY && isset($Color)) { for ($i=$LastY2+1;$i<=$EndY;$i++) { $this->drawLine($X1,$i,$X2,$i,$Color); } }
1086 1086
         break;
1087 1087
 
1088
-       case DIRECTION_HORIZONTAL:
1088
+        case DIRECTION_HORIZONTAL:
1089 1089
         $StartX = $X1; $EndX = $X2;
1090 1090
         for($i=0;$i<=$Step;$i++)
1091
-         {
1092
-          $X2 = floor($StartX + ($i * $StepSize));
1091
+            {
1092
+            $X2 = floor($StartX + ($i * $StepSize));
1093 1093
 
1094
-          if ($X2 > $EndX) { $X2 = $EndX; }
1095
-          if (($X1 != $X2 && $X1 < $X2) || $X2 == $EndX)
1096
-           {
1094
+            if ($X2 > $EndX) { $X2 = $EndX; }
1095
+            if (($X1 != $X2 && $X1 < $X2) || $X2 == $EndX)
1096
+            {
1097 1097
             $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
1098 1098
             $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color);
1099 1099
             $X1 = $X2+1;
1100
-           }
1101
-          $R = $R + $RStep; $G = $G + $GStep; $B = $B + $BStep; 
1102
-         }
1100
+            }
1101
+            $R = $R + $RStep; $G = $G + $GStep; $B = $B + $BStep; 
1102
+            }
1103 1103
         if ( $X2 < $EndX && isset($Color)) { $this->drawFilledRectangle($X2,$Y1,$EndX,$Y2,$Color); }
1104 1104
         break;
1105
-      }
1105
+        }
1106 1106
 
1107
-     $this->Shadow = $Shadow;
1107
+        $this->Shadow = $Shadow;
1108 1108
 
1109 1109
     }
1110 1110
 
1111
-   /* Draw an aliased pixel */
1112
-   function drawAntialiasPixel($X,$Y,$Format="")
1111
+    /* Draw an aliased pixel */
1112
+    function drawAntialiasPixel($X,$Y,$Format="")
1113 1113
     {
1114
-     $R     = isset($Format["R"]) ? $Format["R"] : 0;
1115
-     $G     = isset($Format["G"]) ? $Format["G"] : 0;
1116
-     $B     = isset($Format["B"]) ? $Format["B"] : 0;
1117
-     $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
1114
+        $R     = isset($Format["R"]) ? $Format["R"] : 0;
1115
+        $G     = isset($Format["G"]) ? $Format["G"] : 0;
1116
+        $B     = isset($Format["B"]) ? $Format["B"] : 0;
1117
+        $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
1118 1118
 
1119
-     if ( $X < 0 || $Y < 0 || $X >= $this->XSize || $Y >= $this->YSize )
1120
-      return(-1);
1119
+        if ( $X < 0 || $Y < 0 || $X >= $this->XSize || $Y >= $this->YSize )
1120
+        return(-1);
1121 1121
 
1122
-     if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
1123
-     if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
1124
-     if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
1122
+        if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
1123
+        if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
1124
+        if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
1125 1125
 
1126
-     if ( !$this->Antialias )
1127
-      {
1128
-       if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
1126
+        if ( !$this->Antialias )
1127
+        {
1128
+        if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
1129 1129
         {
1130
-         $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa);
1131
-         imagesetpixel($this->Picture,$X+$this->ShadowX,$Y+$this->ShadowY,$ShadowColor);
1130
+            $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa);
1131
+            imagesetpixel($this->Picture,$X+$this->ShadowX,$Y+$this->ShadowY,$ShadowColor);
1132 1132
         }
1133 1133
 
1134
-       $PlotColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
1135
-       imagesetpixel($this->Picture,$X,$Y,$PlotColor);
1134
+        $PlotColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
1135
+        imagesetpixel($this->Picture,$X,$Y,$PlotColor);
1136 1136
 
1137
-       return(0);
1138
-      }
1137
+        return(0);
1138
+        }
1139 1139
 
1140
-     $Plot = "";
1141
-     $Xi   = floor($X);
1142
-     $Yi   = floor($Y);
1140
+        $Plot = "";
1141
+        $Xi   = floor($X);
1142
+        $Yi   = floor($Y);
1143 1143
 
1144
-     if ( $Xi == $X && $Yi == $Y)
1145
-      {
1146
-       if ( $Alpha == 100 )
1144
+        if ( $Xi == $X && $Yi == $Y)
1145
+        {
1146
+        if ( $Alpha == 100 )
1147 1147
         $this->drawAlphaPixel($X,$Y,100,$R,$G,$B);
1148
-       else
1148
+        else
1149 1149
         $this->drawAlphaPixel($X,$Y,$Alpha,$R,$G,$B);
1150
-      }
1151
-     else
1152
-      {
1153
-       $Alpha1 = (((1 - ($X - floor($X))) * (1 - ($Y - floor($Y))) * 100) / 100) * $Alpha;
1154
-       if ( $Alpha1 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi,$Yi,$Alpha1,$R,$G,$B); }
1150
+        }
1151
+        else
1152
+        {
1153
+        $Alpha1 = (((1 - ($X - floor($X))) * (1 - ($Y - floor($Y))) * 100) / 100) * $Alpha;
1154
+        if ( $Alpha1 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi,$Yi,$Alpha1,$R,$G,$B); }
1155 1155
 
1156
-       $Alpha2 = ((($X - floor($X)) * (1 - ($Y - floor($Y))) * 100) / 100) * $Alpha;
1157
-       if ( $Alpha2 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi+1,$Yi,$Alpha2,$R,$G,$B); }
1156
+        $Alpha2 = ((($X - floor($X)) * (1 - ($Y - floor($Y))) * 100) / 100) * $Alpha;
1157
+        if ( $Alpha2 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi+1,$Yi,$Alpha2,$R,$G,$B); }
1158 1158
 
1159
-       $Alpha3 = (((1 - ($X - floor($X))) * ($Y - floor($Y)) * 100) / 100) * $Alpha;
1160
-       if ( $Alpha3 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi,$Yi+1,$Alpha3,$R,$G,$B); }
1159
+        $Alpha3 = (((1 - ($X - floor($X))) * ($Y - floor($Y)) * 100) / 100) * $Alpha;
1160
+        if ( $Alpha3 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi,$Yi+1,$Alpha3,$R,$G,$B); }
1161 1161
 
1162
-       $Alpha4 = ((($X - floor($X)) * ($Y - floor($Y)) * 100) / 100) * $Alpha;
1163
-       if ( $Alpha4 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi+1,$Yi+1,$Alpha4,$R,$G,$B); }
1164
-      }
1162
+        $Alpha4 = ((($X - floor($X)) * ($Y - floor($Y)) * 100) / 100) * $Alpha;
1163
+        if ( $Alpha4 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi+1,$Yi+1,$Alpha4,$R,$G,$B); }
1164
+        }
1165 1165
     }
1166 1166
 
1167
-   /* Draw a semi-transparent pixel */
1168
-   function drawAlphaPixel($X,$Y,$Alpha,$R,$G,$B)
1167
+    /* Draw a semi-transparent pixel */
1168
+    function drawAlphaPixel($X,$Y,$Alpha,$R,$G,$B)
1169 1169
     {
1170
-     if ( isset($this->Mask[$X])) { if ( isset($this->Mask[$X][$Y]) ) { return(0); } }
1170
+        if ( isset($this->Mask[$X])) { if ( isset($this->Mask[$X][$Y]) ) { return(0); } }
1171 1171
 
1172
-     if ( $X < 0 || $Y < 0 || $X >= $this->XSize || $Y >= $this->YSize )
1173
-      return(-1);
1172
+        if ( $X < 0 || $Y < 0 || $X >= $this->XSize || $Y >= $this->YSize )
1173
+        return(-1);
1174 1174
 
1175
-     if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
1176
-     if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
1177
-     if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
1175
+        if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
1176
+        if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
1177
+        if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
1178 1178
 
1179
-     if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
1180
-      {
1181
-       $AlphaFactor = floor(($Alpha / 100) * $this->Shadowa);
1182
-       $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$AlphaFactor);
1183
-       imagesetpixel($this->Picture,$X+$this->ShadowX,$Y+$this->ShadowY,$ShadowColor);
1184
-      }
1179
+        if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
1180
+        {
1181
+        $AlphaFactor = floor(($Alpha / 100) * $this->Shadowa);
1182
+        $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$AlphaFactor);
1183
+        imagesetpixel($this->Picture,$X+$this->ShadowX,$Y+$this->ShadowY,$ShadowColor);
1184
+        }
1185 1185
 
1186
-     $C_Aliased = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
1187
-     imagesetpixel($this->Picture,$X,$Y,$C_Aliased);
1186
+        $C_Aliased = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
1187
+        imagesetpixel($this->Picture,$X,$Y,$C_Aliased);
1188 1188
     }
1189 1189
 
1190
-   /* Convert apha to base 10 */
1191
-   function convertAlpha($AlphaValue)
1190
+    /* Convert apha to base 10 */
1191
+    function convertAlpha($AlphaValue)
1192 1192
     { return((127/100)*(100-$AlphaValue)); }
1193 1193
 
1194
-   /* Allocate a color with transparency */
1195
-   function allocateColor($Picture,$R,$G,$B,$Alpha=100)
1194
+    /* Allocate a color with transparency */
1195
+    function allocateColor($Picture,$R,$G,$B,$Alpha=100)
1196 1196
     {
1197
-     if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
1198
-     if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
1199
-     if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
1200
-     if ( $Alpha < 0 )  { $Alpha = 0; }
1201
-     if ( $Alpha > 100) { $Alpha = 100; }
1202
-
1203
-     $Alpha = $this->convertAlpha($Alpha);
1204
-     return(imagecolorallocatealpha($Picture,$R,$G,$B,$Alpha));
1197
+        if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
1198
+        if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
1199
+        if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
1200
+        if ( $Alpha < 0 )  { $Alpha = 0; }
1201
+        if ( $Alpha > 100) { $Alpha = 100; }
1202
+
1203
+        $Alpha = $this->convertAlpha($Alpha);
1204
+        return(imagecolorallocatealpha($Picture,$R,$G,$B,$Alpha));
1205 1205
     }
1206 1206
 
1207
-   /* Load a PNG file and draw it over the chart */
1208
-   function drawFromPNG($X,$Y,$FileName)
1207
+    /* Load a PNG file and draw it over the chart */
1208
+    function drawFromPNG($X,$Y,$FileName)
1209 1209
     { $this->drawFromPicture(1,$FileName,$X,$Y); }
1210 1210
 
1211
-   /* Load a GIF file and draw it over the chart */
1212
-   function drawFromGIF($X,$Y,$FileName)
1211
+    /* Load a GIF file and draw it over the chart */
1212
+    function drawFromGIF($X,$Y,$FileName)
1213 1213
     { $this->drawFromPicture(2,$FileName,$X,$Y); }
1214 1214
 
1215
-   /* Load a JPEG file and draw it over the chart */
1216
-   function drawFromJPG($X,$Y,$FileName)
1215
+    /* Load a JPEG file and draw it over the chart */
1216
+    function drawFromJPG($X,$Y,$FileName)
1217 1217
     { $this->drawFromPicture(3,$FileName,$X,$Y); }
1218 1218
 
1219
-   function getPicInfo($FileName)
1219
+    function getPicInfo($FileName)
1220 1220
     {
1221
-     $Infos  = getimagesize($FileName);
1222
-     $Width  = $Infos[0];
1223
-     $Height = $Infos[1];
1224
-     $Type   = $Infos["mime"];
1221
+        $Infos  = getimagesize($FileName);
1222
+        $Width  = $Infos[0];
1223
+        $Height = $Infos[1];
1224
+        $Type   = $Infos["mime"];
1225 1225
 
1226
-     if ( $Type == "image/png") { $Type = 1; }
1227
-     if ( $Type == "image/gif") { $Type = 2; }
1228
-     if ( $Type == "image/jpeg ") { $Type = 3; }
1226
+        if ( $Type == "image/png") { $Type = 1; }
1227
+        if ( $Type == "image/gif") { $Type = 2; }
1228
+        if ( $Type == "image/jpeg ") { $Type = 3; }
1229 1229
 
1230
-     return(array($Width,$Height,$Type));
1230
+        return(array($Width,$Height,$Type));
1231 1231
     }
1232 1232
 
1233
-   /* Generic loader function for external pictures */
1234
-   function drawFromPicture($PicType,$FileName,$X,$Y)
1233
+    /* Generic loader function for external pictures */
1234
+    function drawFromPicture($PicType,$FileName,$X,$Y)
1235 1235
     {
1236
-     if ( file_exists($FileName))
1237
-      {
1238
-       list($Width,$Height) = $this->getPicInfo($FileName);
1236
+        if ( file_exists($FileName))
1237
+        {
1238
+        list($Width,$Height) = $this->getPicInfo($FileName);
1239 1239
 
1240
-       if ( $PicType == 1 )
1240
+        if ( $PicType == 1 )
1241 1241
         { $Raster = imagecreatefrompng($FileName); }
1242
-       elseif ( $PicType == 2 )
1242
+        elseif ( $PicType == 2 )
1243 1243
         { $Raster = imagecreatefromgif($FileName); }
1244
-       elseif ( $PicType == 3 )
1244
+        elseif ( $PicType == 3 )
1245 1245
         { $Raster = imagecreatefromjpeg($FileName); }
1246
-       else
1246
+        else
1247 1247
         { return(0); }
1248 1248
 
1249 1249
 
1250
-       $RestoreShadow = $this->Shadow;
1251
-       if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
1250
+        $RestoreShadow = $this->Shadow;
1251
+        if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
1252 1252
         {
1253
-         $this->Shadow = FALSE;
1254
-         if ( $PicType == 3 )
1255
-          $this->drawFilledRectangle($X+$this->ShadowX,$Y+$this->ShadowY,$X+$Width+$this->ShadowX,$Y+$Height+$this->ShadowY,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
1256
-         else
1257
-          {
1258
-           $TranparentID = imagecolortransparent($Raster);
1259
-           for ($Xc=0;$Xc<=$Width-1;$Xc++)
1253
+            $this->Shadow = FALSE;
1254
+            if ( $PicType == 3 )
1255
+            $this->drawFilledRectangle($X+$this->ShadowX,$Y+$this->ShadowY,$X+$Width+$this->ShadowX,$Y+$Height+$this->ShadowY,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
1256
+            else
1260 1257
             {
1261
-             for ($Yc=0;$Yc<=$Height-1;$Yc++)
1262
-              {
1263
-               $RGBa   = imagecolorat($Raster,$Xc,$Yc);
1264
-               $Values = imagecolorsforindex($Raster,$RGBa);
1265
-               if ( $Values["alpha"] < 120 )
1258
+            $TranparentID = imagecolortransparent($Raster);
1259
+            for ($Xc=0;$Xc<=$Width-1;$Xc++)
1260
+            {
1261
+                for ($Yc=0;$Yc<=$Height-1;$Yc++)
1262
+                {
1263
+                $RGBa   = imagecolorat($Raster,$Xc,$Yc);
1264
+                $Values = imagecolorsforindex($Raster,$RGBa);
1265
+                if ( $Values["alpha"] < 120 )
1266 1266
                 {
1267
-                 $AlphaFactor = floor(($this->Shadowa / 100) * ((100 / 127) * (127-$Values["alpha"])));
1268
-                 $this->drawAlphaPixel($X+$Xc+$this->ShadowX,$Y+$Yc+$this->ShadowY,$AlphaFactor,$this->ShadowR,$this->ShadowG,$this->ShadowB);
1267
+                    $AlphaFactor = floor(($this->Shadowa / 100) * ((100 / 127) * (127-$Values["alpha"])));
1268
+                    $this->drawAlphaPixel($X+$Xc+$this->ShadowX,$Y+$Yc+$this->ShadowY,$AlphaFactor,$this->ShadowR,$this->ShadowG,$this->ShadowB);
1269 1269
                 }
1270
-              }
1270
+                }
1271
+            }
1271 1272
             }
1272
-          }
1273 1273
         }
1274
-       $this->Shadow = $RestoreShadow;
1274
+        $this->Shadow = $RestoreShadow;
1275 1275
 
1276
-       imagecopy($this->Picture,$Raster,$X,$Y,0,0,$Width,$Height);
1277
-       imagedestroy($Raster);
1278
-      }
1276
+        imagecopy($this->Picture,$Raster,$X,$Y,0,0,$Width,$Height);
1277
+        imagedestroy($Raster);
1278
+        }
1279 1279
     }
1280 1280
 
1281
-   /* Draw an arrow */
1282
-   function drawArrow($X1,$Y1,$X2,$Y2,$Format="")
1281
+    /* Draw an arrow */
1282
+    function drawArrow($X1,$Y1,$X2,$Y2,$Format="")
1283 1283
     {
1284
-     $FillR	= isset($Format["FillR"]) ? $Format["FillR"] : 0;
1285
-     $FillG	= isset($Format["FillG"]) ? $Format["FillG"] : 0;
1286
-     $FillB	= isset($Format["FillB"]) ? $Format["FillB"] : 0;
1287
-     $BorderR	= isset($Format["BorderR"]) ? $Format["BorderR"] : $FillR;
1288
-     $BorderG	= isset($Format["BorderG"]) ? $Format["BorderG"] : $FillG;
1289
-     $BorderB	= isset($Format["BorderB"]) ? $Format["BorderB"] : $FillB;
1290
-     $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
1291
-     $Size	= isset($Format["Size"]) ? $Format["Size"] : 10;
1292
-     $Ratio	= isset($Format["Ratio"]) ? $Format["Ratio"] : .5;
1293
-     $TwoHeads	= isset($Format["TwoHeads"]) ? $Format["TwoHeads"] : FALSE;
1294
-     $Ticks	= isset($Format["Ticks"]) ? $Format["Ticks"] : FALSE;
1295
-
1296
-     /* Calculate the line angle */
1297
-     $Angle = $this->getAngle($X1,$Y1,$X2,$Y2);
1298
-
1299
-     /* Override Shadow support, this will be managed internally */
1300
-     $RestoreShadow = $this->Shadow;
1301
-     if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
1302
-      {
1303
-       $this->Shadow = FALSE;
1304
-       $this->drawArrow($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,array("FillR"=>$this->ShadowR,"FillG"=>$this->ShadowG,"FillB"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Size"=>$Size,"Ratio"=>$Ratio,"TwoHeads"=>$TwoHeads,"Ticks"=>$Ticks));
1305
-      }
1306
-
1307
-     /* Draw the 1st Head */
1308
-     $TailX = cos(($Angle-180)*PI/180)*$Size+$X2;
1309
-     $TailY = sin(($Angle-180)*PI/180)*$Size+$Y2;
1310
-
1311
-     $Points	= "";
1312
-     $Points[]  = $X2; $Points[]  = $Y2;
1313
-     $Points[]	= cos(($Angle-90)*PI/180)*$Size*$Ratio+$TailX; $Points[] = sin(($Angle-90)*PI/180)*$Size*$Ratio+$TailY;
1314
-     $Points[]	= cos(($Angle-270)*PI/180)*$Size*$Ratio+$TailX; $Points[] = sin(($Angle-270)*PI/180)*$Size*$Ratio+$TailY;
1315
-     $Points[]  = $X2; $Points[]  = $Y2;
1316
-
1317
-     /* Visual correction */
1318
-     if ($Angle == 180 || $Angle == 360 ) { $Points[4] = $Points[2]; }
1319
-     if ($Angle == 90 || $Angle == 270 ) { $Points[5] = $Points[3]; }
1320
-
1321
-     $ArrowColor = $this->allocateColor($this->Picture,$FillR,$FillG,$FillB,$Alpha);
1322
-     ImageFilledPolygon($this->Picture,$Points,4,$ArrowColor);
1323
-
1324
-     $this->drawLine($Points[0],$Points[1],$Points[2],$Points[3],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1325
-     $this->drawLine($Points[2],$Points[3],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1326
-     $this->drawLine($Points[0],$Points[1],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1327
-
1328
-     /* Draw the second head */
1329
-     if ( $TwoHeads )
1330
-      {
1331
-       $Angle = $this->getAngle($X2,$Y2,$X1,$Y1);
1332
-
1333
-       $TailX2 = cos(($Angle-180)*PI/180)*$Size+$X1;
1334
-       $TailY2 = sin(($Angle-180)*PI/180)*$Size+$Y1;
1335
-
1336
-       $Points   = "";
1337
-       $Points[] = $X1; $Points[]  = $Y1;
1338
-       $Points[] = cos(($Angle-90)*PI/180)*$Size*$Ratio+$TailX2; $Points[] = sin(($Angle-90)*PI/180)*$Size*$Ratio+$TailY2;
1339
-       $Points[] = cos(($Angle-270)*PI/180)*$Size*$Ratio+$TailX2; $Points[] = sin(($Angle-270)*PI/180)*$Size*$Ratio+$TailY2;
1340
-       $Points[] = $X1; $Points[]  = $Y1;
1341
-
1342
-       /* Visual correction */
1343
-       if ($Angle == 180 || $Angle == 360 ) { $Points[4] = $Points[2]; }
1344
-       if ($Angle == 90 || $Angle == 270 ) { $Points[5] = $Points[3]; }
1345
-
1346
-       $ArrowColor = $this->allocateColor($this->Picture,$FillR,$FillG,$FillB,$Alpha);
1347
-       ImageFilledPolygon($this->Picture,$Points,4,$ArrowColor);
1348
-
1349
-       $this->drawLine($Points[0],$Points[1],$Points[2],$Points[3],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1350
-       $this->drawLine($Points[2],$Points[3],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1351
-       $this->drawLine($Points[0],$Points[1],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1352
-
1353
-       $this->drawLine($TailX,$TailY,$TailX2,$TailY2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
1354
-      }
1355
-     else
1356
-      $this->drawLine($X1,$Y1,$TailX,$TailY,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
1357
-
1358
-     /* Re-enable shadows */
1359
-     $this->Shadow = $RestoreShadow;
1284
+        $FillR	= isset($Format["FillR"]) ? $Format["FillR"] : 0;
1285
+        $FillG	= isset($Format["FillG"]) ? $Format["FillG"] : 0;
1286
+        $FillB	= isset($Format["FillB"]) ? $Format["FillB"] : 0;
1287
+        $BorderR	= isset($Format["BorderR"]) ? $Format["BorderR"] : $FillR;
1288
+        $BorderG	= isset($Format["BorderG"]) ? $Format["BorderG"] : $FillG;
1289
+        $BorderB	= isset($Format["BorderB"]) ? $Format["BorderB"] : $FillB;
1290
+        $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
1291
+        $Size	= isset($Format["Size"]) ? $Format["Size"] : 10;
1292
+        $Ratio	= isset($Format["Ratio"]) ? $Format["Ratio"] : .5;
1293
+        $TwoHeads	= isset($Format["TwoHeads"]) ? $Format["TwoHeads"] : FALSE;
1294
+        $Ticks	= isset($Format["Ticks"]) ? $Format["Ticks"] : FALSE;
1295
+
1296
+        /* Calculate the line angle */
1297
+        $Angle = $this->getAngle($X1,$Y1,$X2,$Y2);
1298
+
1299
+        /* Override Shadow support, this will be managed internally */
1300
+        $RestoreShadow = $this->Shadow;
1301
+        if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
1302
+        {
1303
+        $this->Shadow = FALSE;
1304
+        $this->drawArrow($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,array("FillR"=>$this->ShadowR,"FillG"=>$this->ShadowG,"FillB"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Size"=>$Size,"Ratio"=>$Ratio,"TwoHeads"=>$TwoHeads,"Ticks"=>$Ticks));
1305
+        }
1306
+
1307
+        /* Draw the 1st Head */
1308
+        $TailX = cos(($Angle-180)*PI/180)*$Size+$X2;
1309
+        $TailY = sin(($Angle-180)*PI/180)*$Size+$Y2;
1310
+
1311
+        $Points	= "";
1312
+        $Points[]  = $X2; $Points[]  = $Y2;
1313
+        $Points[]	= cos(($Angle-90)*PI/180)*$Size*$Ratio+$TailX; $Points[] = sin(($Angle-90)*PI/180)*$Size*$Ratio+$TailY;
1314
+        $Points[]	= cos(($Angle-270)*PI/180)*$Size*$Ratio+$TailX; $Points[] = sin(($Angle-270)*PI/180)*$Size*$Ratio+$TailY;
1315
+        $Points[]  = $X2; $Points[]  = $Y2;
1316
+
1317
+        /* Visual correction */
1318
+        if ($Angle == 180 || $Angle == 360 ) { $Points[4] = $Points[2]; }
1319
+        if ($Angle == 90 || $Angle == 270 ) { $Points[5] = $Points[3]; }
1320
+
1321
+        $ArrowColor = $this->allocateColor($this->Picture,$FillR,$FillG,$FillB,$Alpha);
1322
+        ImageFilledPolygon($this->Picture,$Points,4,$ArrowColor);
1323
+
1324
+        $this->drawLine($Points[0],$Points[1],$Points[2],$Points[3],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1325
+        $this->drawLine($Points[2],$Points[3],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1326
+        $this->drawLine($Points[0],$Points[1],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1327
+
1328
+        /* Draw the second head */
1329
+        if ( $TwoHeads )
1330
+        {
1331
+        $Angle = $this->getAngle($X2,$Y2,$X1,$Y1);
1332
+
1333
+        $TailX2 = cos(($Angle-180)*PI/180)*$Size+$X1;
1334
+        $TailY2 = sin(($Angle-180)*PI/180)*$Size+$Y1;
1335
+
1336
+        $Points   = "";
1337
+        $Points[] = $X1; $Points[]  = $Y1;
1338
+        $Points[] = cos(($Angle-90)*PI/180)*$Size*$Ratio+$TailX2; $Points[] = sin(($Angle-90)*PI/180)*$Size*$Ratio+$TailY2;
1339
+        $Points[] = cos(($Angle-270)*PI/180)*$Size*$Ratio+$TailX2; $Points[] = sin(($Angle-270)*PI/180)*$Size*$Ratio+$TailY2;
1340
+        $Points[] = $X1; $Points[]  = $Y1;
1341
+
1342
+        /* Visual correction */
1343
+        if ($Angle == 180 || $Angle == 360 ) { $Points[4] = $Points[2]; }
1344
+        if ($Angle == 90 || $Angle == 270 ) { $Points[5] = $Points[3]; }
1345
+
1346
+        $ArrowColor = $this->allocateColor($this->Picture,$FillR,$FillG,$FillB,$Alpha);
1347
+        ImageFilledPolygon($this->Picture,$Points,4,$ArrowColor);
1348
+
1349
+        $this->drawLine($Points[0],$Points[1],$Points[2],$Points[3],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1350
+        $this->drawLine($Points[2],$Points[3],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1351
+        $this->drawLine($Points[0],$Points[1],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1352
+
1353
+        $this->drawLine($TailX,$TailY,$TailX2,$TailY2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
1354
+        }
1355
+        else
1356
+        $this->drawLine($X1,$Y1,$TailX,$TailY,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
1357
+
1358
+        /* Re-enable shadows */
1359
+        $this->Shadow = $RestoreShadow;
1360 1360
     }
1361 1361
 
1362
-   /* Draw a label with associated arrow */
1363
-   function drawArrowLabel($X1,$Y1,$Text,$Format="")
1362
+    /* Draw a label with associated arrow */
1363
+    function drawArrowLabel($X1,$Y1,$Text,$Format="")
1364 1364
     {
1365
-     $FillR    = isset($Format["FillR"]) ? $Format["FillR"] : 0;
1366
-     $FillG    = isset($Format["FillG"]) ? $Format["FillG"] : 0;
1367
-     $FillB    = isset($Format["FillB"]) ? $Format["FillB"] : 0;
1368
-     $BorderR  = isset($Format["BorderR"]) ? $Format["BorderR"] : $FillR;
1369
-     $BorderG  = isset($Format["BorderG"]) ? $Format["BorderG"] : $FillG;
1370
-     $BorderB  = isset($Format["BorderB"]) ? $Format["BorderB"] : $FillB;
1371
-     $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
1372
-     $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
1373
-     $Alpha    = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
1374
-     $Length   = isset($Format["Length"]) ? $Format["Length"] : 50;
1375
-     $Angle    = isset($Format["Angle"]) ? $Format["Angle"] : 315;
1376
-     $Size     = isset($Format["Size"]) ? $Format["Size"] : 10;
1377
-     $Position = isset($Format["Position"]) ? $Format["Position"] : POSITION_TOP;
1378
-     $RoundPos = isset($Format["RoundPos"]) ? $Format["RoundPos"] : FALSE;
1379
-     $Ticks    = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
1380
-
1381
-     $Angle = $Angle % 360;
1382
-
1383
-     $X2 = sin(($Angle+180)*PI/180)*$Length+$X1;
1384
-     $Y2 = cos(($Angle+180)*PI/180)*$Length+$Y1;
1385
-
1386
-     if ( $RoundPos && $Angle > 0 && $Angle < 180 ) { $Y2 = ceil($Y2); }
1387
-     if ( $RoundPos && $Angle > 180 ) { $Y2 = floor($Y2); }
1388
-
1389
-     $this->drawArrow($X2,$Y2,$X1,$Y1,$Format);
1390
-
1391
-     $Size	= imagettfbbox($FontSize,0,$FontName,$Text);
1392
-     $TxtWidth	= max(abs($Size[2]-$Size[0]),abs($Size[0]-$Size[6]));
1393
-     $TxtHeight	= max(abs($Size[1]-$Size[7]),abs($Size[3]-$Size[1]));
1394
-
1395
-     if ( $Angle > 0 && $Angle < 180 )
1396
-      {
1397
-       $this->drawLine($X2,$Y2,$X2-$TxtWidth,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
1398
-       if ( $Position == POSITION_TOP )
1365
+        $FillR    = isset($Format["FillR"]) ? $Format["FillR"] : 0;
1366
+        $FillG    = isset($Format["FillG"]) ? $Format["FillG"] : 0;
1367
+        $FillB    = isset($Format["FillB"]) ? $Format["FillB"] : 0;
1368
+        $BorderR  = isset($Format["BorderR"]) ? $Format["BorderR"] : $FillR;
1369
+        $BorderG  = isset($Format["BorderG"]) ? $Format["BorderG"] : $FillG;
1370
+        $BorderB  = isset($Format["BorderB"]) ? $Format["BorderB"] : $FillB;
1371
+        $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
1372
+        $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
1373
+        $Alpha    = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
1374
+        $Length   = isset($Format["Length"]) ? $Format["Length"] : 50;
1375
+        $Angle    = isset($Format["Angle"]) ? $Format["Angle"] : 315;
1376
+        $Size     = isset($Format["Size"]) ? $Format["Size"] : 10;
1377
+        $Position = isset($Format["Position"]) ? $Format["Position"] : POSITION_TOP;
1378
+        $RoundPos = isset($Format["RoundPos"]) ? $Format["RoundPos"] : FALSE;
1379
+        $Ticks    = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
1380
+
1381
+        $Angle = $Angle % 360;
1382
+
1383
+        $X2 = sin(($Angle+180)*PI/180)*$Length+$X1;
1384
+        $Y2 = cos(($Angle+180)*PI/180)*$Length+$Y1;
1385
+
1386
+        if ( $RoundPos && $Angle > 0 && $Angle < 180 ) { $Y2 = ceil($Y2); }
1387
+        if ( $RoundPos && $Angle > 180 ) { $Y2 = floor($Y2); }
1388
+
1389
+        $this->drawArrow($X2,$Y2,$X1,$Y1,$Format);
1390
+
1391
+        $Size	= imagettfbbox($FontSize,0,$FontName,$Text);
1392
+        $TxtWidth	= max(abs($Size[2]-$Size[0]),abs($Size[0]-$Size[6]));
1393
+        $TxtHeight	= max(abs($Size[1]-$Size[7]),abs($Size[3]-$Size[1]));
1394
+
1395
+        if ( $Angle > 0 && $Angle < 180 )
1396
+        {
1397
+        $this->drawLine($X2,$Y2,$X2-$TxtWidth,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
1398
+        if ( $Position == POSITION_TOP )
1399 1399
         $this->drawText($X2,$Y2-2,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Align"=>TEXT_ALIGN_BOTTOMRIGHT));
1400
-       else
1400
+        else
1401 1401
         $this->drawText($X2,$Y2+4,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Align"=>TEXT_ALIGN_TOPRIGHT));
1402
-      }
1403
-     else
1404
-      {
1405
-       $this->drawLine($X2,$Y2,$X2+$TxtWidth,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
1406
-       if ( $Position == POSITION_TOP )
1402
+        }
1403
+        else
1404
+        {
1405
+        $this->drawLine($X2,$Y2,$X2+$TxtWidth,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
1406
+        if ( $Position == POSITION_TOP )
1407 1407
         $this->drawText($X2,$Y2-2,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
1408
-       else
1408
+        else
1409 1409
         $this->drawText($X2,$Y2+4,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Align"=>TEXT_ALIGN_TOPLEFT));
1410
-      }
1410
+        }
1411 1411
     }
1412 1412
 
1413
-   /* Draw a progress bar filled with specified % */
1414
-   function drawProgress($X,$Y,$Percent,$Format="")
1413
+    /* Draw a progress bar filled with specified % */
1414
+    function drawProgress($X,$Y,$Percent,$Format="")
1415 1415
     {
1416
-     if ( $Percent > 100 ) { $Percent = 100; }
1417
-     if ( $Percent < 0 ) { $Percent = 0; }
1418
-
1419
-     $Width	= isset($Format["Width"]) ? $Format["Width"] : 200;
1420
-     $Height	= isset($Format["Height"]) ? $Format["Height"] : 20;
1421
-     $Orientation = isset($Format["Orientation"]) ? $Format["Orientation"] : ORIENTATION_HORIZONTAL;
1422
-     $ShowLabel = isset($Format["ShowLabel"]) ? $Format["ShowLabel"] : FALSE;
1423
-     $LabelPos	= isset($Format["LabelPos"]) ? $Format["LabelPos"] : LABEL_POS_INSIDE;
1424
-     $Margin    = isset($Format["Margin"]) ? $Format["Margin"] : 10;
1425
-     $R		= isset($Format["R"]) ? $Format["R"] : 130;
1426
-     $G		= isset($Format["G"]) ? $Format["G"] : 130;
1427
-     $B		= isset($Format["B"]) ? $Format["B"] : 130;
1428
-     $RFade	= isset($Format["RFade"]) ? $Format["RFade"] : -1;
1429
-     $GFade	= isset($Format["GFade"]) ? $Format["GFade"] : -1;
1430
-     $BFade	= isset($Format["BFade"]) ? $Format["BFade"] : -1;
1431
-     $BorderR	= isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
1432
-     $BorderG	= isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
1433
-     $BorderB	= isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
1434
-     $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 0;
1435
-     $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 0;
1436
-     $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 0;
1437
-     $BoxBackR	= isset($Format["BoxBackR"]) ? $Format["BoxBackR"] : 255;
1438
-     $BoxBackG	= isset($Format["BoxBackG"]) ? $Format["BoxBackG"] : 255;
1439
-     $BoxBackB	= isset($Format["BoxBackB"]) ? $Format["BoxBackB"] : 255;
1440
-     $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
1441
-     $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
1442
-     $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : NULL;
1443
-     $NoAngle	= isset($Format["NoAngle"]) ? $Format["NoAngle"] : FALSE;
1444
-
1445
-     if ( $RFade != -1 && $GFade != -1 && $BFade != -1 )
1446
-      {
1447
-       $RFade = (($RFade-$R)/100)*$Percent+$R;
1448
-       $GFade = (($GFade-$G)/100)*$Percent+$G;
1449
-       $BFade = (($BFade-$B)/100)*$Percent+$B;
1450
-      }
1451
-
1452
-     if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
1453
-     if ( $BoxSurrounding != NULL ) { $BoxBorderR = $BoxBackR + $Surrounding; $BoxBorderG = $BoxBackG + $Surrounding; $BoxBorderB = $BoxBackB + $Surrounding; }
1454
-
1455
-     if ( $Orientation == ORIENTATION_VERTICAL )
1456
-      {
1457
-       $InnerHeight = (($Height-2)/100)*$Percent;
1458
-       $this->drawFilledRectangle($X,$Y,$X+$Width,$Y-$Height,array("R"=>$BoxBackR,"G"=>$BoxBackG,"B"=>$BoxBackB,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"NoAngle"=>$NoAngle));
1459
-
1460
-       $RestoreShadow = $this->Shadow; $this->Shadow  = FALSE;
1461
-       if ( $RFade != -1 && $GFade != -1 && $BFade != -1 )
1462
-        {
1463
-         $GradientOptions = array("StartR"=>$RFade,"StartG"=>$GFade,"StartB"=>$BFade,"EndR"=>$R,"EndG"=>$G,"EndB"=>$B);
1464
-         $this->drawGradientArea($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,DIRECTION_VERTICAL,$GradientOptions);
1465
-
1466
-         if ( $Surrounding )
1467
-          $this->drawRectangle($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,array("R"=>255,"G"=>255,"B"=>255,"Alpha"=>$Surrounding));
1468
-        }
1469
-       else
1416
+        if ( $Percent > 100 ) { $Percent = 100; }
1417
+        if ( $Percent < 0 ) { $Percent = 0; }
1418
+
1419
+        $Width	= isset($Format["Width"]) ? $Format["Width"] : 200;
1420
+        $Height	= isset($Format["Height"]) ? $Format["Height"] : 20;
1421
+        $Orientation = isset($Format["Orientation"]) ? $Format["Orientation"] : ORIENTATION_HORIZONTAL;
1422
+        $ShowLabel = isset($Format["ShowLabel"]) ? $Format["ShowLabel"] : FALSE;
1423
+        $LabelPos	= isset($Format["LabelPos"]) ? $Format["LabelPos"] : LABEL_POS_INSIDE;
1424
+        $Margin    = isset($Format["Margin"]) ? $Format["Margin"] : 10;
1425
+        $R		= isset($Format["R"]) ? $Format["R"] : 130;
1426
+        $G		= isset($Format["G"]) ? $Format["G"] : 130;
1427
+        $B		= isset($Format["B"]) ? $Format["B"] : 130;
1428
+        $RFade	= isset($Format["RFade"]) ? $Format["RFade"] : -1;
1429
+        $GFade	= isset($Format["GFade"]) ? $Format["GFade"] : -1;
1430
+        $BFade	= isset($Format["BFade"]) ? $Format["BFade"] : -1;
1431
+        $BorderR	= isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
1432
+        $BorderG	= isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
1433
+        $BorderB	= isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
1434
+        $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 0;
1435
+        $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 0;
1436
+        $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 0;
1437
+        $BoxBackR	= isset($Format["BoxBackR"]) ? $Format["BoxBackR"] : 255;
1438
+        $BoxBackG	= isset($Format["BoxBackG"]) ? $Format["BoxBackG"] : 255;
1439
+        $BoxBackB	= isset($Format["BoxBackB"]) ? $Format["BoxBackB"] : 255;
1440
+        $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
1441
+        $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
1442
+        $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : NULL;
1443
+        $NoAngle	= isset($Format["NoAngle"]) ? $Format["NoAngle"] : FALSE;
1444
+
1445
+        if ( $RFade != -1 && $GFade != -1 && $BFade != -1 )
1446
+        {
1447
+        $RFade = (($RFade-$R)/100)*$Percent+$R;
1448
+        $GFade = (($GFade-$G)/100)*$Percent+$G;
1449
+        $BFade = (($BFade-$B)/100)*$Percent+$B;
1450
+        }
1451
+
1452
+        if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
1453
+        if ( $BoxSurrounding != NULL ) { $BoxBorderR = $BoxBackR + $Surrounding; $BoxBorderG = $BoxBackG + $Surrounding; $BoxBorderB = $BoxBackB + $Surrounding; }
1454
+
1455
+        if ( $Orientation == ORIENTATION_VERTICAL )
1456
+        {
1457
+        $InnerHeight = (($Height-2)/100)*$Percent;
1458
+        $this->drawFilledRectangle($X,$Y,$X+$Width,$Y-$Height,array("R"=>$BoxBackR,"G"=>$BoxBackG,"B"=>$BoxBackB,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"NoAngle"=>$NoAngle));
1459
+
1460
+        $RestoreShadow = $this->Shadow; $this->Shadow  = FALSE;
1461
+        if ( $RFade != -1 && $GFade != -1 && $BFade != -1 )
1462
+        {
1463
+            $GradientOptions = array("StartR"=>$RFade,"StartG"=>$GFade,"StartB"=>$BFade,"EndR"=>$R,"EndG"=>$G,"EndB"=>$B);
1464
+            $this->drawGradientArea($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,DIRECTION_VERTICAL,$GradientOptions);
1465
+
1466
+            if ( $Surrounding )
1467
+            $this->drawRectangle($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,array("R"=>255,"G"=>255,"B"=>255,"Alpha"=>$Surrounding));
1468
+        }
1469
+        else
1470 1470
         $this->drawFilledRectangle($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
1471 1471
 
1472
-       $this->Shadow = $RestoreShadow;
1472
+        $this->Shadow = $RestoreShadow;
1473 1473
 
1474
-       if ( $ShowLabel && $LabelPos == LABEL_POS_BOTTOM )	{ $this->drawText($X+($Width/2),$Y+$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_TOPMIDDLE)); }
1475
-       if ( $ShowLabel && $LabelPos == LABEL_POS_TOP )		{ $this->drawText($X+($Width/2),$Y-$Height-$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); }
1476
-       if ( $ShowLabel && $LabelPos == LABEL_POS_INSIDE )	{ $this->drawText($X+($Width/2),$Y-$InnerHeight-$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT,"Angle"=>90)); }
1477
-       if ( $ShowLabel && $LabelPos == LABEL_POS_CENTER )	{ $this->drawText($X+($Width/2),$Y-($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"Angle"=>90)); }
1478
-      }
1479
-     else
1480
-      {
1481
-       if ( $Percent == 100 )
1474
+        if ( $ShowLabel && $LabelPos == LABEL_POS_BOTTOM )	{ $this->drawText($X+($Width/2),$Y+$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_TOPMIDDLE)); }
1475
+        if ( $ShowLabel && $LabelPos == LABEL_POS_TOP )		{ $this->drawText($X+($Width/2),$Y-$Height-$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); }
1476
+        if ( $ShowLabel && $LabelPos == LABEL_POS_INSIDE )	{ $this->drawText($X+($Width/2),$Y-$InnerHeight-$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT,"Angle"=>90)); }
1477
+        if ( $ShowLabel && $LabelPos == LABEL_POS_CENTER )	{ $this->drawText($X+($Width/2),$Y-($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"Angle"=>90)); }
1478
+        }
1479
+        else
1480
+        {
1481
+        if ( $Percent == 100 )
1482 1482
         $InnerWidth = $Width-1;
1483
-       else
1483
+        else
1484 1484
         $InnerWidth = (($Width-2)/100)*$Percent;
1485 1485
 
1486
-       $this->drawFilledRectangle($X,$Y,$X+$Width,$Y+$Height,array("R"=>$BoxBackR,"G"=>$BoxBackG,"B"=>$BoxBackB,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"NoAngle"=>$NoAngle));
1486
+        $this->drawFilledRectangle($X,$Y,$X+$Width,$Y+$Height,array("R"=>$BoxBackR,"G"=>$BoxBackG,"B"=>$BoxBackB,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"NoAngle"=>$NoAngle));
1487 1487
 
1488
-       $RestoreShadow = $this->Shadow; $this->Shadow  = FALSE;
1489
-       if ( $RFade != -1 && $GFade != -1 && $BFade != -1 )
1488
+        $RestoreShadow = $this->Shadow; $this->Shadow  = FALSE;
1489
+        if ( $RFade != -1 && $GFade != -1 && $BFade != -1 )
1490 1490
         {
1491
-         $GradientOptions = array("StartR"=>$R,"StartG"=>$G,"StartB"=>$B,"EndR"=>$RFade,"EndG"=>$GFade,"EndB"=>$BFade);
1492
-         $this->drawGradientArea($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,DIRECTION_HORIZONTAL,$GradientOptions);
1491
+            $GradientOptions = array("StartR"=>$R,"StartG"=>$G,"StartB"=>$B,"EndR"=>$RFade,"EndG"=>$GFade,"EndB"=>$BFade);
1492
+            $this->drawGradientArea($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,DIRECTION_HORIZONTAL,$GradientOptions);
1493 1493
 
1494
-         if ( $Surrounding )
1495
-          $this->drawRectangle($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,array("R"=>255,"G"=>255,"B"=>255,"Alpha"=>$Surrounding));
1494
+            if ( $Surrounding )
1495
+            $this->drawRectangle($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,array("R"=>255,"G"=>255,"B"=>255,"Alpha"=>$Surrounding));
1496 1496
         }
1497
-       else
1497
+        else
1498 1498
         $this->drawFilledRectangle($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
1499 1499
  
1500
-       $this->Shadow = $RestoreShadow;
1500
+        $this->Shadow = $RestoreShadow;
1501 1501
 
1502
-       if ( $ShowLabel && $LabelPos == LABEL_POS_LEFT )		{ $this->drawText($X-$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); }
1503
-       if ( $ShowLabel && $LabelPos == LABEL_POS_RIGHT )	{ $this->drawText($X+$Width+$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT)); }
1504
-       if ( $ShowLabel && $LabelPos == LABEL_POS_CENTER )	{ $this->drawText($X+($Width/2),$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE)); }
1505
-       if ( $ShowLabel && $LabelPos == LABEL_POS_INSIDE )	{ $this->drawText($X+$InnerWidth+$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT)); }
1506
-      }
1502
+        if ( $ShowLabel && $LabelPos == LABEL_POS_LEFT )		{ $this->drawText($X-$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); }
1503
+        if ( $ShowLabel && $LabelPos == LABEL_POS_RIGHT )	{ $this->drawText($X+$Width+$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT)); }
1504
+        if ( $ShowLabel && $LabelPos == LABEL_POS_CENTER )	{ $this->drawText($X+($Width/2),$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE)); }
1505
+        if ( $ShowLabel && $LabelPos == LABEL_POS_INSIDE )	{ $this->drawText($X+$InnerWidth+$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT)); }
1506
+        }
1507 1507
     }
1508 1508
 
1509
-   /* Get the legend box size */
1510
-   function getLegendSize($Format="")
1509
+    /* Get the legend box size */
1510
+    function getLegendSize($Format="")
1511 1511
     {
1512
-     $FontName		= isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
1513
-     $FontSize		= isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
1514
-     $BoxSize		= isset($Format["BoxSize"]) ? $Format["BoxSize"] : 5;
1515
-     $Margin		= isset($Format["Margin"]) ? $Format["Margin"] : 5;
1516
-     $Style		= isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND;
1517
-     $Mode		= isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL;
1518
-     $BoxWidth		= isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 5;
1519
-     $BoxHeight		= isset($Format["BoxHeight"]) ? $Format["BoxHeight"] : 5;
1520
-     $IconAreaWidth	= isset($Format["IconAreaWidth"]) ? $Format["IconAreaWidth"] : $BoxWidth;
1521
-     $IconAreaHeight	= isset($Format["IconAreaHeight"]) ? $Format["IconAreaHeight"] : $BoxHeight;
1522
-     $XSpacing		= isset($Format["XSpacing"]) ? $Format["XSpacing"] : 5;
1523
-
1524
-     $Data = $this->DataSet->getData();
1525
-
1526
-     foreach($Data["Series"] as $SerieName => $Serie)
1527
-      {
1528
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && isset($Serie["Picture"]))
1512
+        $FontName		= isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
1513
+        $FontSize		= isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
1514
+        $BoxSize		= isset($Format["BoxSize"]) ? $Format["BoxSize"] : 5;
1515
+        $Margin		= isset($Format["Margin"]) ? $Format["Margin"] : 5;
1516
+        $Style		= isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND;
1517
+        $Mode		= isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL;
1518
+        $BoxWidth		= isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 5;
1519
+        $BoxHeight		= isset($Format["BoxHeight"]) ? $Format["BoxHeight"] : 5;
1520
+        $IconAreaWidth	= isset($Format["IconAreaWidth"]) ? $Format["IconAreaWidth"] : $BoxWidth;
1521
+        $IconAreaHeight	= isset($Format["IconAreaHeight"]) ? $Format["IconAreaHeight"] : $BoxHeight;
1522
+        $XSpacing		= isset($Format["XSpacing"]) ? $Format["XSpacing"] : 5;
1523
+
1524
+        $Data = $this->DataSet->getData();
1525
+
1526
+        foreach($Data["Series"] as $SerieName => $Serie)
1529 1527
         {
1530
-         list($PicWidth,$PicHeight) = $this->getPicInfo($Serie["Picture"]);
1531
-         if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; }
1532
-         if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; }
1528
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && isset($Serie["Picture"]))
1529
+        {
1530
+            list($PicWidth,$PicHeight) = $this->getPicInfo($Serie["Picture"]);
1531
+            if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; }
1532
+            if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; }
1533
+        }
1533 1534
         }
1534
-      }
1535 1535
 
1536
-     $YStep = max($this->FontSize,$IconAreaHeight) + 5;
1537
-     $XStep = $IconAreaWidth + 5;
1538
-     $XStep = $XSpacing;
1536
+        $YStep = max($this->FontSize,$IconAreaHeight) + 5;
1537
+        $XStep = $IconAreaWidth + 5;
1538
+        $XStep = $XSpacing;
1539 1539
 
1540
-     $X=100; $Y=100;
1540
+        $X=100; $Y=100;
1541 1541
 
1542
-     $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X;
1543
-     foreach($Data["Series"] as $SerieName => $Serie)
1544
-      {
1545
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
1542
+        $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X;
1543
+        foreach($Data["Series"] as $SerieName => $Serie)
1546 1544
         {
1547
-         if ( $Mode == LEGEND_VERTICAL )
1548
-          {
1549
-           $BoxArray = $this->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Serie["Description"]);
1545
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
1546
+        {
1547
+            if ( $Mode == LEGEND_VERTICAL )
1548
+            {
1549
+            $BoxArray = $this->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Serie["Description"]);
1550 1550
 
1551
-           if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
1552
-           if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
1553
-           if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
1551
+            if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
1552
+            if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
1553
+            if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
1554 1554
 
1555
-           $Lines = preg_split("/\n/",$Serie["Description"]);
1556
-           $vY = $vY + max($this->FontSize*count($Lines),$IconAreaHeight) + 5;
1557
-          }
1558
-         elseif ( $Mode == LEGEND_HORIZONTAL )
1559
-          {
1560
-           $Lines = preg_split("/\n/",$Serie["Description"]);
1561
-           $Width = "";
1562
-           foreach($Lines as $Key => $Value)
1555
+            $Lines = preg_split("/\n/",$Serie["Description"]);
1556
+            $vY = $vY + max($this->FontSize*count($Lines),$IconAreaHeight) + 5;
1557
+            }
1558
+            elseif ( $Mode == LEGEND_HORIZONTAL )
1559
+            {
1560
+            $Lines = preg_split("/\n/",$Serie["Description"]);
1561
+            $Width = "";
1562
+            foreach($Lines as $Key => $Value)
1563 1563
             {
1564
-             $BoxArray = $this->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$FontName,$FontSize,0,$Value);
1564
+                $BoxArray = $this->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$FontName,$FontSize,0,$Value);
1565 1565
 
1566
-             if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
1567
-             if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
1568
-             if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
1566
+                if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
1567
+                if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
1568
+                if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
1569 1569
 
1570
-             $Width[] = $BoxArray[1]["X"];
1570
+                $Width[] = $BoxArray[1]["X"];
1571 1571
             }
1572 1572
 
1573
-           $vX=max($Width)+$XStep;
1574
-          }
1573
+            $vX=max($Width)+$XStep;
1574
+            }
1575
+        }
1575 1576
         }
1576
-      }
1577
-     $vY=$vY-$YStep; $vX=$vX-$XStep;
1577
+        $vY=$vY-$YStep; $vX=$vX-$XStep;
1578 1578
 
1579
-     $TopOffset  = $Y - $Boundaries["T"];
1580
-     if ( $Boundaries["B"]-($vY+$IconAreaHeight) < $TopOffset ) { $Boundaries["B"] = $vY+$IconAreaHeight+$TopOffset; }
1579
+        $TopOffset  = $Y - $Boundaries["T"];
1580
+        if ( $Boundaries["B"]-($vY+$IconAreaHeight) < $TopOffset ) { $Boundaries["B"] = $vY+$IconAreaHeight+$TopOffset; }
1581 1581
 
1582
-     $Width  = ($Boundaries["R"]+$Margin) - ($Boundaries["L"]-$Margin);
1583
-     $Height = ($Boundaries["B"]+$Margin) - ($Boundaries["T"]-$Margin);
1582
+        $Width  = ($Boundaries["R"]+$Margin) - ($Boundaries["L"]-$Margin);
1583
+        $Height = ($Boundaries["B"]+$Margin) - ($Boundaries["T"]-$Margin);
1584 1584
 
1585
-     return(array("Width"=>$Width,"Height"=>$Height));
1585
+        return(array("Width"=>$Width,"Height"=>$Height));
1586 1586
     }
1587 1587
 
1588
-   /* Draw the legend of the active series */
1589
-   function drawLegend($X,$Y,$Format="")
1588
+    /* Draw the legend of the active series */
1589
+    function drawLegend($X,$Y,$Format="")
1590 1590
     {
1591
-     $Family	= isset($Format["Family"]) ? $Format["Family"] : LEGEND_FAMILY_BOX;
1592
-     $FontName	= isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
1593
-     $FontSize	= isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
1594
-     $FontR	= isset($Format["FontR"]) ? $Format["FontR"] : $this->FontColorR;
1595
-     $FontG	= isset($Format["FontG"]) ? $Format["FontG"] : $this->FontColorG;
1596
-     $FontB	= isset($Format["FontB"]) ? $Format["FontB"] : $this->FontColorB;
1597
-     $BoxWidth	= isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 5;
1598
-     $BoxHeight	= isset($Format["BoxHeight"]) ? $Format["BoxHeight"] : 5;
1599
-     $IconAreaWidth	= isset($Format["IconAreaWidth"]) ? $Format["IconAreaWidth"] : $BoxWidth;
1600
-     $IconAreaHeight	= isset($Format["IconAreaHeight"]) ? $Format["IconAreaHeight"] : $BoxHeight;
1601
-     $XSpacing	= isset($Format["XSpacing"]) ? $Format["XSpacing"] : 5;
1602
-     $Margin	= isset($Format["Margin"]) ? $Format["Margin"] : 5;
1603
-     $R		= isset($Format["R"]) ? $Format["R"] : 200;
1604
-     $G		= isset($Format["G"]) ? $Format["G"] : 200;
1605
-     $B		= isset($Format["B"]) ? $Format["B"] : 200;
1606
-     $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
1607
-     $BorderR	= isset($Format["BorderR"]) ? $Format["BorderR"] : 255;
1608
-     $BorderG	= isset($Format["BorderG"]) ? $Format["BorderG"] : 255;
1609
-     $BorderB	= isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
1610
-     $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
1611
-     $Style	= isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND;
1612
-     $Mode	= isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL;
1613
-
1614
-     if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
1615
-
1616
-     $Data = $this->DataSet->getData();
1617
-
1618
-     foreach($Data["Series"] as $SerieName => $Serie)
1619
-      {
1620
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && isset($Serie["Picture"]))
1621
-        {
1622
-         list($PicWidth,$PicHeight) = $this->getPicInfo($Serie["Picture"]);
1623
-         if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; }
1624
-         if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; }
1625
-        }
1626
-      }
1627
-
1628
-     $YStep = max($this->FontSize,$IconAreaHeight) + 5;
1629
-     $XStep = $IconAreaWidth + 5;
1630
-     $XStep = $XSpacing;
1631
-
1632
-     $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X;
1633
-     foreach($Data["Series"] as $SerieName => $Serie)
1634
-      {
1635
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
1636
-        {
1637
-         if ( $Mode == LEGEND_VERTICAL )
1638
-          {
1639
-           $BoxArray = $this->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Serie["Description"]);
1640
-
1641
-           if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
1642
-           if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
1643
-           if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
1644
-
1645
-           $Lines = preg_split("/\n/",$Serie["Description"]);
1646
-           $vY = $vY + max($this->FontSize*count($Lines),$IconAreaHeight) + 5;
1647
-          }
1648
-         elseif ( $Mode == LEGEND_HORIZONTAL )
1649
-          {
1650
-           $Lines = preg_split("/\n/",$Serie["Description"]);
1651
-           $Width = "";
1652
-           foreach($Lines as $Key => $Value)
1653
-            {
1654
-             $BoxArray = $this->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$FontName,$FontSize,0,$Value);
1655
-
1656
-             if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
1657
-             if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
1658
-             if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
1659
-
1660
-             $Width[] = $BoxArray[1]["X"];
1661
-            }
1662
-
1663
-           $vX=max($Width)+$XStep;
1664
-          }
1665
-        }
1666
-      }
1667
-     $vY=$vY-$YStep; $vX=$vX-$XStep;
1668
-
1669
-     $TopOffset  = $Y - $Boundaries["T"];
1670
-     if ( $Boundaries["B"]-($vY+$IconAreaHeight) < $TopOffset ) { $Boundaries["B"] = $vY+$IconAreaHeight+$TopOffset; }
1671
-
1672
-     if ( $Style == LEGEND_ROUND )
1673
-      $this->drawRoundedFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
1674
-     elseif ( $Style == LEGEND_BOX )
1675
-      $this->drawFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
1676
-
1677
-     $RestoreShadow = $this->Shadow; $this->Shadow = FALSE;
1678
-     foreach($Data["Series"] as $SerieName => $Serie)
1679
-      {
1680
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
1681
-        {
1682
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"];
1683
-         $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
1684
-
1685
-         if ( isset($Serie["Picture"]) )
1686
-          {
1687
-           $Picture = $Serie["Picture"];
1688
-           list($PicWidth,$PicHeight) = $this->getPicInfo($Picture);
1689
-           $PicX = $X+$IconAreaWidth/2; $PicY = $Y+$IconAreaHeight/2; 
1690
-
1691
-           $this->drawFromPNG($PicX-$PicWidth/2,$PicY-$PicHeight/2,$Picture);
1692
-          }
1693
-         else
1694
-          {
1695
-           if ( $Family == LEGEND_FAMILY_BOX )
1591
+        $Family	= isset($Format["Family"]) ? $Format["Family"] : LEGEND_FAMILY_BOX;
1592
+        $FontName	= isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
1593
+        $FontSize	= isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
1594
+        $FontR	= isset($Format["FontR"]) ? $Format["FontR"] : $this->FontColorR;
1595
+        $FontG	= isset($Format["FontG"]) ? $Format["FontG"] : $this->FontColorG;
1596
+        $FontB	= isset($Format["FontB"]) ? $Format["FontB"] : $this->FontColorB;
1597
+        $BoxWidth	= isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 5;
1598
+        $BoxHeight	= isset($Format["BoxHeight"]) ? $Format["BoxHeight"] : 5;
1599
+        $IconAreaWidth	= isset($Format["IconAreaWidth"]) ? $Format["IconAreaWidth"] : $BoxWidth;
1600
+        $IconAreaHeight	= isset($Format["IconAreaHeight"]) ? $Format["IconAreaHeight"] : $BoxHeight;
1601
+        $XSpacing	= isset($Format["XSpacing"]) ? $Format["XSpacing"] : 5;
1602
+        $Margin	= isset($Format["Margin"]) ? $Format["Margin"] : 5;
1603
+        $R		= isset($Format["R"]) ? $Format["R"] : 200;
1604
+        $G		= isset($Format["G"]) ? $Format["G"] : 200;
1605
+        $B		= isset($Format["B"]) ? $Format["B"] : 200;
1606
+        $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
1607
+        $BorderR	= isset($Format["BorderR"]) ? $Format["BorderR"] : 255;
1608
+        $BorderG	= isset($Format["BorderG"]) ? $Format["BorderG"] : 255;
1609
+        $BorderB	= isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
1610
+        $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
1611
+        $Style	= isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND;
1612
+        $Mode	= isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL;
1613
+
1614
+        if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
1615
+
1616
+        $Data = $this->DataSet->getData();
1617
+
1618
+        foreach($Data["Series"] as $SerieName => $Serie)
1619
+        {
1620
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && isset($Serie["Picture"]))
1621
+        {
1622
+            list($PicWidth,$PicHeight) = $this->getPicInfo($Serie["Picture"]);
1623
+            if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; }
1624
+            if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; }
1625
+        }
1626
+        }
1627
+
1628
+        $YStep = max($this->FontSize,$IconAreaHeight) + 5;
1629
+        $XStep = $IconAreaWidth + 5;
1630
+        $XStep = $XSpacing;
1631
+
1632
+        $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X;
1633
+        foreach($Data["Series"] as $SerieName => $Serie)
1634
+        {
1635
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
1636
+        {
1637
+            if ( $Mode == LEGEND_VERTICAL )
1696 1638
             {
1697
-             if ( $BoxWidth != $IconAreaWidth ) { $XOffset = floor(($IconAreaWidth-$BoxWidth)/2); } else { $XOffset = 0; }
1698
-             if ( $BoxHeight != $IconAreaHeight ) { $YOffset = floor(($IconAreaHeight-$BoxHeight)/2); } else { $YOffset = 0; }
1639
+            $BoxArray = $this->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Serie["Description"]);
1699 1640
 
1700
-             $this->drawFilledRectangle($X+1+$XOffset,$Y+1+$YOffset,$X+$BoxWidth+$XOffset+1,$Y+$BoxHeight+1+$YOffset,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
1701
-             $this->drawFilledRectangle($X+$XOffset,$Y+$YOffset,$X+$BoxWidth+$XOffset,$Y+$BoxHeight+$YOffset,array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20));
1641
+            if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
1642
+            if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
1643
+            if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
1644
+
1645
+            $Lines = preg_split("/\n/",$Serie["Description"]);
1646
+            $vY = $vY + max($this->FontSize*count($Lines),$IconAreaHeight) + 5;
1702 1647
             }
1703
-           elseif ( $Family == LEGEND_FAMILY_CIRCLE )
1648
+            elseif ( $Mode == LEGEND_HORIZONTAL )
1704 1649
             {
1705
-             $this->drawFilledCircle($X+1+$IconAreaWidth/2,$Y+1+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
1706
-             $this->drawFilledCircle($X+$IconAreaWidth/2,$Y+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20));
1707
-            }
1708
-           elseif ( $Family == LEGEND_FAMILY_LINE )
1650
+            $Lines = preg_split("/\n/",$Serie["Description"]);
1651
+            $Width = "";
1652
+            foreach($Lines as $Key => $Value)
1709 1653
             {
1710
-             $this->drawLine($X+1,$Y+1+$IconAreaHeight/2,$X+1+$IconAreaWidth,$Y+1+$IconAreaHeight/2,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20,"Ticks"=>$Ticks,"Weight"=>$Weight));
1711
-             $this->drawLine($X,$Y+$IconAreaHeight/2,$X+$IconAreaWidth,$Y+$IconAreaHeight/2,array("R"=>$R,"G"=>$G,"B"=>$B,"Ticks"=>$Ticks,"Weight"=>$Weight));
1712
-            }
1713
-          }
1654
+                $BoxArray = $this->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$FontName,$FontSize,0,$Value);
1714 1655
 
1715
-         if ( $Mode == LEGEND_VERTICAL )
1716
-          {
1717
-           $Lines = preg_split("/\n/",$Serie["Description"]);
1718
-           foreach($Lines as $Key => $Value)
1719
-            $this->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontSize"=>$FontSize,"FontName"=>$FontName));
1656
+                if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
1657
+                if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
1658
+                if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
1720 1659
 
1721
-           $Y=$Y+max($this->FontSize*count($Lines),$IconAreaHeight) + 5;
1722
-          }
1723
-         elseif ( $Mode == LEGEND_HORIZONTAL )
1724
-          {
1725
-           $Lines = preg_split("/\n/",$Serie["Description"]);
1726
-           $Width = "";
1727
-           foreach($Lines as $Key => $Value)
1728
-            {
1729
-             $BoxArray = $this->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontSize"=>$FontSize,"FontName"=>$FontName));
1730
-             $Width[] = $BoxArray[1]["X"];
1660
+                $Width[] = $BoxArray[1]["X"];
1661
+            }
1662
+
1663
+            $vX=max($Width)+$XStep;
1731 1664
             }
1732
-           $X=max($Width)+2+$XStep;
1733
-          }
1734 1665
         }
1735
-      }
1666
+        }
1667
+        $vY=$vY-$YStep; $vX=$vX-$XStep;
1736 1668
 
1669
+        $TopOffset  = $Y - $Boundaries["T"];
1670
+        if ( $Boundaries["B"]-($vY+$IconAreaHeight) < $TopOffset ) { $Boundaries["B"] = $vY+$IconAreaHeight+$TopOffset; }
1737 1671
 
1738
-     $this->Shadow = $RestoreShadow;
1739
-    }
1672
+        if ( $Style == LEGEND_ROUND )
1673
+        $this->drawRoundedFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
1674
+        elseif ( $Style == LEGEND_BOX )
1675
+        $this->drawFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
1740 1676
 
1741
-   function drawScale($Format="")
1742
-    {
1743
-     $Pos		= isset($Format["Pos"]) ? $Format["Pos"] : SCALE_POS_LEFTRIGHT;
1744
-     $Floating		= isset($Format["Floating"]) ? $Format["Floating"] : FALSE;
1745
-     $Mode		= isset($Format["Mode"]) ? $Format["Mode"] : SCALE_MODE_FLOATING;
1746
-     $RemoveXAxis	= isset($Format["RemoveXAxis"]) ? $Format["RemoveXAxis"] : FALSE;
1747
-     $MinDivHeight	= isset($Format["MinDivHeight"]) ? $Format["MinDivHeight"] : 20;
1748
-     $Factors		= isset($Format["Factors"]) ? $Format["Factors"] : array(1,2,5);
1749
-     $ManualScale	= isset($Format["ManualScale"]) ? $Format["ManualScale"] : array("0"=>array("Min"=>-100,"Max"=>100));
1750
-     $XMargin		= isset($Format["XMargin"]) ? $Format["XMargin"] : AUTO;
1751
-     $YMargin		= isset($Format["YMargin"]) ? $Format["YMargin"] : 0;
1752
-     $ScaleSpacing	= isset($Format["ScaleSpacing"]) ? $Format["ScaleSpacing"] : 15;
1753
-     $InnerTickWidth	= isset($Format["InnerTickWidth"]) ? $Format["InnerTickWidth"] : 2;
1754
-     $OuterTickWidth	= isset($Format["OuterTickWidth"]) ? $Format["OuterTickWidth"] : 2;
1755
-     $DrawXLines	= isset($Format["DrawXLines"]) ? $Format["DrawXLines"] : TRUE;
1756
-     $DrawYLines	= isset($Format["DrawYLines"]) ? $Format["DrawYLines"] : ALL;
1757
-     $GridTicks		= isset($Format["GridTicks"]) ? $Format["GridTicks"] : 4;
1758
-     $GridR		= isset($Format["GridR"]) ? $Format["GridR"] : 255;
1759
-     $GridG		= isset($Format["GridG"]) ? $Format["GridG"] : 255;
1760
-     $GridB		= isset($Format["GridB"]) ? $Format["GridB"] : 255;
1761
-     $GridAlpha		= isset($Format["GridAlpha"]) ? $Format["GridAlpha"] : 40;
1762
-     $AxisRo		= isset($Format["AxisR"]) ? $Format["AxisR"] : 0;
1763
-     $AxisGo		= isset($Format["AxisG"]) ? $Format["AxisG"] : 0;
1764
-     $AxisBo		= isset($Format["AxisB"]) ? $Format["AxisB"] : 0;
1765
-     $AxisAlpha		= isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 100;
1766
-     $TickRo		= isset($Format["TickR"]) ? $Format["TickR"] : 0;
1767
-     $TickGo		= isset($Format["TickG"]) ? $Format["TickG"] : 0;
1768
-     $TickBo		= isset($Format["TickB"]) ? $Format["TickB"] : 0;
1769
-     $TickAlpha		= isset($Format["TickAlpha"]) ? $Format["TickAlpha"] : 100;
1770
-     $DrawSubTicks	= isset($Format["DrawSubTicks"]) ? $Format["DrawSubTicks"] : FALSE;
1771
-     $InnerSubTickWidth	= isset($Format["InnerSubTickWidth"]) ? $Format["InnerSubTickWidth"] : 0;
1772
-     $OuterSubTickWidth	= isset($Format["OuterSubTickWidth"]) ? $Format["OuterSubTickWidth"] : 2;
1773
-     $SubTickR		= isset($Format["SubTickR"]) ? $Format["SubTickR"] : 255;
1774
-     $SubTickG		= isset($Format["SubTickG"]) ? $Format["SubTickG"] : 0;
1775
-     $SubTickB		= isset($Format["SubTickB"]) ? $Format["SubTickB"] : 0;
1776
-     $SubTickAlpha	= isset($Format["SubTickAlpha"]) ? $Format["SubTickAlpha"] : 100;
1777
-     $AutoAxisLabels	= isset($Format["AutoAxisLabels"]) ? $Format["AutoAxisLabels"] : TRUE;
1778
-     $XReleasePercent	= isset($Format["XReleasePercent"]) ? $Format["XReleasePercent"] : 1;
1779
-     $DrawArrows	= isset($Format["DrawArrows"]) ? $Format["DrawArrows"] : FALSE;
1780
-     $ArrowSize         = isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 8;
1781
-     $CycleBackground	= isset($Format["CycleBackground"]) ? $Format["CycleBackground"] : FALSE;
1782
-     $BackgroundR1	= isset($Format["BackgroundR1"]) ? $Format["BackgroundR1"] : 255;
1783
-     $BackgroundG1	= isset($Format["BackgroundG1"]) ? $Format["BackgroundG1"] : 255;
1784
-     $BackgroundB1	= isset($Format["BackgroundB1"]) ? $Format["BackgroundB1"] : 255;
1785
-     $BackgroundAlpha1	= isset($Format["BackgroundAlpha1"]) ? $Format["BackgroundAlpha1"] : 20;
1786
-     $BackgroundR2	= isset($Format["BackgroundR2"]) ? $Format["BackgroundR2"] : 230;
1787
-     $BackgroundG2	= isset($Format["BackgroundG2"]) ? $Format["BackgroundG2"] : 230;
1788
-     $BackgroundB2	= isset($Format["BackgroundB2"]) ? $Format["BackgroundB2"] : 230;
1789
-     $BackgroundAlpha2	= isset($Format["BackgroundAlpha2"]) ? $Format["BackgroundAlpha2"] : 20;
1790
-     $LabelingMethod	= isset($Format["LabelingMethod"]) ? $Format["LabelingMethod"] : LABELING_ALL;
1791
-     $LabelSkip		= isset($Format["LabelSkip"]) ? $Format["LabelSkip"] : 0;
1792
-     $LabelRotation	= isset($Format["LabelRotation"]) ? $Format["LabelRotation"] : 0;
1793
-     $SkippedAxisTicks	= isset($Format["SkippedAxisTicks"]) ? $Format["SkippedAxisTicks"] : $GridTicks+2;
1794
-     $SkippedAxisR	= isset($Format["SkippedAxisR"]) ? $Format["SkippedAxisR"] : $GridR;
1795
-     $SkippedAxisG	= isset($Format["SkippedAxisG"]) ? $Format["SkippedAxisG"] : $GridG;
1796
-     $SkippedAxisB	= isset($Format["SkippedAxisB"]) ? $Format["SkippedAxisB"] : $GridB;
1797
-     $SkippedAxisAlpha	= isset($Format["SkippedAxisAlpha"]) ? $Format["SkippedAxisAlpha"] : $GridAlpha-30;
1798
-     $SkippedTickR	= isset($Format["SkippedTickR"]) ? $Format["SkippedTickR"] : $TickRo;
1799
-     $SkippedTickG	= isset($Format["SkippedTickG"]) ? $Format["SkippedTickG"] : $TickGo;
1800
-     $SkippedTickB	= isset($Format["SkippedTicksB"]) ? $Format["SkippedTickB"] : $TickBo;
1801
-     $SkippedTickAlpha	= isset($Format["SkippedTickAlpha"]) ? $Format["SkippedTickAlpha"] : $TickAlpha-80;
1802
-     $SkippedInnerTickWidth	= isset($Format["SkippedInnerTickWidth"]) ? $Format["SkippedInnerTickWidth"] : 0;
1803
-     $SkippedOuterTickWidth	= isset($Format["SkippedOuterTickWidth"]) ? $Format["SkippedOuterTickWidth"] : 2;
1804
-
1805
-     /* Floating scale require X & Y margins to be set manually */
1806
-     if ( $Floating && ( $XMargin == AUTO || $YMargin == 0 ) ) { $Floating = FALSE; }
1807
-
1808
-     /* Skip a NOTICE event in case of an empty array */
1809
-     if ( $DrawYLines == NONE || $DrawYLines == FALSE ) { $DrawYLines = array("zarma"=>"31"); }
1810
-
1811
-     /* Define the color for the skipped elements */
1812
-     $SkippedAxisColor = array("R"=>$SkippedAxisR,"G"=>$SkippedAxisG,"B"=>$SkippedAxisB,"Alpha"=>$SkippedAxisAlpha,"Ticks"=>$SkippedAxisTicks);
1813
-     $SkippedTickColor = array("R"=>$SkippedTickR,"G"=>$SkippedTickG,"B"=>$SkippedTickB,"Alpha"=>$SkippedTickAlpha);
1814
-
1815
-     $Data = $this->DataSet->getData();
1816
-     if ( isset($Data["Abscissa"]) ) { $Abscissa = $Data["Abscissa"]; } else { $Abscissa = NULL; }
1817
-
1818
-     /* Unset the abscissa axis, needed if we display multiple charts on the same picture */
1819
-     if ( $Abscissa != NULL )
1820
-      {
1821
-       foreach($Data["Axis"] as $AxisID => $Parameters)
1822
-        { if ($Parameters["Identity"] == AXIS_X) { unset($Data["Axis"][$AxisID]); } }
1823
-      }
1677
+        $RestoreShadow = $this->Shadow; $this->Shadow = FALSE;
1678
+        foreach($Data["Series"] as $SerieName => $Serie)
1679
+        {
1680
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
1681
+        {
1682
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"];
1683
+            $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
1824 1684
 
1825
-     /* Build the scale settings */
1826
-     $GotXAxis = FALSE;
1827
-     foreach($Data["Axis"] as $AxisID => $AxisParameter)
1828
-      {
1829
-       if ( $AxisParameter["Identity"] == AXIS_X ) { $GotXAxis = TRUE; }
1685
+            if ( isset($Serie["Picture"]) )
1686
+            {
1687
+            $Picture = $Serie["Picture"];
1688
+            list($PicWidth,$PicHeight) = $this->getPicInfo($Picture);
1689
+            $PicX = $X+$IconAreaWidth/2; $PicY = $Y+$IconAreaHeight/2; 
1830 1690
 
1831
-       if ( $Pos == SCALE_POS_LEFTRIGHT && $AxisParameter["Identity"] == AXIS_Y)
1832
-        { $Height = $this->GraphAreaY2-$this->GraphAreaY1 - $YMargin*2; }
1833
-       elseif ( $Pos == SCALE_POS_LEFTRIGHT && $AxisParameter["Identity"] == AXIS_X)
1834
-        { $Height = $this->GraphAreaX2-$this->GraphAreaX1; }
1835
-       elseif ( $Pos == SCALE_POS_TOPBOTTOM && $AxisParameter["Identity"] == AXIS_Y)
1836
-        { $Height = $this->GraphAreaX2-$this->GraphAreaX1 - $YMargin*2;; }
1837
-       else
1838
-        { $Height = $this->GraphAreaY2-$this->GraphAreaY1; }
1691
+            $this->drawFromPNG($PicX-$PicWidth/2,$PicY-$PicHeight/2,$Picture);
1692
+            }
1693
+            else
1694
+            {
1695
+            if ( $Family == LEGEND_FAMILY_BOX )
1696
+            {
1697
+                if ( $BoxWidth != $IconAreaWidth ) { $XOffset = floor(($IconAreaWidth-$BoxWidth)/2); } else { $XOffset = 0; }
1698
+                if ( $BoxHeight != $IconAreaHeight ) { $YOffset = floor(($IconAreaHeight-$BoxHeight)/2); } else { $YOffset = 0; }
1839 1699
 
1840
-       $AxisMin = ABSOLUTE_MAX; $AxisMax = OUT_OF_SIGHT;
1841
-       if ( $Mode == SCALE_MODE_FLOATING || $Mode == SCALE_MODE_START0 )
1842
-        {
1843
-         foreach($Data["Series"] as $SerieID => $SerieParameter)
1844
-          {
1845
-           if ( $SerieParameter["Axis"] == $AxisID && $Data["Series"][$SerieID]["isDrawable"] && $Data["Abscissa"] != $SerieID)
1700
+                $this->drawFilledRectangle($X+1+$XOffset,$Y+1+$YOffset,$X+$BoxWidth+$XOffset+1,$Y+$BoxHeight+1+$YOffset,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
1701
+                $this->drawFilledRectangle($X+$XOffset,$Y+$YOffset,$X+$BoxWidth+$XOffset,$Y+$BoxHeight+$YOffset,array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20));
1702
+            }
1703
+            elseif ( $Family == LEGEND_FAMILY_CIRCLE )
1846 1704
             {
1847
-             $AxisMax = max($AxisMax,$Data["Series"][$SerieID]["Max"]);
1848
-             $AxisMin = min($AxisMin,$Data["Series"][$SerieID]["Min"]);
1705
+                $this->drawFilledCircle($X+1+$IconAreaWidth/2,$Y+1+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
1706
+                $this->drawFilledCircle($X+$IconAreaWidth/2,$Y+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20));
1849 1707
             }
1850
-          }
1851
-         $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent;
1852
-
1853
-         $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin;
1854
-         if ( $Mode == SCALE_MODE_START0 ) { $Data["Axis"][$AxisID]["Min"] = 0; }
1708
+            elseif ( $Family == LEGEND_FAMILY_LINE )
1709
+            {
1710
+                $this->drawLine($X+1,$Y+1+$IconAreaHeight/2,$X+1+$IconAreaWidth,$Y+1+$IconAreaHeight/2,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20,"Ticks"=>$Ticks,"Weight"=>$Weight));
1711
+                $this->drawLine($X,$Y+$IconAreaHeight/2,$X+$IconAreaWidth,$Y+$IconAreaHeight/2,array("R"=>$R,"G"=>$G,"B"=>$B,"Ticks"=>$Ticks,"Weight"=>$Weight));
1712
+            }
1713
+            }
1714
+
1715
+            if ( $Mode == LEGEND_VERTICAL )
1716
+            {
1717
+            $Lines = preg_split("/\n/",$Serie["Description"]);
1718
+            foreach($Lines as $Key => $Value)
1719
+            $this->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontSize"=>$FontSize,"FontName"=>$FontName));
1720
+
1721
+            $Y=$Y+max($this->FontSize*count($Lines),$IconAreaHeight) + 5;
1722
+            }
1723
+            elseif ( $Mode == LEGEND_HORIZONTAL )
1724
+            {
1725
+            $Lines = preg_split("/\n/",$Serie["Description"]);
1726
+            $Width = "";
1727
+            foreach($Lines as $Key => $Value)
1728
+            {
1729
+                $BoxArray = $this->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontSize"=>$FontSize,"FontName"=>$FontName));
1730
+                $Width[] = $BoxArray[1]["X"];
1731
+            }
1732
+            $X=max($Width)+2+$XStep;
1733
+            }
1734
+        }
1735
+        }
1736
+
1737
+
1738
+        $this->Shadow = $RestoreShadow;
1739
+    }
1740
+
1741
+    function drawScale($Format="")
1742
+    {
1743
+        $Pos		= isset($Format["Pos"]) ? $Format["Pos"] : SCALE_POS_LEFTRIGHT;
1744
+        $Floating		= isset($Format["Floating"]) ? $Format["Floating"] : FALSE;
1745
+        $Mode		= isset($Format["Mode"]) ? $Format["Mode"] : SCALE_MODE_FLOATING;
1746
+        $RemoveXAxis	= isset($Format["RemoveXAxis"]) ? $Format["RemoveXAxis"] : FALSE;
1747
+        $MinDivHeight	= isset($Format["MinDivHeight"]) ? $Format["MinDivHeight"] : 20;
1748
+        $Factors		= isset($Format["Factors"]) ? $Format["Factors"] : array(1,2,5);
1749
+        $ManualScale	= isset($Format["ManualScale"]) ? $Format["ManualScale"] : array("0"=>array("Min"=>-100,"Max"=>100));
1750
+        $XMargin		= isset($Format["XMargin"]) ? $Format["XMargin"] : AUTO;
1751
+        $YMargin		= isset($Format["YMargin"]) ? $Format["YMargin"] : 0;
1752
+        $ScaleSpacing	= isset($Format["ScaleSpacing"]) ? $Format["ScaleSpacing"] : 15;
1753
+        $InnerTickWidth	= isset($Format["InnerTickWidth"]) ? $Format["InnerTickWidth"] : 2;
1754
+        $OuterTickWidth	= isset($Format["OuterTickWidth"]) ? $Format["OuterTickWidth"] : 2;
1755
+        $DrawXLines	= isset($Format["DrawXLines"]) ? $Format["DrawXLines"] : TRUE;
1756
+        $DrawYLines	= isset($Format["DrawYLines"]) ? $Format["DrawYLines"] : ALL;
1757
+        $GridTicks		= isset($Format["GridTicks"]) ? $Format["GridTicks"] : 4;
1758
+        $GridR		= isset($Format["GridR"]) ? $Format["GridR"] : 255;
1759
+        $GridG		= isset($Format["GridG"]) ? $Format["GridG"] : 255;
1760
+        $GridB		= isset($Format["GridB"]) ? $Format["GridB"] : 255;
1761
+        $GridAlpha		= isset($Format["GridAlpha"]) ? $Format["GridAlpha"] : 40;
1762
+        $AxisRo		= isset($Format["AxisR"]) ? $Format["AxisR"] : 0;
1763
+        $AxisGo		= isset($Format["AxisG"]) ? $Format["AxisG"] : 0;
1764
+        $AxisBo		= isset($Format["AxisB"]) ? $Format["AxisB"] : 0;
1765
+        $AxisAlpha		= isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 100;
1766
+        $TickRo		= isset($Format["TickR"]) ? $Format["TickR"] : 0;
1767
+        $TickGo		= isset($Format["TickG"]) ? $Format["TickG"] : 0;
1768
+        $TickBo		= isset($Format["TickB"]) ? $Format["TickB"] : 0;
1769
+        $TickAlpha		= isset($Format["TickAlpha"]) ? $Format["TickAlpha"] : 100;
1770
+        $DrawSubTicks	= isset($Format["DrawSubTicks"]) ? $Format["DrawSubTicks"] : FALSE;
1771
+        $InnerSubTickWidth	= isset($Format["InnerSubTickWidth"]) ? $Format["InnerSubTickWidth"] : 0;
1772
+        $OuterSubTickWidth	= isset($Format["OuterSubTickWidth"]) ? $Format["OuterSubTickWidth"] : 2;
1773
+        $SubTickR		= isset($Format["SubTickR"]) ? $Format["SubTickR"] : 255;
1774
+        $SubTickG		= isset($Format["SubTickG"]) ? $Format["SubTickG"] : 0;
1775
+        $SubTickB		= isset($Format["SubTickB"]) ? $Format["SubTickB"] : 0;
1776
+        $SubTickAlpha	= isset($Format["SubTickAlpha"]) ? $Format["SubTickAlpha"] : 100;
1777
+        $AutoAxisLabels	= isset($Format["AutoAxisLabels"]) ? $Format["AutoAxisLabels"] : TRUE;
1778
+        $XReleasePercent	= isset($Format["XReleasePercent"]) ? $Format["XReleasePercent"] : 1;
1779
+        $DrawArrows	= isset($Format["DrawArrows"]) ? $Format["DrawArrows"] : FALSE;
1780
+        $ArrowSize         = isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 8;
1781
+        $CycleBackground	= isset($Format["CycleBackground"]) ? $Format["CycleBackground"] : FALSE;
1782
+        $BackgroundR1	= isset($Format["BackgroundR1"]) ? $Format["BackgroundR1"] : 255;
1783
+        $BackgroundG1	= isset($Format["BackgroundG1"]) ? $Format["BackgroundG1"] : 255;
1784
+        $BackgroundB1	= isset($Format["BackgroundB1"]) ? $Format["BackgroundB1"] : 255;
1785
+        $BackgroundAlpha1	= isset($Format["BackgroundAlpha1"]) ? $Format["BackgroundAlpha1"] : 20;
1786
+        $BackgroundR2	= isset($Format["BackgroundR2"]) ? $Format["BackgroundR2"] : 230;
1787
+        $BackgroundG2	= isset($Format["BackgroundG2"]) ? $Format["BackgroundG2"] : 230;
1788
+        $BackgroundB2	= isset($Format["BackgroundB2"]) ? $Format["BackgroundB2"] : 230;
1789
+        $BackgroundAlpha2	= isset($Format["BackgroundAlpha2"]) ? $Format["BackgroundAlpha2"] : 20;
1790
+        $LabelingMethod	= isset($Format["LabelingMethod"]) ? $Format["LabelingMethod"] : LABELING_ALL;
1791
+        $LabelSkip		= isset($Format["LabelSkip"]) ? $Format["LabelSkip"] : 0;
1792
+        $LabelRotation	= isset($Format["LabelRotation"]) ? $Format["LabelRotation"] : 0;
1793
+        $SkippedAxisTicks	= isset($Format["SkippedAxisTicks"]) ? $Format["SkippedAxisTicks"] : $GridTicks+2;
1794
+        $SkippedAxisR	= isset($Format["SkippedAxisR"]) ? $Format["SkippedAxisR"] : $GridR;
1795
+        $SkippedAxisG	= isset($Format["SkippedAxisG"]) ? $Format["SkippedAxisG"] : $GridG;
1796
+        $SkippedAxisB	= isset($Format["SkippedAxisB"]) ? $Format["SkippedAxisB"] : $GridB;
1797
+        $SkippedAxisAlpha	= isset($Format["SkippedAxisAlpha"]) ? $Format["SkippedAxisAlpha"] : $GridAlpha-30;
1798
+        $SkippedTickR	= isset($Format["SkippedTickR"]) ? $Format["SkippedTickR"] : $TickRo;
1799
+        $SkippedTickG	= isset($Format["SkippedTickG"]) ? $Format["SkippedTickG"] : $TickGo;
1800
+        $SkippedTickB	= isset($Format["SkippedTicksB"]) ? $Format["SkippedTickB"] : $TickBo;
1801
+        $SkippedTickAlpha	= isset($Format["SkippedTickAlpha"]) ? $Format["SkippedTickAlpha"] : $TickAlpha-80;
1802
+        $SkippedInnerTickWidth	= isset($Format["SkippedInnerTickWidth"]) ? $Format["SkippedInnerTickWidth"] : 0;
1803
+        $SkippedOuterTickWidth	= isset($Format["SkippedOuterTickWidth"]) ? $Format["SkippedOuterTickWidth"] : 2;
1804
+
1805
+        /* Floating scale require X & Y margins to be set manually */
1806
+        if ( $Floating && ( $XMargin == AUTO || $YMargin == 0 ) ) { $Floating = FALSE; }
1807
+
1808
+        /* Skip a NOTICE event in case of an empty array */
1809
+        if ( $DrawYLines == NONE || $DrawYLines == FALSE ) { $DrawYLines = array("zarma"=>"31"); }
1810
+
1811
+        /* Define the color for the skipped elements */
1812
+        $SkippedAxisColor = array("R"=>$SkippedAxisR,"G"=>$SkippedAxisG,"B"=>$SkippedAxisB,"Alpha"=>$SkippedAxisAlpha,"Ticks"=>$SkippedAxisTicks);
1813
+        $SkippedTickColor = array("R"=>$SkippedTickR,"G"=>$SkippedTickG,"B"=>$SkippedTickB,"Alpha"=>$SkippedTickAlpha);
1814
+
1815
+        $Data = $this->DataSet->getData();
1816
+        if ( isset($Data["Abscissa"]) ) { $Abscissa = $Data["Abscissa"]; } else { $Abscissa = NULL; }
1817
+
1818
+        /* Unset the abscissa axis, needed if we display multiple charts on the same picture */
1819
+        if ( $Abscissa != NULL )
1820
+        {
1821
+        foreach($Data["Axis"] as $AxisID => $Parameters)
1822
+        { if ($Parameters["Identity"] == AXIS_X) { unset($Data["Axis"][$AxisID]); } }
1823
+        }
1824
+
1825
+        /* Build the scale settings */
1826
+        $GotXAxis = FALSE;
1827
+        foreach($Data["Axis"] as $AxisID => $AxisParameter)
1828
+        {
1829
+        if ( $AxisParameter["Identity"] == AXIS_X ) { $GotXAxis = TRUE; }
1830
+
1831
+        if ( $Pos == SCALE_POS_LEFTRIGHT && $AxisParameter["Identity"] == AXIS_Y)
1832
+        { $Height = $this->GraphAreaY2-$this->GraphAreaY1 - $YMargin*2; }
1833
+        elseif ( $Pos == SCALE_POS_LEFTRIGHT && $AxisParameter["Identity"] == AXIS_X)
1834
+        { $Height = $this->GraphAreaX2-$this->GraphAreaX1; }
1835
+        elseif ( $Pos == SCALE_POS_TOPBOTTOM && $AxisParameter["Identity"] == AXIS_Y)
1836
+        { $Height = $this->GraphAreaX2-$this->GraphAreaX1 - $YMargin*2;; }
1837
+        else
1838
+        { $Height = $this->GraphAreaY2-$this->GraphAreaY1; }
1839
+
1840
+        $AxisMin = ABSOLUTE_MAX; $AxisMax = OUT_OF_SIGHT;
1841
+        if ( $Mode == SCALE_MODE_FLOATING || $Mode == SCALE_MODE_START0 )
1842
+        {
1843
+            foreach($Data["Series"] as $SerieID => $SerieParameter)
1844
+            {
1845
+            if ( $SerieParameter["Axis"] == $AxisID && $Data["Series"][$SerieID]["isDrawable"] && $Data["Abscissa"] != $SerieID)
1846
+            {
1847
+                $AxisMax = max($AxisMax,$Data["Series"][$SerieID]["Max"]);
1848
+                $AxisMin = min($AxisMin,$Data["Series"][$SerieID]["Min"]);
1849
+            }
1850
+            }
1851
+            $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent;
1852
+
1853
+            $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin;
1854
+            if ( $Mode == SCALE_MODE_START0 ) { $Data["Axis"][$AxisID]["Min"] = 0; }
1855 1855
         }
1856
-       elseif ( $Mode == SCALE_MODE_MANUAL )
1856
+        elseif ( $Mode == SCALE_MODE_MANUAL )
1857 1857
         {
1858
-         if ( isset($ManualScale[$AxisID]["Min"]) && isset($ManualScale[$AxisID]["Max"]) )
1859
-          {
1860
-           $Data["Axis"][$AxisID]["Min"] = $ManualScale[$AxisID]["Min"];
1861
-           $Data["Axis"][$AxisID]["Max"] = $ManualScale[$AxisID]["Max"];
1862
-          }
1863
-         else
1864
-          { echo "Manual scale boundaries not set."; exit(); }
1858
+            if ( isset($ManualScale[$AxisID]["Min"]) && isset($ManualScale[$AxisID]["Max"]) )
1859
+            {
1860
+            $Data["Axis"][$AxisID]["Min"] = $ManualScale[$AxisID]["Min"];
1861
+            $Data["Axis"][$AxisID]["Max"] = $ManualScale[$AxisID]["Max"];
1862
+            }
1863
+            else
1864
+            { echo "Manual scale boundaries not set."; exit(); }
1865 1865
         }
1866
-       elseif ( $Mode == SCALE_MODE_ADDALL || $Mode == SCALE_MODE_ADDALL_START0 )
1866
+        elseif ( $Mode == SCALE_MODE_ADDALL || $Mode == SCALE_MODE_ADDALL_START0 )
1867 1867
         {
1868
-         $Series = "";
1869
-         foreach($Data["Series"] as $SerieID => $SerieParameter)
1870
-          { if ( $SerieParameter["Axis"] == $AxisID && $SerieParameter["isDrawable"] && $Data["Abscissa"] != $SerieID ) { $Series[$SerieID] = count($Data["Series"][$SerieID]["Data"]); } }
1868
+            $Series = "";
1869
+            foreach($Data["Series"] as $SerieID => $SerieParameter)
1870
+            { if ( $SerieParameter["Axis"] == $AxisID && $SerieParameter["isDrawable"] && $Data["Abscissa"] != $SerieID ) { $Series[$SerieID] = count($Data["Series"][$SerieID]["Data"]); } }
1871 1871
 
1872
-         for ($ID=0;$ID<=max($Series)-1;$ID++)
1873
-          {
1874
-           $PointMin = 0; $PointMax = 0;
1875
-           foreach($Series as $SerieID => $ValuesCount )
1872
+            for ($ID=0;$ID<=max($Series)-1;$ID++)
1876 1873
             {
1877
-             if (isset($Data["Series"][$SerieID]["Data"][$ID]) && $Data["Series"][$SerieID]["Data"][$ID] != NULL )
1878
-              {
1879
-               $Value = $Data["Series"][$SerieID]["Data"][$ID];
1880
-               if ( $Value > 0 ) { $PointMax = $PointMax + $Value; } else { $PointMin = $PointMin + $Value; }
1881
-              }
1874
+            $PointMin = 0; $PointMax = 0;
1875
+            foreach($Series as $SerieID => $ValuesCount )
1876
+            {
1877
+                if (isset($Data["Series"][$SerieID]["Data"][$ID]) && $Data["Series"][$SerieID]["Data"][$ID] != NULL )
1878
+                {
1879
+                $Value = $Data["Series"][$SerieID]["Data"][$ID];
1880
+                if ( $Value > 0 ) { $PointMax = $PointMax + $Value; } else { $PointMin = $PointMin + $Value; }
1881
+                }
1882
+            }
1883
+            $AxisMax = max($AxisMax,$PointMax);
1884
+            $AxisMin = min($AxisMin,$PointMin);
1882 1885
             }
1883
-           $AxisMax = max($AxisMax,$PointMax);
1884
-           $AxisMin = min($AxisMin,$PointMin);
1885
-          }
1886
-         $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent;
1887
-         $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin;
1886
+            $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent;
1887
+            $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin;
1888 1888
         }
1889
-       $MaxDivs = floor($Height/$MinDivHeight);
1889
+        $MaxDivs = floor($Height/$MinDivHeight);
1890 1890
 
1891
-       if ( $Mode == SCALE_MODE_ADDALL_START0 ) { $Data["Axis"][$AxisID]["Min"] = 0; }
1891
+        if ( $Mode == SCALE_MODE_ADDALL_START0 ) { $Data["Axis"][$AxisID]["Min"] = 0; }
1892 1892
 
1893
-       $Scale   = $this->computeScale($Data["Axis"][$AxisID]["Min"],$Data["Axis"][$AxisID]["Max"],$MaxDivs,$Factors,$AxisID);
1893
+        $Scale   = $this->computeScale($Data["Axis"][$AxisID]["Min"],$Data["Axis"][$AxisID]["Max"],$MaxDivs,$Factors,$AxisID);
1894 1894
 
1895
-       $Data["Axis"][$AxisID]["Margin"]    = $AxisParameter["Identity"] == AXIS_X ? $XMargin : $YMargin;
1896
-       $Data["Axis"][$AxisID]["ScaleMin"]  = $Scale["XMin"];
1897
-       $Data["Axis"][$AxisID]["ScaleMax"]  = $Scale["XMax"];
1898
-       $Data["Axis"][$AxisID]["Rows"]      = $Scale["Rows"];
1899
-       $Data["Axis"][$AxisID]["RowHeight"] = $Scale["RowHeight"];
1895
+        $Data["Axis"][$AxisID]["Margin"]    = $AxisParameter["Identity"] == AXIS_X ? $XMargin : $YMargin;
1896
+        $Data["Axis"][$AxisID]["ScaleMin"]  = $Scale["XMin"];
1897
+        $Data["Axis"][$AxisID]["ScaleMax"]  = $Scale["XMax"];
1898
+        $Data["Axis"][$AxisID]["Rows"]      = $Scale["Rows"];
1899
+        $Data["Axis"][$AxisID]["RowHeight"] = $Scale["RowHeight"];
1900 1900
 
1901
-       if ( isset($Scale["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = $Scale["Format"]; }
1901
+        if ( isset($Scale["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = $Scale["Format"]; }
1902 1902
 
1903
-       if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; }
1904
-       if ( !isset($Data["Axis"][$AxisID]["Format"]) )  { $Data["Axis"][$AxisID]["Format"] = NULL; }
1905
-       if ( !isset($Data["Axis"][$AxisID]["Unit"]) )    { $Data["Axis"][$AxisID]["Unit"] = NULL; }
1906
-      }
1903
+        if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; }
1904
+        if ( !isset($Data["Axis"][$AxisID]["Format"]) )  { $Data["Axis"][$AxisID]["Format"] = NULL; }
1905
+        if ( !isset($Data["Axis"][$AxisID]["Unit"]) )    { $Data["Axis"][$AxisID]["Unit"] = NULL; }
1906
+        }
1907 1907
 
1908
-     /* Still no X axis */
1909
-     if ( $GotXAxis == FALSE )
1910
-      {
1911
-       if ( $Abscissa != NULL )
1908
+        /* Still no X axis */
1909
+        if ( $GotXAxis == FALSE )
1910
+        {
1911
+        if ( $Abscissa != NULL )
1912 1912
         {
1913
-         $Points = count($Data["Series"][$Abscissa]["Data"]);
1914
-         if ( $AutoAxisLabels )
1915
-          $AxisName = isset($Data["Series"][$Abscissa]["Description"]) ? $Data["Series"][$Abscissa]["Description"] : NULL;
1916
-         else
1917
-          $AxisName = NULL;
1913
+            $Points = count($Data["Series"][$Abscissa]["Data"]);
1914
+            if ( $AutoAxisLabels )
1915
+            $AxisName = isset($Data["Series"][$Abscissa]["Description"]) ? $Data["Series"][$Abscissa]["Description"] : NULL;
1916
+            else
1917
+            $AxisName = NULL;
1918 1918
         }
1919
-       else
1919
+        else
1920 1920
         {
1921
-         $Points = 0;
1922
-         $AxisName = isset($Data["XAxisName"]) ? $Data["XAxisName"] : NULL;
1923
-         foreach($Data["Series"] as $SerieID => $SerieParameter)
1924
-          { if ( $SerieParameter["isDrawable"] ) { $Points = max($Points,count($SerieParameter["Data"])); } }
1921
+            $Points = 0;
1922
+            $AxisName = isset($Data["XAxisName"]) ? $Data["XAxisName"] : NULL;
1923
+            foreach($Data["Series"] as $SerieID => $SerieParameter)
1924
+            { if ( $SerieParameter["isDrawable"] ) { $Points = max($Points,count($SerieParameter["Data"])); } }
1925 1925
         }
1926 1926
 
1927
-       $AxisID = count($Data["Axis"]);
1928
-       $Data["Axis"][$AxisID]["Identity"] = AXIS_X;
1929
-       if ( $Pos == SCALE_POS_LEFTRIGHT ) { $Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_BOTTOM; } else { $Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_LEFT; }
1930
-       if ( isset($Data["AbscissaName"]) ) { $Data["Axis"][$AxisID]["Name"] = $Data["AbscissaName"]; }
1931
-       if ( $XMargin == AUTO )
1927
+        $AxisID = count($Data["Axis"]);
1928
+        $Data["Axis"][$AxisID]["Identity"] = AXIS_X;
1929
+        if ( $Pos == SCALE_POS_LEFTRIGHT ) { $Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_BOTTOM; } else { $Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_LEFT; }
1930
+        if ( isset($Data["AbscissaName"]) ) { $Data["Axis"][$AxisID]["Name"] = $Data["AbscissaName"]; }
1931
+        if ( $XMargin == AUTO )
1932 1932
         {
1933
-         if ( $Pos == SCALE_POS_LEFTRIGHT )
1934
-          { $Height = $this->GraphAreaX2-$this->GraphAreaX1; }
1935
-         else
1936
-          { $Height = $this->GraphAreaY2-$this->GraphAreaY1; }
1937
-
1938
-         if ( $Points == 1 )
1939
-          $Data["Axis"][$AxisID]["Margin"] = $Height / 2;
1940
-         else
1941
-          $Data["Axis"][$AxisID]["Margin"] = ($Height/$Points) / 2;
1933
+            if ( $Pos == SCALE_POS_LEFTRIGHT )
1934
+            { $Height = $this->GraphAreaX2-$this->GraphAreaX1; }
1935
+            else
1936
+            { $Height = $this->GraphAreaY2-$this->GraphAreaY1; }
1937
+
1938
+            if ( $Points == 1 )
1939
+            $Data["Axis"][$AxisID]["Margin"] = $Height / 2;
1940
+            else
1941
+            $Data["Axis"][$AxisID]["Margin"] = ($Height/$Points) / 2;
1942 1942
         }
1943
-       else
1943
+        else
1944 1944
         { $Data["Axis"][$AxisID]["Margin"] = $XMargin; }
1945
-       $Data["Axis"][$AxisID]["Rows"] = $Points-1;
1946
-       if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; }
1947
-       if ( !isset($Data["Axis"][$AxisID]["Format"]) )  { $Data["Axis"][$AxisID]["Format"] = NULL; }
1948
-       if ( !isset($Data["Axis"][$AxisID]["Unit"]) )    { $Data["Axis"][$AxisID]["Unit"] = NULL; }
1949
-      }
1950
-
1951
-     /* Do we need to reverse the abscissa position? */
1952
-     if ( $Pos != SCALE_POS_LEFTRIGHT )
1953
-      {
1954
-       if ( $Data["AbsicssaPosition"] == AXIS_POSITION_BOTTOM )
1945
+        $Data["Axis"][$AxisID]["Rows"] = $Points-1;
1946
+        if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; }
1947
+        if ( !isset($Data["Axis"][$AxisID]["Format"]) )  { $Data["Axis"][$AxisID]["Format"] = NULL; }
1948
+        if ( !isset($Data["Axis"][$AxisID]["Unit"]) )    { $Data["Axis"][$AxisID]["Unit"] = NULL; }
1949
+        }
1950
+
1951
+        /* Do we need to reverse the abscissa position? */
1952
+        if ( $Pos != SCALE_POS_LEFTRIGHT )
1953
+        {
1954
+        if ( $Data["AbsicssaPosition"] == AXIS_POSITION_BOTTOM )
1955 1955
         { $Data["AbsicssaPosition"] = AXIS_POSITION_LEFT; }
1956
-       else
1956
+        else
1957 1957
         { $Data["AbsicssaPosition"] = AXIS_POSITION_RIGHT; }
1958
-      }
1959
-     $Data["Axis"][$AxisID]["Position"] = $Data["AbsicssaPosition"];
1958
+        }
1959
+        $Data["Axis"][$AxisID]["Position"] = $Data["AbsicssaPosition"];
1960 1960
 
1961
-     $this->DataSet->saveOrientation($Pos);
1962
-     $this->DataSet->saveAxisConfig($Data["Axis"]);
1963
-     $this->DataSet->saveYMargin($YMargin);
1961
+        $this->DataSet->saveOrientation($Pos);
1962
+        $this->DataSet->saveAxisConfig($Data["Axis"]);
1963
+        $this->DataSet->saveYMargin($YMargin);
1964 1964
 
1965
-     $FontColorRo = $this->FontColorR; $FontColorGo = $this->FontColorG; $FontColorBo = $this->FontColorB;
1965
+        $FontColorRo = $this->FontColorR; $FontColorGo = $this->FontColorG; $FontColorBo = $this->FontColorB;
1966 1966
 
1967
-     $AxisPos["L"] = $this->GraphAreaX1; $AxisPos["R"] = $this->GraphAreaX2; $AxisPos["T"] = $this->GraphAreaY1; $AxisPos["B"] = $this->GraphAreaY2;
1968
-     foreach($Data["Axis"] as $AxisID => $Parameters)
1969
-      {
1970
-       if ( isset($Parameters["Color"]) )
1967
+        $AxisPos["L"] = $this->GraphAreaX1; $AxisPos["R"] = $this->GraphAreaX2; $AxisPos["T"] = $this->GraphAreaY1; $AxisPos["B"] = $this->GraphAreaY2;
1968
+        foreach($Data["Axis"] as $AxisID => $Parameters)
1969
+        {
1970
+        if ( isset($Parameters["Color"]) )
1971 1971
         {
1972
-         $AxisR = $Parameters["Color"]["R"]; $AxisG = $Parameters["Color"]["G"]; $AxisB = $Parameters["Color"]["B"];
1973
-         $TickR = $Parameters["Color"]["R"]; $TickG = $Parameters["Color"]["G"]; $TickB = $Parameters["Color"]["B"];
1974
-         $this->setFontProperties(array("R"=>$Parameters["Color"]["R"],"G"=>$Parameters["Color"]["G"],"B"=>$Parameters["Color"]["B"]));
1972
+            $AxisR = $Parameters["Color"]["R"]; $AxisG = $Parameters["Color"]["G"]; $AxisB = $Parameters["Color"]["B"];
1973
+            $TickR = $Parameters["Color"]["R"]; $TickG = $Parameters["Color"]["G"]; $TickB = $Parameters["Color"]["B"];
1974
+            $this->setFontProperties(array("R"=>$Parameters["Color"]["R"],"G"=>$Parameters["Color"]["G"],"B"=>$Parameters["Color"]["B"]));
1975 1975
         }
1976
-       else
1976
+        else
1977 1977
         {
1978
-         $AxisR = $AxisRo; $AxisG = $AxisGo; $AxisB = $AxisBo;
1979
-         $TickR = $TickRo; $TickG = $TickGo; $TickB = $TickBo;
1980
-         $this->setFontProperties(array("R"=>$FontColorRo,"G"=>$FontColorGo,"B"=>$FontColorBo));
1978
+            $AxisR = $AxisRo; $AxisG = $AxisGo; $AxisB = $AxisBo;
1979
+            $TickR = $TickRo; $TickG = $TickGo; $TickB = $TickBo;
1980
+            $this->setFontProperties(array("R"=>$FontColorRo,"G"=>$FontColorGo,"B"=>$FontColorBo));
1981 1981
         }
1982 1982
 
1983
-       $LastValue = "w00t"; $ID = 1;
1984
-       if ( $Parameters["Identity"] == AXIS_X )
1983
+        $LastValue = "w00t"; $ID = 1;
1984
+        if ( $Parameters["Identity"] == AXIS_X )
1985 1985
         {
1986
-         if ( $Pos == SCALE_POS_LEFTRIGHT )
1987
-          {
1988
-           if ( $Parameters["Position"] == AXIS_POSITION_BOTTOM )
1986
+            if ( $Pos == SCALE_POS_LEFTRIGHT )
1989 1987
             {
1990
-             if ( $LabelRotation == 0 )					{ $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $YLabelOffset = 2; }
1991
-             if ( $LabelRotation > 0 && $LabelRotation < 190 )		{ $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $YLabelOffset = 5; }
1992
-             if ( $LabelRotation == 180 )				{ $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $YLabelOffset = 5; }
1993
-             if ( $LabelRotation > 180 && $LabelRotation < 360 )	{ $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $YLabelOffset = 2; }
1988
+            if ( $Parameters["Position"] == AXIS_POSITION_BOTTOM )
1989
+            {
1990
+                if ( $LabelRotation == 0 )					{ $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $YLabelOffset = 2; }
1991
+                if ( $LabelRotation > 0 && $LabelRotation < 190 )		{ $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $YLabelOffset = 5; }
1992
+                if ( $LabelRotation == 180 )				{ $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $YLabelOffset = 5; }
1993
+                if ( $LabelRotation > 180 && $LabelRotation < 360 )	{ $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $YLabelOffset = 2; }
1994 1994
 
1995
-             if ( !$RemoveXAxis )
1996
-              {
1997
-               if ( $Floating )
1995
+                if ( !$RemoveXAxis )
1996
+                {
1997
+                if ( $Floating )
1998 1998
                 { $FloatingOffset = $YMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
1999
-               else
1999
+                else
2000 2000
                 { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["B"],$this->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2001 2001
 
2002
-               if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2003
-              }
2002
+                if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2003
+                }
2004 2004
 
2005
-             $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
2005
+                $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
2006 2006
 
2007
-             if ($Parameters["Rows"] == 0 ) { $Step  = $Width; } else { $Step  = $Width / ($Parameters["Rows"]); }
2007
+                if ($Parameters["Rows"] == 0 ) { $Step  = $Width; } else { $Step  = $Width / ($Parameters["Rows"]); }
2008 2008
              
2009
-             $MaxBottom = $AxisPos["B"];
2010
-             for($i=0;$i<=$Parameters["Rows"];$i++)
2011
-              {
2012
-               $XPos  = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
2013
-               $YPos  = $AxisPos["B"];
2009
+                $MaxBottom = $AxisPos["B"];
2010
+                for($i=0;$i<=$Parameters["Rows"];$i++)
2011
+                {
2012
+                $XPos  = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
2013
+                $YPos  = $AxisPos["B"];
2014 2014
 
2015
-               if ( $Abscissa != NULL )
2015
+                if ( $Abscissa != NULL )
2016 2016
                 { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } }
2017
-               else
2017
+                else
2018 2018
                 {
2019
-                 if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
2020
-                  $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
2021
-                 else
2022
-                  $Value = $i;
2019
+                    if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
2020
+                    $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
2021
+                    else
2022
+                    $Value = $i;
2023 2023
                 }
2024 2024
 
2025
-               $ID++; $Skipped = TRUE;
2026
-               if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis)
2025
+                $ID++; $Skipped = TRUE;
2026
+                if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis)
2027 2027
                 {
2028
-                 $Bounds    = $this->drawText($XPos,$YPos+$OuterTickWidth+$YLabelOffset,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
2029
-                 $TxtBottom = $YPos+$OuterTickWidth+2+($Bounds[0]["Y"]-$Bounds[2]["Y"]);
2030
-                 $MaxBottom = max($MaxBottom,$TxtBottom);
2031
-                 $LastValue = $Value;
2032
-                 $Skipped   = FALSE;
2028
+                    $Bounds    = $this->drawText($XPos,$YPos+$OuterTickWidth+$YLabelOffset,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
2029
+                    $TxtBottom = $YPos+$OuterTickWidth+2+($Bounds[0]["Y"]-$Bounds[2]["Y"]);
2030
+                    $MaxBottom = max($MaxBottom,$TxtBottom);
2031
+                    $LastValue = $Value;
2032
+                    $Skipped   = FALSE;
2033 2033
                 }
2034 2034
 
2035
-               if ( $RemoveXAxis ) { $Skipped   = FALSE; }
2035
+                if ( $RemoveXAxis ) { $Skipped   = FALSE; }
2036 2036
 
2037
-               if ( $Skipped )
2037
+                if ( $Skipped )
2038 2038
                 {
2039
-                 if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); }
2040
-                 if ( ($SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos,$YPos-$SkippedInnerTickWidth,$XPos,$YPos+$SkippedOuterTickWidth,$SkippedTickColor); }
2039
+                    if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); }
2040
+                    if ( ($SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos,$YPos-$SkippedInnerTickWidth,$XPos,$YPos+$SkippedOuterTickWidth,$SkippedTickColor); }
2041 2041
                 }
2042
-               else
2042
+                else
2043 2043
                 {
2044
-                 if ( $DrawXLines && ($XPos != $this->GraphAreaX1 && $XPos != $this->GraphAreaX2) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2045
-                 if ( ($InnerTickWidth !=0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos,$YPos-$InnerTickWidth,$XPos,$YPos+$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
2044
+                    if ( $DrawXLines && ($XPos != $this->GraphAreaX1 && $XPos != $this->GraphAreaX2) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2045
+                    if ( ($InnerTickWidth !=0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos,$YPos-$InnerTickWidth,$XPos,$YPos+$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
2046
+                }
2046 2047
                 }
2047
-              }
2048 2048
 
2049
-             if ( isset($Parameters["Name"]) && !$RemoveXAxis)
2050
-              {
2051
-               $YPos   = $MaxBottom+2;
2052
-               $XPos   = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
2053
-               $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE));
2054
-               $MaxBottom = $Bounds[0]["Y"];
2049
+                if ( isset($Parameters["Name"]) && !$RemoveXAxis)
2050
+                {
2051
+                $YPos   = $MaxBottom+2;
2052
+                $XPos   = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
2053
+                $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE));
2054
+                $MaxBottom = $Bounds[0]["Y"];
2055 2055
 
2056
-               $this->DataSet->Data["GraphArea"]["Y2"] = $MaxBottom + $this->FontSize;
2057
-              }
2056
+                $this->DataSet->Data["GraphArea"]["Y2"] = $MaxBottom + $this->FontSize;
2057
+                }
2058 2058
 
2059
-             $AxisPos["B"] = $MaxBottom + $ScaleSpacing;
2059
+                $AxisPos["B"] = $MaxBottom + $ScaleSpacing;
2060 2060
             }
2061
-           elseif ( $Parameters["Position"] == AXIS_POSITION_TOP )
2061
+            elseif ( $Parameters["Position"] == AXIS_POSITION_TOP )
2062 2062
             {
2063
-             if ( $LabelRotation == 0 )					{ $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $YLabelOffset = 2; }
2064
-             if ( $LabelRotation > 0 && $LabelRotation < 190 )		{ $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $YLabelOffset = 2; }
2065
-             if ( $LabelRotation == 180 )				{ $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $YLabelOffset = 5; }
2066
-             if ( $LabelRotation > 180 && $LabelRotation < 360 )	{ $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $YLabelOffset = 5; }
2063
+                if ( $LabelRotation == 0 )					{ $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $YLabelOffset = 2; }
2064
+                if ( $LabelRotation > 0 && $LabelRotation < 190 )		{ $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $YLabelOffset = 2; }
2065
+                if ( $LabelRotation == 180 )				{ $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $YLabelOffset = 5; }
2066
+                if ( $LabelRotation > 180 && $LabelRotation < 360 )	{ $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $YLabelOffset = 5; }
2067 2067
 
2068
-             if ( !$RemoveXAxis )
2069
-              {
2070
-               if ( $Floating )
2068
+                if ( !$RemoveXAxis )
2069
+                {
2070
+                if ( $Floating )
2071 2071
                 { $FloatingOffset = $YMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2072
-               else
2072
+                else
2073 2073
                 { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["T"],$this->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2074 2074
 
2075
-               if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2076
-              }
2075
+                if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2076
+                }
2077 2077
 
2078
-             $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
2078
+                $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
2079 2079
 
2080
-             if ($Parameters["Rows"] == 0 ) { $Step  = $Width; } else { $Step  = $Width / $Parameters["Rows"]; }
2080
+                if ($Parameters["Rows"] == 0 ) { $Step  = $Width; } else { $Step  = $Width / $Parameters["Rows"]; }
2081 2081
              
2082
-             $MinTop = $AxisPos["T"];
2083
-             for($i=0;$i<=$Parameters["Rows"];$i++)
2084
-              {
2085
-               $XPos  = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
2086
-               $YPos  = $AxisPos["T"];
2082
+                $MinTop = $AxisPos["T"];
2083
+                for($i=0;$i<=$Parameters["Rows"];$i++)
2084
+                {
2085
+                $XPos  = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
2086
+                $YPos  = $AxisPos["T"];
2087 2087
 
2088
-               if ( $Abscissa != NULL )
2088
+                if ( $Abscissa != NULL )
2089 2089
                 { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } }
2090
-               else
2090
+                else
2091 2091
                 {
2092
-                 if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
2093
-                  $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
2094
-                 else
2095
-                  $Value = $i;
2092
+                    if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
2093
+                    $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
2094
+                    else
2095
+                    $Value = $i;
2096 2096
                 }
2097 2097
 
2098
-               $ID++; $Skipped = TRUE;
2099
-               if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis)
2098
+                $ID++; $Skipped = TRUE;
2099
+                if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis)
2100 2100
                 {
2101
-                 $Bounds = $this->drawText($XPos,$YPos-$OuterTickWidth-$YLabelOffset,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
2102
-                 $TxtBox = $YPos-$OuterTickWidth-2-($Bounds[0]["Y"]-$Bounds[2]["Y"]);
2103
-                 $MinTop = min($MinTop,$TxtBox);
2104
-                 $LastValue = $Value;
2105
-                 $Skipped   = FALSE;
2101
+                    $Bounds = $this->drawText($XPos,$YPos-$OuterTickWidth-$YLabelOffset,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
2102
+                    $TxtBox = $YPos-$OuterTickWidth-2-($Bounds[0]["Y"]-$Bounds[2]["Y"]);
2103
+                    $MinTop = min($MinTop,$TxtBox);
2104
+                    $LastValue = $Value;
2105
+                    $Skipped   = FALSE;
2106 2106
                 }
2107 2107
 
2108
-               if ( $RemoveXAxis ) { $Skipped   = FALSE; }
2108
+                if ( $RemoveXAxis ) { $Skipped   = FALSE; }
2109 2109
 
2110
-               if ( $Skipped )
2110
+                if ( $Skipped )
2111 2111
                 {
2112
-                 if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); }
2113
-                 if ( ($SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos,$YPos+$SkippedInnerTickWidth,$XPos,$YPos-$SkippedOuterTickWidth,$SkippedTickColor); }
2112
+                    if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); }
2113
+                    if ( ($SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos,$YPos+$SkippedInnerTickWidth,$XPos,$YPos-$SkippedOuterTickWidth,$SkippedTickColor); }
2114 2114
                 }
2115
-               else
2115
+                else
2116 2116
                 {
2117
-                 if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2118
-                 if ( ($InnerTickWidth !=0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos,$YPos+$InnerTickWidth,$XPos,$YPos-$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
2117
+                    if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2118
+                    if ( ($InnerTickWidth !=0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos,$YPos+$InnerTickWidth,$XPos,$YPos-$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
2119 2119
                 }
2120 2120
 
2121
-              }
2121
+                }
2122 2122
 
2123
-             if ( isset($Parameters["Name"]) && !$RemoveXAxis )
2124
-              {
2125
-               $YPos   = $MinTop-2;
2126
-               $XPos   = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
2127
-               $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
2128
-               $MinTop = $Bounds[2]["Y"];
2123
+                if ( isset($Parameters["Name"]) && !$RemoveXAxis )
2124
+                {
2125
+                $YPos   = $MinTop-2;
2126
+                $XPos   = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
2127
+                $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
2128
+                $MinTop = $Bounds[2]["Y"];
2129 2129
 
2130
-               $this->DataSet->Data["GraphArea"]["Y1"] = $MinTop;
2131
-              }
2130
+                $this->DataSet->Data["GraphArea"]["Y1"] = $MinTop;
2131
+                }
2132 2132
 
2133
-             $AxisPos["T"] = $MinTop - $ScaleSpacing;
2133
+                $AxisPos["T"] = $MinTop - $ScaleSpacing;
2134
+            }
2134 2135
             }
2135
-          }
2136
-         elseif ( $Pos == SCALE_POS_TOPBOTTOM )
2137
-          {
2138
-           if ( $Parameters["Position"] == AXIS_POSITION_LEFT )
2136
+            elseif ( $Pos == SCALE_POS_TOPBOTTOM )
2139 2137
             {
2140
-             if ( $LabelRotation == 0 )					{ $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = -2; }
2141
-             if ( $LabelRotation > 0 && $LabelRotation < 190 )		{ $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = -6; }
2142
-             if ( $LabelRotation == 180 )				{ $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = -2; }
2143
-             if ( $LabelRotation > 180 && $LabelRotation < 360 )	{ $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = -5; }
2138
+            if ( $Parameters["Position"] == AXIS_POSITION_LEFT )
2139
+            {
2140
+                if ( $LabelRotation == 0 )					{ $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = -2; }
2141
+                if ( $LabelRotation > 0 && $LabelRotation < 190 )		{ $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = -6; }
2142
+                if ( $LabelRotation == 180 )				{ $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = -2; }
2143
+                if ( $LabelRotation > 180 && $LabelRotation < 360 )	{ $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = -5; }
2144 2144
 
2145
-             if ( !$RemoveXAxis )
2146
-              {
2147
-               if ( $Floating )
2145
+                if ( !$RemoveXAxis )
2146
+                {
2147
+                if ( $Floating )
2148 2148
                 { $FloatingOffset = $YMargin; $this->drawLine($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2149
-               else
2149
+                else
2150 2150
                 { $FloatingOffset = 0; $this->drawLine($AxisPos["L"],$this->GraphAreaY1,$AxisPos["L"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2151 2151
 
2152
-               if ( $DrawArrows ) { $this->drawArrow($AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2+($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2153
-              }
2152
+                if ( $DrawArrows ) { $this->drawArrow($AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2+($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2153
+                }
2154 2154
 
2155
-             $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
2155
+                $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
2156 2156
 
2157
-             if ($Parameters["Rows"] == 0 ) { $Step  = $Height; } else { $Step   = $Height / $Parameters["Rows"]; }
2157
+                if ($Parameters["Rows"] == 0 ) { $Step  = $Height; } else { $Step   = $Height / $Parameters["Rows"]; }
2158 2158
 
2159
-             $MinLeft = $AxisPos["L"];
2160
-             for($i=0;$i<=$Parameters["Rows"];$i++)
2161
-              {
2162
-               $YPos  = $this->GraphAreaY1 + $Parameters["Margin"] + $Step*$i;
2163
-               $XPos  = $AxisPos["L"];
2159
+                $MinLeft = $AxisPos["L"];
2160
+                for($i=0;$i<=$Parameters["Rows"];$i++)
2161
+                {
2162
+                $YPos  = $this->GraphAreaY1 + $Parameters["Margin"] + $Step*$i;
2163
+                $XPos  = $AxisPos["L"];
2164 2164
 
2165
-               if ( $Abscissa != NULL )
2165
+                if ( $Abscissa != NULL )
2166 2166
                 { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } }
2167
-               else
2167
+                else
2168 2168
                 {
2169
-                 if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
2170
-                  $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
2171
-                 else
2172
-                  $Value = $i;
2169
+                    if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
2170
+                    $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
2171
+                    else
2172
+                    $Value = $i;
2173 2173
                 }
2174 2174
 
2175
-               $ID++; $Skipped = TRUE;
2176
-               if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis)
2175
+                $ID++; $Skipped = TRUE;
2176
+                if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis)
2177 2177
                 {
2178
-                 $Bounds  = $this->drawText($XPos-$OuterTickWidth+$XLabelOffset,$YPos,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
2179
-                 $TxtBox  = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]);
2180
-                 $MinLeft = min($MinLeft,$TxtBox);
2181
-                 $LastValue = $Value;
2182
-                 $Skipped   = FALSE;
2178
+                    $Bounds  = $this->drawText($XPos-$OuterTickWidth+$XLabelOffset,$YPos,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
2179
+                    $TxtBox  = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]);
2180
+                    $MinLeft = min($MinLeft,$TxtBox);
2181
+                    $LastValue = $Value;
2182
+                    $Skipped   = FALSE;
2183 2183
                 }
2184 2184
 
2185
-               if ( $RemoveXAxis ) { $Skipped   = FALSE; }
2185
+                if ( $RemoveXAxis ) { $Skipped   = FALSE; }
2186 2186
 
2187
-               if ( $Skipped )
2187
+                if ( $Skipped )
2188 2188
                 {
2189
-                 if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,$SkippedAxisColor); }
2190
-                 if ( ($SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos-$SkippedOuterTickWidth,$YPos,$XPos+$SkippedInnerTickWidth,$YPos,$SkippedTickColor); }
2189
+                    if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,$SkippedAxisColor); }
2190
+                    if ( ($SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos-$SkippedOuterTickWidth,$YPos,$XPos+$SkippedInnerTickWidth,$YPos,$SkippedTickColor); }
2191 2191
                 }
2192
-               else
2192
+                else
2193 2193
                 {
2194
-                 if ( $DrawXLines && ($YPos != $this->GraphAreaY1 && $YPos != $this->GraphAreaY2) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2195
-                 if ( ($InnerTickWidth !=0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
2194
+                    if ( $DrawXLines && ($YPos != $this->GraphAreaY1 && $YPos != $this->GraphAreaY2) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2195
+                    if ( ($InnerTickWidth !=0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
2196 2196
                 }
2197 2197
 
2198
-              }
2199
-             if ( isset($Parameters["Name"]) && !$RemoveXAxis )
2200
-              {
2201
-               $XPos   = $MinLeft-2;
2202
-               $YPos   = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
2203
-               $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90));
2204
-               $MinLeft = $Bounds[0]["X"];
2198
+                }
2199
+                if ( isset($Parameters["Name"]) && !$RemoveXAxis )
2200
+                {
2201
+                $XPos   = $MinLeft-2;
2202
+                $YPos   = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
2203
+                $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90));
2204
+                $MinLeft = $Bounds[0]["X"];
2205 2205
 
2206
-               $this->DataSet->Data["GraphArea"]["X1"] = $MinLeft;
2207
-              }
2206
+                $this->DataSet->Data["GraphArea"]["X1"] = $MinLeft;
2207
+                }
2208 2208
 
2209
-             $AxisPos["L"] = $MinLeft - $ScaleSpacing;
2209
+                $AxisPos["L"] = $MinLeft - $ScaleSpacing;
2210 2210
             }
2211
-           elseif ( $Parameters["Position"] == AXIS_POSITION_RIGHT )
2211
+            elseif ( $Parameters["Position"] == AXIS_POSITION_RIGHT )
2212 2212
             {
2213
-             if ( $LabelRotation == 0 )					{ $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = 2; }
2214
-             if ( $LabelRotation > 0 && $LabelRotation < 190 )		{ $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = 6; }
2215
-             if ( $LabelRotation == 180 )				{ $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = 5; }
2216
-             if ( $LabelRotation > 180 && $LabelRotation < 360 )	{ $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = 7; }
2213
+                if ( $LabelRotation == 0 )					{ $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = 2; }
2214
+                if ( $LabelRotation > 0 && $LabelRotation < 190 )		{ $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = 6; }
2215
+                if ( $LabelRotation == 180 )				{ $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = 5; }
2216
+                if ( $LabelRotation > 180 && $LabelRotation < 360 )	{ $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = 7; }
2217 2217
 
2218
-             if ( !$RemoveXAxis )
2219
-              {
2220
-               if ( $Floating )
2218
+                if ( !$RemoveXAxis )
2219
+                {
2220
+                if ( $Floating )
2221 2221
                 { $FloatingOffset = $YMargin; $this->drawLine($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2222
-               else
2222
+                else
2223 2223
                 { $FloatingOffset = 0; $this->drawLine($AxisPos["R"],$this->GraphAreaY1,$AxisPos["R"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2224 2224
 
2225
-               if ( $DrawArrows ) { $this->drawArrow($AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2+($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2226
-              }
2225
+                if ( $DrawArrows ) { $this->drawArrow($AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2+($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2226
+                }
2227 2227
 
2228
-             $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
2228
+                $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
2229 2229
 
2230
-             if ($Parameters["Rows"] == 0 ) { $Step  = $Height; } else { $Step   = $Height / $Parameters["Rows"]; }
2230
+                if ($Parameters["Rows"] == 0 ) { $Step  = $Height; } else { $Step   = $Height / $Parameters["Rows"]; }
2231 2231
              
2232
-             $MaxRight = $AxisPos["R"];
2233
-             for($i=0;$i<=$Parameters["Rows"];$i++)
2234
-              {
2235
-               $YPos  = $this->GraphAreaY1 + $Parameters["Margin"] + $Step*$i;
2236
-               $XPos  = $AxisPos["R"];
2232
+                $MaxRight = $AxisPos["R"];
2233
+                for($i=0;$i<=$Parameters["Rows"];$i++)
2234
+                {
2235
+                $YPos  = $this->GraphAreaY1 + $Parameters["Margin"] + $Step*$i;
2236
+                $XPos  = $AxisPos["R"];
2237 2237
 
2238
-               if ( $Abscissa != NULL )
2238
+                if ( $Abscissa != NULL )
2239 2239
                 { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } }
2240
-               else
2240
+                else
2241 2241
                 {
2242
-                 if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
2243
-                  $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
2244
-                 else
2245
-                  $Value = $i;
2242
+                    if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
2243
+                    $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
2244
+                    else
2245
+                    $Value = $i;
2246 2246
                 }
2247 2247
 
2248
-               $ID++; $Skipped = TRUE;
2249
-               if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis)
2248
+                $ID++; $Skipped = TRUE;
2249
+                if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis)
2250 2250
                 {
2251
-                 $Bounds   = $this->drawText($XPos+$OuterTickWidth+$XLabelOffset,$YPos,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
2252
-                 $TxtBox   = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]);
2253
-                 $MaxRight = max($MaxRight,$TxtBox);
2254
-                 $LastValue = $Value;
2255
-                 $Skipped   = FALSE;
2251
+                    $Bounds   = $this->drawText($XPos+$OuterTickWidth+$XLabelOffset,$YPos,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
2252
+                    $TxtBox   = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]);
2253
+                    $MaxRight = max($MaxRight,$TxtBox);
2254
+                    $LastValue = $Value;
2255
+                    $Skipped   = FALSE;
2256 2256
                 }
2257 2257
 
2258
-               if ( $RemoveXAxis ) { $Skipped   = FALSE; }
2258
+                if ( $RemoveXAxis ) { $Skipped   = FALSE; }
2259 2259
 
2260
-               if ( $Skipped )
2260
+                if ( $Skipped )
2261 2261
                 {
2262
-                 if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,$SkippedAxisColor); }
2263
-                 if ( ($SkippedInnerTickWidth != 0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos+$SkippedOuterTickWidth,$YPos,$XPos-$SkippedInnerTickWidth,$YPos,$SkippedTickColor); }
2262
+                    if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,$SkippedAxisColor); }
2263
+                    if ( ($SkippedInnerTickWidth != 0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos+$SkippedOuterTickWidth,$YPos,$XPos-$SkippedInnerTickWidth,$YPos,$SkippedTickColor); }
2264 2264
                 }
2265
-               else
2265
+                else
2266 2266
                 {
2267
-                 if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2268
-                 if ( ($InnerTickWidth != 0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos+$OuterTickWidth,$YPos,$XPos-$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
2267
+                    if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2268
+                    if ( ($InnerTickWidth != 0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos+$OuterTickWidth,$YPos,$XPos-$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
2269 2269
                 }
2270 2270
 
2271
-              }
2271
+                }
2272 2272
 
2273
-             if ( isset($Parameters["Name"]) && !$RemoveXAxis)
2274
-              {
2275
-               $XPos   = $MaxRight+4;
2276
-               $YPos   = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
2277
-               $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270));
2278
-               $MaxRight = $Bounds[1]["X"];
2273
+                if ( isset($Parameters["Name"]) && !$RemoveXAxis)
2274
+                {
2275
+                $XPos   = $MaxRight+4;
2276
+                $YPos   = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
2277
+                $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270));
2278
+                $MaxRight = $Bounds[1]["X"];
2279 2279
 
2280
-               $this->DataSet->Data["GraphArea"]["X2"] = $MaxRight + $this->FontSize;
2281
-              }
2280
+                $this->DataSet->Data["GraphArea"]["X2"] = $MaxRight + $this->FontSize;
2281
+                }
2282 2282
 
2283
-             $AxisPos["R"] = $MaxRight + $ScaleSpacing;
2283
+                $AxisPos["R"] = $MaxRight + $ScaleSpacing;
2284
+            }
2284 2285
             }
2285
-          }
2286 2286
         }
2287 2287
 
2288 2288
 
2289 2289
 
2290
-       if ( $Parameters["Identity"] == AXIS_Y )
2290
+        if ( $Parameters["Identity"] == AXIS_Y )
2291 2291
         {
2292
-         if ( $Pos == SCALE_POS_LEFTRIGHT )
2293
-          {
2294
-           if ( $Parameters["Position"] == AXIS_POSITION_LEFT )
2292
+            if ( $Pos == SCALE_POS_LEFTRIGHT )
2293
+            {
2294
+            if ( $Parameters["Position"] == AXIS_POSITION_LEFT )
2295 2295
             {
2296 2296
 
2297
-             if ( $Floating )
2298
-              { $FloatingOffset = $XMargin; $this->drawLine($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2299
-             else
2300
-              { $FloatingOffset = 0; $this->drawLine($AxisPos["L"],$this->GraphAreaY1,$AxisPos["L"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2297
+                if ( $Floating )
2298
+                { $FloatingOffset = $XMargin; $this->drawLine($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2299
+                else
2300
+                { $FloatingOffset = 0; $this->drawLine($AxisPos["L"],$this->GraphAreaY1,$AxisPos["L"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2301 2301
 
2302
-             if ( $DrawArrows ) { $this->drawArrow($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2302
+                if ( $DrawArrows ) { $this->drawArrow($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2303 2303
 
2304
-             $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
2305
-             $Step   = $Height / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MinLeft = $AxisPos["L"];
2306
-             $LastY  = NULL;
2307
-             for($i=0;$i<=$Parameters["Rows"];$i++)
2308
-              {
2309
-               $YPos  = $this->GraphAreaY2 - $Parameters["Margin"] - $Step*$i;
2310
-               $XPos  = $AxisPos["L"];
2311
-               $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
2304
+                $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
2305
+                $Step   = $Height / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MinLeft = $AxisPos["L"];
2306
+                $LastY  = NULL;
2307
+                for($i=0;$i<=$Parameters["Rows"];$i++)
2308
+                {
2309
+                $YPos  = $this->GraphAreaY2 - $Parameters["Margin"] - $Step*$i;
2310
+                $XPos  = $AxisPos["L"];
2311
+                $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
2312 2312
 
2313
-               if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
2314
-               if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($this->GraphAreaX1+$FloatingOffset,$LastY,$this->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }
2313
+                if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
2314
+                if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($this->GraphAreaX1+$FloatingOffset,$LastY,$this->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }
2315 2315
 
2316
-               if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2316
+                if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2317 2317
 
2318
-               if ( $DrawSubTicks && $i != $Parameters["Rows"] )
2318
+                if ( $DrawSubTicks && $i != $Parameters["Rows"] )
2319 2319
                 $this->drawLine($XPos-$OuterSubTickWidth,$YPos-$SubTicksSize,$XPos+$InnerSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
2320 2320
 
2321
-               $this->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
2322
-               $Bounds  = $this->drawText($XPos-$OuterTickWidth-2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLERIGHT));
2323
-               $TxtLeft = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]);
2324
-               $MinLeft = min($MinLeft,$TxtLeft);
2321
+                $this->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
2322
+                $Bounds  = $this->drawText($XPos-$OuterTickWidth-2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLERIGHT));
2323
+                $TxtLeft = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]);
2324
+                $MinLeft = min($MinLeft,$TxtLeft);
2325 2325
 
2326
-               $LastY = $YPos;
2327
-              }
2326
+                $LastY = $YPos;
2327
+                }
2328 2328
 
2329
-             if ( isset($Parameters["Name"]) )
2330
-              {
2331
-               $XPos    = $MinLeft-2;
2332
-               $YPos    = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
2333
-               $Bounds  = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90));
2334
-               $MinLeft = $Bounds[2]["X"];
2329
+                if ( isset($Parameters["Name"]) )
2330
+                {
2331
+                $XPos    = $MinLeft-2;
2332
+                $YPos    = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
2333
+                $Bounds  = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90));
2334
+                $MinLeft = $Bounds[2]["X"];
2335 2335
 
2336
-               $this->DataSet->Data["GraphArea"]["X1"] = $MinLeft;
2337
-              }
2336
+                $this->DataSet->Data["GraphArea"]["X1"] = $MinLeft;
2337
+                }
2338 2338
 
2339
-             $AxisPos["L"] = $MinLeft - $ScaleSpacing;
2339
+                $AxisPos["L"] = $MinLeft - $ScaleSpacing;
2340 2340
             }
2341
-           elseif ( $Parameters["Position"] == AXIS_POSITION_RIGHT )
2341
+            elseif ( $Parameters["Position"] == AXIS_POSITION_RIGHT )
2342 2342
             {
2343
-             if ( $Floating )
2344
-              { $FloatingOffset = $XMargin; $this->drawLine($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2345
-             else
2346
-              { $FloatingOffset = 0; $this->drawLine($AxisPos["R"],$this->GraphAreaY1,$AxisPos["R"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2343
+                if ( $Floating )
2344
+                { $FloatingOffset = $XMargin; $this->drawLine($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2345
+                else
2346
+                { $FloatingOffset = 0; $this->drawLine($AxisPos["R"],$this->GraphAreaY1,$AxisPos["R"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2347 2347
 
2348
-             if ( $DrawArrows ) { $this->drawArrow($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2348
+                if ( $DrawArrows ) { $this->drawArrow($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2349 2349
 
2350
-             $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
2351
-             $Step   = $Height / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MaxLeft = $AxisPos["R"];
2352
-             $LastY  = NULL;
2353
-             for($i=0;$i<=$Parameters["Rows"];$i++)
2354
-              {
2355
-               $YPos  = $this->GraphAreaY2 - $Parameters["Margin"] - $Step*$i;
2356
-               $XPos  = $AxisPos["R"];
2357
-               $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
2350
+                $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
2351
+                $Step   = $Height / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MaxLeft = $AxisPos["R"];
2352
+                $LastY  = NULL;
2353
+                for($i=0;$i<=$Parameters["Rows"];$i++)
2354
+                {
2355
+                $YPos  = $this->GraphAreaY2 - $Parameters["Margin"] - $Step*$i;
2356
+                $XPos  = $AxisPos["R"];
2357
+                $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
2358 2358
 
2359
-               if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
2360
-               if ( $LastY != NULL && $CycleBackground  && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($this->GraphAreaX1+$FloatingOffset,$LastY,$this->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }
2359
+                if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
2360
+                if ( $LastY != NULL && $CycleBackground  && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($this->GraphAreaX1+$FloatingOffset,$LastY,$this->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }
2361 2361
 
2362
-               if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2362
+                if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2363 2363
 
2364
-               if ( $DrawSubTicks && $i != $Parameters["Rows"] )
2364
+                if ( $DrawSubTicks && $i != $Parameters["Rows"] )
2365 2365
                 $this->drawLine($XPos-$OuterSubTickWidth,$YPos-$SubTicksSize,$XPos+$InnerSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
2366 2366
 
2367
-               $this->drawLine($XPos-$InnerTickWidth,$YPos,$XPos+$OuterTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
2368
-               $Bounds  = $this->drawText($XPos+$OuterTickWidth+2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLELEFT));
2369
-               $TxtLeft = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]);
2370
-               $MaxLeft = max($MaxLeft,$TxtLeft);
2367
+                $this->drawLine($XPos-$InnerTickWidth,$YPos,$XPos+$OuterTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
2368
+                $Bounds  = $this->drawText($XPos+$OuterTickWidth+2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLELEFT));
2369
+                $TxtLeft = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]);
2370
+                $MaxLeft = max($MaxLeft,$TxtLeft);
2371 2371
 
2372
-               $LastY = $YPos;
2373
-              }
2372
+                $LastY = $YPos;
2373
+                }
2374 2374
 
2375
-             if ( isset($Parameters["Name"]) )
2376
-              {
2377
-               $XPos    = $MaxLeft+6;
2378
-               $YPos    = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
2379
-               $Bounds  = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270));
2380
-               $MaxLeft = $Bounds[2]["X"];
2375
+                if ( isset($Parameters["Name"]) )
2376
+                {
2377
+                $XPos    = $MaxLeft+6;
2378
+                $YPos    = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
2379
+                $Bounds  = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270));
2380
+                $MaxLeft = $Bounds[2]["X"];
2381 2381
 
2382
-               $this->DataSet->Data["GraphArea"]["X2"] = $MaxLeft + $this->FontSize;
2383
-              }
2384
-             $AxisPos["R"] = $MaxLeft + $ScaleSpacing;
2382
+                $this->DataSet->Data["GraphArea"]["X2"] = $MaxLeft + $this->FontSize;
2383
+                }
2384
+                $AxisPos["R"] = $MaxLeft + $ScaleSpacing;
2385
+            }
2385 2386
             }
2386
-          }
2387
-         elseif ( $Pos == SCALE_POS_TOPBOTTOM )
2388
-          {
2389
-           if ( $Parameters["Position"] == AXIS_POSITION_TOP )
2387
+            elseif ( $Pos == SCALE_POS_TOPBOTTOM )
2390 2388
             {
2391
-             if ( $Floating )
2392
-              { $FloatingOffset = $XMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2393
-             else
2394
-              { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["T"],$this->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2389
+            if ( $Parameters["Position"] == AXIS_POSITION_TOP )
2390
+            {
2391
+                if ( $Floating )
2392
+                { $FloatingOffset = $XMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2393
+                else
2394
+                { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["T"],$this->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2395 2395
 
2396
-             if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2396
+                if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2397 2397
 
2398
-             $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
2399
-             $Step   = $Width / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MinTop = $AxisPos["T"];
2400
-             $LastX  = NULL;
2401
-             for($i=0;$i<=$Parameters["Rows"];$i++)
2402
-              {
2403
-               $XPos  = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
2404
-               $YPos  = $AxisPos["T"];
2405
-               $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
2398
+                $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
2399
+                $Step   = $Width / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MinTop = $AxisPos["T"];
2400
+                $LastX  = NULL;
2401
+                for($i=0;$i<=$Parameters["Rows"];$i++)
2402
+                {
2403
+                $XPos  = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
2404
+                $YPos  = $AxisPos["T"];
2405
+                $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
2406 2406
 
2407
-               if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
2408
-               if ( $LastX != NULL && $CycleBackground  && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($LastX,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$BGColor); }
2407
+                if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
2408
+                if ( $LastX != NULL && $CycleBackground  && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($LastX,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$BGColor); }
2409 2409
 
2410
-               if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2410
+                if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2411 2411
 
2412
-               if ( $DrawSubTicks && $i != $Parameters["Rows"] )
2412
+                if ( $DrawSubTicks && $i != $Parameters["Rows"] )
2413 2413
                 $this->drawLine($XPos+$SubTicksSize,$YPos-$OuterSubTickWidth,$XPos+$SubTicksSize,$YPos+$InnerSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
2414 2414
 
2415
-               $this->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
2416
-               $Bounds    = $this->drawText($XPos,$YPos-$OuterTickWidth-2,$Value,array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
2417
-               $TxtHeight = $YPos-$OuterTickWidth-2-($Bounds[1]["Y"]-$Bounds[2]["Y"]);
2418
-               $MinTop    = min($MinTop,$TxtHeight);
2415
+                $this->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
2416
+                $Bounds    = $this->drawText($XPos,$YPos-$OuterTickWidth-2,$Value,array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
2417
+                $TxtHeight = $YPos-$OuterTickWidth-2-($Bounds[1]["Y"]-$Bounds[2]["Y"]);
2418
+                $MinTop    = min($MinTop,$TxtHeight);
2419 2419
 
2420
-               $LastX = $XPos;
2421
-              }
2420
+                $LastX = $XPos;
2421
+                }
2422 2422
 
2423
-             if ( isset($Parameters["Name"]) )
2424
-              {
2425
-               $YPos   = $MinTop-2;
2426
-               $XPos   = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
2427
-               $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
2428
-               $MinTop = $Bounds[2]["Y"];
2423
+                if ( isset($Parameters["Name"]) )
2424
+                {
2425
+                $YPos   = $MinTop-2;
2426
+                $XPos   = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
2427
+                $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
2428
+                $MinTop = $Bounds[2]["Y"];
2429 2429
 
2430
-               $this->DataSet->Data["GraphArea"]["Y1"] = $MinTop;
2431
-              }
2430
+                $this->DataSet->Data["GraphArea"]["Y1"] = $MinTop;
2431
+                }
2432 2432
 
2433
-             $AxisPos["T"] = $MinTop - $ScaleSpacing;
2433
+                $AxisPos["T"] = $MinTop - $ScaleSpacing;
2434 2434
             }
2435
-           elseif ( $Parameters["Position"] == AXIS_POSITION_BOTTOM )
2435
+            elseif ( $Parameters["Position"] == AXIS_POSITION_BOTTOM )
2436 2436
             {
2437
-             if ( $Floating )
2438
-              { $FloatingOffset = $XMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2439
-             else
2440
-              { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["B"],$this->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2437
+                if ( $Floating )
2438
+                { $FloatingOffset = $XMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2439
+                else
2440
+                { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["B"],$this->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
2441 2441
 
2442
-             if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2442
+                if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
2443 2443
 
2444
-             $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
2445
-             $Step   = $Width / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MaxBottom = $AxisPos["B"];
2446
-             $LastX  = NULL;
2447
-             for($i=0;$i<=$Parameters["Rows"];$i++)
2448
-              {
2449
-               $XPos  = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
2450
-               $YPos  = $AxisPos["B"];
2451
-               $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
2444
+                $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
2445
+                $Step   = $Width / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MaxBottom = $AxisPos["B"];
2446
+                $LastX  = NULL;
2447
+                for($i=0;$i<=$Parameters["Rows"];$i++)
2448
+                {
2449
+                $XPos  = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
2450
+                $YPos  = $AxisPos["B"];
2451
+                $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
2452 2452
 
2453
-               if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
2454
-               if ( $LastX != NULL && $CycleBackground  && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($LastX,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$BGColor); }
2453
+                if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
2454
+                if ( $LastX != NULL && $CycleBackground  && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($LastX,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$BGColor); }
2455 2455
 
2456
-               if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2456
+                if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
2457 2457
 
2458
-               if ( $DrawSubTicks && $i != $Parameters["Rows"] )
2458
+                if ( $DrawSubTicks && $i != $Parameters["Rows"] )
2459 2459
                 $this->drawLine($XPos+$SubTicksSize,$YPos-$OuterSubTickWidth,$XPos+$SubTicksSize,$YPos+$InnerSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
2460 2460
 
2461
-               $this->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
2462
-               $Bounds    = $this->drawText($XPos,$YPos+$OuterTickWidth+2,$Value,array("Align"=>TEXT_ALIGN_TOPMIDDLE));
2463
-               $TxtHeight = $YPos+$OuterTickWidth+2+($Bounds[1]["Y"]-$Bounds[2]["Y"]);
2464
-               $MaxBottom = max($MaxBottom,$TxtHeight);
2461
+                $this->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
2462
+                $Bounds    = $this->drawText($XPos,$YPos+$OuterTickWidth+2,$Value,array("Align"=>TEXT_ALIGN_TOPMIDDLE));
2463
+                $TxtHeight = $YPos+$OuterTickWidth+2+($Bounds[1]["Y"]-$Bounds[2]["Y"]);
2464
+                $MaxBottom = max($MaxBottom,$TxtHeight);
2465 2465
 
2466
-               $LastX = $XPos;
2467
-              }
2466
+                $LastX = $XPos;
2467
+                }
2468 2468
 
2469
-             if ( isset($Parameters["Name"]) )
2470
-              {
2471
-               $YPos   = $MaxBottom+2;
2472
-               $XPos   = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
2473
-               $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE));
2474
-               $MaxBottom = $Bounds[0]["Y"];
2469
+                if ( isset($Parameters["Name"]) )
2470
+                {
2471
+                $YPos   = $MaxBottom+2;
2472
+                $XPos   = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
2473
+                $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE));
2474
+                $MaxBottom = $Bounds[0]["Y"];
2475 2475
 
2476
-               $this->DataSet->Data["GraphArea"]["Y2"] = $MaxBottom + $this->FontSize;
2477
-              }
2476
+                $this->DataSet->Data["GraphArea"]["Y2"] = $MaxBottom + $this->FontSize;
2477
+                }
2478 2478
 
2479
-             $AxisPos["B"] = $MaxBottom + $ScaleSpacing;
2479
+                $AxisPos["B"] = $MaxBottom + $ScaleSpacing;
2480
+            }
2480 2481
             }
2481
-          }
2482 2482
         }
2483
-      }
2483
+        }
2484 2484
     }
2485 2485
 
2486
-   function isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip)
2486
+    function isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip)
2487 2487
     {
2488
-     if ( $LabelingMethod == LABELING_DIFFERENT && $Value != $LastValue ) { return(TRUE); }
2489
-     if ( $LabelingMethod == LABELING_DIFFERENT && $Value == $LastValue ) { return(FALSE); }
2490
-     if ( $LabelingMethod == LABELING_ALL && $LabelSkip == 0 ) { return(TRUE); }
2491
-     if ( $LabelingMethod == LABELING_ALL && ($ID+$LabelSkip) % ($LabelSkip+1) != 1 ) { return(FALSE); }
2488
+        if ( $LabelingMethod == LABELING_DIFFERENT && $Value != $LastValue ) { return(TRUE); }
2489
+        if ( $LabelingMethod == LABELING_DIFFERENT && $Value == $LastValue ) { return(FALSE); }
2490
+        if ( $LabelingMethod == LABELING_ALL && $LabelSkip == 0 ) { return(TRUE); }
2491
+        if ( $LabelingMethod == LABELING_ALL && ($ID+$LabelSkip) % ($LabelSkip+1) != 1 ) { return(FALSE); }
2492 2492
 
2493
-     return(TRUE);
2493
+        return(TRUE);
2494 2494
     }
2495 2495
 
2496
-   /* Compute the scale, check for the best visual factors */
2497
-   function computeScale($XMin,$XMax,$MaxDivs,$Factors,$AxisID=0)
2496
+    /* Compute the scale, check for the best visual factors */
2497
+    function computeScale($XMin,$XMax,$MaxDivs,$Factors,$AxisID=0)
2498 2498
     {
2499
-     /* Compute each factors */
2500
-     $Results = "";
2501
-     foreach ($Factors as $Key => $Factor)
2502
-      $Results[$Factor] = $this->processScale($XMin,$XMax,$MaxDivs,array($Factor),$AxisID);
2503
-
2504
-     /* Remove scales that are creating to much decimals */
2505
-     $GoodScaleFactors = "";
2506
-     foreach ($Results as $Key => $Result)
2507
-      {
2508
-       $Decimals = preg_split("/\./",$Result["RowHeight"]);
2509
-       if ( (!isset($Decimals[1])) || (strlen($Decimals[1]) < 6) ) { $GoodScaleFactors[] = $Key; }
2510
-      }
2511
-
2512
-     /* Found no correct scale, shame,... returns the 1st one as default */
2513
-     if ( $GoodScaleFactors == "" ) { return($Results[$Factors[0]]); }
2514
-
2515
-     /* Find the factor that cause the maximum number of Rows */
2516
-     $MaxRows = 0; $BestFactor = 0;
2517
-     foreach($GoodScaleFactors as $Key => $Factor)
2518
-      { if ( $Results[$Factor]["Rows"] > $MaxRows ) { $MaxRows = $Results[$Factor]["Rows"]; $BestFactor = $Factor; } }
2519
-
2520
-     /* Return the best visual scale */
2521
-     return($Results[$BestFactor]);
2499
+        /* Compute each factors */
2500
+        $Results = "";
2501
+        foreach ($Factors as $Key => $Factor)
2502
+        $Results[$Factor] = $this->processScale($XMin,$XMax,$MaxDivs,array($Factor),$AxisID);
2503
+
2504
+        /* Remove scales that are creating to much decimals */
2505
+        $GoodScaleFactors = "";
2506
+        foreach ($Results as $Key => $Result)
2507
+        {
2508
+        $Decimals = preg_split("/\./",$Result["RowHeight"]);
2509
+        if ( (!isset($Decimals[1])) || (strlen($Decimals[1]) < 6) ) { $GoodScaleFactors[] = $Key; }
2510
+        }
2511
+
2512
+        /* Found no correct scale, shame,... returns the 1st one as default */
2513
+        if ( $GoodScaleFactors == "" ) { return($Results[$Factors[0]]); }
2514
+
2515
+        /* Find the factor that cause the maximum number of Rows */
2516
+        $MaxRows = 0; $BestFactor = 0;
2517
+        foreach($GoodScaleFactors as $Key => $Factor)
2518
+        { if ( $Results[$Factor]["Rows"] > $MaxRows ) { $MaxRows = $Results[$Factor]["Rows"]; $BestFactor = $Factor; } }
2519
+
2520
+        /* Return the best visual scale */
2521
+        return($Results[$BestFactor]);
2522 2522
     }
2523 2523
 
2524
-   /* Compute the best matching scale based on size & factors */
2525
-   function processScale($XMin,$XMax,$MaxDivs,$Factors,$AxisID)
2524
+    /* Compute the best matching scale based on size & factors */
2525
+    function processScale($XMin,$XMax,$MaxDivs,$Factors,$AxisID)
2526 2526
     {
2527
-     $ScaleHeight = abs(ceil($XMax)-floor($XMin));
2527
+        $ScaleHeight = abs(ceil($XMax)-floor($XMin));
2528 2528
 
2529
-     if ( isset($this->DataSet->Data["Axis"][$AxisID]["Format"]) )
2530
-      $Format = $this->DataSet->Data["Axis"][$AxisID]["Format"];
2531
-     else
2532
-      $Format = NULL;
2529
+        if ( isset($this->DataSet->Data["Axis"][$AxisID]["Format"]) )
2530
+        $Format = $this->DataSet->Data["Axis"][$AxisID]["Format"];
2531
+        else
2532
+        $Format = NULL;
2533 2533
 
2534
-     if ( isset($this->DataSet->Data["Axis"][$AxisID]["Display"]) )
2535
-      $Mode = $this->DataSet->Data["Axis"][$AxisID]["Display"];
2536
-     else
2537
-      $Mode = AXIS_FORMAT_DEFAULT;
2534
+        if ( isset($this->DataSet->Data["Axis"][$AxisID]["Display"]) )
2535
+        $Mode = $this->DataSet->Data["Axis"][$AxisID]["Display"];
2536
+        else
2537
+        $Mode = AXIS_FORMAT_DEFAULT;
2538 2538
 
2539
-     $Scale = "";
2540
-     if ( $XMin != $XMax )
2541
-      {
2542
-       $Found = FALSE; $Rescaled = FALSE; $Scaled10Factor = .0001; $Result = 0;
2543
-       while(!$Found)
2539
+        $Scale = "";
2540
+        if ( $XMin != $XMax )
2544 2541
         {
2545
-         foreach($Factors as $Key => $Factor)
2546
-          {
2547
-           if ( !$Found )
2542
+        $Found = FALSE; $Rescaled = FALSE; $Scaled10Factor = .0001; $Result = 0;
2543
+        while(!$Found)
2544
+        {
2545
+            foreach($Factors as $Key => $Factor)
2546
+            {
2547
+            if ( !$Found )
2548 2548
             {
2549
-             if ( !($this->modulo($XMin,$Factor*$Scaled10Factor) == 0) || ($XMin != floor($XMin))) { $XMinRescaled = floor($XMin/($Factor*$Scaled10Factor))*$Factor*$Scaled10Factor; } else { $XMinRescaled = $XMin; }
2550
-             if ( !($this->modulo($XMax,$Factor*$Scaled10Factor) == 0) || ($XMax != floor($XMax))) { $XMaxRescaled = floor($XMax/($Factor*$Scaled10Factor))*$Factor*$Scaled10Factor+($Factor*$Scaled10Factor); } else { $XMaxRescaled = $XMax; }
2551
-             $ScaleHeightRescaled = abs($XMaxRescaled-$XMinRescaled);
2549
+                if ( !($this->modulo($XMin,$Factor*$Scaled10Factor) == 0) || ($XMin != floor($XMin))) { $XMinRescaled = floor($XMin/($Factor*$Scaled10Factor))*$Factor*$Scaled10Factor; } else { $XMinRescaled = $XMin; }
2550
+                if ( !($this->modulo($XMax,$Factor*$Scaled10Factor) == 0) || ($XMax != floor($XMax))) { $XMaxRescaled = floor($XMax/($Factor*$Scaled10Factor))*$Factor*$Scaled10Factor+($Factor*$Scaled10Factor); } else { $XMaxRescaled = $XMax; }
2551
+                $ScaleHeightRescaled = abs($XMaxRescaled-$XMinRescaled);
2552 2552
 
2553
-             if ( !$Found && floor($ScaleHeightRescaled/($Factor*$Scaled10Factor)) <= $MaxDivs ) { $Found = TRUE; $Rescaled = TRUE; $Result = $Factor * $Scaled10Factor; }
2553
+                if ( !$Found && floor($ScaleHeightRescaled/($Factor*$Scaled10Factor)) <= $MaxDivs ) { $Found = TRUE; $Rescaled = TRUE; $Result = $Factor * $Scaled10Factor; }
2554 2554
             }
2555
-          }
2556
-         $Scaled10Factor = $Scaled10Factor * 10;
2555
+            }
2556
+            $Scaled10Factor = $Scaled10Factor * 10;
2557 2557
         }
2558 2558
 
2559
-       /* ReCall Min / Max / Height */
2560
-       if ( $Rescaled ) { $XMin = $XMinRescaled; $XMax = $XMaxRescaled; $ScaleHeight = $ScaleHeightRescaled; }
2559
+        /* ReCall Min / Max / Height */
2560
+        if ( $Rescaled ) { $XMin = $XMinRescaled; $XMax = $XMaxRescaled; $ScaleHeight = $ScaleHeightRescaled; }
2561 2561
 
2562
-       /* Compute rows size */
2563
-       $Rows      = floor($ScaleHeight / $Result); if ( $Rows == 0 ) { $Rows = 1; }
2564
-       $RowHeight = $ScaleHeight / $Rows;
2562
+        /* Compute rows size */
2563
+        $Rows      = floor($ScaleHeight / $Result); if ( $Rows == 0 ) { $Rows = 1; }
2564
+        $RowHeight = $ScaleHeight / $Rows;
2565 2565
 
2566
-       /* Return the results */
2567
-       $Scale["Rows"] = $Rows; $Scale["RowHeight"] = $RowHeight; $Scale["XMin"] = $XMin;  $Scale["XMax"] = $XMax;
2566
+        /* Return the results */
2567
+        $Scale["Rows"] = $Rows; $Scale["RowHeight"] = $RowHeight; $Scale["XMin"] = $XMin;  $Scale["XMax"] = $XMax;
2568 2568
 
2569
-       /* Compute the needed decimals for the metric view to avoid repetition of the same X Axis labels */
2570
-       if ( $Mode == AXIS_FORMAT_METRIC && $Format == NULL )
2569
+        /* Compute the needed decimals for the metric view to avoid repetition of the same X Axis labels */
2570
+        if ( $Mode == AXIS_FORMAT_METRIC && $Format == NULL )
2571 2571
         {
2572
-         $Done = FALSE; $GoodDecimals = 0;
2573
-         for($Decimals=0;$Decimals<=10;$Decimals++)
2574
-          {
2575
-           if ( !$Done )
2572
+            $Done = FALSE; $GoodDecimals = 0;
2573
+            for($Decimals=0;$Decimals<=10;$Decimals++)
2574
+            {
2575
+            if ( !$Done )
2576 2576
             {
2577
-             $LastLabel = "zob"; $ScaleOK = TRUE;
2578
-             for($i=0;$i<=$Rows;$i++)
2579
-              {
2580
-               $Value = $XMin + $i*$RowHeight;
2581
-               $Label = $this->scaleFormat($Value,AXIS_FORMAT_METRIC,$Decimals);
2577
+                $LastLabel = "zob"; $ScaleOK = TRUE;
2578
+                for($i=0;$i<=$Rows;$i++)
2579
+                {
2580
+                $Value = $XMin + $i*$RowHeight;
2581
+                $Label = $this->scaleFormat($Value,AXIS_FORMAT_METRIC,$Decimals);
2582 2582
 
2583
-               if ( $LastLabel == $Label ) { $ScaleOK = FALSE; }
2584
-               $LastLabel = $Label;
2585
-              }
2586
-             if ( $ScaleOK ) { $Done = TRUE; $GoodDecimals = $Decimals; }
2583
+                if ( $LastLabel == $Label ) { $ScaleOK = FALSE; }
2584
+                $LastLabel = $Label;
2585
+                }
2586
+                if ( $ScaleOK ) { $Done = TRUE; $GoodDecimals = $Decimals; }
2587
+            }
2587 2588
             }
2588
-          }
2589 2589
 
2590
-         $Scale["Format"] = $GoodDecimals;
2590
+            $Scale["Format"] = $GoodDecimals;
2591
+        }
2591 2592
         }
2592
-      }
2593
-     else
2594
-      {
2595
-       /* If all values are the same we keep a +1/-1 scale */
2596
-       $Rows = 2; $XMin = $XMax-1; $XMax = $XMax+1; $RowHeight = 1;
2593
+        else
2594
+        {
2595
+        /* If all values are the same we keep a +1/-1 scale */
2596
+        $Rows = 2; $XMin = $XMax-1; $XMax = $XMax+1; $RowHeight = 1;
2597 2597
 
2598
-       /* Return the results */
2599
-       $Scale["Rows"] = $Rows; $Scale["RowHeight"] = $RowHeight; $Scale["XMin"] = $XMin;  $Scale["XMax"] = $XMax;
2600
-      }
2598
+        /* Return the results */
2599
+        $Scale["Rows"] = $Rows; $Scale["RowHeight"] = $RowHeight; $Scale["XMin"] = $XMin;  $Scale["XMax"] = $XMax;
2600
+        }
2601 2601
 
2602
-     return($Scale);
2602
+        return($Scale);
2603 2603
     }
2604 2604
 
2605
-   function modulo($Value1,$Value2)
2605
+    function modulo($Value1,$Value2)
2606 2606
     {
2607
-     if (floor($Value2) == 0) { return(0); }
2608
-     if (floor($Value2) != 0) { return($Value1 % $Value2); }
2607
+        if (floor($Value2) == 0) { return(0); }
2608
+        if (floor($Value2) != 0) { return($Value1 % $Value2); }
2609 2609
 
2610
-     $MinValue = min($Value1,$Value2); $Factor = 10;
2611
-     while ( floor($MinValue*$Factor) == 0 )
2612
-      { $Factor = $Factor * 10; }
2610
+        $MinValue = min($Value1,$Value2); $Factor = 10;
2611
+        while ( floor($MinValue*$Factor) == 0 )
2612
+        { $Factor = $Factor * 10; }
2613 2613
 
2614
-     return(($Value1*$Factor) % ($Value2*$Factor));
2614
+        return(($Value1*$Factor) % ($Value2*$Factor));
2615 2615
     }
2616 2616
 
2617
-   /* Draw an X threshold */
2618
-   function drawXThreshold($Value,$Format="")
2617
+    /* Draw an X threshold */
2618
+    function drawXThreshold($Value,$Format="")
2619 2619
     {
2620
-     $R			= isset($Format["R"]) ? $Format["R"] : 255;
2621
-     $G			= isset($Format["G"]) ? $Format["G"] : 0;
2622
-     $B			= isset($Format["B"]) ? $Format["B"] : 0;
2623
-     $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 50;
2624
-     $Weight		= isset($Format["Weight"]) ? $Format["Weight"] : NULL;
2625
-     $Ticks		= isset($Format["Ticks"]) ? $Format["Ticks"] : 6;
2626
-     $Wide		= isset($Format["Wide"]) ? $Format["Wide"] : FALSE;
2627
-     $WideFactor	= isset($Format["WideFactor"]) ? $Format["WideFactor"] : 5;
2628
-     $WriteCaption	= isset($Format["WriteCaption"]) ? $Format["WriteCaption"] : FALSE;
2629
-     $Caption		= isset($Format["Caption"]) ? $Format["Caption"] : NULL;
2630
-     $CaptionAlign	= isset($Format["CaptionAlign"]) ? $Format["CaptionAlign"] : CAPTION_LEFT_TOP;
2631
-     $CaptionOffset     = isset($Format["CaptionOffset"]) ? $Format["CaptionOffset"] : 5;
2632
-     $CaptionR		= isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255;
2633
-     $CaptionG		= isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255;
2634
-     $CaptionB		= isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255;
2635
-     $CaptionAlpha	= isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100;
2636
-     $DrawBox		= isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE;
2637
-     $DrawBoxBorder	= isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE;
2638
-     $BorderOffset	= isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 3;
2639
-     $BoxRounded	= isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE;
2640
-     $RoundedRadius	= isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3;
2641
-     $BoxR		= isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
2642
-     $BoxG		= isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
2643
-     $BoxB		= isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
2644
-     $BoxAlpha		= isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 30;
2645
-     $BoxSurrounding	= isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
2646
-     $BoxBorderR	= isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255;
2647
-     $BoxBorderG	= isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255;
2648
-     $BoxBorderB	= isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255;
2649
-     $BoxBorderAlpha	= isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100;
2650
-     $ValueIsLabel	= isset($Format["ValueIsLabel"]) ? $Format["ValueIsLabel"] : FALSE;
2651
-
2652
-     $Data           = $this->DataSet->getData();
2653
-     $AbscissaMargin = $this->getAbscissaMargin($Data);
2654
-     $XScale         = $this->scaleGetXSettings();
2655
-
2656
-     if ( is_array($Value) ) { foreach ($Value as $Key => $ID) { $this->drawXThreshold($ID,$Format); } return(0); }
2657
-
2658
-     if ( $ValueIsLabel )
2659
-      {
2660
-       $Format["ValueIsLabel"] = FALSE;
2661
-       foreach($Data["Series"][$Data["Abscissa"]]["Data"] as $Key => $SerieValue)
2620
+        $R			= isset($Format["R"]) ? $Format["R"] : 255;
2621
+        $G			= isset($Format["G"]) ? $Format["G"] : 0;
2622
+        $B			= isset($Format["B"]) ? $Format["B"] : 0;
2623
+        $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 50;
2624
+        $Weight		= isset($Format["Weight"]) ? $Format["Weight"] : NULL;
2625
+        $Ticks		= isset($Format["Ticks"]) ? $Format["Ticks"] : 6;
2626
+        $Wide		= isset($Format["Wide"]) ? $Format["Wide"] : FALSE;
2627
+        $WideFactor	= isset($Format["WideFactor"]) ? $Format["WideFactor"] : 5;
2628
+        $WriteCaption	= isset($Format["WriteCaption"]) ? $Format["WriteCaption"] : FALSE;
2629
+        $Caption		= isset($Format["Caption"]) ? $Format["Caption"] : NULL;
2630
+        $CaptionAlign	= isset($Format["CaptionAlign"]) ? $Format["CaptionAlign"] : CAPTION_LEFT_TOP;
2631
+        $CaptionOffset     = isset($Format["CaptionOffset"]) ? $Format["CaptionOffset"] : 5;
2632
+        $CaptionR		= isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255;
2633
+        $CaptionG		= isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255;
2634
+        $CaptionB		= isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255;
2635
+        $CaptionAlpha	= isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100;
2636
+        $DrawBox		= isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE;
2637
+        $DrawBoxBorder	= isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE;
2638
+        $BorderOffset	= isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 3;
2639
+        $BoxRounded	= isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE;
2640
+        $RoundedRadius	= isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3;
2641
+        $BoxR		= isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
2642
+        $BoxG		= isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
2643
+        $BoxB		= isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
2644
+        $BoxAlpha		= isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 30;
2645
+        $BoxSurrounding	= isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
2646
+        $BoxBorderR	= isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255;
2647
+        $BoxBorderG	= isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255;
2648
+        $BoxBorderB	= isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255;
2649
+        $BoxBorderAlpha	= isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100;
2650
+        $ValueIsLabel	= isset($Format["ValueIsLabel"]) ? $Format["ValueIsLabel"] : FALSE;
2651
+
2652
+        $Data           = $this->DataSet->getData();
2653
+        $AbscissaMargin = $this->getAbscissaMargin($Data);
2654
+        $XScale         = $this->scaleGetXSettings();
2655
+
2656
+        if ( is_array($Value) ) { foreach ($Value as $Key => $ID) { $this->drawXThreshold($ID,$Format); } return(0); }
2657
+
2658
+        if ( $ValueIsLabel )
2659
+        {
2660
+        $Format["ValueIsLabel"] = FALSE;
2661
+        foreach($Data["Series"][$Data["Abscissa"]]["Data"] as $Key => $SerieValue)
2662 2662
         { if ( $SerieValue == $Value ) { $this->drawXThreshold($Key,$Format); } }
2663 2663
 
2664
-       return(0);
2665
-      }
2664
+        return(0);
2665
+        }
2666 2666
 
2667
-     $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius,
2668
-                              "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding,
2669
-                              "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha,
2670
-                              "R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha);
2667
+        $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius,
2668
+                                "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding,
2669
+                                "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha,
2670
+                                "R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha);
2671 2671
 
2672
-     if ( $Caption == NULL )
2673
-      {
2674
-       if ( isset($Data["Abscissa"]) )
2672
+        if ( $Caption == NULL )
2675 2673
         {
2676
-         if ( isset($Data["Series"][$Data["Abscissa"]]["Data"][$Value]) )
2677
-          $Caption = $Data["Series"][$Data["Abscissa"]]["Data"][$Value];
2678
-         else
2679
-          $Caption = $Value;
2674
+        if ( isset($Data["Abscissa"]) )
2675
+        {
2676
+            if ( isset($Data["Series"][$Data["Abscissa"]]["Data"][$Value]) )
2677
+            $Caption = $Data["Series"][$Data["Abscissa"]]["Data"][$Value];
2678
+            else
2679
+            $Caption = $Value;
2680 2680
         }
2681
-       else
2681
+        else
2682 2682
         $Caption = $Value;
2683
-      }
2683
+        }
2684 2684
 
2685
-     if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
2686
-      {
2687
-       $XStep = (($this->GraphAreaX2 - $this->GraphAreaX1) - $XScale[0] *2 ) / $XScale[1];
2688
-       $XPos  = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value;
2689
-       $YPos1 = $this->GraphAreaY1 + $Data["YMargin"];
2690
-       $YPos2 = $this->GraphAreaY2 - $Data["YMargin"];
2685
+        if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
2686
+        {
2687
+        $XStep = (($this->GraphAreaX2 - $this->GraphAreaX1) - $XScale[0] *2 ) / $XScale[1];
2688
+        $XPos  = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value;
2689
+        $YPos1 = $this->GraphAreaY1 + $Data["YMargin"];
2690
+        $YPos2 = $this->GraphAreaY2 - $Data["YMargin"];
2691 2691
 
2692
-       if ( $XPos >= $this->GraphAreaX1 + $AbscissaMargin && $XPos <= $this->GraphAreaX2 - $AbscissaMargin )
2692
+        if ( $XPos >= $this->GraphAreaX1 + $AbscissaMargin && $XPos <= $this->GraphAreaX2 - $AbscissaMargin )
2693 2693
         {
2694
-         $this->drawLine($XPos,$YPos1,$XPos,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
2694
+            $this->drawLine($XPos,$YPos1,$XPos,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
2695 2695
 
2696
-         if ( $Wide )
2697
-          {
2698
-           $this->drawLine($XPos-1,$YPos1,$XPos-1,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2699
-           $this->drawLine($XPos+1,$YPos1,$XPos+1,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2700
-          }
2696
+            if ( $Wide )
2697
+            {
2698
+            $this->drawLine($XPos-1,$YPos1,$XPos-1,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2699
+            $this->drawLine($XPos+1,$YPos1,$XPos+1,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2700
+            }
2701 2701
 
2702
-         if ( $WriteCaption )
2703
-          {
2704
-           if ( $CaptionAlign == CAPTION_LEFT_TOP )
2702
+            if ( $WriteCaption )
2703
+            {
2704
+            if ( $CaptionAlign == CAPTION_LEFT_TOP )
2705 2705
             { $Y = $YPos1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE; }
2706
-           else 
2706
+            else 
2707 2707
             { $Y = $YPos2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE; }
2708 2708
            
2709
-           $this->drawText($XPos,$Y,$Caption,$CaptionSettings);
2710
-          }
2709
+            $this->drawText($XPos,$Y,$Caption,$CaptionSettings);
2710
+            }
2711 2711
 
2712
-         return(array("X"=>$XPos));
2712
+            return(array("X"=>$XPos));
2713
+        }
2713 2714
         }
2714
-      }
2715
-     elseif( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
2716
-      {
2717
-       $XStep = (($this->GraphAreaY2 - $this->GraphAreaY1) - $XScale[0] *2 ) / $XScale[1];
2718
-       $XPos  = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value;
2719
-       $YPos1 = $this->GraphAreaX1 + $Data["YMargin"];
2720
-       $YPos2 = $this->GraphAreaX2 - $Data["YMargin"];
2715
+        elseif( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
2716
+        {
2717
+        $XStep = (($this->GraphAreaY2 - $this->GraphAreaY1) - $XScale[0] *2 ) / $XScale[1];
2718
+        $XPos  = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value;
2719
+        $YPos1 = $this->GraphAreaX1 + $Data["YMargin"];
2720
+        $YPos2 = $this->GraphAreaX2 - $Data["YMargin"];
2721 2721
 
2722
-       if ( $XPos >= $this->GraphAreaY1 + $AbscissaMargin && $XPos <= $this->GraphAreaY2 - $AbscissaMargin )
2722
+        if ( $XPos >= $this->GraphAreaY1 + $AbscissaMargin && $XPos <= $this->GraphAreaY2 - $AbscissaMargin )
2723 2723
         {
2724
-         $this->drawLine($YPos1,$XPos,$YPos2,$XPos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
2724
+            $this->drawLine($YPos1,$XPos,$YPos2,$XPos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
2725 2725
 
2726
-         if ( $Wide )
2727
-          {
2728
-           $this->drawLine($YPos1,$XPos-1,$YPos2,$XPos-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2729
-           $this->drawLine($YPos1,$XPos+1,$YPos2,$XPos+1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2730
-          }
2726
+            if ( $Wide )
2727
+            {
2728
+            $this->drawLine($YPos1,$XPos-1,$YPos2,$XPos-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2729
+            $this->drawLine($YPos1,$XPos+1,$YPos2,$XPos+1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2730
+            }
2731 2731
 
2732
-         if ( $WriteCaption )
2733
-          {
2734
-           if ( $CaptionAlign == CAPTION_LEFT_TOP )
2732
+            if ( $WriteCaption )
2733
+            {
2734
+            if ( $CaptionAlign == CAPTION_LEFT_TOP )
2735 2735
             { $Y = $YPos1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLELEFT; }
2736
-           else 
2736
+            else 
2737 2737
             { $Y = $YPos2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLERIGHT; }
2738 2738
            
2739
-           $this->drawText($Y,$XPos,$Caption,$CaptionSettings);
2740
-          }
2739
+            $this->drawText($Y,$XPos,$Caption,$CaptionSettings);
2740
+            }
2741 2741
 
2742
-         return(array("X"=>$XPos));
2742
+            return(array("X"=>$XPos));
2743
+        }
2743 2744
         }
2744
-      }
2745 2745
     }
2746 2746
 
2747
-   /* Draw an X threshold area */
2748
-   function drawXThresholdArea($Value1,$Value2,$Format="")
2747
+    /* Draw an X threshold area */
2748
+    function drawXThresholdArea($Value1,$Value2,$Format="")
2749 2749
     {
2750
-     $R		= isset($Format["R"]) ? $Format["R"] : 255;
2751
-     $G		= isset($Format["G"]) ? $Format["G"] : 0;
2752
-     $B		= isset($Format["B"]) ? $Format["B"] : 0;
2753
-     $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 20;
2754
-     $Border    = isset($Format["Border"]) ? $Format["Border"] : TRUE;
2755
-     $BorderR   = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
2756
-     $BorderG   = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
2757
-     $BorderB   = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
2758
-     $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha + 20;
2759
-     $BorderTicks = isset($Format["BorderTicks"]) ? $Format["BorderTicks"] : 2;
2760
-     $AreaName 	= isset($Format["AreaName"]) ? $Format["AreaName"] : NULL;
2761
-     $NameAngle	= isset($Format["NameAngle"]) ? $Format["NameAngle"] : ZONE_NAME_ANGLE_AUTO;
2762
-     $NameR	= isset($Format["NameR"]) ? $Format["NameR"] : 255;
2763
-     $NameG	= isset($Format["NameG"]) ? $Format["NameG"] : 255;
2764
-     $NameB	= isset($Format["NameB"]) ? $Format["NameB"] : 255;
2765
-     $NameAlpha	= isset($Format["NameAlpha"]) ? $Format["NameAlpha"] : 100;
2766
-     $DisableShadowOnArea = isset($Format["DisableShadowOnArea"]) ? $Format["DisableShadowOnArea"] : TRUE;
2767
-
2768
-     $RestoreShadow = $this->Shadow;
2769
-     if ( $DisableShadowOnArea && $this->Shadow ) { $this->Shadow = FALSE; }
2770
-
2771
-     if ($BorderAlpha >100) { $BorderAlpha = 100;}
2772
-
2773
-     $Data           = $this->DataSet->getData();
2774
-     $XScale         = $this->scaleGetXSettings();
2775
-     $AbscissaMargin = $this->getAbscissaMargin($Data);
2776
-
2777
-     if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
2778
-      {
2779
-       $XStep = (($this->GraphAreaX2 - $this->GraphAreaX1) - $XScale[0] *2 ) / $XScale[1];
2780
-       $XPos1 = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value1;
2781
-       $XPos2 = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value2;
2782
-       $YPos1 = $this->GraphAreaY1 + $Data["YMargin"];
2783
-       $YPos2 = $this->GraphAreaY2 - $Data["YMargin"];
2784
-
2785
-       if ( $XPos1 < $this->GraphAreaX1 + $XScale[0] ) { $XPos1 = $this->GraphAreaX1 + $XScale[0]; }
2786
-       if ( $XPos1 > $this->GraphAreaX2 - $XScale[0] ) { $XPos1 = $this->GraphAreaX2 - $XScale[0]; }
2787
-       if ( $XPos2 < $this->GraphAreaX1 + $XScale[0] ) { $XPos2 = $this->GraphAreaX1 + $XScale[0]; }
2788
-       if ( $XPos2 > $this->GraphAreaX2 - $XScale[0] ) { $XPos2 = $this->GraphAreaX2 - $XScale[0]; }
2789
-
2790
-       $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
2791
-
2792
-       if ( $Border )
2793
-        {
2794
-         $this->drawLine($XPos1,$YPos1,$XPos1,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
2795
-         $this->drawLine($XPos2,$YPos1,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
2796
-        }
2797
-
2798
-       if ( $AreaName != NULL )
2799
-        {
2800
-         $XPos = ($XPos2-$XPos1)/2 + $XPos1;
2801
-         $YPos = ($YPos2-$YPos1)/2 + $YPos1;
2802
-
2803
-         if ( $NameAngle == ZONE_NAME_ANGLE_AUTO )
2804
-          {
2805
-           $TxtPos   = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$AreaName);
2806
-           $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"];
2807
-           if ( abs($XPos2 - $XPos1) > $TxtWidth ) { $NameAngle = 0; } else { $NameAngle = 90; }
2808
-          }
2809
-         $this->Shadow = $RestoreShadow;
2810
-         $this->drawText($XPos,$YPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>$NameAngle,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
2811
-         if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
2812
-        }
2813
-
2814
-       $this->Shadow = $RestoreShadow;
2815
-       return(array("X1"=>$XPos1,"X2"=>$XPos2));
2816
-      }
2817
-     elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
2818
-      {
2819
-       $XStep = (($this->GraphAreaY2 - $this->GraphAreaY1) - $XScale[0] *2 ) / $XScale[1];
2820
-       $XPos1 = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value1;
2821
-       $XPos2 = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value2;
2822
-       $YPos1 = $this->GraphAreaX1 + $Data["YMargin"];
2823
-       $YPos2 = $this->GraphAreaX2 - $Data["YMargin"];
2824
-
2825
-       if ( $XPos1 < $this->GraphAreaY1 + $XScale[0] ) { $XPos1 = $this->GraphAreaY1 + $XScale[0]; }
2826
-       if ( $XPos1 > $this->GraphAreaY2 - $XScale[0] ) { $XPos1 = $this->GraphAreaY2 - $XScale[0]; }
2827
-       if ( $XPos2 < $this->GraphAreaY1 + $XScale[0] ) { $XPos2 = $this->GraphAreaY1 + $XScale[0]; }
2828
-       if ( $XPos2 > $this->GraphAreaY2 - $XScale[0] ) { $XPos2 = $this->GraphAreaY2 - $XScale[0]; }
2829
-
2830
-       $this->drawFilledRectangle($YPos1,$XPos1,$YPos2,$XPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
2831
-
2832
-       if ( $Border )
2833
-        {
2834
-         $this->drawLine($YPos1,$XPos1,$YPos2,$XPos1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
2835
-         $this->drawLine($YPos1,$XPos2,$YPos2,$XPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
2836
-        }
2837
-
2838
-       if ( $AreaName != NULL )
2839
-        {
2840
-         $XPos = ($XPos2-$XPos1)/2 + $XPos1;
2841
-         $YPos = ($YPos2-$YPos1)/2 + $YPos1;
2842
-
2843
-         $this->Shadow = $RestoreShadow;
2844
-         $this->drawText($YPos,$XPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>0,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
2845
-         if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
2846
-        }
2847
-
2848
-       $this->Shadow = $RestoreShadow;
2849
-       return(array("X1"=>$XPos1,"X2"=>$XPos2));
2850
-      }
2750
+        $R		= isset($Format["R"]) ? $Format["R"] : 255;
2751
+        $G		= isset($Format["G"]) ? $Format["G"] : 0;
2752
+        $B		= isset($Format["B"]) ? $Format["B"] : 0;
2753
+        $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 20;
2754
+        $Border    = isset($Format["Border"]) ? $Format["Border"] : TRUE;
2755
+        $BorderR   = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
2756
+        $BorderG   = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
2757
+        $BorderB   = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
2758
+        $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha + 20;
2759
+        $BorderTicks = isset($Format["BorderTicks"]) ? $Format["BorderTicks"] : 2;
2760
+        $AreaName 	= isset($Format["AreaName"]) ? $Format["AreaName"] : NULL;
2761
+        $NameAngle	= isset($Format["NameAngle"]) ? $Format["NameAngle"] : ZONE_NAME_ANGLE_AUTO;
2762
+        $NameR	= isset($Format["NameR"]) ? $Format["NameR"] : 255;
2763
+        $NameG	= isset($Format["NameG"]) ? $Format["NameG"] : 255;
2764
+        $NameB	= isset($Format["NameB"]) ? $Format["NameB"] : 255;
2765
+        $NameAlpha	= isset($Format["NameAlpha"]) ? $Format["NameAlpha"] : 100;
2766
+        $DisableShadowOnArea = isset($Format["DisableShadowOnArea"]) ? $Format["DisableShadowOnArea"] : TRUE;
2767
+
2768
+        $RestoreShadow = $this->Shadow;
2769
+        if ( $DisableShadowOnArea && $this->Shadow ) { $this->Shadow = FALSE; }
2770
+
2771
+        if ($BorderAlpha >100) { $BorderAlpha = 100;}
2772
+
2773
+        $Data           = $this->DataSet->getData();
2774
+        $XScale         = $this->scaleGetXSettings();
2775
+        $AbscissaMargin = $this->getAbscissaMargin($Data);
2776
+
2777
+        if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
2778
+        {
2779
+        $XStep = (($this->GraphAreaX2 - $this->GraphAreaX1) - $XScale[0] *2 ) / $XScale[1];
2780
+        $XPos1 = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value1;
2781
+        $XPos2 = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value2;
2782
+        $YPos1 = $this->GraphAreaY1 + $Data["YMargin"];
2783
+        $YPos2 = $this->GraphAreaY2 - $Data["YMargin"];
2784
+
2785
+        if ( $XPos1 < $this->GraphAreaX1 + $XScale[0] ) { $XPos1 = $this->GraphAreaX1 + $XScale[0]; }
2786
+        if ( $XPos1 > $this->GraphAreaX2 - $XScale[0] ) { $XPos1 = $this->GraphAreaX2 - $XScale[0]; }
2787
+        if ( $XPos2 < $this->GraphAreaX1 + $XScale[0] ) { $XPos2 = $this->GraphAreaX1 + $XScale[0]; }
2788
+        if ( $XPos2 > $this->GraphAreaX2 - $XScale[0] ) { $XPos2 = $this->GraphAreaX2 - $XScale[0]; }
2789
+
2790
+        $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
2791
+
2792
+        if ( $Border )
2793
+        {
2794
+            $this->drawLine($XPos1,$YPos1,$XPos1,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
2795
+            $this->drawLine($XPos2,$YPos1,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
2796
+        }
2797
+
2798
+        if ( $AreaName != NULL )
2799
+        {
2800
+            $XPos = ($XPos2-$XPos1)/2 + $XPos1;
2801
+            $YPos = ($YPos2-$YPos1)/2 + $YPos1;
2802
+
2803
+            if ( $NameAngle == ZONE_NAME_ANGLE_AUTO )
2804
+            {
2805
+            $TxtPos   = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$AreaName);
2806
+            $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"];
2807
+            if ( abs($XPos2 - $XPos1) > $TxtWidth ) { $NameAngle = 0; } else { $NameAngle = 90; }
2808
+            }
2809
+            $this->Shadow = $RestoreShadow;
2810
+            $this->drawText($XPos,$YPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>$NameAngle,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
2811
+            if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
2812
+        }
2813
+
2814
+        $this->Shadow = $RestoreShadow;
2815
+        return(array("X1"=>$XPos1,"X2"=>$XPos2));
2816
+        }
2817
+        elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
2818
+        {
2819
+        $XStep = (($this->GraphAreaY2 - $this->GraphAreaY1) - $XScale[0] *2 ) / $XScale[1];
2820
+        $XPos1 = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value1;
2821
+        $XPos2 = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value2;
2822
+        $YPos1 = $this->GraphAreaX1 + $Data["YMargin"];
2823
+        $YPos2 = $this->GraphAreaX2 - $Data["YMargin"];
2824
+
2825
+        if ( $XPos1 < $this->GraphAreaY1 + $XScale[0] ) { $XPos1 = $this->GraphAreaY1 + $XScale[0]; }
2826
+        if ( $XPos1 > $this->GraphAreaY2 - $XScale[0] ) { $XPos1 = $this->GraphAreaY2 - $XScale[0]; }
2827
+        if ( $XPos2 < $this->GraphAreaY1 + $XScale[0] ) { $XPos2 = $this->GraphAreaY1 + $XScale[0]; }
2828
+        if ( $XPos2 > $this->GraphAreaY2 - $XScale[0] ) { $XPos2 = $this->GraphAreaY2 - $XScale[0]; }
2829
+
2830
+        $this->drawFilledRectangle($YPos1,$XPos1,$YPos2,$XPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
2831
+
2832
+        if ( $Border )
2833
+        {
2834
+            $this->drawLine($YPos1,$XPos1,$YPos2,$XPos1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
2835
+            $this->drawLine($YPos1,$XPos2,$YPos2,$XPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
2836
+        }
2837
+
2838
+        if ( $AreaName != NULL )
2839
+        {
2840
+            $XPos = ($XPos2-$XPos1)/2 + $XPos1;
2841
+            $YPos = ($YPos2-$YPos1)/2 + $YPos1;
2842
+
2843
+            $this->Shadow = $RestoreShadow;
2844
+            $this->drawText($YPos,$XPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>0,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
2845
+            if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
2846
+        }
2847
+
2848
+        $this->Shadow = $RestoreShadow;
2849
+        return(array("X1"=>$XPos1,"X2"=>$XPos2));
2850
+        }
2851 2851
     }
2852 2852
 
2853
-   /* Draw an Y threshold with the computed scale */
2854
-   function drawThreshold($Value,$Format="")
2853
+    /* Draw an Y threshold with the computed scale */
2854
+    function drawThreshold($Value,$Format="")
2855 2855
     {
2856
-     $AxisID		= isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
2857
-     $R			= isset($Format["R"]) ? $Format["R"] : 255;
2858
-     $G			= isset($Format["G"]) ? $Format["G"] : 0;
2859
-     $B			= isset($Format["B"]) ? $Format["B"] : 0;
2860
-     $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 50;
2861
-     $Weight		= isset($Format["Weight"]) ? $Format["Weight"] : NULL;
2862
-     $Ticks		= isset($Format["Ticks"]) ? $Format["Ticks"] : 6;
2863
-     $Wide		= isset($Format["Wide"]) ? $Format["Wide"] : FALSE;
2864
-     $WideFactor	= isset($Format["WideFactor"]) ? $Format["WideFactor"] : 5;
2865
-     $WriteCaption	= isset($Format["WriteCaption"]) ? $Format["WriteCaption"] : FALSE;
2866
-     $Caption		= isset($Format["Caption"]) ? $Format["Caption"] : NULL;
2867
-     $CaptionAlign	= isset($Format["CaptionAlign"]) ? $Format["CaptionAlign"] : CAPTION_LEFT_TOP;
2868
-     $CaptionOffset     = isset($Format["CaptionOffset"]) ? $Format["CaptionOffset"] : 10;
2869
-     $CaptionR		= isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255;
2870
-     $CaptionG		= isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255;
2871
-     $CaptionB		= isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255;
2872
-     $CaptionAlpha	= isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100;
2873
-     $DrawBox		= isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE;
2874
-     $DrawBoxBorder	= isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE;
2875
-     $BorderOffset	= isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 5;
2876
-     $BoxRounded	= isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE;
2877
-     $RoundedRadius	= isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3;
2878
-     $BoxR		= isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
2879
-     $BoxG		= isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
2880
-     $BoxB		= isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
2881
-     $BoxAlpha		= isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 20;
2882
-     $BoxSurrounding	= isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
2883
-     $BoxBorderR	= isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255;
2884
-     $BoxBorderG	= isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255;
2885
-     $BoxBorderB	= isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255;
2886
-     $BoxBorderAlpha	= isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100;
2887
-     $NoMargin		= isset($Format["NoMargin"]) ? $Format["NoMargin"] : FALSE;
2888
-
2889
-     if ( is_array($Value) ) { foreach ($Value as $Key => $ID) { $this->drawThreshold($ID,$Format); } return(0); }
2890
-
2891
-     $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius,
2892
-                              "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding,
2893
-                              "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha,
2894
-                              "R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha);
2895
-
2896
-     $Data           = $this->DataSet->getData();
2897
-     $AbscissaMargin = $this->getAbscissaMargin($Data);
2898
-
2899
-     if ( $NoMargin ) { $AbscissaMargin = 0; }
2900
-     if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
2901
-     if ( $Caption == NULL ) { $Caption = $Value; }
2902
-
2903
-     if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
2904
-      {
2905
-       $YPos = $this->scaleComputeY($Value,array("AxisID"=>$AxisID));
2906
-       if ( $YPos >= $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"] && $YPos <= $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"] )
2907
-        {
2908
-         $X1 = $this->GraphAreaX1 + $AbscissaMargin;
2909
-         $X2 = $this->GraphAreaX2 - $AbscissaMargin;
2910
-
2911
-         $this->drawLine($X1,$YPos,$X2,$YPos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
2912
-
2913
-         if ( $Wide )
2914
-          {
2915
-           $this->drawLine($X1,$YPos-1,$X2,$YPos-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2916
-           $this->drawLine($X1,$YPos+1,$X2,$YPos+1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2917
-          }
2918
-
2919
-         if ( $WriteCaption )
2920
-          {
2921
-           if ( $CaptionAlign == CAPTION_LEFT_TOP )
2856
+        $AxisID		= isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
2857
+        $R			= isset($Format["R"]) ? $Format["R"] : 255;
2858
+        $G			= isset($Format["G"]) ? $Format["G"] : 0;
2859
+        $B			= isset($Format["B"]) ? $Format["B"] : 0;
2860
+        $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 50;
2861
+        $Weight		= isset($Format["Weight"]) ? $Format["Weight"] : NULL;
2862
+        $Ticks		= isset($Format["Ticks"]) ? $Format["Ticks"] : 6;
2863
+        $Wide		= isset($Format["Wide"]) ? $Format["Wide"] : FALSE;
2864
+        $WideFactor	= isset($Format["WideFactor"]) ? $Format["WideFactor"] : 5;
2865
+        $WriteCaption	= isset($Format["WriteCaption"]) ? $Format["WriteCaption"] : FALSE;
2866
+        $Caption		= isset($Format["Caption"]) ? $Format["Caption"] : NULL;
2867
+        $CaptionAlign	= isset($Format["CaptionAlign"]) ? $Format["CaptionAlign"] : CAPTION_LEFT_TOP;
2868
+        $CaptionOffset     = isset($Format["CaptionOffset"]) ? $Format["CaptionOffset"] : 10;
2869
+        $CaptionR		= isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255;
2870
+        $CaptionG		= isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255;
2871
+        $CaptionB		= isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255;
2872
+        $CaptionAlpha	= isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100;
2873
+        $DrawBox		= isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE;
2874
+        $DrawBoxBorder	= isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE;
2875
+        $BorderOffset	= isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 5;
2876
+        $BoxRounded	= isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE;
2877
+        $RoundedRadius	= isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3;
2878
+        $BoxR		= isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
2879
+        $BoxG		= isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
2880
+        $BoxB		= isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
2881
+        $BoxAlpha		= isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 20;
2882
+        $BoxSurrounding	= isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
2883
+        $BoxBorderR	= isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255;
2884
+        $BoxBorderG	= isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255;
2885
+        $BoxBorderB	= isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255;
2886
+        $BoxBorderAlpha	= isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100;
2887
+        $NoMargin		= isset($Format["NoMargin"]) ? $Format["NoMargin"] : FALSE;
2888
+
2889
+        if ( is_array($Value) ) { foreach ($Value as $Key => $ID) { $this->drawThreshold($ID,$Format); } return(0); }
2890
+
2891
+        $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius,
2892
+                                "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding,
2893
+                                "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha,
2894
+                                "R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha);
2895
+
2896
+        $Data           = $this->DataSet->getData();
2897
+        $AbscissaMargin = $this->getAbscissaMargin($Data);
2898
+
2899
+        if ( $NoMargin ) { $AbscissaMargin = 0; }
2900
+        if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
2901
+        if ( $Caption == NULL ) { $Caption = $Value; }
2902
+
2903
+        if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
2904
+        {
2905
+        $YPos = $this->scaleComputeY($Value,array("AxisID"=>$AxisID));
2906
+        if ( $YPos >= $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"] && $YPos <= $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"] )
2907
+        {
2908
+            $X1 = $this->GraphAreaX1 + $AbscissaMargin;
2909
+            $X2 = $this->GraphAreaX2 - $AbscissaMargin;
2910
+
2911
+            $this->drawLine($X1,$YPos,$X2,$YPos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
2912
+
2913
+            if ( $Wide )
2914
+            {
2915
+            $this->drawLine($X1,$YPos-1,$X2,$YPos-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2916
+            $this->drawLine($X1,$YPos+1,$X2,$YPos+1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2917
+            }
2918
+
2919
+            if ( $WriteCaption )
2920
+            {
2921
+            if ( $CaptionAlign == CAPTION_LEFT_TOP )
2922 2922
             { $X = $X1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLELEFT; }
2923
-           else 
2923
+            else 
2924 2924
             { $X = $X2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLERIGHT; }
2925 2925
            
2926
-           $this->drawText($X,$YPos,$Caption,$CaptionSettings);
2927
-          }
2926
+            $this->drawText($X,$YPos,$Caption,$CaptionSettings);
2927
+            }
2928 2928
         }
2929 2929
 
2930
-       return(array("Y"=>$YPos));
2931
-      }
2930
+        return(array("Y"=>$YPos));
2931
+        }
2932 2932
 
2933
-     if ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
2934
-      {
2935
-       $XPos = $this->scaleComputeY($Value,array("AxisID"=>$AxisID));
2936
-       if ( $XPos >= $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"] && $XPos <= $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"] )
2933
+        if ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
2937 2934
         {
2938
-         $Y1 = $this->GraphAreaY1 + $AbscissaMargin;
2939
-         $Y2 = $this->GraphAreaY2 - $AbscissaMargin;
2935
+        $XPos = $this->scaleComputeY($Value,array("AxisID"=>$AxisID));
2936
+        if ( $XPos >= $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"] && $XPos <= $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"] )
2937
+        {
2938
+            $Y1 = $this->GraphAreaY1 + $AbscissaMargin;
2939
+            $Y2 = $this->GraphAreaY2 - $AbscissaMargin;
2940 2940
 
2941
-         $this->drawLine($XPos,$Y1,$XPos,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
2941
+            $this->drawLine($XPos,$Y1,$XPos,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
2942 2942
 
2943
-         if ( $Wide )
2944
-          {
2945
-           $this->drawLine($XPos-1,$Y1,$XPos-1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2946
-           $this->drawLine($XPos+1,$Y1,$XPos+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2947
-          }
2943
+            if ( $Wide )
2944
+            {
2945
+            $this->drawLine($XPos-1,$Y1,$XPos-1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2946
+            $this->drawLine($XPos+1,$Y1,$XPos+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
2947
+            }
2948 2948
 
2949
-         if ( $WriteCaption )
2950
-          {
2951
-           if ( $CaptionAlign == CAPTION_LEFT_TOP )
2949
+            if ( $WriteCaption )
2950
+            {
2951
+            if ( $CaptionAlign == CAPTION_LEFT_TOP )
2952 2952
             { $Y = $Y1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE; }
2953
-           else 
2953
+            else 
2954 2954
             { $Y = $Y2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE; }
2955 2955
 
2956
-           $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE;
2957
-           $this->drawText($XPos,$Y,$Caption,$CaptionSettings);
2958
-          }
2956
+            $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE;
2957
+            $this->drawText($XPos,$Y,$Caption,$CaptionSettings);
2958
+            }
2959 2959
         }
2960 2960
 
2961
-       return(array("Y"=>$XPos));
2962
-      }
2961
+        return(array("Y"=>$XPos));
2962
+        }
2963 2963
     }
2964 2964
 
2965
-   /* Draw a threshold with the computed scale */
2966
-   function drawThresholdArea($Value1,$Value2,$Format="")
2965
+    /* Draw a threshold with the computed scale */
2966
+    function drawThresholdArea($Value1,$Value2,$Format="")
2967 2967
     {
2968
-     $AxisID	= isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
2969
-     $R		= isset($Format["R"]) ? $Format["R"] : 255;
2970
-     $G		= isset($Format["G"]) ? $Format["G"] : 0;
2971
-     $B		= isset($Format["B"]) ? $Format["B"] : 0;
2972
-     $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 20;
2973
-     $Border    = isset($Format["Border"]) ? $Format["Border"] : TRUE;
2974
-     $BorderR   = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
2975
-     $BorderG   = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
2976
-     $BorderB   = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
2977
-     $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha + 20;
2978
-     $BorderTicks = isset($Format["BorderTicks"]) ? $Format["BorderTicks"] : 2;
2979
-     $AreaName 	= isset($Format["AreaName"]) ? $Format["AreaName"] : NULL;
2980
-     $NameAngle	= isset($Format["NameAngle"]) ? $Format["NameAngle"] : ZONE_NAME_ANGLE_AUTO;
2981
-     $NameR	= isset($Format["NameR"]) ? $Format["NameR"] : 255;
2982
-     $NameG	= isset($Format["NameG"]) ? $Format["NameG"] : 255;
2983
-     $NameB	= isset($Format["NameB"]) ? $Format["NameB"] : 255;
2984
-     $NameAlpha	= isset($Format["NameAlpha"]) ? $Format["NameAlpha"] : 100;
2985
-     $DisableShadowOnArea = isset($Format["DisableShadowOnArea"]) ? $Format["DisableShadowOnArea"] : TRUE;
2986
-     $NoMargin	= isset($Format["NoMargin"]) ? $Format["NoMargin"] : FALSE;
2987
-
2988
-     if ($Value1 > $Value2) { list($Value1, $Value2) = array($Value2, $Value1); }
2989
-
2990
-     $RestoreShadow = $this->Shadow;
2991
-     if ( $DisableShadowOnArea && $this->Shadow ) { $this->Shadow = FALSE; }
2992
-
2993
-     if ($BorderAlpha >100) { $BorderAlpha = 100;}
2994
-
2995
-     $Data           = $this->DataSet->getData();
2996
-     $AbscissaMargin = $this->getAbscissaMargin($Data);
2997
-
2998
-     if ( $NoMargin ) { $AbscissaMargin = 0; }
2999
-     if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
3000
-
3001
-     if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3002
-      {
3003
-       $XPos1 = $this->GraphAreaX1 + $AbscissaMargin;
3004
-       $XPos2 = $this->GraphAreaX2 - $AbscissaMargin;
3005
-       $YPos1 = $this->scaleComputeY($Value1,array("AxisID"=>$AxisID));
3006
-       $YPos2 = $this->scaleComputeY($Value2,array("AxisID"=>$AxisID));
3007
-
3008
-       if ( $YPos1 < $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"] ) { $YPos1 = $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"]; }
3009
-       if ( $YPos1 > $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"] ) { $YPos1 = $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"]; }
3010
-       if ( $YPos2 < $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"] ) { $YPos2 = $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"]; }
3011
-       if ( $YPos2 > $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"] ) { $YPos2 = $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"]; }
3012
-
3013
-       $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
3014
-       if ( $Border )
3015
-        {
3016
-         $this->drawLine($XPos1,$YPos1,$XPos2,$YPos1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
3017
-         $this->drawLine($XPos1,$YPos2,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
3018
-        }
3019
-
3020
-       if ( $AreaName != NULL )
3021
-        {
3022
-         $XPos = ($XPos2-$XPos1)/2 + $XPos1;
3023
-         $YPos = ($YPos2-$YPos1)/2 + $YPos1;
3024
-         $this->Shadow = $RestoreShadow;
3025
-         $this->drawText($XPos,$YPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>0,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
3026
-         if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
3027
-        }
3028
-
3029
-       $this->Shadow = $RestoreShadow;
3030
-       return(array("Y1"=>$YPos1,"Y2"=>$YPos2));
3031
-      }
3032
-     elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
3033
-      {
3034
-       $YPos1 = $this->GraphAreaY1 + $AbscissaMargin;
3035
-       $YPos2 = $this->GraphAreaY2 - $AbscissaMargin;
3036
-       $XPos1 = $this->scaleComputeY($Value1,array("AxisID"=>$AxisID));
3037
-       $XPos2 = $this->scaleComputeY($Value2,array("AxisID"=>$AxisID));
3038
-
3039
-       if ( $XPos1 < $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"] ) { $XPos1 = $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"]; }
3040
-       if ( $XPos1 > $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"] ) { $XPos1 = $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"]; }
3041
-       if ( $XPos2 < $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"] ) { $XPos2 = $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"]; }
3042
-       if ( $XPos2 > $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"] ) { $XPos2 = $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"]; }
3043
-
3044
-       $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
3045
-       if ( $Border )
3046
-        {
3047
-         $this->drawLine($XPos1,$YPos1,$XPos1,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
3048
-         $this->drawLine($XPos2,$YPos1,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
3049
-        }
3050
-
3051
-       if ( $AreaName != NULL )
3052
-        {
3053
-         $XPos = ($YPos2-$YPos1)/2 + $YPos1;
3054
-         $YPos = ($XPos2-$XPos1)/2 + $XPos1;
3055
-
3056
-         if ( $NameAngle == ZONE_NAME_ANGLE_AUTO )
3057
-          {
3058
-           $TxtPos   = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$AreaName);
3059
-           $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"];
3060
-           if ( abs($XPos2 - $XPos1) > $TxtWidth ) { $NameAngle = 0; } else { $NameAngle = 90; }
3061
-          }
3062
-         $this->Shadow = $RestoreShadow;
3063
-         $this->drawText($YPos,$XPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>$NameAngle,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
3064
-         if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
3065
-        }
3066
-
3067
-       $this->Shadow = $RestoreShadow;
3068
-       return(array("Y1"=>$XPos1,"Y2"=>$XPos2));
3069
-      }
2968
+        $AxisID	= isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
2969
+        $R		= isset($Format["R"]) ? $Format["R"] : 255;
2970
+        $G		= isset($Format["G"]) ? $Format["G"] : 0;
2971
+        $B		= isset($Format["B"]) ? $Format["B"] : 0;
2972
+        $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 20;
2973
+        $Border    = isset($Format["Border"]) ? $Format["Border"] : TRUE;
2974
+        $BorderR   = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
2975
+        $BorderG   = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
2976
+        $BorderB   = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
2977
+        $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha + 20;
2978
+        $BorderTicks = isset($Format["BorderTicks"]) ? $Format["BorderTicks"] : 2;
2979
+        $AreaName 	= isset($Format["AreaName"]) ? $Format["AreaName"] : NULL;
2980
+        $NameAngle	= isset($Format["NameAngle"]) ? $Format["NameAngle"] : ZONE_NAME_ANGLE_AUTO;
2981
+        $NameR	= isset($Format["NameR"]) ? $Format["NameR"] : 255;
2982
+        $NameG	= isset($Format["NameG"]) ? $Format["NameG"] : 255;
2983
+        $NameB	= isset($Format["NameB"]) ? $Format["NameB"] : 255;
2984
+        $NameAlpha	= isset($Format["NameAlpha"]) ? $Format["NameAlpha"] : 100;
2985
+        $DisableShadowOnArea = isset($Format["DisableShadowOnArea"]) ? $Format["DisableShadowOnArea"] : TRUE;
2986
+        $NoMargin	= isset($Format["NoMargin"]) ? $Format["NoMargin"] : FALSE;
2987
+
2988
+        if ($Value1 > $Value2) { list($Value1, $Value2) = array($Value2, $Value1); }
2989
+
2990
+        $RestoreShadow = $this->Shadow;
2991
+        if ( $DisableShadowOnArea && $this->Shadow ) { $this->Shadow = FALSE; }
2992
+
2993
+        if ($BorderAlpha >100) { $BorderAlpha = 100;}
2994
+
2995
+        $Data           = $this->DataSet->getData();
2996
+        $AbscissaMargin = $this->getAbscissaMargin($Data);
2997
+
2998
+        if ( $NoMargin ) { $AbscissaMargin = 0; }
2999
+        if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
3000
+
3001
+        if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3002
+        {
3003
+        $XPos1 = $this->GraphAreaX1 + $AbscissaMargin;
3004
+        $XPos2 = $this->GraphAreaX2 - $AbscissaMargin;
3005
+        $YPos1 = $this->scaleComputeY($Value1,array("AxisID"=>$AxisID));
3006
+        $YPos2 = $this->scaleComputeY($Value2,array("AxisID"=>$AxisID));
3007
+
3008
+        if ( $YPos1 < $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"] ) { $YPos1 = $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"]; }
3009
+        if ( $YPos1 > $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"] ) { $YPos1 = $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"]; }
3010
+        if ( $YPos2 < $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"] ) { $YPos2 = $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"]; }
3011
+        if ( $YPos2 > $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"] ) { $YPos2 = $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"]; }
3012
+
3013
+        $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
3014
+        if ( $Border )
3015
+        {
3016
+            $this->drawLine($XPos1,$YPos1,$XPos2,$YPos1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
3017
+            $this->drawLine($XPos1,$YPos2,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
3018
+        }
3019
+
3020
+        if ( $AreaName != NULL )
3021
+        {
3022
+            $XPos = ($XPos2-$XPos1)/2 + $XPos1;
3023
+            $YPos = ($YPos2-$YPos1)/2 + $YPos1;
3024
+            $this->Shadow = $RestoreShadow;
3025
+            $this->drawText($XPos,$YPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>0,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
3026
+            if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
3027
+        }
3028
+
3029
+        $this->Shadow = $RestoreShadow;
3030
+        return(array("Y1"=>$YPos1,"Y2"=>$YPos2));
3031
+        }
3032
+        elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
3033
+        {
3034
+        $YPos1 = $this->GraphAreaY1 + $AbscissaMargin;
3035
+        $YPos2 = $this->GraphAreaY2 - $AbscissaMargin;
3036
+        $XPos1 = $this->scaleComputeY($Value1,array("AxisID"=>$AxisID));
3037
+        $XPos2 = $this->scaleComputeY($Value2,array("AxisID"=>$AxisID));
3038
+
3039
+        if ( $XPos1 < $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"] ) { $XPos1 = $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"]; }
3040
+        if ( $XPos1 > $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"] ) { $XPos1 = $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"]; }
3041
+        if ( $XPos2 < $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"] ) { $XPos2 = $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"]; }
3042
+        if ( $XPos2 > $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"] ) { $XPos2 = $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"]; }
3043
+
3044
+        $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
3045
+        if ( $Border )
3046
+        {
3047
+            $this->drawLine($XPos1,$YPos1,$XPos1,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
3048
+            $this->drawLine($XPos2,$YPos1,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
3049
+        }
3050
+
3051
+        if ( $AreaName != NULL )
3052
+        {
3053
+            $XPos = ($YPos2-$YPos1)/2 + $YPos1;
3054
+            $YPos = ($XPos2-$XPos1)/2 + $XPos1;
3055
+
3056
+            if ( $NameAngle == ZONE_NAME_ANGLE_AUTO )
3057
+            {
3058
+            $TxtPos   = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$AreaName);
3059
+            $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"];
3060
+            if ( abs($XPos2 - $XPos1) > $TxtWidth ) { $NameAngle = 0; } else { $NameAngle = 90; }
3061
+            }
3062
+            $this->Shadow = $RestoreShadow;
3063
+            $this->drawText($YPos,$XPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>$NameAngle,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
3064
+            if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
3065
+        }
3066
+
3067
+        $this->Shadow = $RestoreShadow;
3068
+        return(array("Y1"=>$XPos1,"Y2"=>$XPos2));
3069
+        }
3070 3070
     }
3071 3071
 
3072
-   function scaleGetXSettings()
3072
+    function scaleGetXSettings()
3073 3073
     {
3074
-     $Data = $this->DataSet->getData();
3075
-     foreach($Data["Axis"] as $AxisID => $Settings)
3076
-      {
3077
-       if ( $Settings["Identity"] == AXIS_X )
3074
+        $Data = $this->DataSet->getData();
3075
+        foreach($Data["Axis"] as $AxisID => $Settings)
3076
+        {
3077
+        if ( $Settings["Identity"] == AXIS_X )
3078 3078
         {
3079
-         $Rows = $Settings["Rows"];
3079
+            $Rows = $Settings["Rows"];
3080 3080
 
3081
-         return(array($Settings["Margin"],$Rows));
3081
+            return(array($Settings["Margin"],$Rows));
3082
+        }
3082 3083
         }
3083
-      }
3084 3084
     }
3085 3085
 
3086
-   function scaleComputeY($Values,$Option="",$ReturnOnly0Height=FALSE)
3086
+    function scaleComputeY($Values,$Option="",$ReturnOnly0Height=FALSE)
3087 3087
     {
3088
-     $AxisID	= isset($Option["AxisID"]) ? $Option["AxisID"] : 0;
3089
-     $SerieName	= isset($Option["SerieName"]) ? $Option["SerieName"] : NULL;
3088
+        $AxisID	= isset($Option["AxisID"]) ? $Option["AxisID"] : 0;
3089
+        $SerieName	= isset($Option["SerieName"]) ? $Option["SerieName"] : NULL;
3090 3090
 
3091
-     $Data = $this->DataSet->getData();
3092
-     if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
3091
+        $Data = $this->DataSet->getData();
3092
+        if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
3093 3093
 
3094
-     if ( $SerieName != NULL ) { $AxisID = $Data["Series"][$SerieName]["Axis"]; }
3095
-     if ( !is_array($Values) ) { $tmp = $Values; $Values = ""; $Values[0] = $tmp; }
3094
+        if ( $SerieName != NULL ) { $AxisID = $Data["Series"][$SerieName]["Axis"]; }
3095
+        if ( !is_array($Values) ) { $tmp = $Values; $Values = ""; $Values[0] = $tmp; }
3096 3096
 
3097
-     $Result = "";
3098
-     if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3099
-      {
3100
-       $Height      = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Data["Axis"][$AxisID]["Margin"]*2;
3101
-       $ScaleHeight = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"];
3102
-       $Step        = $Height / $ScaleHeight;
3097
+        $Result = "";
3098
+        if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3099
+        {
3100
+        $Height      = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Data["Axis"][$AxisID]["Margin"]*2;
3101
+        $ScaleHeight = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"];
3102
+        $Step        = $Height / $ScaleHeight;
3103 3103
 
3104
-       if ( $ReturnOnly0Height )
3104
+        if ( $ReturnOnly0Height )
3105 3105
         { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $Step * $Value; } } }
3106
-       else
3106
+        else
3107 3107
         { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $this->GraphAreaY2 - $Data["Axis"][$AxisID]["Margin"] - ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"])); } } }
3108
-      }
3109
-     else
3110
-      {
3111
-       $Width      = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Data["Axis"][$AxisID]["Margin"]*2;
3112
-       $ScaleWidth = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"];
3113
-       $Step       = $Width / $ScaleWidth;
3114
-
3115
-       if ( $ReturnOnly0Height )
3108
+        }
3109
+        else
3110
+        {
3111
+        $Width      = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Data["Axis"][$AxisID]["Margin"]*2;
3112
+        $ScaleWidth = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"];
3113
+        $Step       = $Width / $ScaleWidth;
3114
+
3115
+        if ( $ReturnOnly0Height )
3116 3116
         { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $Step * $Value; } } }
3117
-       else
3117
+        else
3118 3118
         { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $this->GraphAreaX1 + $Data["Axis"][$AxisID]["Margin"] + ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"])); } } }
3119
-      }
3119
+        }
3120 3120
 
3121
-     if ( count($Result) == 1 )
3122
-      return($Result[0]);
3123
-     else
3124
-      return($Result);
3121
+        if ( count($Result) == 1 )
3122
+        return($Result[0]);
3123
+        else
3124
+        return($Result);
3125 3125
     }
3126 3126
 
3127
-   /* Format the axis values */
3128
-   function scaleFormat($Value,$Mode=NULL,$Format=NULL,$Unit=NULL)
3127
+    /* Format the axis values */
3128
+    function scaleFormat($Value,$Mode=NULL,$Format=NULL,$Unit=NULL)
3129 3129
     {
3130
-     if ( $Value == VOID ) { return(""); }
3130
+        if ( $Value == VOID ) { return(""); }
3131 3131
 
3132
-     if ( $Mode == AXIS_FORMAT_CUSTOM )
3133
-      { if ( function_exists($Format) ) { return(call_user_func($Format,$Value)); } }
3132
+        if ( $Mode == AXIS_FORMAT_CUSTOM )
3133
+        { if ( function_exists($Format) ) { return(call_user_func($Format,$Value)); } }
3134 3134
 
3135
-     if ( $Mode == AXIS_FORMAT_DATE )
3136
-      { if ( $Format == NULL ) { $Pattern = "d/m/Y"; } else { $Pattern = $Format; } return(date($Pattern,$Value)); }
3135
+        if ( $Mode == AXIS_FORMAT_DATE )
3136
+        { if ( $Format == NULL ) { $Pattern = "d/m/Y"; } else { $Pattern = $Format; } return(date($Pattern,$Value)); }
3137 3137
 
3138
-     if ( $Mode == AXIS_FORMAT_TIME )
3139
-      { if ( $Format == NULL ) { $Pattern = "H:i:s"; } else { $Pattern = $Format; } return(date($Pattern,$Value)); }
3138
+        if ( $Mode == AXIS_FORMAT_TIME )
3139
+        { if ( $Format == NULL ) { $Pattern = "H:i:s"; } else { $Pattern = $Format; } return(date($Pattern,$Value)); }
3140 3140
 
3141
-     if ( $Mode == AXIS_FORMAT_CURRENCY )
3142
-      { return($Format.number_format($Value,2)); }
3141
+        if ( $Mode == AXIS_FORMAT_CURRENCY )
3142
+        { return($Format.number_format($Value,2)); }
3143 3143
 
3144
-     if ( $Mode == AXIS_FORMAT_METRIC )
3145
-      {
3146
-       if (abs($Value) > 1000000000)
3144
+        if ( $Mode == AXIS_FORMAT_METRIC )
3145
+        {
3146
+        if (abs($Value) > 1000000000)
3147 3147
         return(round($Value/1000000000,$Format)."g".$Unit);
3148
-       if (abs($Value) > 1000000)
3148
+        if (abs($Value) > 1000000)
3149 3149
         return(round($Value/1000000,$Format)."m".$Unit);
3150
-       elseif (abs($Value) >= 1000)
3150
+        elseif (abs($Value) >= 1000)
3151 3151
         return(round($Value/1000,$Format)."k".$Unit);
3152 3152
        
3153
-      }
3154
-     return($Value.$Unit);
3153
+        }
3154
+        return($Value.$Unit);
3155 3155
     }
3156 3156
 
3157
-   /* Write Max value on a chart */
3158
-   function writeBounds($Type=BOUND_BOTH,$Format=NULL)
3157
+    /* Write Max value on a chart */
3158
+    function writeBounds($Type=BOUND_BOTH,$Format=NULL)
3159 3159
     {
3160
-     $MaxLabelTxt	= isset($Format["MaxLabelTxt"]) ? $Format["MaxLabelTxt"] : "max=";
3161
-     $MinLabelTxt	= isset($Format["MinLabelTxt"]) ? $Format["MinLabelTxt"] : "min=";
3162
-     $Decimals		= isset($Format["Decimals"]) ? $Format["Decimals"] : 1;
3163
-     $ExcludedSeries	= isset($Format["ExcludedSeries"]) ? $Format["ExcludedSeries"] : "";
3164
-     $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 4;
3165
-     $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
3166
-     $MaxDisplayR	= isset($Format["MaxDisplayR"]) ? $Format["MaxDisplayR"] : 0;
3167
-     $MaxDisplayG	= isset($Format["MaxDisplayG"]) ? $Format["MaxDisplayG"] : 0;
3168
-     $MaxDisplayB	= isset($Format["MaxDisplayB"]) ? $Format["MaxDisplayB"] : 0;
3169
-     $MinDisplayR	= isset($Format["MinDisplayR"]) ? $Format["MinDisplayR"] : 255;
3170
-     $MinDisplayG	= isset($Format["MinDisplayG"]) ? $Format["MinDisplayG"] : 255;
3171
-     $MinDisplayB	= isset($Format["MinDisplayB"]) ? $Format["MinDisplayB"] : 255;
3172
-     $MinLabelPos	= isset($Format["MinLabelPos"]) ? $Format["MinLabelPos"] : BOUND_LABEL_POS_AUTO;
3173
-     $MaxLabelPos	= isset($Format["MaxLabelPos"]) ? $Format["MaxLabelPos"] : BOUND_LABEL_POS_AUTO;
3174
-     $DrawBox		= isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE;
3175
-     $DrawBoxBorder	= isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE;
3176
-     $BorderOffset	= isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 5;
3177
-     $BoxRounded	= isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE;
3178
-     $RoundedRadius	= isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3;
3179
-     $BoxR		= isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
3180
-     $BoxG		= isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
3181
-     $BoxB		= isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
3182
-     $BoxAlpha		= isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 20;
3183
-     $BoxSurrounding	= isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
3184
-     $BoxBorderR	= isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255;
3185
-     $BoxBorderG	= isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255;
3186
-     $BoxBorderB	= isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255;
3187
-     $BoxBorderAlpha	= isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100;
3188
-
3189
-     $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius,
3190
-                              "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding,
3191
-                              "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha);
3192
-
3193
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
3194
-
3195
-     $Data = $this->DataSet->getData();
3196
-     foreach($Data["Series"] as $SerieName => $Serie)
3197
-      {
3198
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && !isset($ExcludedSeries[$SerieName]))
3199
-        {
3200
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
3201
-         if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
3202
-
3203
-         $MinValue = $this->DataSet->getMin($SerieName);
3204
-         $MaxValue = $this->DataSet->getMax($SerieName);
3205
-
3206
-         $MinPos = VOID; $MaxPos = VOID;
3207
-         foreach($Serie["Data"] as $Key => $Value)
3208
-          { 
3209
-           if ( $Value == $MinValue && $MinPos == VOID ) { $MinPos = $Key; }
3210
-           if ( $Value == $MaxValue ) { $MaxPos = $Key; }
3211
-          }
3212
-
3213
-         $AxisID	= $Serie["Axis"];
3214
-         $Mode		= $Data["Axis"][$AxisID]["Display"];
3215
-         $Format	= $Data["Axis"][$AxisID]["Format"];
3216
-         $Unit		= $Data["Axis"][$AxisID]["Unit"];
3217
-
3218
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
3219
-
3220
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3221
-          {
3222
-           $XStep       = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs;
3223
-           $X           = $this->GraphAreaX1 + $XMargin;
3224
-           $SerieOffset = isset($Serie["XOffset"]) ? $Serie["XOffset"] : 0;
3225
-
3226
-           if ( $Type == BOUND_MAX || $Type == BOUND_BOTH )
3227
-            {
3228
-             if ( $MaxLabelPos == BOUND_LABEL_POS_TOP    || ( $MaxLabelPos ==  BOUND_LABEL_POS_AUTO && $MaxValue >= 0) ) { $YPos  = $PosArray[$MaxPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_BOTTOMMIDDLE; }
3229
-             if ( $MaxLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MaxLabelPos ==  BOUND_LABEL_POS_AUTO && $MaxValue < 0) ) { $YPos  = $PosArray[$MaxPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_TOPMIDDLE; }
3230
-
3231
-             $XPos  = $X + $MaxPos*$XStep + $SerieOffset;
3232
-             $Label = $MaxLabelTxt.$this->scaleFormat(round($MaxValue,$Decimals),$Mode,$Format,$Unit);
3233
-
3234
-             $TxtPos  = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$Label);
3235
-             $XOffset = 0; $YOffset = 0;
3236
-             if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = (($this->GraphAreaX1 - $TxtPos[0]["X"])/2); }
3237
-             if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -(($TxtPos[1]["X"] - $this->GraphAreaX2)/2); }
3238
-             if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $TxtPos[2]["Y"]; }
3239
-             if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -($TxtPos[0]["Y"] - $this->GraphAreaY2); }
3240
-
3241
-             $CaptionSettings["R"] = $MaxDisplayR; $CaptionSettings["G"] = $MaxDisplayG;
3242
-             $CaptionSettings["B"] = $MaxDisplayB; $CaptionSettings["Align"] = $Align;
3243
-
3244
-             $this->drawText($XPos+$XOffset,$YPos+$YOffset,$Label,$CaptionSettings);
3245
-            }
3246
-
3247
-           if ( $Type == BOUND_MIN || $Type == BOUND_BOTH )
3248
-            {
3249
-             if ( $MinLabelPos == BOUND_LABEL_POS_TOP    || ( $MinLabelPos ==  BOUND_LABEL_POS_AUTO && $MinValue >= 0) ) { $YPos  = $PosArray[$MinPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_BOTTOMMIDDLE; }
3250
-             if ( $MinLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MinLabelPos ==  BOUND_LABEL_POS_AUTO && $MinValue < 0) ) { $YPos  = $PosArray[$MinPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_TOPMIDDLE; }
3251
-
3252
-             $XPos  = $X + $MinPos*$XStep + $SerieOffset;
3253
-             $Label = $MinLabelTxt.$this->scaleFormat(round($MinValue,$Decimals),$Mode,$Format,$Unit);
3254
-
3255
-             $TxtPos  = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$Label);
3256
-             $XOffset = 0; $YOffset = 0;
3257
-             if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = (($this->GraphAreaX1 - $TxtPos[0]["X"])/2); }
3258
-             if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -(($TxtPos[1]["X"] - $this->GraphAreaX2)/2); }
3259
-             if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $TxtPos[2]["Y"]; }
3260
-             if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -($TxtPos[0]["Y"] - $this->GraphAreaY2); }
3261
-
3262
-             $CaptionSettings["R"] = $MinDisplayR; $CaptionSettings["G"] = $MinDisplayG;
3263
-             $CaptionSettings["B"] = $MinDisplayB; $CaptionSettings["Align"] = $Align;
3160
+        $MaxLabelTxt	= isset($Format["MaxLabelTxt"]) ? $Format["MaxLabelTxt"] : "max=";
3161
+        $MinLabelTxt	= isset($Format["MinLabelTxt"]) ? $Format["MinLabelTxt"] : "min=";
3162
+        $Decimals		= isset($Format["Decimals"]) ? $Format["Decimals"] : 1;
3163
+        $ExcludedSeries	= isset($Format["ExcludedSeries"]) ? $Format["ExcludedSeries"] : "";
3164
+        $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 4;
3165
+        $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
3166
+        $MaxDisplayR	= isset($Format["MaxDisplayR"]) ? $Format["MaxDisplayR"] : 0;
3167
+        $MaxDisplayG	= isset($Format["MaxDisplayG"]) ? $Format["MaxDisplayG"] : 0;
3168
+        $MaxDisplayB	= isset($Format["MaxDisplayB"]) ? $Format["MaxDisplayB"] : 0;
3169
+        $MinDisplayR	= isset($Format["MinDisplayR"]) ? $Format["MinDisplayR"] : 255;
3170
+        $MinDisplayG	= isset($Format["MinDisplayG"]) ? $Format["MinDisplayG"] : 255;
3171
+        $MinDisplayB	= isset($Format["MinDisplayB"]) ? $Format["MinDisplayB"] : 255;
3172
+        $MinLabelPos	= isset($Format["MinLabelPos"]) ? $Format["MinLabelPos"] : BOUND_LABEL_POS_AUTO;
3173
+        $MaxLabelPos	= isset($Format["MaxLabelPos"]) ? $Format["MaxLabelPos"] : BOUND_LABEL_POS_AUTO;
3174
+        $DrawBox		= isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE;
3175
+        $DrawBoxBorder	= isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE;
3176
+        $BorderOffset	= isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 5;
3177
+        $BoxRounded	= isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE;
3178
+        $RoundedRadius	= isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3;
3179
+        $BoxR		= isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
3180
+        $BoxG		= isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
3181
+        $BoxB		= isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
3182
+        $BoxAlpha		= isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 20;
3183
+        $BoxSurrounding	= isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
3184
+        $BoxBorderR	= isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255;
3185
+        $BoxBorderG	= isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255;
3186
+        $BoxBorderB	= isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255;
3187
+        $BoxBorderAlpha	= isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100;
3188
+
3189
+        $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius,
3190
+                                "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding,
3191
+                                "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha);
3192
+
3193
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
3194
+
3195
+        $Data = $this->DataSet->getData();
3196
+        foreach($Data["Series"] as $SerieName => $Serie)
3197
+        {
3198
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && !isset($ExcludedSeries[$SerieName]))
3199
+        {
3200
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
3201
+            if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
3264 3202
 
3265
-             $this->drawText($XPos+$XOffset,$YPos-$DisplayOffset+$YOffset,$Label,$CaptionSettings);
3203
+            $MinValue = $this->DataSet->getMin($SerieName);
3204
+            $MaxValue = $this->DataSet->getMax($SerieName);
3205
+
3206
+            $MinPos = VOID; $MaxPos = VOID;
3207
+            foreach($Serie["Data"] as $Key => $Value)
3208
+            { 
3209
+            if ( $Value == $MinValue && $MinPos == VOID ) { $MinPos = $Key; }
3210
+            if ( $Value == $MaxValue ) { $MaxPos = $Key; }
3266 3211
             }
3267
-          }
3268
-         else
3269
-          {
3270
-           $XStep       = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs;
3271
-           $X           = $this->GraphAreaY1 + $XMargin;
3272
-           $SerieOffset = isset($Serie["XOffset"]) ? $Serie["XOffset"] : 0;
3273 3212
 
3274
-           if ( $Type == BOUND_MAX || $Type == BOUND_BOTH )
3213
+            $AxisID	= $Serie["Axis"];
3214
+            $Mode		= $Data["Axis"][$AxisID]["Display"];
3215
+            $Format	= $Data["Axis"][$AxisID]["Format"];
3216
+            $Unit		= $Data["Axis"][$AxisID]["Unit"];
3217
+
3218
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
3219
+
3220
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3221
+            {
3222
+            $XStep       = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs;
3223
+            $X           = $this->GraphAreaX1 + $XMargin;
3224
+            $SerieOffset = isset($Serie["XOffset"]) ? $Serie["XOffset"] : 0;
3225
+
3226
+            if ( $Type == BOUND_MAX || $Type == BOUND_BOTH )
3275 3227
             {
3276
-             if ( $MaxLabelPos == BOUND_LABEL_POS_TOP    || ( $MaxLabelPos ==  BOUND_LABEL_POS_AUTO && $MaxValue >= 0) ) { $YPos  = $PosArray[$MaxPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLELEFT; }
3277
-             if ( $MaxLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MaxLabelPos ==  BOUND_LABEL_POS_AUTO && $MaxValue < 0) ) { $YPos  = $PosArray[$MaxPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLERIGHT; }
3228
+                if ( $MaxLabelPos == BOUND_LABEL_POS_TOP    || ( $MaxLabelPos ==  BOUND_LABEL_POS_AUTO && $MaxValue >= 0) ) { $YPos  = $PosArray[$MaxPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_BOTTOMMIDDLE; }
3229
+                if ( $MaxLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MaxLabelPos ==  BOUND_LABEL_POS_AUTO && $MaxValue < 0) ) { $YPos  = $PosArray[$MaxPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_TOPMIDDLE; }
3278 3230
 
3279
-             $XPos  = $X + $MaxPos*$XStep + $SerieOffset;
3280
-             $Label = $MaxLabelTxt.$this->scaleFormat($MaxValue,$Mode,$Format,$Unit);
3231
+                $XPos  = $X + $MaxPos*$XStep + $SerieOffset;
3232
+                $Label = $MaxLabelTxt.$this->scaleFormat(round($MaxValue,$Decimals),$Mode,$Format,$Unit);
3281 3233
 
3282
-             $TxtPos  = $this->getTextBox($YPos,$XPos,$this->FontName,$this->FontSize,0,$Label);
3283
-             $XOffset = 0; $YOffset = 0;
3284
-             if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $TxtPos[0]["X"]; }
3285
-             if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -($TxtPos[1]["X"] - $this->GraphAreaX2); }
3286
-             if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = ($this->GraphAreaY1 - $TxtPos[2]["Y"])/2; }
3287
-             if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -(($TxtPos[0]["Y"] - $this->GraphAreaY2)/2);}
3234
+                $TxtPos  = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$Label);
3235
+                $XOffset = 0; $YOffset = 0;
3236
+                if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = (($this->GraphAreaX1 - $TxtPos[0]["X"])/2); }
3237
+                if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -(($TxtPos[1]["X"] - $this->GraphAreaX2)/2); }
3238
+                if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $TxtPos[2]["Y"]; }
3239
+                if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -($TxtPos[0]["Y"] - $this->GraphAreaY2); }
3288 3240
 
3289
-             $CaptionSettings["R"] = $MaxDisplayR; $CaptionSettings["G"] = $MaxDisplayG;
3290
-             $CaptionSettings["B"] = $MaxDisplayB; $CaptionSettings["Align"] = $Align;
3241
+                $CaptionSettings["R"] = $MaxDisplayR; $CaptionSettings["G"] = $MaxDisplayG;
3242
+                $CaptionSettings["B"] = $MaxDisplayB; $CaptionSettings["Align"] = $Align;
3291 3243
 
3292
-             $this->drawText($YPos+$XOffset,$XPos+$YOffset,$Label,$CaptionSettings);
3244
+                $this->drawText($XPos+$XOffset,$YPos+$YOffset,$Label,$CaptionSettings);
3293 3245
             }
3294 3246
 
3295
-           if ( $Type == BOUND_MIN || $Type == BOUND_BOTH )
3247
+            if ( $Type == BOUND_MIN || $Type == BOUND_BOTH )
3296 3248
             {
3297
-             if ( $MinLabelPos == BOUND_LABEL_POS_TOP    || ( $MinLabelPos ==  BOUND_LABEL_POS_AUTO && $MinValue >= 0) ) { $YPos  = $PosArray[$MinPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLELEFT; }
3298
-             if ( $MinLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MinLabelPos ==  BOUND_LABEL_POS_AUTO && $MinValue < 0) ) { $YPos  = $PosArray[$MinPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLERIGHT; }
3249
+                if ( $MinLabelPos == BOUND_LABEL_POS_TOP    || ( $MinLabelPos ==  BOUND_LABEL_POS_AUTO && $MinValue >= 0) ) { $YPos  = $PosArray[$MinPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_BOTTOMMIDDLE; }
3250
+                if ( $MinLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MinLabelPos ==  BOUND_LABEL_POS_AUTO && $MinValue < 0) ) { $YPos  = $PosArray[$MinPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_TOPMIDDLE; }
3299 3251
 
3300
-             $XPos  = $X + $MinPos*$XStep + $SerieOffset;
3301
-             $Label = $MinLabelTxt.$this->scaleFormat($MinValue,$Mode,$Format,$Unit);
3252
+                $XPos  = $X + $MinPos*$XStep + $SerieOffset;
3253
+                $Label = $MinLabelTxt.$this->scaleFormat(round($MinValue,$Decimals),$Mode,$Format,$Unit);
3302 3254
 
3303
-             $TxtPos  = $this->getTextBox($YPos,$XPos,$this->FontName,$this->FontSize,0,$Label);
3304
-             $XOffset = 0; $YOffset = 0;
3305
-             if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $TxtPos[0]["X"]; }
3306
-             if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -($TxtPos[1]["X"] - $this->GraphAreaX2); }
3307
-             if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = ($this->GraphAreaY1 - $TxtPos[2]["Y"])/2; }
3308
-             if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -(($TxtPos[0]["Y"] - $this->GraphAreaY2)/2);}
3255
+                $TxtPos  = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$Label);
3256
+                $XOffset = 0; $YOffset = 0;
3257
+                if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = (($this->GraphAreaX1 - $TxtPos[0]["X"])/2); }
3258
+                if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -(($TxtPos[1]["X"] - $this->GraphAreaX2)/2); }
3259
+                if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $TxtPos[2]["Y"]; }
3260
+                if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -($TxtPos[0]["Y"] - $this->GraphAreaY2); }
3309 3261
 
3310
-             $CaptionSettings["R"] = $MinDisplayR; $CaptionSettings["G"] = $MinDisplayG;
3311
-             $CaptionSettings["B"] = $MinDisplayB; $CaptionSettings["Align"] = $Align;
3262
+                $CaptionSettings["R"] = $MinDisplayR; $CaptionSettings["G"] = $MinDisplayG;
3263
+                $CaptionSettings["B"] = $MinDisplayB; $CaptionSettings["Align"] = $Align;
3312 3264
 
3313
-             $this->drawText($YPos+$XOffset,$XPos+$YOffset,$Label,$CaptionSettings);
3265
+                $this->drawText($XPos+$XOffset,$YPos-$DisplayOffset+$YOffset,$Label,$CaptionSettings);
3314 3266
             }
3315
-          }
3316
-        }
3317
-      }
3318
-    }
3319
-
3320
-   /* Draw a plot chart */
3321
-   function drawPlotChart($Format=NULL)
3322
-    {
3323
-     $PlotSize		= isset($Format["PlotSize"]) ? $Format["PlotSize"] : NULL;
3324
-     $PlotBorder	= isset($Format["PlotBorder"]) ? $Format["PlotBorder"] : FALSE;
3325
-     $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : 50;
3326
-     $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : 50;
3327
-     $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : 50;
3328
-     $BorderAlpha	= isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 30;
3329
-     $BorderSize	= isset($Format["BorderSize"]) ? $Format["BorderSize"] : 2;
3330
-     $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
3331
-     $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
3332
-     $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 4;
3333
-     $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
3334
-     $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
3335
-     $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
3336
-     $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
3337
-     $RecordImageMap	= isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
3338
-
3339
-     $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
3340
-
3341
-     $Data = $this->DataSet->getData();
3342
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
3343
-
3344
-     foreach($Data["Series"] as $SerieName => $Serie)
3345
-      {
3346
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
3347
-        {
3348
-         if ( isset($Serie["Weight"]) ) { $SerieWeight = $Serie["Weight"] + 2; } else { $SerieWeight = 2; }
3349
-         if ( $PlotSize != NULL ) { $SerieWeight = $PlotSize; }
3350
-
3351
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
3352
-         if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
3353
-         if ( isset($Serie["Picture"]) )
3354
-          { $Picture = $Serie["Picture"]; list($PicWidth,$PicHeight,$PicType) = $this->getPicInfo($Picture); }
3355
-         else { $Picture = NULL; $PicOffset = 0; }
3356
-
3357
-         if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
3358
-
3359
-         $AxisID	= $Serie["Axis"];
3360
-         $Shape		= $Serie["Shape"];
3361
-         $Mode		= $Data["Axis"][$AxisID]["Display"];
3362
-         $Format	= $Data["Axis"][$AxisID]["Format"];
3363
-         $Unit		= $Data["Axis"][$AxisID]["Unit"];
3364
-
3365
-         if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
3366
-
3367
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
3368
-
3369
-         $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
3370
-
3371
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3372
-          {
3373
-           if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
3374
-           if ( $Picture != NULL ) { $PicOffset = $PicHeight / 2; $SerieWeight = 0; }
3375
-           $X = $this->GraphAreaX1 + $XMargin;
3376
-
3377
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3378
-           foreach($PosArray as $Key => $Y)
3379
-            {
3380
-             if ( $DisplayValues ) 
3381
-              $this->drawText($X,$Y-$DisplayOffset-$SerieWeight-$BorderSize-$PicOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
3382
-
3383
-             if ( $Y != VOID )
3384
-              {
3385
-               if ( $RecordImageMap ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$SerieWeight,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3386
-
3387
-               if ( $Picture != NULL )
3388
-                { $this->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); }
3389
-               else
3390
-                { $this->drawShape($X,$Y,$Shape,$SerieWeight,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha); }
3391
-              }
3392
-             $X = $X + $XStep;
3393 3267
             }
3394
-          }
3395
-         else
3396
-          {
3397
-           if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
3398
-           if ( $Picture != NULL ) { $PicOffset = $PicWidth / 2; $SerieWeight = 0; }
3399
-           $Y = $this->GraphAreaY1 + $XMargin;
3400
-
3401
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3402
-           foreach($PosArray as $Key => $X)
3268
+            else
3403 3269
             {
3404
-             if ( $DisplayValues ) 
3405
-              $this->drawText($X+$DisplayOffset+$SerieWeight+$BorderSize+$PicOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
3406
-
3407
-             if ( $X != VOID )
3408
-              {
3409
-               if ( $RecordImageMap ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$SerieWeight,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3410
-
3411
-               if ( $Picture != NULL )
3412
-                { $this->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); }
3413
-               else
3414
-                { $this->drawShape($X,$Y,$Shape,$SerieWeight,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha); }
3415
-              }
3416
-             $Y = $Y + $YStep;
3417
-            }
3418
-          }
3419
-        }
3420
-      }
3421
-    }
3422
-
3423
-   /* Draw a spline chart */
3424
-   function drawSplineChart($Format=NULL)
3425
-    {
3426
-     $BreakVoid		= isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : TRUE;
3427
-     $VoidTicks		= isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4;
3428
-     $BreakR		= isset($Format["BreakR"]) ? $Format["BreakR"] : NULL; // 234
3429
-     $BreakG		= isset($Format["BreakG"]) ? $Format["BreakG"] : NULL; // 55
3430
-     $BreakB		= isset($Format["BreakB"]) ? $Format["BreakB"] : NULL; // 26
3431
-     $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
3432
-     $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
3433
-     $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
3434
-     $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
3435
-     $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
3436
-     $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
3437
-     $RecordImageMap	= isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
3438
-     $ImageMapPlotSize  = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5;
3439
-
3440
-     $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
3441
-
3442
-     $Data = $this->DataSet->getData();
3443
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
3444
-     foreach($Data["Series"] as $SerieName => $Serie)
3445
-      {
3446
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
3447
-        {
3448
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
3449
-
3450
-         if ( $BreakR == NULL )
3451
-          $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks);
3452
-         else
3453
-          $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
3454
-
3455
-         if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
3456
-
3457
-         $AxisID	= $Serie["Axis"];
3458
-         $Mode		= $Data["Axis"][$AxisID]["Display"];
3459
-         $Format	= $Data["Axis"][$AxisID]["Format"];
3460
-         $Unit		= $Data["Axis"][$AxisID]["Unit"];
3461
-
3462
-         if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
3463
-
3464
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
3465
-
3466
-         $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
3467
-
3468
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3469
-          {
3470
-           if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
3471
-           $X     = $this->GraphAreaX1 + $XMargin; $WayPoints = "";
3472
-           $Force = $XStep / 5;
3473
-
3474
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3475
-           $LastGoodY = NULL; $LastGoodX = NULL; $LastX = 1; $LastY = 1;
3476
-           foreach($PosArray as $Key => $Y)
3477
-            {
3478
-             if ( $DisplayValues ) 
3479
-              $this->drawText($X,$Y-$DisplayOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
3480
-	
3481
-             if ( $RecordImageMap && $Y != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3270
+            $XStep       = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs;
3271
+            $X           = $this->GraphAreaY1 + $XMargin;
3272
+            $SerieOffset = isset($Serie["XOffset"]) ? $Serie["XOffset"] : 0;
3482 3273
 
3483
-             if ( $Y == VOID && $LastY != NULL )
3484
-              { $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); $WayPoints = ""; }
3274
+            if ( $Type == BOUND_MAX || $Type == BOUND_BOTH )
3275
+            {
3276
+                if ( $MaxLabelPos == BOUND_LABEL_POS_TOP    || ( $MaxLabelPos ==  BOUND_LABEL_POS_AUTO && $MaxValue >= 0) ) { $YPos  = $PosArray[$MaxPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLELEFT; }
3277
+                if ( $MaxLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MaxLabelPos ==  BOUND_LABEL_POS_AUTO && $MaxValue < 0) ) { $YPos  = $PosArray[$MaxPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLERIGHT; }
3485 3278
 
3486
-             if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid )
3487
-              { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); }
3279
+                $XPos  = $X + $MaxPos*$XStep + $SerieOffset;
3280
+                $Label = $MaxLabelTxt.$this->scaleFormat($MaxValue,$Mode,$Format,$Unit);
3488 3281
 
3489
-             if ( $Y != VOID )
3490
-              $WayPoints[] = array($X,$Y);
3282
+                $TxtPos  = $this->getTextBox($YPos,$XPos,$this->FontName,$this->FontSize,0,$Label);
3283
+                $XOffset = 0; $YOffset = 0;
3284
+                if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $TxtPos[0]["X"]; }
3285
+                if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -($TxtPos[1]["X"] - $this->GraphAreaX2); }
3286
+                if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = ($this->GraphAreaY1 - $TxtPos[2]["Y"])/2; }
3287
+                if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -(($TxtPos[0]["Y"] - $this->GraphAreaY2)/2);}
3491 3288
 
3492
-             if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
3493
-             if ( $Y == VOID ) { $Y = NULL; }
3289
+                $CaptionSettings["R"] = $MaxDisplayR; $CaptionSettings["G"] = $MaxDisplayG;
3290
+                $CaptionSettings["B"] = $MaxDisplayB; $CaptionSettings["Align"] = $Align;
3494 3291
 
3495
-             $LastX = $X; $LastY = $Y;
3496
-             $X = $X + $XStep;
3292
+                $this->drawText($YPos+$XOffset,$XPos+$YOffset,$Label,$CaptionSettings);
3497 3293
             }
3498
-           $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
3499
-          }
3500
-         else
3501
-          {
3502
-           if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
3503
-           $Y     = $this->GraphAreaY1 + $XMargin; $WayPoints = "";
3504
-           $Force = $YStep / 5;
3505 3294
 
3506
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3507
-           $LastGoodY = NULL; $LastGoodX = NULL; $LastX = 1; $LastY = 1;
3508
-           foreach($PosArray as $Key => $X)
3295
+            if ( $Type == BOUND_MIN || $Type == BOUND_BOTH )
3509 3296
             {
3510
-             if ( $DisplayValues ) 
3511
-              $this->drawText($X+$DisplayOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
3512
-
3513
-             if ( $RecordImageMap && $X != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3297
+                if ( $MinLabelPos == BOUND_LABEL_POS_TOP    || ( $MinLabelPos ==  BOUND_LABEL_POS_AUTO && $MinValue >= 0) ) { $YPos  = $PosArray[$MinPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLELEFT; }
3298
+                if ( $MinLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MinLabelPos ==  BOUND_LABEL_POS_AUTO && $MinValue < 0) ) { $YPos  = $PosArray[$MinPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLERIGHT; }
3514 3299
 
3515
-             if ( $X == VOID && $LastX != NULL )
3516
-              { $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); $WayPoints = ""; }
3300
+                $XPos  = $X + $MinPos*$XStep + $SerieOffset;
3301
+                $Label = $MinLabelTxt.$this->scaleFormat($MinValue,$Mode,$Format,$Unit);
3517 3302
 
3518
-             if ( $X != VOID && $LastX == NULL && $LastGoodX != NULL && !$BreakVoid )
3519
-              { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); }
3303
+                $TxtPos  = $this->getTextBox($YPos,$XPos,$this->FontName,$this->FontSize,0,$Label);
3304
+                $XOffset = 0; $YOffset = 0;
3305
+                if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $TxtPos[0]["X"]; }
3306
+                if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -($TxtPos[1]["X"] - $this->GraphAreaX2); }
3307
+                if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = ($this->GraphAreaY1 - $TxtPos[2]["Y"])/2; }
3308
+                if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -(($TxtPos[0]["Y"] - $this->GraphAreaY2)/2);}
3520 3309
 
3521
-             if ( $X != VOID )
3522
-              $WayPoints[] = array($X,$Y);
3310
+                $CaptionSettings["R"] = $MinDisplayR; $CaptionSettings["G"] = $MinDisplayG;
3311
+                $CaptionSettings["B"] = $MinDisplayB; $CaptionSettings["Align"] = $Align;
3523 3312
 
3524
-             if ( $X != VOID ) { $LastGoodX = $X; $LastGoodY = $Y; }
3525
-             if ( $X == VOID ) { $X = NULL; }
3526
-
3527
-             $LastX = $X; $LastY = $Y;
3528
-             $Y = $Y + $YStep;
3313
+                $this->drawText($YPos+$XOffset,$XPos+$YOffset,$Label,$CaptionSettings);
3314
+            }
3529 3315
             }
3530
-           $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
3531
-          }
3532 3316
         }
3533
-      }
3317
+        }
3534 3318
     }
3535 3319
 
3536
-   /* Draw a filled spline chart */
3537
-   function drawFilledSplineChart($Format=NULL)
3320
+    /* Draw a plot chart */
3321
+    function drawPlotChart($Format=NULL)
3538 3322
     {
3539
-     $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
3540
-     $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
3541
-     $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
3542
-     $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
3543
-     $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
3544
-     $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
3545
-     $AroundZero	= isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
3546
-     $Threshold		= isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
3547
-
3548
-     $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
3549
-
3550
-     $Data = $this->DataSet->getData();
3551
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
3552
-     foreach($Data["Series"] as $SerieName => $Serie)
3553
-      {
3554
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
3323
+        $PlotSize		= isset($Format["PlotSize"]) ? $Format["PlotSize"] : NULL;
3324
+        $PlotBorder	= isset($Format["PlotBorder"]) ? $Format["PlotBorder"] : FALSE;
3325
+        $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : 50;
3326
+        $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : 50;
3327
+        $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : 50;
3328
+        $BorderAlpha	= isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 30;
3329
+        $BorderSize	= isset($Format["BorderSize"]) ? $Format["BorderSize"] : 2;
3330
+        $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
3331
+        $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
3332
+        $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 4;
3333
+        $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
3334
+        $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
3335
+        $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
3336
+        $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
3337
+        $RecordImageMap	= isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
3338
+
3339
+        $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
3340
+
3341
+        $Data = $this->DataSet->getData();
3342
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
3343
+
3344
+        foreach($Data["Series"] as $SerieName => $Serie)
3345
+        {
3346
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
3555 3347
         {
3556
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
3557
-         if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
3348
+            if ( isset($Serie["Weight"]) ) { $SerieWeight = $Serie["Weight"] + 2; } else { $SerieWeight = 2; }
3349
+            if ( $PlotSize != NULL ) { $SerieWeight = $PlotSize; }
3558 3350
 
3559
-         $AxisID	= $Serie["Axis"];
3560
-         $Mode		= $Data["Axis"][$AxisID]["Display"];
3561
-         $Format	= $Data["Axis"][$AxisID]["Format"];
3562
-         $Unit		= $Data["Axis"][$AxisID]["Unit"];
3351
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
3352
+            if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
3353
+            if ( isset($Serie["Picture"]) )
3354
+            { $Picture = $Serie["Picture"]; list($PicWidth,$PicHeight,$PicType) = $this->getPicInfo($Picture); }
3355
+            else { $Picture = NULL; $PicOffset = 0; }
3563 3356
 
3564
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
3565
-         if ( $AroundZero ) { $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); }
3357
+            if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
3566 3358
 
3567
-         if ( $Threshold != NULL )
3568
-          {
3569
-           foreach($Threshold as $Key => $Params)
3570
-            {
3571
-             $Threshold[$Key]["MinX"] = $this->scaleComputeY($Params["Min"],array("AxisID"=>$Serie["Axis"]));
3572
-             $Threshold[$Key]["MaxX"] = $this->scaleComputeY($Params["Max"],array("AxisID"=>$Serie["Axis"]));
3573
-            }
3574
-          }
3359
+            $AxisID	= $Serie["Axis"];
3360
+            $Shape		= $Serie["Shape"];
3361
+            $Mode		= $Data["Axis"][$AxisID]["Display"];
3362
+            $Format	= $Data["Axis"][$AxisID]["Format"];
3363
+            $Unit		= $Data["Axis"][$AxisID]["Unit"];
3575 3364
 
3576
-         $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
3365
+            if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
3577 3366
 
3578
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3579
-          {
3580
-           if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
3581
-           $X     = $this->GraphAreaX1 + $XMargin; $WayPoints = "";
3582
-           $Force = $XStep / 5;
3367
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
3583 3368
 
3584
-           if ( !$AroundZero ) { $YZero = $this->GraphAreaY2-1; }
3585
-           if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
3586
-           if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
3369
+            $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
3587 3370
 
3588
-           $LastX = ""; $LastY = "";
3589
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3590
-           foreach($PosArray as $Key => $Y)
3371
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3591 3372
             {
3592
-             if ( $DisplayValues ) 
3593
-              $this->drawText($X,$Y-$DisplayOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
3373
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
3374
+            if ( $Picture != NULL ) { $PicOffset = $PicHeight / 2; $SerieWeight = 0; }
3375
+            $X = $this->GraphAreaX1 + $XMargin;
3594 3376
 
3595
-             if ( $Y == VOID )
3596
-              {
3597
-               $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
3377
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3378
+            foreach($PosArray as $Key => $Y)
3379
+            {
3380
+                if ( $DisplayValues ) 
3381
+                $this->drawText($X,$Y-$DisplayOffset-$SerieWeight-$BorderSize-$PicOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
3598 3382
 
3599
-               if ( $Area != "" )
3383
+                if ( $Y != VOID )
3600 3384
                 {
3601
-                 foreach ($Area as $key => $Points)
3602
-                  {
3603
-                   $Corners = ""; $Corners[] = $Area[$key][0]["X"]; $Corners[] = $YZero;
3604
-                   foreach($Points as $subKey => $Point)
3605
-                    {
3606
-                     if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
3607
-                     $Corners[] = $Point["Y"]+1;
3608
-                    }
3609
-                   $Corners[] = $Points[$subKey]["X"]-1; $Corners[] = $YZero;
3385
+                if ( $RecordImageMap ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$SerieWeight,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3610 3386
 
3611
-                   $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
3612
-                  }
3613
-                 $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
3387
+                if ( $Picture != NULL )
3388
+                { $this->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); }
3389
+                else
3390
+                { $this->drawShape($X,$Y,$Shape,$SerieWeight,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha); }
3614 3391
                 }
3615
-
3616
-               $WayPoints = "";
3617
-              }
3618
-             else
3619
-              $WayPoints[] = array($X,$Y-.5); /* -.5 for AA visual fix */
3620
-
3621
-             $X = $X + $XStep;
3392
+                $X = $X + $XStep;
3622 3393
             }
3623
-           $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
3624
-
3625
-           if ( $Area != "" )
3626
-            {
3627
-             foreach ($Area as $key => $Points)
3628
-              {
3629
-               $Corners = ""; $Corners[] = $Area[$key][0]["X"]; $Corners[] = $YZero;
3630
-               foreach($Points as $subKey => $Point)
3631
-                {
3632
-                 if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
3633
-                 $Corners[] = $Point["Y"]+1;
3634
-                }
3635
-               $Corners[] = $Points[$subKey]["X"]-1; $Corners[] = $YZero;
3636
-
3637
-               $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
3638
-              }
3639
-             $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
3640 3394
             }
3641
-          }
3642
-         else
3643
-          {
3644
-           if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
3645
-           $Y     = $this->GraphAreaY1 + $XMargin; $WayPoints = "";
3646
-           $Force = $YStep / 5;
3647
-
3648
-           if ( !$AroundZero ) { $YZero = $this->GraphAreaX1+1; }
3649
-           if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
3650
-           if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
3651
-
3652
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3653
-           foreach($PosArray as $Key => $X)
3395
+            else
3654 3396
             {
3655
-             if ( $DisplayValues ) 
3656
-              $this->drawText($X+$DisplayOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
3397
+            if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
3398
+            if ( $Picture != NULL ) { $PicOffset = $PicWidth / 2; $SerieWeight = 0; }
3399
+            $Y = $this->GraphAreaY1 + $XMargin;
3657 3400
 
3658
-             if ( $X == VOID )
3659
-              {
3660
-               $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
3401
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3402
+            foreach($PosArray as $Key => $X)
3403
+            {
3404
+                if ( $DisplayValues ) 
3405
+                $this->drawText($X+$DisplayOffset+$SerieWeight+$BorderSize+$PicOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
3661 3406
 
3662
-               if ( $Area != "" )
3407
+                if ( $X != VOID )
3663 3408
                 {
3664
-                 foreach ($Area as $key => $Points)
3665
-                  {
3666
-                   $Corners = ""; $Corners[] = $YZero; $Corners[] = $Area[$key][0]["Y"];
3667
-                   foreach($Points as $subKey => $Point)
3668
-                    {
3669
-                     if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
3670
-                     $Corners[] = $Point["Y"];
3671
-                    }
3672
-                   $Corners[] = $YZero; $Corners[] = $Points[$subKey]["Y"]-1;
3409
+                if ( $RecordImageMap ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$SerieWeight,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3673 3410
 
3674
-                   $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
3675
-                  }
3676
-                 $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
3677
-                }
3411
+                if ( $Picture != NULL )
3412
+                { $this->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); }
3413
+                else
3414
+                { $this->drawShape($X,$Y,$Shape,$SerieWeight,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha); }
3415
+                }
3416
+                $Y = $Y + $YStep;
3417
+            }
3418
+            }
3419
+        }
3420
+        }
3421
+    }
3678 3422
 
3679
-               $WayPoints = "";
3680
-              }
3681
-             else
3682
-              $WayPoints[] = array($X,$Y);
3423
+    /* Draw a spline chart */
3424
+    function drawSplineChart($Format=NULL)
3425
+    {
3426
+        $BreakVoid		= isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : TRUE;
3427
+        $VoidTicks		= isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4;
3428
+        $BreakR		= isset($Format["BreakR"]) ? $Format["BreakR"] : NULL; // 234
3429
+        $BreakG		= isset($Format["BreakG"]) ? $Format["BreakG"] : NULL; // 55
3430
+        $BreakB		= isset($Format["BreakB"]) ? $Format["BreakB"] : NULL; // 26
3431
+        $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
3432
+        $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
3433
+        $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
3434
+        $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
3435
+        $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
3436
+        $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
3437
+        $RecordImageMap	= isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
3438
+        $ImageMapPlotSize  = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5;
3439
+
3440
+        $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
3441
+
3442
+        $Data = $this->DataSet->getData();
3443
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
3444
+        foreach($Data["Series"] as $SerieName => $Serie)
3445
+        {
3446
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
3447
+        {
3448
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
3683 3449
 
3684
-             $Y = $Y + $YStep;
3685
-            }
3686
-           $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
3450
+            if ( $BreakR == NULL )
3451
+            $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks);
3452
+            else
3453
+            $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
3454
+
3455
+            if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
3456
+
3457
+            $AxisID	= $Serie["Axis"];
3458
+            $Mode		= $Data["Axis"][$AxisID]["Display"];
3459
+            $Format	= $Data["Axis"][$AxisID]["Format"];
3460
+            $Unit		= $Data["Axis"][$AxisID]["Unit"];
3461
+
3462
+            if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
3687 3463
 
3688
-           if ( $Area != "" )
3464
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
3465
+
3466
+            $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
3467
+
3468
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3689 3469
             {
3690
-             foreach ($Area as $key => $Points)
3691
-              {
3692
-               $Corners = ""; $Corners[] = $YZero; $Corners[] = $Area[$key][0]["Y"];
3693
-               foreach($Points as $subKey => $Point)
3694
-                {
3695
-                 if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
3696
-                 $Corners[] = $Point["Y"];
3697
-                }
3698
-               $Corners[] = $YZero; $Corners[] = $Points[$subKey]["Y"]-1;
3470
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
3471
+            $X     = $this->GraphAreaX1 + $XMargin; $WayPoints = "";
3472
+            $Force = $XStep / 5;
3699 3473
 
3700
-               $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
3701
-              }
3702
-             $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
3474
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3475
+            $LastGoodY = NULL; $LastGoodX = NULL; $LastX = 1; $LastY = 1;
3476
+            foreach($PosArray as $Key => $Y)
3477
+            {
3478
+                if ( $DisplayValues ) 
3479
+                $this->drawText($X,$Y-$DisplayOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
3480
+	
3481
+                if ( $RecordImageMap && $Y != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3482
+
3483
+                if ( $Y == VOID && $LastY != NULL )
3484
+                { $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); $WayPoints = ""; }
3485
+
3486
+                if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid )
3487
+                { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); }
3488
+
3489
+                if ( $Y != VOID )
3490
+                $WayPoints[] = array($X,$Y);
3491
+
3492
+                if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
3493
+                if ( $Y == VOID ) { $Y = NULL; }
3494
+
3495
+                $LastX = $X; $LastY = $Y;
3496
+                $X = $X + $XStep;
3703 3497
             }
3498
+            $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
3499
+            }
3500
+            else
3501
+            {
3502
+            if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
3503
+            $Y     = $this->GraphAreaY1 + $XMargin; $WayPoints = "";
3504
+            $Force = $YStep / 5;
3704 3505
 
3705
-          }
3506
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3507
+            $LastGoodY = NULL; $LastGoodX = NULL; $LastX = 1; $LastY = 1;
3508
+            foreach($PosArray as $Key => $X)
3509
+            {
3510
+                if ( $DisplayValues ) 
3511
+                $this->drawText($X+$DisplayOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
3512
+
3513
+                if ( $RecordImageMap && $X != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3514
+
3515
+                if ( $X == VOID && $LastX != NULL )
3516
+                { $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); $WayPoints = ""; }
3517
+
3518
+                if ( $X != VOID && $LastX == NULL && $LastGoodX != NULL && !$BreakVoid )
3519
+                { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); }
3520
+
3521
+                if ( $X != VOID )
3522
+                $WayPoints[] = array($X,$Y);
3523
+
3524
+                if ( $X != VOID ) { $LastGoodX = $X; $LastGoodY = $Y; }
3525
+                if ( $X == VOID ) { $X = NULL; }
3526
+
3527
+                $LastX = $X; $LastY = $Y;
3528
+                $Y = $Y + $YStep;
3529
+            }
3530
+            $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
3531
+            }
3532
+        }
3706 3533
         }
3707
-      }
3708 3534
     }
3709 3535
 
3710
-   /* Draw a line chart */
3711
-   function drawLineChart($Format=NULL)
3536
+    /* Draw a filled spline chart */
3537
+    function drawFilledSplineChart($Format=NULL)
3712 3538
     {
3713
-     $BreakVoid		= isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : TRUE;
3714
-     $VoidTicks		= isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4;
3715
-     $BreakR		= isset($Format["BreakR"]) ? $Format["BreakR"] : NULL;
3716
-     $BreakG		= isset($Format["BreakG"]) ? $Format["BreakG"] : NULL;
3717
-     $BreakB		= isset($Format["BreakB"]) ? $Format["BreakB"] : NULL;
3718
-     $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
3719
-     $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
3720
-     $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
3721
-     $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
3722
-     $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
3723
-     $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
3724
-     $RecordImageMap	= isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
3725
-     $ImageMapPlotSize  = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5;
3726
-     $ForceColor	= isset($Format["ForceColor"]) ? $Format["ForceColor"] : FALSE;
3727
-     $ForceR		= isset($Format["ForceR"]) ? $Format["ForceR"] : 0;
3728
-     $ForceG		= isset($Format["ForceG"]) ? $Format["ForceG"] : 0;
3729
-     $ForceB		= isset($Format["ForceB"]) ? $Format["ForceB"] : 0;
3730
-     $ForceAlpha	= isset($Format["ForceAlpha"]) ? $Format["ForceAlpha"] : 100;
3731
-
3732
-     $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
3733
-
3734
-     $Data = $this->DataSet->getData();
3735
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
3736
-     foreach($Data["Series"] as $SerieName => $Serie)
3737
-      {
3738
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
3539
+        $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
3540
+        $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
3541
+        $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
3542
+        $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
3543
+        $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
3544
+        $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
3545
+        $AroundZero	= isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
3546
+        $Threshold		= isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
3547
+
3548
+        $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
3549
+
3550
+        $Data = $this->DataSet->getData();
3551
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
3552
+        foreach($Data["Series"] as $SerieName => $Serie)
3739 3553
         {
3740
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
3554
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
3555
+        {
3556
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
3557
+            if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
3741 3558
 
3742
-         if ( $ForceColor )
3743
-          { $R = $ForceR; $G = $ForceG; $B = $ForceB; $Alpha = $ForceAlpha; }
3559
+            $AxisID	= $Serie["Axis"];
3560
+            $Mode		= $Data["Axis"][$AxisID]["Display"];
3561
+            $Format	= $Data["Axis"][$AxisID]["Format"];
3562
+            $Unit		= $Data["Axis"][$AxisID]["Unit"];
3744 3563
 
3745
-         if ( $BreakR == NULL )
3746
-          $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
3747
-         else
3748
-          $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
3564
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
3565
+            if ( $AroundZero ) { $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); }
3749 3566
 
3750
-         if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
3567
+            if ( $Threshold != NULL )
3568
+            {
3569
+            foreach($Threshold as $Key => $Params)
3570
+            {
3571
+                $Threshold[$Key]["MinX"] = $this->scaleComputeY($Params["Min"],array("AxisID"=>$Serie["Axis"]));
3572
+                $Threshold[$Key]["MaxX"] = $this->scaleComputeY($Params["Max"],array("AxisID"=>$Serie["Axis"]));
3573
+            }
3574
+            }
3751 3575
 
3752
-         $AxisID	= $Serie["Axis"];
3753
-         $Mode		= $Data["Axis"][$AxisID]["Display"];
3754
-         $Format	= $Data["Axis"][$AxisID]["Format"];
3755
-         $Unit		= $Data["Axis"][$AxisID]["Unit"];
3576
+            $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
3756 3577
 
3757
-         if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
3578
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3579
+            {
3580
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
3581
+            $X     = $this->GraphAreaX1 + $XMargin; $WayPoints = "";
3582
+            $Force = $XStep / 5;
3758 3583
 
3759
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
3584
+            if ( !$AroundZero ) { $YZero = $this->GraphAreaY2-1; }
3585
+            if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
3586
+            if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
3760 3587
 
3761
-         $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
3588
+            $LastX = ""; $LastY = "";
3589
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3590
+            foreach($PosArray as $Key => $Y)
3591
+            {
3592
+                if ( $DisplayValues ) 
3593
+                $this->drawText($X,$Y-$DisplayOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
3762 3594
 
3763
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3764
-          {
3765
-           if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
3766
-           $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
3595
+                if ( $Y == VOID )
3596
+                {
3597
+                $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
3767 3598
 
3768
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3769
-           $LastGoodY = NULL; $LastGoodX = NULL;
3770
-           foreach($PosArray as $Key => $Y)
3771
-            {
3772
-             if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) 
3773
-              {
3774
-               if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
3775
-               $this->drawText($X,$Y-$Offset-$Weight,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
3776
-              }
3599
+                if ( $Area != "" )
3600
+                {
3601
+                    foreach ($Area as $key => $Points)
3602
+                    {
3603
+                    $Corners = ""; $Corners[] = $Area[$key][0]["X"]; $Corners[] = $YZero;
3604
+                    foreach($Points as $subKey => $Point)
3605
+                    {
3606
+                        if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
3607
+                        $Corners[] = $Point["Y"]+1;
3608
+                    }
3609
+                    $Corners[] = $Points[$subKey]["X"]-1; $Corners[] = $YZero;
3777 3610
 
3778
-             if ( $RecordImageMap && $Y != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3611
+                    $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
3612
+                    }
3613
+                    $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
3614
+                }
3779 3615
 
3780
-             if ( $Y != VOID && $LastX != NULL && $LastY != NULL )
3781
-              $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
3616
+                $WayPoints = "";
3617
+                }
3618
+                else
3619
+                $WayPoints[] = array($X,$Y-.5); /* -.5 for AA visual fix */
3782 3620
 
3783
-             if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid )
3784
-              { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); $LastGoodY = NULL; }
3621
+                $X = $X + $XStep;
3622
+            }
3623
+            $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
3785 3624
 
3786
-             if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
3787
-             if ( $Y == VOID ) { $Y = NULL; }
3625
+            if ( $Area != "" )
3626
+            {
3627
+                foreach ($Area as $key => $Points)
3628
+                {
3629
+                $Corners = ""; $Corners[] = $Area[$key][0]["X"]; $Corners[] = $YZero;
3630
+                foreach($Points as $subKey => $Point)
3631
+                {
3632
+                    if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
3633
+                    $Corners[] = $Point["Y"]+1;
3634
+                }
3635
+                $Corners[] = $Points[$subKey]["X"]-1; $Corners[] = $YZero;
3788 3636
 
3789
-             $LastX = $X; $LastY = $Y;
3790
-             $X = $X + $XStep;
3637
+                $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
3638
+                }
3639
+                $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
3640
+            }
3791 3641
             }
3792
-          }
3793
-         else
3794
-          {
3795
-           if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
3796
-           $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
3642
+            else
3643
+            {
3644
+            if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
3645
+            $Y     = $this->GraphAreaY1 + $XMargin; $WayPoints = "";
3646
+            $Force = $YStep / 5;
3647
+
3648
+            if ( !$AroundZero ) { $YZero = $this->GraphAreaX1+1; }
3649
+            if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
3650
+            if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
3797 3651
 
3798
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3799
-           $LastGoodY = NULL; $LastGoodX = NULL;
3800
-           foreach($PosArray as $Key => $X)
3652
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3653
+            foreach($PosArray as $Key => $X)
3801 3654
             {
3802
-             if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) 
3803
-              { $this->drawText($X+$DisplayOffset+$Weight,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); }
3655
+                if ( $DisplayValues ) 
3656
+                $this->drawText($X+$DisplayOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
3657
+
3658
+                if ( $X == VOID )
3659
+                {
3660
+                $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
3661
+
3662
+                if ( $Area != "" )
3663
+                {
3664
+                    foreach ($Area as $key => $Points)
3665
+                    {
3666
+                    $Corners = ""; $Corners[] = $YZero; $Corners[] = $Area[$key][0]["Y"];
3667
+                    foreach($Points as $subKey => $Point)
3668
+                    {
3669
+                        if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
3670
+                        $Corners[] = $Point["Y"];
3671
+                    }
3672
+                    $Corners[] = $YZero; $Corners[] = $Points[$subKey]["Y"]-1;
3673
+
3674
+                    $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
3675
+                    }
3676
+                    $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
3677
+                }
3804 3678
 
3805
-             if ( $RecordImageMap && $X != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3679
+                $WayPoints = "";
3680
+                }
3681
+                else
3682
+                $WayPoints[] = array($X,$Y);
3806 3683
 
3807
-             if ( $X != VOID && $LastX != NULL && $LastY != NULL )
3808
-              $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
3684
+                $Y = $Y + $YStep;
3685
+            }
3686
+            $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
3809 3687
 
3810
-             if ( $X != VOID && $LastX == NULL && $LastGoodY != NULL && !$BreakVoid )
3811
-              { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); $LastGoodY = NULL; }
3688
+            if ( $Area != "" )
3689
+            {
3690
+                foreach ($Area as $key => $Points)
3691
+                {
3692
+                $Corners = ""; $Corners[] = $YZero; $Corners[] = $Area[$key][0]["Y"];
3693
+                foreach($Points as $subKey => $Point)
3694
+                {
3695
+                    if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
3696
+                    $Corners[] = $Point["Y"];
3697
+                }
3698
+                $Corners[] = $YZero; $Corners[] = $Points[$subKey]["Y"]-1;
3812 3699
 
3813
-             if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
3814
-             if ( $X == VOID ) { $X = NULL; }
3700
+                $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
3701
+                }
3702
+                $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
3703
+            }
3815 3704
 
3816
-             $LastX = $X; $LastY = $Y;
3817
-             $Y = $Y + $YStep;
3818 3705
             }
3819
-          }
3820 3706
         }
3821
-      }
3707
+        }
3822 3708
     }
3823 3709
 
3824
-   /* Draw a line chart */
3825
-   function drawZoneChart($SerieA,$SerieB,$Format=NULL)
3710
+    /* Draw a line chart */
3711
+    function drawLineChart($Format=NULL)
3826 3712
     {
3827
-     $AxisID	= isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
3828
-     $LineR	= isset($Format["LineR"]) ? $Format["LineR"] : 150;
3829
-     $LineG	= isset($Format["LineG"]) ? $Format["LineG"] : 150;
3830
-     $LineB	= isset($Format["LineB"]) ? $Format["LineB"] : 150;
3831
-     $LineAlpha	= isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 50;
3832
-     $LineTicks	= isset($Format["LineTicks"]) ? $Format["LineTicks"] : 1;
3833
-     $AreaR	= isset($Format["AreaR"]) ? $Format["AreaR"] : 150;
3834
-     $AreaG	= isset($Format["AreaG"]) ? $Format["AreaG"] : 150;
3835
-     $AreaB	= isset($Format["AreaB"]) ? $Format["AreaB"] : 150;
3836
-     $AreaAlpha	= isset($Format["AreaAlpha"]) ? $Format["AreaAlpha"] : 5;
3713
+        $BreakVoid		= isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : TRUE;
3714
+        $VoidTicks		= isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4;
3715
+        $BreakR		= isset($Format["BreakR"]) ? $Format["BreakR"] : NULL;
3716
+        $BreakG		= isset($Format["BreakG"]) ? $Format["BreakG"] : NULL;
3717
+        $BreakB		= isset($Format["BreakB"]) ? $Format["BreakB"] : NULL;
3718
+        $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
3719
+        $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
3720
+        $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
3721
+        $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
3722
+        $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
3723
+        $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
3724
+        $RecordImageMap	= isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
3725
+        $ImageMapPlotSize  = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5;
3726
+        $ForceColor	= isset($Format["ForceColor"]) ? $Format["ForceColor"] : FALSE;
3727
+        $ForceR		= isset($Format["ForceR"]) ? $Format["ForceR"] : 0;
3728
+        $ForceG		= isset($Format["ForceG"]) ? $Format["ForceG"] : 0;
3729
+        $ForceB		= isset($Format["ForceB"]) ? $Format["ForceB"] : 0;
3730
+        $ForceAlpha	= isset($Format["ForceAlpha"]) ? $Format["ForceAlpha"] : 100;
3731
+
3732
+        $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
3733
+
3734
+        $Data = $this->DataSet->getData();
3735
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
3736
+        foreach($Data["Series"] as $SerieName => $Serie)
3737
+        {
3738
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
3739
+        {
3740
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
3741
+
3742
+            if ( $ForceColor )
3743
+            { $R = $ForceR; $G = $ForceG; $B = $ForceB; $Alpha = $ForceAlpha; }
3744
+
3745
+            if ( $BreakR == NULL )
3746
+            $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
3747
+            else
3748
+            $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
3749
+
3750
+            if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
3837 3751
 
3838
-     $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
3752
+            $AxisID	= $Serie["Axis"];
3753
+            $Mode		= $Data["Axis"][$AxisID]["Display"];
3754
+            $Format	= $Data["Axis"][$AxisID]["Format"];
3755
+            $Unit		= $Data["Axis"][$AxisID]["Unit"];
3839 3756
 
3840
-     $Data	 = $this->DataSet->getData();
3841
-     if ( !isset($Data["Series"][$SerieA]["Data"]) || !isset($Data["Series"][$SerieB]["Data"]) ) { return(0); }
3842
-     $SerieAData = $Data["Series"][$SerieA]["Data"];
3843
-     $SerieBData = $Data["Series"][$SerieB]["Data"];
3757
+            if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
3844 3758
 
3845
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
3759
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
3846 3760
 
3847
-     $Mode	= $Data["Axis"][$AxisID]["Display"];
3848
-     $Format	= $Data["Axis"][$AxisID]["Format"];
3849
-     $Unit	= $Data["Axis"][$AxisID]["Unit"];
3761
+            $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
3850 3762
 
3851
-     $PosArrayA = $this->scaleComputeY($SerieAData,array("AxisID"=>$AxisID));
3852
-     $PosArrayB = $this->scaleComputeY($SerieBData,array("AxisID"=>$AxisID));
3853
-     if ( count($PosArrayA) != count($PosArrayB) ) { return(0); }
3763
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3764
+            {
3765
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
3766
+            $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
3767
+
3768
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3769
+            $LastGoodY = NULL; $LastGoodX = NULL;
3770
+            foreach($PosArray as $Key => $Y)
3771
+            {
3772
+                if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) 
3773
+                {
3774
+                if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
3775
+                $this->drawText($X,$Y-$Offset-$Weight,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
3776
+                }
3777
+
3778
+                if ( $RecordImageMap && $Y != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3779
+
3780
+                if ( $Y != VOID && $LastX != NULL && $LastY != NULL )
3781
+                $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
3782
+
3783
+                if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid )
3784
+                { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); $LastGoodY = NULL; }
3785
+
3786
+                if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
3787
+                if ( $Y == VOID ) { $Y = NULL; }
3788
+
3789
+                $LastX = $X; $LastY = $Y;
3790
+                $X = $X + $XStep;
3791
+            }
3792
+            }
3793
+            else
3794
+            {
3795
+            if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
3796
+            $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
3797
+
3798
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3799
+            $LastGoodY = NULL; $LastGoodX = NULL;
3800
+            foreach($PosArray as $Key => $X)
3801
+            {
3802
+                if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) 
3803
+                { $this->drawText($X+$DisplayOffset+$Weight,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); }
3804
+
3805
+                if ( $RecordImageMap && $X != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3806
+
3807
+                if ( $X != VOID && $LastX != NULL && $LastY != NULL )
3808
+                $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
3809
+
3810
+                if ( $X != VOID && $LastX == NULL && $LastGoodY != NULL && !$BreakVoid )
3811
+                { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); $LastGoodY = NULL; }
3812
+
3813
+                if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
3814
+                if ( $X == VOID ) { $X = NULL; }
3815
+
3816
+                $LastX = $X; $LastY = $Y;
3817
+                $Y = $Y + $YStep;
3818
+            }
3819
+            }
3820
+        }
3821
+        }
3822
+    }
3854 3823
 
3855
-     if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3856
-      {
3857
-       if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
3858
-       $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
3824
+    /* Draw a line chart */
3825
+    function drawZoneChart($SerieA,$SerieB,$Format=NULL)
3826
+    {
3827
+        $AxisID	= isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
3828
+        $LineR	= isset($Format["LineR"]) ? $Format["LineR"] : 150;
3829
+        $LineG	= isset($Format["LineG"]) ? $Format["LineG"] : 150;
3830
+        $LineB	= isset($Format["LineB"]) ? $Format["LineB"] : 150;
3831
+        $LineAlpha	= isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 50;
3832
+        $LineTicks	= isset($Format["LineTicks"]) ? $Format["LineTicks"] : 1;
3833
+        $AreaR	= isset($Format["AreaR"]) ? $Format["AreaR"] : 150;
3834
+        $AreaG	= isset($Format["AreaG"]) ? $Format["AreaG"] : 150;
3835
+        $AreaB	= isset($Format["AreaB"]) ? $Format["AreaB"] : 150;
3836
+        $AreaAlpha	= isset($Format["AreaAlpha"]) ? $Format["AreaAlpha"] : 5;
3837
+
3838
+        $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
3839
+
3840
+        $Data	 = $this->DataSet->getData();
3841
+        if ( !isset($Data["Series"][$SerieA]["Data"]) || !isset($Data["Series"][$SerieB]["Data"]) ) { return(0); }
3842
+        $SerieAData = $Data["Series"][$SerieA]["Data"];
3843
+        $SerieBData = $Data["Series"][$SerieB]["Data"];
3844
+
3845
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
3846
+
3847
+        $Mode	= $Data["Axis"][$AxisID]["Display"];
3848
+        $Format	= $Data["Axis"][$AxisID]["Format"];
3849
+        $Unit	= $Data["Axis"][$AxisID]["Unit"];
3850
+
3851
+        $PosArrayA = $this->scaleComputeY($SerieAData,array("AxisID"=>$AxisID));
3852
+        $PosArrayB = $this->scaleComputeY($SerieBData,array("AxisID"=>$AxisID));
3853
+        if ( count($PosArrayA) != count($PosArrayB) ) { return(0); }
3854
+
3855
+        if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3856
+        {
3857
+        if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
3858
+        $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
3859 3859
 
3860
-       $LastX = NULL; $LastY1 = NULL; $LastY2 = NULL;
3861
-       $BoundsA = ""; $BoundsB = "";
3862
-       foreach($PosArrayA as $Key => $Y1)
3860
+        $LastX = NULL; $LastY1 = NULL; $LastY2 = NULL;
3861
+        $BoundsA = ""; $BoundsB = "";
3862
+        foreach($PosArrayA as $Key => $Y1)
3863 3863
         {
3864
-         $Y2 = $PosArrayB[$Key];
3864
+            $Y2 = $PosArrayB[$Key];
3865 3865
 
3866
-         $BoundsA[] = $X; $BoundsA[] = $Y1;
3867
-         $BoundsB[] = $X; $BoundsB[] = $Y2;
3866
+            $BoundsA[] = $X; $BoundsA[] = $Y1;
3867
+            $BoundsB[] = $X; $BoundsB[] = $Y2;
3868 3868
 
3869
-         $LastX = $X;
3870
-         $LastY1 = $Y1; $LastY2 = $Y2;
3869
+            $LastX = $X;
3870
+            $LastY1 = $Y1; $LastY2 = $Y2;
3871 3871
 
3872
-         $X = $X + $XStep;
3872
+            $X = $X + $XStep;
3873 3873
         }
3874
-       $Bounds = array_merge($BoundsA,$this->reversePlots($BoundsB));
3875
-       $this->drawPolygonChart($Bounds,array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"Alpha"=>$AreaAlpha));
3874
+        $Bounds = array_merge($BoundsA,$this->reversePlots($BoundsB));
3875
+        $this->drawPolygonChart($Bounds,array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"Alpha"=>$AreaAlpha));
3876 3876
 
3877
-       for($i=0;$i<=count($BoundsA)-4;$i=$i+2)
3877
+        for($i=0;$i<=count($BoundsA)-4;$i=$i+2)
3878 3878
         {
3879
-         $this->drawLine($BoundsA[$i],$BoundsA[$i+1],$BoundsA[$i+2],$BoundsA[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
3880
-         $this->drawLine($BoundsB[$i],$BoundsB[$i+1],$BoundsB[$i+2],$BoundsB[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
3879
+            $this->drawLine($BoundsA[$i],$BoundsA[$i+1],$BoundsA[$i+2],$BoundsA[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
3880
+            $this->drawLine($BoundsB[$i],$BoundsB[$i+1],$BoundsB[$i+2],$BoundsB[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
3881 3881
         }
3882
-      }
3883
-     else
3884
-      {
3885
-       if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
3886
-       $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
3882
+        }
3883
+        else
3884
+        {
3885
+        if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
3886
+        $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
3887 3887
 
3888
-       $LastY = NULL; $LastX1 = NULL; $LastX2 = NULL;
3889
-       $BoundsA = ""; $BoundsB = "";
3890
-       foreach($PosArrayA as $Key => $X1)
3888
+        $LastY = NULL; $LastX1 = NULL; $LastX2 = NULL;
3889
+        $BoundsA = ""; $BoundsB = "";
3890
+        foreach($PosArrayA as $Key => $X1)
3891 3891
         {
3892
-         $X2 = $PosArrayB[$Key];
3892
+            $X2 = $PosArrayB[$Key];
3893 3893
 
3894
-         $BoundsA[] = $X1; $BoundsA[] = $Y;
3895
-         $BoundsB[] = $X2; $BoundsB[] = $Y;
3894
+            $BoundsA[] = $X1; $BoundsA[] = $Y;
3895
+            $BoundsB[] = $X2; $BoundsB[] = $Y;
3896 3896
 
3897
-         $LastY = $Y;
3898
-         $LastX1 = $X1; $LastX2 = $X2;
3897
+            $LastY = $Y;
3898
+            $LastX1 = $X1; $LastX2 = $X2;
3899 3899
 
3900
-         $Y = $Y + $YStep;
3900
+            $Y = $Y + $YStep;
3901 3901
         }
3902
-       $Bounds = array_merge($BoundsA,$this->reversePlots($BoundsB));
3903
-       $this->drawPolygonChart($Bounds,array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"Alpha"=>$AreaAlpha));
3902
+        $Bounds = array_merge($BoundsA,$this->reversePlots($BoundsB));
3903
+        $this->drawPolygonChart($Bounds,array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"Alpha"=>$AreaAlpha));
3904 3904
 
3905
-       for($i=0;$i<=count($BoundsA)-4;$i=$i+2)
3905
+        for($i=0;$i<=count($BoundsA)-4;$i=$i+2)
3906 3906
         {
3907
-         $this->drawLine($BoundsA[$i],$BoundsA[$i+1],$BoundsA[$i+2],$BoundsA[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
3908
-         $this->drawLine($BoundsB[$i],$BoundsB[$i+1],$BoundsB[$i+2],$BoundsB[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
3907
+            $this->drawLine($BoundsA[$i],$BoundsA[$i+1],$BoundsA[$i+2],$BoundsA[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
3908
+            $this->drawLine($BoundsB[$i],$BoundsB[$i+1],$BoundsB[$i+2],$BoundsB[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
3909
+        }
3909 3910
         }
3910
-      }
3911 3911
     }
3912 3912
 
3913
-   /* Draw a step chart */
3914
-   function drawStepChart($Format=NULL)
3913
+    /* Draw a step chart */
3914
+    function drawStepChart($Format=NULL)
3915 3915
     {
3916
-     $BreakVoid		= isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : FALSE;
3917
-     $ReCenter		= isset($Format["ReCenter"]) ? $Format["ReCenter"] : TRUE;
3918
-     $VoidTicks		= isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4;
3919
-     $BreakR		= isset($Format["BreakR"]) ? $Format["BreakR"] : NULL;
3920
-     $BreakG		= isset($Format["BreakG"]) ? $Format["BreakG"] : NULL;
3921
-     $BreakB		= isset($Format["BreakB"]) ? $Format["BreakB"] : NULL;
3922
-     $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] :FALSE;
3923
-     $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
3924
-     $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
3925
-     $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
3926
-     $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
3927
-     $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
3928
-     $RecordImageMap	= isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
3929
-     $ImageMapPlotSize  = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5;
3930
-
3931
-     $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
3932
-
3933
-     $Data = $this->DataSet->getData();
3934
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
3935
-     foreach($Data["Series"] as $SerieName => $Serie)
3936
-      {
3937
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
3938
-        {
3939
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
3940
-
3941
-         if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
3942
-
3943
-         if ( $BreakR == NULL )
3944
-          $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
3945
-         else
3946
-          $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
3947
-
3948
-         if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
3949
-
3950
-         $AxisID	= $Serie["Axis"];
3951
-         $Mode		= $Data["Axis"][$AxisID]["Display"];
3952
-         $Format	= $Data["Axis"][$AxisID]["Format"];
3953
-         $Unit		= $Data["Axis"][$AxisID]["Unit"];
3954
-         $Color		= array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight);
3955
-
3956
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
3957
-
3958
-         $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
3959
-
3960
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3961
-          {
3962
-           if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
3963
-           $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
3964
-
3965
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3966
-           $LastGoodY = NULL; $LastGoodX = NULL; $Init = FALSE;
3967
-           foreach($PosArray as $Key => $Y)
3968
-            {
3969
-             if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) 
3970
-              {
3971
-               if ( $Y <= $LastY ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
3972
-               $this->drawText($X,$Y-$Offset-$Weight,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
3973
-              }
3974
-
3975
-             if ( $Y != VOID && $LastX != NULL && $LastY != NULL )
3976
-              {
3977
-               $this->drawLine($LastX,$LastY,$X,$LastY,$Color);
3978
-               $this->drawLine($X,$LastY,$X,$Y,$Color);
3979
-               if ( $ReCenter && $X+$XStep < $this->GraphAreaX2 - $XMargin )
3916
+        $BreakVoid		= isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : FALSE;
3917
+        $ReCenter		= isset($Format["ReCenter"]) ? $Format["ReCenter"] : TRUE;
3918
+        $VoidTicks		= isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4;
3919
+        $BreakR		= isset($Format["BreakR"]) ? $Format["BreakR"] : NULL;
3920
+        $BreakG		= isset($Format["BreakG"]) ? $Format["BreakG"] : NULL;
3921
+        $BreakB		= isset($Format["BreakB"]) ? $Format["BreakB"] : NULL;
3922
+        $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] :FALSE;
3923
+        $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
3924
+        $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
3925
+        $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
3926
+        $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
3927
+        $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
3928
+        $RecordImageMap	= isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
3929
+        $ImageMapPlotSize  = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5;
3930
+
3931
+        $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
3932
+
3933
+        $Data = $this->DataSet->getData();
3934
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
3935
+        foreach($Data["Series"] as $SerieName => $Serie)
3936
+        {
3937
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
3938
+        {
3939
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
3940
+
3941
+            if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
3942
+
3943
+            if ( $BreakR == NULL )
3944
+            $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
3945
+            else
3946
+            $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
3947
+
3948
+            if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
3949
+
3950
+            $AxisID	= $Serie["Axis"];
3951
+            $Mode		= $Data["Axis"][$AxisID]["Display"];
3952
+            $Format	= $Data["Axis"][$AxisID]["Format"];
3953
+            $Unit		= $Data["Axis"][$AxisID]["Unit"];
3954
+            $Color		= array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight);
3955
+
3956
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
3957
+
3958
+            $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
3959
+
3960
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
3961
+            {
3962
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
3963
+            $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
3964
+
3965
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
3966
+            $LastGoodY = NULL; $LastGoodX = NULL; $Init = FALSE;
3967
+            foreach($PosArray as $Key => $Y)
3968
+            {
3969
+                if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) 
3970
+                {
3971
+                if ( $Y <= $LastY ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
3972
+                $this->drawText($X,$Y-$Offset-$Weight,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
3973
+                }
3974
+
3975
+                if ( $Y != VOID && $LastX != NULL && $LastY != NULL )
3976
+                {
3977
+                $this->drawLine($LastX,$LastY,$X,$LastY,$Color);
3978
+                $this->drawLine($X,$LastY,$X,$Y,$Color);
3979
+                if ( $ReCenter && $X+$XStep < $this->GraphAreaX2 - $XMargin )
3980 3980
                 {
3981
-                 $this->drawLine($X,$Y,$X+$XStep,$Y,$Color);
3982
-                 if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X-$ImageMapPlotSize).",".floor($Y-$ImageMapPlotSize).",".floor($X+$XStep+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3981
+                    $this->drawLine($X,$Y,$X+$XStep,$Y,$Color);
3982
+                    if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X-$ImageMapPlotSize).",".floor($Y-$ImageMapPlotSize).",".floor($X+$XStep+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3983 3983
                 }
3984
-               else
3984
+                else
3985 3985
                 { if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } }
3986
-              }
3986
+                }
3987 3987
 
3988
-             if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid )
3989
-              { 
3990
-               if ( $ReCenter )
3988
+                if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid )
3989
+                { 
3990
+                if ( $ReCenter )
3991 3991
                 {
3992
-                 $this->drawLine($LastGoodX+$XStep,$LastGoodY,$X,$LastGoodY,$BreakSettings);
3993
-                 if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX+$XStep-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastGoodY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3992
+                    $this->drawLine($LastGoodX+$XStep,$LastGoodY,$X,$LastGoodY,$BreakSettings);
3993
+                    if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX+$XStep-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastGoodY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3994 3994
                 }
3995
-               else
3995
+                else
3996 3996
                 {
3997
-                 $this->drawLine($LastGoodX,$LastGoodY,$X,$LastGoodY,$BreakSettings);
3998
-                 if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastGoodY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3997
+                    $this->drawLine($LastGoodX,$LastGoodY,$X,$LastGoodY,$BreakSettings);
3998
+                    if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastGoodY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
3999 3999
                 }
4000 4000
 
4001
-               $this->drawLine($X,$LastGoodY,$X,$Y,$BreakSettings);
4002
-               $LastGoodY = NULL;
4003
-              }
4004
-             elseif( !$BreakVoid && $LastGoodY == NULL && $Y != VOID )
4005
-              {
4006
-              $this->drawLine($this->GraphAreaX1 + $XMargin,$Y,$X,$Y,$BreakSettings);
4007
-               if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($this->GraphAreaX1+$XMargin-$ImageMapPlotSize).",".floor($Y-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4008
-              }
4009
-
4010
-             if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
4011
-             if ( $Y == VOID ) { $Y = NULL; }
4012
-
4013
-             if ( !$Init && $ReCenter ) { $X = $X - $XStep/2; $Init = TRUE; }
4014
-             $LastX = $X; $LastY = $Y;
4015
-             if ( $LastX < $this->GraphAreaX1 + $XMargin ) { $LastX = $this->GraphAreaX1 + $XMargin; }
4016
-             $X = $X + $XStep;
4017
-            }
4018
-           if ( $ReCenter )
4019
-            {
4020
-             $this->drawLine($LastX,$LastY,$this->GraphAreaX2 - $XMargin,$LastY,$Color);
4021
-             if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($this->GraphAreaX2-$XMargin+$ImageMapPlotSize).",".floor($LastY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4022
-            }
4023
-          }
4024
-         else
4025
-          {
4026
-           if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
4027
-           $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
4028
-
4029
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4030
-           $LastGoodY = NULL; $LastGoodX = NULL; $Init = FALSE;
4031
-           foreach($PosArray as $Key => $X)
4032
-            {
4033
-             if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) 
4034
-              {
4035
-               if ( $X >= $LastX ) { $Align = TEXT_ALIGN_MIDDLELEFT; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_MIDDLERIGHT; $Offset = -$DisplayOffset; }
4036
-               $this->drawText($X+$Offset+$Weight,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
4037
-              }
4038
-
4039
-             if ( $X != VOID && $LastX != NULL && $LastY != NULL )
4040
-              {
4041
-               $this->drawLine($LastX,$LastY,$LastX,$Y,$Color);
4042
-               $this->drawLine($LastX,$Y,$X,$Y,$Color);
4043
-
4044
-               if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($LastX+$XStep+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4045
-              }
4046
-
4047
-             if ( $X != VOID && $LastX == NULL && $LastGoodY != NULL && !$BreakVoid )
4048
-              {
4049
-               $this->drawLine($LastGoodX,$LastGoodY,$LastGoodX,$LastGoodY+$YStep,$Color);
4050
-               if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($LastGoodX+$ImageMapPlotSize).",".floor($LastGoodY+$YStep+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4051
-
4052
-               $this->drawLine($LastGoodX,$LastGoodY+$YStep,$LastGoodX,$Y,$BreakSettings);
4053
-               if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY+$YStep-$ImageMapPlotSize).",".floor($LastGoodX+$ImageMapPlotSize).",".floor($YStep+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4054
-
4055
-               $this->drawLine($LastGoodX,$Y,$X,$Y,$BreakSettings);
4056
-               $LastGoodY = NULL;
4057
-              }
4058
-             elseif ( $X != VOID && $LastGoodY == NULL && !$BreakVoid )
4059
-              {
4060
-               $this->drawLine($X,$this->GraphAreaY1 + $XMargin,$X,$Y,$BreakSettings);
4061
-               if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X-$ImageMapPlotSize).",".floor($this->GraphAreaY1+$XMargin-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4062
-              }
4063
-
4064
-             if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
4065
-             if ( $X == VOID ) { $X = NULL; }
4066
-
4067
-             if ( !$Init && $ReCenter ) { $Y = $Y - $YStep/2; $Init = TRUE; }
4068
-             $LastX = $X; $LastY = $Y;
4069
-             if ( $LastY < $this->GraphAreaY1 + $XMargin ) { $LastY = $this->GraphAreaY1 + $XMargin; }
4070
-             $Y = $Y + $YStep;
4071
-            }
4072
-           if ( $ReCenter )
4073
-            {
4074
-             $this->drawLine($LastX,$LastY,$LastX,$this->GraphAreaY2 - $XMargin,$Color);
4075
-             if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($LastX+$ImageMapPlotSize).",".floor($this->GraphAreaY2-$XMargin+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4076
-            }
4077
-          }
4078
-        }
4079
-      }
4080
-    }
4001
+                $this->drawLine($X,$LastGoodY,$X,$Y,$BreakSettings);
4002
+                $LastGoodY = NULL;
4003
+                }
4004
+                elseif( !$BreakVoid && $LastGoodY == NULL && $Y != VOID )
4005
+                {
4006
+                $this->drawLine($this->GraphAreaX1 + $XMargin,$Y,$X,$Y,$BreakSettings);
4007
+                if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($this->GraphAreaX1+$XMargin-$ImageMapPlotSize).",".floor($Y-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4008
+                }
4081 4009
 
4082
-   /* Draw a step chart */
4083
-   function drawFilledStepChart($Format=NULL)
4084
-    {
4085
-     $ReCenter		= isset($Format["ReCenter"]) ? $Format["ReCenter"] : TRUE;
4086
-     $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] :FALSE;
4087
-     $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
4088
-     $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
4089
-     $ForceTransparency	= isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : NULL;
4090
-     $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
4091
-     $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
4092
-     $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
4093
-     $AroundZero	= isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
4010
+                if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
4011
+                if ( $Y == VOID ) { $Y = NULL; }
4012
+
4013
+                if ( !$Init && $ReCenter ) { $X = $X - $XStep/2; $Init = TRUE; }
4014
+                $LastX = $X; $LastY = $Y;
4015
+                if ( $LastX < $this->GraphAreaX1 + $XMargin ) { $LastX = $this->GraphAreaX1 + $XMargin; }
4016
+                $X = $X + $XStep;
4017
+            }
4018
+            if ( $ReCenter )
4019
+            {
4020
+                $this->drawLine($LastX,$LastY,$this->GraphAreaX2 - $XMargin,$LastY,$Color);
4021
+                if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($this->GraphAreaX2-$XMargin+$ImageMapPlotSize).",".floor($LastY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4022
+            }
4023
+            }
4024
+            else
4025
+            {
4026
+            if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
4027
+            $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
4028
+
4029
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4030
+            $LastGoodY = NULL; $LastGoodX = NULL; $Init = FALSE;
4031
+            foreach($PosArray as $Key => $X)
4032
+            {
4033
+                if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) 
4034
+                {
4035
+                if ( $X >= $LastX ) { $Align = TEXT_ALIGN_MIDDLELEFT; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_MIDDLERIGHT; $Offset = -$DisplayOffset; }
4036
+                $this->drawText($X+$Offset+$Weight,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
4037
+                }
4038
+
4039
+                if ( $X != VOID && $LastX != NULL && $LastY != NULL )
4040
+                {
4041
+                $this->drawLine($LastX,$LastY,$LastX,$Y,$Color);
4042
+                $this->drawLine($LastX,$Y,$X,$Y,$Color);
4094 4043
 
4095
-     $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
4044
+                if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($LastX+$XStep+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4045
+                }
4046
+
4047
+                if ( $X != VOID && $LastX == NULL && $LastGoodY != NULL && !$BreakVoid )
4048
+                {
4049
+                $this->drawLine($LastGoodX,$LastGoodY,$LastGoodX,$LastGoodY+$YStep,$Color);
4050
+                if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($LastGoodX+$ImageMapPlotSize).",".floor($LastGoodY+$YStep+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4096 4051
 
4097
-     $Data = $this->DataSet->getData();
4098
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
4099
-     foreach($Data["Series"] as $SerieName => $Serie)
4100
-      {
4101
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
4052
+                $this->drawLine($LastGoodX,$LastGoodY+$YStep,$LastGoodX,$Y,$BreakSettings);
4053
+                if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY+$YStep-$ImageMapPlotSize).",".floor($LastGoodX+$ImageMapPlotSize).",".floor($YStep+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4054
+
4055
+                $this->drawLine($LastGoodX,$Y,$X,$Y,$BreakSettings);
4056
+                $LastGoodY = NULL;
4057
+                }
4058
+                elseif ( $X != VOID && $LastGoodY == NULL && !$BreakVoid )
4059
+                {
4060
+                $this->drawLine($X,$this->GraphAreaY1 + $XMargin,$X,$Y,$BreakSettings);
4061
+                if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X-$ImageMapPlotSize).",".floor($this->GraphAreaY1+$XMargin-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4062
+                }
4063
+
4064
+                if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
4065
+                if ( $X == VOID ) { $X = NULL; }
4066
+
4067
+                if ( !$Init && $ReCenter ) { $Y = $Y - $YStep/2; $Init = TRUE; }
4068
+                $LastX = $X; $LastY = $Y;
4069
+                if ( $LastY < $this->GraphAreaY1 + $XMargin ) { $LastY = $this->GraphAreaY1 + $XMargin; }
4070
+                $Y = $Y + $YStep;
4071
+            }
4072
+            if ( $ReCenter )
4073
+            {
4074
+                $this->drawLine($LastX,$LastY,$LastX,$this->GraphAreaY2 - $XMargin,$Color);
4075
+                if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($LastX+$ImageMapPlotSize).",".floor($this->GraphAreaY2-$XMargin+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4076
+            }
4077
+            }
4078
+        }
4079
+        }
4080
+    }
4081
+
4082
+    /* Draw a step chart */
4083
+    function drawFilledStepChart($Format=NULL)
4084
+    {
4085
+        $ReCenter		= isset($Format["ReCenter"]) ? $Format["ReCenter"] : TRUE;
4086
+        $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] :FALSE;
4087
+        $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
4088
+        $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
4089
+        $ForceTransparency	= isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : NULL;
4090
+        $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
4091
+        $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
4092
+        $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
4093
+        $AroundZero	= isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
4094
+
4095
+        $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
4096
+
4097
+        $Data = $this->DataSet->getData();
4098
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
4099
+        foreach($Data["Series"] as $SerieName => $Serie)
4100
+        {
4101
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
4102 4102
         {
4103
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
4103
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
4104 4104
 
4105
-         if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
4105
+            if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
4106 4106
 
4107
-         $AxisID	= $Serie["Axis"];
4108
-         $Mode		= $Data["Axis"][$AxisID]["Display"];
4109
-         $Format	= $Data["Axis"][$AxisID]["Format"];
4110
-         $Unit		= $Data["Axis"][$AxisID]["Unit"];
4107
+            $AxisID	= $Serie["Axis"];
4108
+            $Mode		= $Data["Axis"][$AxisID]["Display"];
4109
+            $Format	= $Data["Axis"][$AxisID]["Format"];
4110
+            $Unit		= $Data["Axis"][$AxisID]["Unit"];
4111 4111
 
4112
-         $Color		= array("R"=>$R,"G"=>$G,"B"=>$B);
4113
-         if ( $ForceTransparency != NULL ) { $Color["Alpha"] = $ForceTransparency; } else { $Color["Alpha"] = $Alpha; }
4112
+            $Color		= array("R"=>$R,"G"=>$G,"B"=>$B);
4113
+            if ( $ForceTransparency != NULL ) { $Color["Alpha"] = $ForceTransparency; } else { $Color["Alpha"] = $Alpha; }
4114 4114
 
4115
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
4116
-         $YZero    = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
4115
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
4116
+            $YZero    = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
4117 4117
 
4118
-         $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
4118
+            $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
4119 4119
 
4120
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
4121
-          {
4122
-           if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
4123
-           if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
4120
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
4121
+            {
4122
+            if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
4123
+            if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
4124 4124
 
4125
-           if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
4126
-           $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
4125
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
4126
+            $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
4127 4127
 
4128
-           if ( !$AroundZero ) { $YZero = $this->GraphAreaY2-1; }
4128
+            if ( !$AroundZero ) { $YZero = $this->GraphAreaY2-1; }
4129 4129
 
4130
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4131
-           $LastGoodY = NULL; $LastGoodX = NULL; $Points = ""; $Init = FALSE;
4132
-           foreach($PosArray as $Key => $Y)
4130
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4131
+            $LastGoodY = NULL; $LastGoodX = NULL; $Points = ""; $Init = FALSE;
4132
+            foreach($PosArray as $Key => $Y)
4133 4133
             {
4134
-             if ( $Y == VOID && $LastX != NULL && $LastY != NULL && $Points !="" )
4135
-              {
4136
-               $Points[] = $LastX; $Points[] = $LastY;
4137
-               $Points[] = $X; $Points[] = $LastY;
4138
-               $Points[] = $X; $Points[] = $YZero;
4139
-               $this->drawPolygon($Points,$Color);
4140
-               $Points = "";
4141
-              }
4134
+                if ( $Y == VOID && $LastX != NULL && $LastY != NULL && $Points !="" )
4135
+                {
4136
+                $Points[] = $LastX; $Points[] = $LastY;
4137
+                $Points[] = $X; $Points[] = $LastY;
4138
+                $Points[] = $X; $Points[] = $YZero;
4139
+                $this->drawPolygon($Points,$Color);
4140
+                $Points = "";
4141
+                }
4142 4142
 
4143
-             if ( $Y != VOID && $LastX != NULL && $LastY != NULL )
4144
-              {
4145
-               if ( $Points == "") { $Points[] = $LastX; $Points[] = $YZero; }
4146
-               $Points[] = $LastX; $Points[] = $LastY;
4147
-               $Points[] = $X; $Points[] = $LastY;
4148
-               $Points[] = $X; $Points[] = $Y;
4149
-              }
4143
+                if ( $Y != VOID && $LastX != NULL && $LastY != NULL )
4144
+                {
4145
+                if ( $Points == "") { $Points[] = $LastX; $Points[] = $YZero; }
4146
+                $Points[] = $LastX; $Points[] = $LastY;
4147
+                $Points[] = $X; $Points[] = $LastY;
4148
+                $Points[] = $X; $Points[] = $Y;
4149
+                }
4150 4150
 
4151
-             if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
4152
-             if ( $Y == VOID ) { $Y = NULL; }
4151
+                if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
4152
+                if ( $Y == VOID ) { $Y = NULL; }
4153 4153
 
4154
-             if ( !$Init && $ReCenter ) { $X = $X - $XStep/2; $Init = TRUE; }
4155
-             $LastX = $X; $LastY = $Y;
4156
-             if ( $LastX < $this->GraphAreaX1 + $XMargin ) { $LastX = $this->GraphAreaX1 + $XMargin; }
4157
-             $X = $X + $XStep;
4154
+                if ( !$Init && $ReCenter ) { $X = $X - $XStep/2; $Init = TRUE; }
4155
+                $LastX = $X; $LastY = $Y;
4156
+                if ( $LastX < $this->GraphAreaX1 + $XMargin ) { $LastX = $this->GraphAreaX1 + $XMargin; }
4157
+                $X = $X + $XStep;
4158 4158
             }
4159 4159
 
4160
-           if ( $ReCenter )
4160
+            if ( $ReCenter )
4161 4161
             {
4162
-             $Points[] = $LastX+$XStep/2; $Points[] = $LastY;
4163
-             $Points[] = $LastX+$XStep/2; $Points[] = $YZero;
4162
+                $Points[] = $LastX+$XStep/2; $Points[] = $LastY;
4163
+                $Points[] = $LastX+$XStep/2; $Points[] = $YZero;
4164 4164
             }
4165
-           else
4165
+            else
4166 4166
             { $Points[] = $LastX; $Points[] = $YZero; }
4167 4167
 
4168
-           $this->drawPolygon($Points,$Color);
4169
-          }
4170
-         else
4171
-          {
4172
-           if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
4173
-           if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
4168
+            $this->drawPolygon($Points,$Color);
4169
+            }
4170
+            else
4171
+            {
4172
+            if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
4173
+            if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
4174 4174
 
4175
-           if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
4176
-           $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
4175
+            if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
4176
+            $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
4177 4177
 
4178
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4179
-           $LastGoodY = NULL; $LastGoodX = NULL; $Points = "";
4180
-           foreach($PosArray as $Key => $X)
4178
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4179
+            $LastGoodY = NULL; $LastGoodX = NULL; $Points = "";
4180
+            foreach($PosArray as $Key => $X)
4181 4181
             {
4182
-             if ( $X == VOID && $LastX != NULL && $LastY != NULL && $Points !="" )
4183
-              {
4184
-               $Points[] = $LastX; $Points[] = $LastY;
4185
-               $Points[] = $LastX; $Points[] = $Y;
4186
-               $Points[] = $YZero; $Points[] = $Y;
4187
-               $this->drawPolygon($Points,$Color);
4188
-               $Points = "";
4189
-              }
4182
+                if ( $X == VOID && $LastX != NULL && $LastY != NULL && $Points !="" )
4183
+                {
4184
+                $Points[] = $LastX; $Points[] = $LastY;
4185
+                $Points[] = $LastX; $Points[] = $Y;
4186
+                $Points[] = $YZero; $Points[] = $Y;
4187
+                $this->drawPolygon($Points,$Color);
4188
+                $Points = "";
4189
+                }
4190 4190
 
4191
-             if ( $X != VOID && $LastX != NULL && $LastY != NULL )
4192
-              {
4193
-               if ( $Points == "") { $Points[] = $YZero; $Points[] = $LastY; }
4194
-               $Points[] = $LastX; $Points[] = $LastY;
4195
-               $Points[] = $LastX; $Points[] = $Y;
4196
-               $Points[] = $X; $Points[] = $Y;
4197
-              }
4191
+                if ( $X != VOID && $LastX != NULL && $LastY != NULL )
4192
+                {
4193
+                if ( $Points == "") { $Points[] = $YZero; $Points[] = $LastY; }
4194
+                $Points[] = $LastX; $Points[] = $LastY;
4195
+                $Points[] = $LastX; $Points[] = $Y;
4196
+                $Points[] = $X; $Points[] = $Y;
4197
+                }
4198 4198
 
4199
-             if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
4200
-             if ( $X == VOID ) { $X = NULL; }
4199
+                if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
4200
+                if ( $X == VOID ) { $X = NULL; }
4201 4201
 
4202
-             if ( $LastX == NULL && $ReCenter ) { $Y = $Y - $YStep/2; }
4203
-             $LastX = $X; $LastY = $Y;
4204
-             if ( $LastY < $this->GraphAreaY1 + $XMargin ) { $LastY = $this->GraphAreaY1 + $XMargin; }
4205
-             $Y = $Y + $YStep;
4202
+                if ( $LastX == NULL && $ReCenter ) { $Y = $Y - $YStep/2; }
4203
+                $LastX = $X; $LastY = $Y;
4204
+                if ( $LastY < $this->GraphAreaY1 + $XMargin ) { $LastY = $this->GraphAreaY1 + $XMargin; }
4205
+                $Y = $Y + $YStep;
4206 4206
             }
4207 4207
 
4208
-           if ( $ReCenter )
4208
+            if ( $ReCenter )
4209 4209
             {
4210
-             $Points[] = $LastX; $Points[] = $LastY+$YStep/2;
4211
-             $Points[] = $YZero; $Points[] = $LastY+$YStep/2;
4210
+                $Points[] = $LastX; $Points[] = $LastY+$YStep/2;
4211
+                $Points[] = $YZero; $Points[] = $LastY+$YStep/2;
4212 4212
             }
4213
-           else
4213
+            else
4214 4214
             { $Points[] = $YZero; $Points[] = $LastY; }
4215 4215
 
4216
-           $this->drawPolygon($Points,$Color);
4217
-          }
4216
+            $this->drawPolygon($Points,$Color);
4217
+            }
4218
+        }
4218 4219
         }
4219
-      }
4220 4220
     }
4221 4221
 
4222
-   /* Draw an area chart */
4223
-   function drawAreaChart($Format=NULL)
4222
+    /* Draw an area chart */
4223
+    function drawAreaChart($Format=NULL)
4224 4224
     {
4225
-     $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
4226
-     $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
4227
-     $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
4228
-     $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
4229
-     $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
4230
-     $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
4231
-     $ForceTransparency	= isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : 25;
4232
-     $AroundZero	= isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
4233
-     $Threshold		= isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
4234
-
4235
-     $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
4236
-
4237
-     $Data  = $this->DataSet->getData();
4238
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
4239
-
4240
-     foreach($Data["Series"] as $SerieName => $Serie)
4241
-      {
4242
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
4225
+        $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
4226
+        $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
4227
+        $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
4228
+        $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
4229
+        $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
4230
+        $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
4231
+        $ForceTransparency	= isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : 25;
4232
+        $AroundZero	= isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
4233
+        $Threshold		= isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
4234
+
4235
+        $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
4236
+
4237
+        $Data  = $this->DataSet->getData();
4238
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
4239
+
4240
+        foreach($Data["Series"] as $SerieName => $Serie)
4243 4241
         {
4244
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
4245
-         if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
4242
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
4243
+        {
4244
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
4245
+            if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
4246 4246
 
4247
-         $AxisID	= $Serie["Axis"];
4248
-         $Mode		= $Data["Axis"][$AxisID]["Display"];
4249
-         $Format	= $Data["Axis"][$AxisID]["Format"];
4250
-         $Unit		= $Data["Axis"][$AxisID]["Unit"];
4247
+            $AxisID	= $Serie["Axis"];
4248
+            $Mode		= $Data["Axis"][$AxisID]["Display"];
4249
+            $Format	= $Data["Axis"][$AxisID]["Format"];
4250
+            $Unit		= $Data["Axis"][$AxisID]["Unit"];
4251 4251
 
4252
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
4253
-         $YZero    = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
4252
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
4253
+            $YZero    = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
4254 4254
 
4255
-         if ( $Threshold != NULL )
4256
-          {
4257
-           foreach($Threshold as $Key => $Params)
4255
+            if ( $Threshold != NULL )
4256
+            {
4257
+            foreach($Threshold as $Key => $Params)
4258 4258
             {
4259
-             $Threshold[$Key]["MinX"] = $this->scaleComputeY($Params["Min"],array("AxisID"=>$Serie["Axis"]));
4260
-             $Threshold[$Key]["MaxX"] = $this->scaleComputeY($Params["Max"],array("AxisID"=>$Serie["Axis"]));
4259
+                $Threshold[$Key]["MinX"] = $this->scaleComputeY($Params["Min"],array("AxisID"=>$Serie["Axis"]));
4260
+                $Threshold[$Key]["MaxX"] = $this->scaleComputeY($Params["Max"],array("AxisID"=>$Serie["Axis"]));
4261
+            }
4261 4262
             }
4262
-          }
4263 4263
 
4264
-         $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
4264
+            $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
4265 4265
 
4266
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
4267
-          {
4268
-           if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
4266
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
4267
+            {
4268
+            if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
4269 4269
 
4270
-           $Areas = ""; $AreaID = 0; 
4271
-           $Areas[$AreaID][] = $this->GraphAreaX1 + $XMargin;
4272
-           if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
4270
+            $Areas = ""; $AreaID = 0; 
4271
+            $Areas[$AreaID][] = $this->GraphAreaX1 + $XMargin;
4272
+            if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
4273 4273
 
4274
-           if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
4275
-           $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
4274
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
4275
+            $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
4276 4276
 
4277
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4278
-           foreach($PosArray as $Key => $Y)
4277
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4278
+            foreach($PosArray as $Key => $Y)
4279 4279
             {
4280
-             if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
4281
-              {
4282
-               if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
4283
-               $this->drawText($X,$Y-$Offset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
4284
-              }
4280
+                if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
4281
+                {
4282
+                if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
4283
+                $this->drawText($X,$Y-$Offset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
4284
+                }
4285 4285
 
4286
-             if ( $Y == VOID && isset($Areas[$AreaID]) )
4287
-              {
4288
-               if($LastX == NULL)
4286
+                if ( $Y == VOID && isset($Areas[$AreaID]) )
4287
+                {
4288
+                if($LastX == NULL)
4289 4289
                 { $Areas[$AreaID][] = $X; }
4290
-               else
4290
+                else
4291 4291
                 { $Areas[$AreaID][] = $LastX; }
4292 4292
 
4293
-               if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
4294
-               $AreaID++;
4295
-              }
4296
-             elseif ($Y != VOID)
4297
-              {
4298
-               if ( !isset($Areas[$AreaID]) )
4293
+                if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
4294
+                $AreaID++;
4295
+                }
4296
+                elseif ($Y != VOID)
4297
+                {
4298
+                if ( !isset($Areas[$AreaID]) )
4299 4299
                 {
4300
-                 $Areas[$AreaID][] = $X;
4301
-                 if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
4300
+                    $Areas[$AreaID][] = $X;
4301
+                    if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
4302 4302
                 }
4303 4303
 
4304
-               $Areas[$AreaID][] = $X;
4305
-               $Areas[$AreaID][] = $Y;
4306
-              }
4304
+                $Areas[$AreaID][] = $X;
4305
+                $Areas[$AreaID][] = $Y;
4306
+                }
4307 4307
 
4308
-             $LastX = $X;
4309
-             $X = $X + $XStep;
4308
+                $LastX = $X;
4309
+                $X = $X + $XStep;
4310 4310
             }
4311
-           $Areas[$AreaID][] = $LastX;
4312
-           if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
4311
+            $Areas[$AreaID][] = $LastX;
4312
+            if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
4313 4313
 
4314
-           /* Handle shadows in the areas */
4315
-           if ( $this->Shadow )
4314
+            /* Handle shadows in the areas */
4315
+            if ( $this->Shadow )
4316 4316
             {
4317
-             $ShadowArea = "";
4318
-             foreach($Areas as $Key => $Points)
4319
-              {
4320
-               $ShadowArea[$Key] = "";
4321
-               foreach($Points as $Key2 => $Value)
4317
+                $ShadowArea = "";
4318
+                foreach($Areas as $Key => $Points)
4319
+                {
4320
+                $ShadowArea[$Key] = "";
4321
+                foreach($Points as $Key2 => $Value)
4322 4322
                 {
4323
-                 if ( $Key2 % 2 == 0 )
4324
-                  { $ShadowArea[$Key][] = $Value + $this->ShadowX; }
4325
-                 else
4326
-                  { $ShadowArea[$Key][] = $Value + $this->ShadowY; }
4323
+                    if ( $Key2 % 2 == 0 )
4324
+                    { $ShadowArea[$Key][] = $Value + $this->ShadowX; }
4325
+                    else
4326
+                    { $ShadowArea[$Key][] = $Value + $this->ShadowY; }
4327 4327
                 }
4328
-              }              
4328
+                }              
4329 4329
 
4330
-             foreach($ShadowArea as $Key => $Points)
4331
-              $this->drawPolygonChart($Points,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
4330
+                foreach($ShadowArea as $Key => $Points)
4331
+                $this->drawPolygonChart($Points,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
4332 4332
             }
4333 4333
 
4334
-           $Alpha = $ForceTransparency != NULL ? $ForceTransparency : $Alpha;
4335
-           $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Threshold"=>$Threshold);
4334
+            $Alpha = $ForceTransparency != NULL ? $ForceTransparency : $Alpha;
4335
+            $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Threshold"=>$Threshold);
4336 4336
 
4337
-           foreach($Areas as $Key => $Points)
4337
+            foreach($Areas as $Key => $Points)
4338 4338
             $this->drawPolygonChart($Points,$Color);
4339
-          }
4340
-         else
4341
-          {
4342
-           if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
4343
-           if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
4339
+            }
4340
+            else
4341
+            {
4342
+            if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
4343
+            if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
4344 4344
 
4345
-           $Areas = ""; $AreaID = 0; 
4346
-           if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
4347
-           $Areas[$AreaID][] = $this->GraphAreaY1 + $XMargin;
4345
+            $Areas = ""; $AreaID = 0; 
4346
+            if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
4347
+            $Areas[$AreaID][] = $this->GraphAreaY1 + $XMargin;
4348 4348
 
4349
-           if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
4350
-           $Y     = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
4349
+            if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
4350
+            $Y     = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
4351 4351
 
4352
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4353
-           foreach($PosArray as $Key => $X)
4352
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4353
+            foreach($PosArray as $Key => $X)
4354 4354
             {
4355
-             if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
4356
-              {
4357
-               if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
4358
-               $this->drawText($X+$Offset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
4359
-              }
4355
+                if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
4356
+                {
4357
+                if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
4358
+                $this->drawText($X+$Offset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
4359
+                }
4360 4360
 
4361
-             if ( $X == VOID && isset($Areas[$AreaID]) )
4362
-              {
4363
-               if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
4361
+                if ( $X == VOID && isset($Areas[$AreaID]) )
4362
+                {
4363
+                if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
4364 4364
 
4365
-               if($LastY == NULL)
4365
+                if($LastY == NULL)
4366 4366
                 { $Areas[$AreaID][] = $Y; }
4367
-               else
4367
+                else
4368 4368
                 { $Areas[$AreaID][] = $LastY; }
4369 4369
 
4370
-               $AreaID++;
4371
-              }
4372
-             elseif ($X != VOID)
4373
-              {
4374
-               if ( !isset($Areas[$AreaID]) )
4370
+                $AreaID++;
4371
+                }
4372
+                elseif ($X != VOID)
4373
+                {
4374
+                if ( !isset($Areas[$AreaID]) )
4375 4375
                 {
4376
-                 if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
4377
-                 $Areas[$AreaID][] = $Y;
4376
+                    if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
4377
+                    $Areas[$AreaID][] = $Y;
4378 4378
                 }
4379 4379
 
4380
-               $Areas[$AreaID][] = $X;
4381
-               $Areas[$AreaID][] = $Y;
4382
-              }
4380
+                $Areas[$AreaID][] = $X;
4381
+                $Areas[$AreaID][] = $Y;
4382
+                }
4383 4383
 
4384
-             $LastX = $X; $LastY = $Y;
4385
-             $Y = $Y + $YStep;
4384
+                $LastX = $X; $LastY = $Y;
4385
+                $Y = $Y + $YStep;
4386 4386
             }
4387
-           if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
4388
-           $Areas[$AreaID][] = $LastY;
4387
+            if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
4388
+            $Areas[$AreaID][] = $LastY;
4389 4389
 
4390
-           /* Handle shadows in the areas */
4391
-           if ( $this->Shadow )
4390
+            /* Handle shadows in the areas */
4391
+            if ( $this->Shadow )
4392 4392
             {
4393
-             $ShadowArea = "";
4394
-             foreach($Areas as $Key => $Points)
4395
-              {
4396
-               $ShadowArea[$Key] = "";
4397
-               foreach($Points as $Key2 => $Value)
4393
+                $ShadowArea = "";
4394
+                foreach($Areas as $Key => $Points)
4395
+                {
4396
+                $ShadowArea[$Key] = "";
4397
+                foreach($Points as $Key2 => $Value)
4398 4398
                 {
4399
-                 if ( $Key2 % 2 == 0 )
4400
-                  { $ShadowArea[$Key][] = $Value + $this->ShadowX; }
4401
-                 else
4402
-                  { $ShadowArea[$Key][] = $Value + $this->ShadowY; }
4399
+                    if ( $Key2 % 2 == 0 )
4400
+                    { $ShadowArea[$Key][] = $Value + $this->ShadowX; }
4401
+                    else
4402
+                    { $ShadowArea[$Key][] = $Value + $this->ShadowY; }
4403 4403
                 }
4404
-              }              
4404
+                }              
4405 4405
 
4406
-             foreach($ShadowArea as $Key => $Points)
4407
-              $this->drawPolygonChart($Points,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
4406
+                foreach($ShadowArea as $Key => $Points)
4407
+                $this->drawPolygonChart($Points,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
4408 4408
             }
4409 4409
 
4410
-           $Alpha = $ForceTransparency != NULL ? $ForceTransparency : $Alpha;
4411
-           $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Threshold"=>$Threshold);
4410
+            $Alpha = $ForceTransparency != NULL ? $ForceTransparency : $Alpha;
4411
+            $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Threshold"=>$Threshold);
4412 4412
 
4413
-           foreach($Areas as $Key => $Points)
4413
+            foreach($Areas as $Key => $Points)
4414 4414
             $this->drawPolygonChart($Points,$Color);
4415
-          }
4415
+            }
4416
+        }
4416 4417
         }
4417
-      }
4418 4418
     }
4419 4419
 
4420 4420
 
4421
-   /* Draw a bar chart */
4422
-   function drawBarChart($Format=NULL)
4421
+    /* Draw a bar chart */
4422
+    function drawBarChart($Format=NULL)
4423 4423
     {
4424
-     $Floating0Serie	= isset($Format["Floating0Serie"]) ? $Format["Floating0Serie"] : NULL;
4425
-     $Floating0Value	= isset($Format["Floating0Value"]) ? $Format["Floating0Value"] : NULL;
4426
-     $Draw0Line		= isset($Format["Draw0Line"]) ? $Format["Draw0Line"] : FALSE;
4427
-     $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
4428
-     $DisplayOrientation = isset($Format["DisplayOrientation"]) ? $Format["DisplayOrientation"] : ORIENTATION_HORIZONTAL;
4429
-     $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
4430
-     $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
4431
-     $DisplayFont	= isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontName;
4432
-     $DisplaySize	= isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontSize;
4433
-     $DisplayPos	= isset($Format["DisplayPos"]) ? $Format["DisplayPos"] : LABEL_POS_OUTSIDE;
4434
-     $DisplayShadow	= isset($Format["DisplayShadow"]) ? $Format["DisplayShadow"] : TRUE;
4435
-     $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
4436
-     $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
4437
-     $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
4438
-     $AroundZero	= isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
4439
-     $Interleave	= isset($Format["Interleave"]) ? $Format["Interleave"] : .5;
4440
-     $Rounded		= isset($Format["Rounded"]) ? $Format["Rounded"] : FALSE;
4441
-     $RoundRadius	= isset($Format["RoundRadius"]) ? $Format["RoundRadius"] : 4;
4442
-     $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
4443
-     $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
4444
-     $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
4445
-     $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
4446
-     $Gradient		= isset($Format["Gradient"]) ? $Format["Gradient"] : FALSE;
4447
-     $GradientMode	= isset($Format["GradientMode"]) ? $Format["GradientMode"] : GRADIENT_SIMPLE;
4448
-     $GradientAlpha	= isset($Format["GradientAlpha"]) ? $Format["GradientAlpha"] : 20;
4449
-     $GradientStartR	= isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255;
4450
-     $GradientStartG	= isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255;
4451
-     $GradientStartB	= isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255;
4452
-     $GradientEndR	= isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 0;
4453
-     $GradientEndG	= isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 0;
4454
-     $GradientEndB	= isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 0;
4455
-     $TxtMargin		= isset($Format["TxtMargin"]) ? $Format["TxtMargin"] : 6;
4456
-     $OverrideColors	= isset($Format["OverrideColors"]) ? $Format["OverrideColors"] : NULL;
4457
-     $OverrideSurrounding = isset($Format["OverrideSurrounding"]) ? $Format["OverrideSurrounding"] : 30;
4458
-     $InnerSurrounding	= isset($Format["InnerSurrounding"]) ? $Format["InnerSurrounding"] : NULL;
4459
-     $InnerBorderR	= isset($Format["InnerBorderR"]) ? $Format["InnerBorderR"] : -1;
4460
-     $InnerBorderG	= isset($Format["InnerBorderG"]) ? $Format["InnerBorderG"] : -1;
4461
-     $InnerBorderB	= isset($Format["InnerBorderB"]) ? $Format["InnerBorderB"] : -1;
4462
-     $RecordImageMap	= isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
4463
-
4464
-     $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
4465
-
4466
-     $Data = $this->DataSet->getData();
4467
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
4468
-
4469
-     if ( $OverrideColors != NULL )
4470
-      {
4471
-       $OverrideColors = $this->validatePalette($OverrideColors,$OverrideSurrounding);
4472
-       $this->DataSet->saveExtendedData("Palette",$OverrideColors);
4473
-      }
4474
-
4475
-     $RestoreShadow = $this->Shadow;
4476
-
4477
-     $SeriesCount  = $this->countDrawableSeries();
4478
-     $CurrentSerie = 0;
4479
-     foreach($Data["Series"] as $SerieName => $Serie)
4480
-      {
4481
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
4482
-        {
4483
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
4484
-         if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
4485
-         if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
4486
-         if ( $InnerSurrounding != NULL ) { $InnerBorderR = $R+$InnerSurrounding; $InnerBorderG = $G+$InnerSurrounding; $InnerBorderB = $B+$InnerSurrounding; }
4487
-         if ( $InnerBorderR == -1 ) { $InnerColor = NULL; } else { $InnerColor = array("R"=>$InnerBorderR,"G"=>$InnerBorderG,"B"=>$InnerBorderB); }
4488
-         $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB);
4489
-
4490
-         $AxisID	= $Serie["Axis"];
4491
-         $Mode		= $Data["Axis"][$AxisID]["Display"];
4492
-         $Format	= $Data["Axis"][$AxisID]["Format"];
4493
-         $Unit		= $Data["Axis"][$AxisID]["Unit"];
4494
-
4495
-         if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
4496
-
4497
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
4498
-
4499
-         if ( $Floating0Value != NULL )
4500
-          { $YZero = $this->scaleComputeY($Floating0Value,array("AxisID"=>$Serie["Axis"])); }
4501
-         else
4502
-          { $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); }
4503
-
4504
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
4505
-          {
4506
-           if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
4507
-           if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
4508
-
4509
-           if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
4510
-           $X = $this->GraphAreaX1 + $XMargin;
4511
-
4512
-           if ( $AroundZero ) { $Y1 = $YZero; } else { $Y1 = $this->GraphAreaY2-1; }
4513
-           if ( $XDivs == 0 ) { $XSize = ($this->GraphAreaX2-$this->GraphAreaX1)/($SeriesCount+$Interleave); } else { $XSize   = ($XStep / ($SeriesCount+$Interleave) ); }
4514
-
4515
-           $XOffset = -($XSize*$SeriesCount)/2 + $CurrentSerie * $XSize;
4516
-           if ( $X + $XOffset <= $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $X + 1 ; }
4517
-
4518
-           $this->DataSet->Data["Series"][$SerieName]["XOffset"] = $XOffset + $XSize / 2;
4519
-
4520
-           if ( $Rounded || $BorderR != -1) { $XSpace = 1; } else { $XSpace = 0; }
4521
-
4522
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4523
-
4524
-           $ID = 0;
4525
-           foreach($PosArray as $Key => $Y2)
4526
-            {
4527
-             if ( $Floating0Serie != NULL )
4528
-              {
4529
-               if ( isset($Data["Series"][$Floating0Serie]["Data"][$Key]) )
4424
+        $Floating0Serie	= isset($Format["Floating0Serie"]) ? $Format["Floating0Serie"] : NULL;
4425
+        $Floating0Value	= isset($Format["Floating0Value"]) ? $Format["Floating0Value"] : NULL;
4426
+        $Draw0Line		= isset($Format["Draw0Line"]) ? $Format["Draw0Line"] : FALSE;
4427
+        $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
4428
+        $DisplayOrientation = isset($Format["DisplayOrientation"]) ? $Format["DisplayOrientation"] : ORIENTATION_HORIZONTAL;
4429
+        $DisplayOffset	= isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
4430
+        $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
4431
+        $DisplayFont	= isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontName;
4432
+        $DisplaySize	= isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontSize;
4433
+        $DisplayPos	= isset($Format["DisplayPos"]) ? $Format["DisplayPos"] : LABEL_POS_OUTSIDE;
4434
+        $DisplayShadow	= isset($Format["DisplayShadow"]) ? $Format["DisplayShadow"] : TRUE;
4435
+        $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
4436
+        $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
4437
+        $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
4438
+        $AroundZero	= isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
4439
+        $Interleave	= isset($Format["Interleave"]) ? $Format["Interleave"] : .5;
4440
+        $Rounded		= isset($Format["Rounded"]) ? $Format["Rounded"] : FALSE;
4441
+        $RoundRadius	= isset($Format["RoundRadius"]) ? $Format["RoundRadius"] : 4;
4442
+        $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
4443
+        $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
4444
+        $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
4445
+        $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
4446
+        $Gradient		= isset($Format["Gradient"]) ? $Format["Gradient"] : FALSE;
4447
+        $GradientMode	= isset($Format["GradientMode"]) ? $Format["GradientMode"] : GRADIENT_SIMPLE;
4448
+        $GradientAlpha	= isset($Format["GradientAlpha"]) ? $Format["GradientAlpha"] : 20;
4449
+        $GradientStartR	= isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255;
4450
+        $GradientStartG	= isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255;
4451
+        $GradientStartB	= isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255;
4452
+        $GradientEndR	= isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 0;
4453
+        $GradientEndG	= isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 0;
4454
+        $GradientEndB	= isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 0;
4455
+        $TxtMargin		= isset($Format["TxtMargin"]) ? $Format["TxtMargin"] : 6;
4456
+        $OverrideColors	= isset($Format["OverrideColors"]) ? $Format["OverrideColors"] : NULL;
4457
+        $OverrideSurrounding = isset($Format["OverrideSurrounding"]) ? $Format["OverrideSurrounding"] : 30;
4458
+        $InnerSurrounding	= isset($Format["InnerSurrounding"]) ? $Format["InnerSurrounding"] : NULL;
4459
+        $InnerBorderR	= isset($Format["InnerBorderR"]) ? $Format["InnerBorderR"] : -1;
4460
+        $InnerBorderG	= isset($Format["InnerBorderG"]) ? $Format["InnerBorderG"] : -1;
4461
+        $InnerBorderB	= isset($Format["InnerBorderB"]) ? $Format["InnerBorderB"] : -1;
4462
+        $RecordImageMap	= isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
4463
+
4464
+        $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
4465
+
4466
+        $Data = $this->DataSet->getData();
4467
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
4468
+
4469
+        if ( $OverrideColors != NULL )
4470
+        {
4471
+        $OverrideColors = $this->validatePalette($OverrideColors,$OverrideSurrounding);
4472
+        $this->DataSet->saveExtendedData("Palette",$OverrideColors);
4473
+        }
4474
+
4475
+        $RestoreShadow = $this->Shadow;
4476
+
4477
+        $SeriesCount  = $this->countDrawableSeries();
4478
+        $CurrentSerie = 0;
4479
+        foreach($Data["Series"] as $SerieName => $Serie)
4480
+        {
4481
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
4482
+        {
4483
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
4484
+            if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
4485
+            if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
4486
+            if ( $InnerSurrounding != NULL ) { $InnerBorderR = $R+$InnerSurrounding; $InnerBorderG = $G+$InnerSurrounding; $InnerBorderB = $B+$InnerSurrounding; }
4487
+            if ( $InnerBorderR == -1 ) { $InnerColor = NULL; } else { $InnerColor = array("R"=>$InnerBorderR,"G"=>$InnerBorderG,"B"=>$InnerBorderB); }
4488
+            $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB);
4489
+
4490
+            $AxisID	= $Serie["Axis"];
4491
+            $Mode		= $Data["Axis"][$AxisID]["Display"];
4492
+            $Format	= $Data["Axis"][$AxisID]["Format"];
4493
+            $Unit		= $Data["Axis"][$AxisID]["Unit"];
4494
+
4495
+            if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
4496
+
4497
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
4498
+
4499
+            if ( $Floating0Value != NULL )
4500
+            { $YZero = $this->scaleComputeY($Floating0Value,array("AxisID"=>$Serie["Axis"])); }
4501
+            else
4502
+            { $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); }
4503
+
4504
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
4505
+            {
4506
+            if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
4507
+            if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
4508
+
4509
+            if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
4510
+            $X = $this->GraphAreaX1 + $XMargin;
4511
+
4512
+            if ( $AroundZero ) { $Y1 = $YZero; } else { $Y1 = $this->GraphAreaY2-1; }
4513
+            if ( $XDivs == 0 ) { $XSize = ($this->GraphAreaX2-$this->GraphAreaX1)/($SeriesCount+$Interleave); } else { $XSize   = ($XStep / ($SeriesCount+$Interleave) ); }
4514
+
4515
+            $XOffset = -($XSize*$SeriesCount)/2 + $CurrentSerie * $XSize;
4516
+            if ( $X + $XOffset <= $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $X + 1 ; }
4517
+
4518
+            $this->DataSet->Data["Series"][$SerieName]["XOffset"] = $XOffset + $XSize / 2;
4519
+
4520
+            if ( $Rounded || $BorderR != -1) { $XSpace = 1; } else { $XSpace = 0; }
4521
+
4522
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4523
+
4524
+            $ID = 0;
4525
+            foreach($PosArray as $Key => $Y2)
4526
+            {
4527
+                if ( $Floating0Serie != NULL )
4528
+                {
4529
+                if ( isset($Data["Series"][$Floating0Serie]["Data"][$Key]) )
4530 4530
                 { $Value = $Data["Series"][$Floating0Serie]["Data"][$Key]; }
4531
-               else
4531
+                else
4532 4532
                 { $Value = 0; }
4533 4533
 
4534
-               $YZero = $this->scaleComputeY($Value,array("AxisID"=>$Serie["Axis"]));
4535
-               if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
4536
-               if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
4534
+                $YZero = $this->scaleComputeY($Value,array("AxisID"=>$Serie["Axis"]));
4535
+                if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
4536
+                if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
4537 4537
 
4538
-               if ( $AroundZero ) { $Y1 = $YZero; } else { $Y1 = $this->GraphAreaY2-1; }
4539
-              }
4538
+                if ( $AroundZero ) { $Y1 = $YZero; } else { $Y1 = $this->GraphAreaY2-1; }
4539
+                }
4540 4540
 
4541
-             if ( $OverrideColors != NULL )
4542
-              { if ( isset($OverrideColors[$ID]) ) { $Color = array("R"=>$OverrideColors[$ID]["R"],"G"=>$OverrideColors[$ID]["G"],"B"=>$OverrideColors[$ID]["B"],"Alpha"=>$OverrideColors[$ID]["Alpha"],"BorderR"=>$OverrideColors[$ID]["BorderR"],"BorderG"=>$OverrideColors[$ID]["BorderG"],"BorderB"=>$OverrideColors[$ID]["BorderB"]); } else { $Color = $this->getRandomColor(); } }
4541
+                if ( $OverrideColors != NULL )
4542
+                { if ( isset($OverrideColors[$ID]) ) { $Color = array("R"=>$OverrideColors[$ID]["R"],"G"=>$OverrideColors[$ID]["G"],"B"=>$OverrideColors[$ID]["B"],"Alpha"=>$OverrideColors[$ID]["Alpha"],"BorderR"=>$OverrideColors[$ID]["BorderR"],"BorderG"=>$OverrideColors[$ID]["BorderG"],"BorderB"=>$OverrideColors[$ID]["BorderB"]); } else { $Color = $this->getRandomColor(); } }
4543 4543
 
4544
-             if ( $Y2 != VOID )
4545
-              {
4546
-               $BarHeight = $Y1 - $Y2;
4544
+                if ( $Y2 != VOID )
4545
+                {
4546
+                $BarHeight = $Y1 - $Y2;
4547 4547
 
4548
-               if ( $Serie["Data"][$Key] == 0 )
4548
+                if ( $Serie["Data"][$Key] == 0 )
4549 4549
                 {
4550
-                 $this->drawLine($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y1,$Color);
4551
-                 if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset+$XSpace).",".floor($Y1-1).",".floor($X+$XOffset+$XSize-$XSpace).",".floor($Y1+1),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4550
+                    $this->drawLine($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y1,$Color);
4551
+                    if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset+$XSpace).",".floor($Y1-1).",".floor($X+$XOffset+$XSize-$XSpace).",".floor($Y1+1),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4552 4552
                 }
4553
-               else
4553
+                else
4554 4554
                 {
4555
-                 if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset+$XSpace).",".floor($Y1).",".floor($X+$XOffset+$XSize-$XSpace).",".floor($Y2),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4555
+                    if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset+$XSpace).",".floor($Y1).",".floor($X+$XOffset+$XSize-$XSpace).",".floor($Y2),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4556 4556
 
4557
-                 if ( $Rounded )
4558
-                  $this->drawRoundedFilledRectangle($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,$RoundRadius,$Color);
4559
-                 else
4560
-                  {
4561
-                   $this->drawFilledRectangle($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,$Color);
4557
+                    if ( $Rounded )
4558
+                    $this->drawRoundedFilledRectangle($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,$RoundRadius,$Color);
4559
+                    else
4560
+                    {
4561
+                    $this->drawFilledRectangle($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,$Color);
4562 4562
 
4563
-                   if ( $InnerColor != NULL ) { $this->drawRectangle($X+$XOffset+$XSpace+1,min($Y1,$Y2)+1,$X+$XOffset+$XSize-$XSpace-1,max($Y1,$Y2)-1,$InnerColor); }
4563
+                    if ( $InnerColor != NULL ) { $this->drawRectangle($X+$XOffset+$XSpace+1,min($Y1,$Y2)+1,$X+$XOffset+$XSize-$XSpace-1,max($Y1,$Y2)-1,$InnerColor); }
4564 4564
 
4565
-                   if ( $Gradient )
4565
+                    if ( $Gradient )
4566 4566
                     {
4567
-                     $this->Shadow  = FALSE;
4567
+                        $this->Shadow  = FALSE;
4568 4568
 
4569
-                     if ( $GradientMode == GRADIENT_SIMPLE )
4570
-                      {
4571
-                       if ( $Serie["Data"][$Key] >= 0 )
4569
+                        if ( $GradientMode == GRADIENT_SIMPLE )
4570
+                        {
4571
+                        if ( $Serie["Data"][$Key] >= 0 )
4572 4572
                         $GradienColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4573
-                       else
4573
+                        else
4574 4574
                         $GradienColor = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
4575 4575
 
4576
-                       $this->drawGradientArea($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,DIRECTION_VERTICAL,$GradienColor);
4577
-                      }
4578
-                     elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
4579
-                      {
4580
-                       $GradienColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
4581
-                       $GradienColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4582
-                       $XSpan = floor($XSize / 3);
4583
-
4584
-                       $this->drawGradientArea($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSpan-$XSpace,$Y2,DIRECTION_HORIZONTAL,$GradienColor1);
4585
-                       $this->drawGradientArea($X+$XOffset+$XSpan+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,DIRECTION_HORIZONTAL,$GradienColor2);
4586
-                      }
4587
-                     $this->Shadow = $RestoreShadow;
4576
+                        $this->drawGradientArea($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,DIRECTION_VERTICAL,$GradienColor);
4577
+                        }
4578
+                        elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
4579
+                        {
4580
+                        $GradienColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
4581
+                        $GradienColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4582
+                        $XSpan = floor($XSize / 3);
4583
+
4584
+                        $this->drawGradientArea($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSpan-$XSpace,$Y2,DIRECTION_HORIZONTAL,$GradienColor1);
4585
+                        $this->drawGradientArea($X+$XOffset+$XSpan+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,DIRECTION_HORIZONTAL,$GradienColor2);
4586
+                        }
4587
+                        $this->Shadow = $RestoreShadow;
4588
+                    }
4588 4589
                     }
4589
-                  }
4590 4590
 
4591
-                 if ( $Draw0Line )
4592
-                  {
4593
-                   $Line0Color = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20);
4591
+                    if ( $Draw0Line )
4592
+                    {
4593
+                    $Line0Color = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20);
4594 4594
 
4595
-                   if ( abs($Y1 - $Y2) > 3 ) { $Line0Width = 3; } else { $Line0Width = 1; }
4596
-                   if ( $Y1 - $Y2 < 0 ) { $Line0Width = -$Line0Width; }
4595
+                    if ( abs($Y1 - $Y2) > 3 ) { $Line0Width = 3; } else { $Line0Width = 1; }
4596
+                    if ( $Y1 - $Y2 < 0 ) { $Line0Width = -$Line0Width; }
4597 4597
 
4598
-                   $this->drawFilledRectangle($X+$XOffset+$XSpace,floor($Y1),$X+$XOffset+$XSize-$XSpace,floor($Y1)-$Line0Width,$Line0Color);
4599
-                   $this->drawLine($X+$XOffset+$XSpace,floor($Y1),$X+$XOffset+$XSize-$XSpace,floor($Y1),$Line0Color);
4600
-                  }
4598
+                    $this->drawFilledRectangle($X+$XOffset+$XSpace,floor($Y1),$X+$XOffset+$XSize-$XSpace,floor($Y1)-$Line0Width,$Line0Color);
4599
+                    $this->drawLine($X+$XOffset+$XSpace,floor($Y1),$X+$XOffset+$XSize-$XSpace,floor($Y1),$Line0Color);
4600
+                    }
4601 4601
                 }
4602 4602
 
4603
-               if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
4603
+                if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
4604 4604
                 {
4605
-                 if ( $DisplayShadow ) { $this->Shadow = TRUE; }
4606
-
4607
-                 $Caption    = $this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit);
4608
-                 $TxtPos     = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,90,$Caption);
4609
-                 $TxtHeight  = $TxtPos[0]["Y"] - $TxtPos[1]["Y"] + $TxtMargin;
4610
-
4611
-                 if ( $DisplayPos == LABEL_POS_INSIDE && abs($TxtHeight) < abs($BarHeight) )
4612
-                  {
4613
-                   $CenterX = (($X+$XOffset+$XSize-$XSpace)-($X+$XOffset+$XSpace))/2 + $X+$XOffset+$XSpace;
4614
-                   $CenterY = ($Y2-$Y1)/2 + $Y1;
4615
-
4616
-                   $this->drawText($CenterX,$CenterY,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"Angle"=>90));
4617
-                  }
4618
-                 else
4619
-                  {
4620
-                   if ( $Serie["Data"][$Key] >= 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
4621
-                   $this->drawText($X+$XOffset+$XSize/2,$Y2-$Offset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align,"FontSize"=>$DisplaySize));
4622
-                  }
4623
-
4624
-                 $this->Shadow = $RestoreShadow;
4605
+                    if ( $DisplayShadow ) { $this->Shadow = TRUE; }
4606
+
4607
+                    $Caption    = $this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit);
4608
+                    $TxtPos     = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,90,$Caption);
4609
+                    $TxtHeight  = $TxtPos[0]["Y"] - $TxtPos[1]["Y"] + $TxtMargin;
4610
+
4611
+                    if ( $DisplayPos == LABEL_POS_INSIDE && abs($TxtHeight) < abs($BarHeight) )
4612
+                    {
4613
+                    $CenterX = (($X+$XOffset+$XSize-$XSpace)-($X+$XOffset+$XSpace))/2 + $X+$XOffset+$XSpace;
4614
+                    $CenterY = ($Y2-$Y1)/2 + $Y1;
4615
+
4616
+                    $this->drawText($CenterX,$CenterY,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"Angle"=>90));
4617
+                    }
4618
+                    else
4619
+                    {
4620
+                    if ( $Serie["Data"][$Key] >= 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
4621
+                    $this->drawText($X+$XOffset+$XSize/2,$Y2-$Offset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align,"FontSize"=>$DisplaySize));
4622
+                    }
4623
+
4624
+                    $this->Shadow = $RestoreShadow;
4625
+                }
4625 4626
                 }
4626
-              }
4627 4627
 
4628
-             $X = $X + $XStep;
4629
-             $ID++;
4628
+                $X = $X + $XStep;
4629
+                $ID++;
4630
+            }
4630 4631
             }
4631
-          }
4632
-         else
4633
-          {
4634
-           if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
4635
-           if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
4632
+            else
4633
+            {
4634
+            if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
4635
+            if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
4636 4636
 
4637
-           if ( $XDivs == 0 ) { $YStep = 0; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
4637
+            if ( $XDivs == 0 ) { $YStep = 0; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
4638 4638
            
4639
-           $Y = $this->GraphAreaY1 + $XMargin;
4639
+            $Y = $this->GraphAreaY1 + $XMargin;
4640 4640
 
4641
-           if ( $AroundZero ) { $X1 = $YZero; } else { $X1 = $this->GraphAreaX1+1; }
4642
-           if ( $XDivs == 0 ) { $YSize = ($this->GraphAreaY2-$this->GraphAreaY1)/($SeriesCount+$Interleave); } else { $YSize   = ($YStep / ($SeriesCount+$Interleave) ); }
4641
+            if ( $AroundZero ) { $X1 = $YZero; } else { $X1 = $this->GraphAreaX1+1; }
4642
+            if ( $XDivs == 0 ) { $YSize = ($this->GraphAreaY2-$this->GraphAreaY1)/($SeriesCount+$Interleave); } else { $YSize   = ($YStep / ($SeriesCount+$Interleave) ); }
4643 4643
            
4644
-           $YOffset = -($YSize*$SeriesCount)/2 + $CurrentSerie * $YSize;
4645
-           if ( $Y + $YOffset <= $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $Y + 1 ; }
4644
+            $YOffset = -($YSize*$SeriesCount)/2 + $CurrentSerie * $YSize;
4645
+            if ( $Y + $YOffset <= $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $Y + 1 ; }
4646 4646
 
4647
-           $this->DataSet->Data["Series"][$SerieName]["XOffset"] = $YOffset + $YSize / 2;
4647
+            $this->DataSet->Data["Series"][$SerieName]["XOffset"] = $YOffset + $YSize / 2;
4648 4648
 
4649
-           if ( $Rounded || $BorderR != -1 ) { $YSpace = 1; } else { $YSpace = 0; }
4649
+            if ( $Rounded || $BorderR != -1 ) { $YSpace = 1; } else { $YSpace = 0; }
4650 4650
 
4651
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4651
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4652 4652
 
4653
-           $ID = 0 ;
4654
-           foreach($PosArray as $Key => $X2)
4653
+            $ID = 0 ;
4654
+            foreach($PosArray as $Key => $X2)
4655 4655
             {
4656
-             if ( $Floating0Serie != NULL )
4657
-              {
4658
-               if ( isset($Data["Series"][$Floating0Serie]["Data"][$Key]) )
4656
+                if ( $Floating0Serie != NULL )
4657
+                {
4658
+                if ( isset($Data["Series"][$Floating0Serie]["Data"][$Key]) )
4659 4659
                 $Value = $Data["Series"][$Floating0Serie]["Data"][$Key];
4660
-               else { $Value = 0; }
4660
+                else { $Value = 0; }
4661
+
4662
+                $YZero = $this->scaleComputeY($Value,array("AxisID"=>$Serie["Axis"]));
4663
+                if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
4664
+                if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
4665
+                if ( $AroundZero ) { $X1 = $YZero; } else { $X1 = $this->GraphAreaX1+1; }
4666
+                }
4667
+
4668
+                if ( $OverrideColors != NULL )
4669
+                { if ( isset($OverrideColors[$ID]) ) { $Color = array("R"=>$OverrideColors[$ID]["R"],"G"=>$OverrideColors[$ID]["G"],"B"=>$OverrideColors[$ID]["B"],"Alpha"=>$OverrideColors[$ID]["Alpha"],"BorderR"=>$OverrideColors[$ID]["BorderR"],"BorderG"=>$OverrideColors[$ID]["BorderG"],"BorderB"=>$OverrideColors[$ID]["BorderB"]); } else { $Color = $this->getRandomColor(); } }
4670
+
4671
+                if ( $X2 != VOID )
4672
+                {
4673
+                $BarWidth = $X2 - $X1;
4674
+
4675
+                if ( $Serie["Data"][$Key] == 0 )
4676
+                {
4677
+                    $this->drawLine($X1,$Y+$YOffset+$YSpace,$X1,$Y+$YOffset+$YSize-$YSpace,$Color);
4678
+                    if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1-1).",".floor($Y+$YOffset+$YSpace).",".floor($X1+1).",".floor($Y+$YOffset+$YSize-$YSpace),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4679
+                }
4680
+                else
4681
+                {
4682
+                    if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1).",".floor($Y+$YOffset+$YSpace).",".floor($X2).",".floor($Y+$YOffset+$YSize-$YSpace),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4683
+
4684
+                    if ( $Rounded )
4685
+                    $this->drawRoundedFilledRectangle($X1+1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,$RoundRadius,$Color);
4686
+                    else
4687
+                    {
4688
+                    $this->drawFilledRectangle($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,$Color);
4689
+
4690
+                    if ( $InnerColor != NULL ) { $this->drawRectangle(min($X1,$X2)+1,$Y+$YOffset+$YSpace+1,max($X1,$X2)-1,$Y+$YOffset+$YSize-$YSpace-1,$InnerColor); }
4691
+
4692
+                    if ( $Gradient )
4693
+                    {
4694
+                        $this->Shadow  = FALSE;
4695
+
4696
+                        if ( $GradientMode == GRADIENT_SIMPLE )
4697
+                        {
4698
+                        if ( $Serie["Data"][$Key] >= 0 )
4699
+                        $GradienColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4700
+                        else
4701
+                        $GradienColor = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
4702
+
4703
+                        $this->drawGradientArea($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,DIRECTION_HORIZONTAL,$GradienColor);
4704
+                        }
4705
+                        elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
4706
+                        {
4707
+                        $GradienColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
4708
+                        $GradienColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4709
+                        $YSpan = floor($YSize / 3);
4710
+
4711
+                        $this->drawGradientArea($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSpan-$YSpace,DIRECTION_VERTICAL,$GradienColor1);
4712
+                        $this->drawGradientArea($X1,$Y+$YOffset+$YSpan,$X2,$Y+$YOffset+$YSize-$YSpace,DIRECTION_VERTICAL,$GradienColor2);
4713
+                        }
4714
+                        $this->Shadow = $RestoreShadow;
4715
+                    }
4716
+                    }
4717
+
4718
+                    if ( $Draw0Line )
4719
+                    {
4720
+                    $Line0Color = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20);
4721
+
4722
+                    if ( abs($X1 - $X2) > 3 ) { $Line0Width = 3; } else { $Line0Width = 1; }
4723
+                    if ( $X2 - $X1 < 0 ) { $Line0Width = -$Line0Width; }
4724
+
4725
+                    $this->drawFilledRectangle(floor($X1),$Y+$YOffset+$YSpace,floor($X1)+$Line0Width,$Y+$YOffset+$YSize-$YSpace,$Line0Color);
4726
+                    $this->drawLine(floor($X1),$Y+$YOffset+$YSpace,floor($X1),$Y+$YOffset+$YSize-$YSpace,$Line0Color);
4727
+                    }
4728
+                }
4729
+
4730
+                if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) 
4731
+                {
4732
+                    if ( $DisplayShadow ) { $this->Shadow = TRUE; }
4733
+
4734
+                    $Caption   = $this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit);
4735
+                    $TxtPos    = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
4736
+                    $TxtWidth  = $TxtPos[1]["X"] - $TxtPos[0]["X"] + $TxtMargin;
4737
+
4738
+                    if ( $DisplayPos == LABEL_POS_INSIDE && abs($TxtWidth) < abs($BarWidth) )
4739
+                    {
4740
+                    $CenterX = ($X2-$X1)/2 + $X1;
4741
+                    $CenterY = (($Y+$YOffset+$YSize-$YSpace)-($Y+$YOffset+$YSpace))/2 + ($Y+$YOffset+$YSpace);
4742
+
4743
+                    $this->drawText($CenterX,$CenterY,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize));
4744
+                    }
4745
+                    else
4746
+                    {
4747
+                    if ( $Serie["Data"][$Key] >= 0 ) { $Align = TEXT_ALIGN_MIDDLELEFT; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_MIDDLERIGHT; $Offset = -$DisplayOffset; }
4748
+                    $this->drawText($X2+$Offset,$Y+$YOffset+$YSize/2,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align,"FontSize"=>$DisplaySize));
4749
+                    }
4750
+
4751
+                    $this->Shadow = $RestoreShadow;
4752
+                }
4753
+                }
4754
+                $Y = $Y + $YStep;
4755
+                $ID++;
4756
+            }
4757
+            }
4758
+            $CurrentSerie++;
4759
+        }
4760
+        }
4761
+    }
4762
+
4763
+    /* Draw a bar chart */
4764
+    function drawStackedBarChart($Format=NULL)
4765
+    {
4766
+        $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
4767
+        $DisplayOrientation = isset($Format["DisplayOrientation"]) ? $Format["DisplayOrientation"] : ORIENTATION_AUTO;
4768
+        $DisplayRound      = isset($Format["DisplayRound"]) ? $Format["DisplayRound"] : 0;
4769
+        $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
4770
+        $DisplayFont	= isset($Format["DisplayFont"]) ? $Format["DisplayFont"] : $this->FontName;
4771
+        $DisplaySize	= isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontSize;
4772
+        $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
4773
+        $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
4774
+        $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
4775
+        $Interleave	= isset($Format["Interleave"]) ? $Format["Interleave"] : .5;
4776
+        $Rounded		= isset($Format["Rounded"]) ? $Format["Rounded"] : FALSE;
4777
+        $RoundRadius	= isset($Format["RoundRadius"]) ? $Format["RoundRadius"] : 4;
4778
+        $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
4779
+        $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
4780
+        $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
4781
+        $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
4782
+        $Gradient		= isset($Format["Gradient"]) ? $Format["Gradient"] : FALSE;
4783
+        $GradientMode	= isset($Format["GradientMode"]) ? $Format["GradientMode"] : GRADIENT_SIMPLE;
4784
+        $GradientAlpha	= isset($Format["GradientAlpha"]) ? $Format["GradientAlpha"] : 20;
4785
+        $GradientStartR	= isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255;
4786
+        $GradientStartG	= isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255;
4787
+        $GradientStartB	= isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255;
4788
+        $GradientEndR	= isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 0;
4789
+        $GradientEndG	= isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 0;
4790
+        $GradientEndB	= isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 0;
4791
+        $InnerSurrounding	= isset($Format["InnerSurrounding"]) ? $Format["InnerSurrounding"] : NULL;
4792
+        $InnerBorderR	= isset($Format["InnerBorderR"]) ? $Format["InnerBorderR"] : -1;
4793
+        $InnerBorderG	= isset($Format["InnerBorderG"]) ? $Format["InnerBorderG"] : -1;
4794
+        $InnerBorderB	= isset($Format["InnerBorderB"]) ? $Format["InnerBorderB"] : -1;
4795
+        $RecordImageMap	= isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
4796
+        $FontFactor	= isset($Format["FontFactor"]) ? $Format["FontFactor"] : 8;
4797
+
4798
+        $this->LastChartLayout = CHART_LAST_LAYOUT_STACKED;
4799
+
4800
+        $Data = $this->DataSet->getData();
4801
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
4802
+
4803
+        $RestoreShadow = $this->Shadow;
4804
+
4805
+        $LastX = ""; $LastY = "";
4806
+        foreach($Data["Series"] as $SerieName => $Serie)
4807
+        {
4808
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
4809
+        {
4810
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
4811
+            if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = 255; $DisplayG = 255; $DisplayB = 255; }
4812
+            if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
4813
+            if ( $InnerSurrounding != NULL ) { $InnerBorderR = $R+$InnerSurrounding; $InnerBorderG = $G+$InnerSurrounding; $InnerBorderB = $B+$InnerSurrounding; }
4814
+            if ( $InnerBorderR == -1 ) { $InnerColor = NULL; } else { $InnerColor = array("R"=>$InnerBorderR,"G"=>$InnerBorderG,"B"=>$InnerBorderB); }
4661 4815
 
4662
-               $YZero = $this->scaleComputeY($Value,array("AxisID"=>$Serie["Axis"]));
4663
-               if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
4664
-               if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
4665
-               if ( $AroundZero ) { $X1 = $YZero; } else { $X1 = $this->GraphAreaX1+1; }
4666
-              }
4816
+            $AxisID	= $Serie["Axis"];
4817
+            $Mode		= $Data["Axis"][$AxisID]["Display"];
4818
+            $Format	= $Data["Axis"][$AxisID]["Format"];
4819
+            $Unit		= $Data["Axis"][$AxisID]["Unit"];
4667 4820
 
4668
-             if ( $OverrideColors != NULL )
4669
-              { if ( isset($OverrideColors[$ID]) ) { $Color = array("R"=>$OverrideColors[$ID]["R"],"G"=>$OverrideColors[$ID]["G"],"B"=>$OverrideColors[$ID]["B"],"Alpha"=>$OverrideColors[$ID]["Alpha"],"BorderR"=>$OverrideColors[$ID]["BorderR"],"BorderG"=>$OverrideColors[$ID]["BorderG"],"BorderB"=>$OverrideColors[$ID]["BorderB"]); } else { $Color = $this->getRandomColor(); } }
4821
+            if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
4670 4822
 
4671
-             if ( $X2 != VOID )
4672
-              {
4673
-               $BarWidth = $X2 - $X1;
4823
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]),TRUE);
4824
+            $YZero    = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
4674 4825
 
4675
-               if ( $Serie["Data"][$Key] == 0 )
4676
-                {
4677
-                 $this->drawLine($X1,$Y+$YOffset+$YSpace,$X1,$Y+$YOffset+$YSize-$YSpace,$Color);
4678
-                 if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1-1).",".floor($Y+$YOffset+$YSpace).",".floor($X1+1).",".floor($Y+$YOffset+$YSize-$YSpace),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4679
-                }
4680
-               else
4681
-                {
4682
-                 if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1).",".floor($Y+$YOffset+$YSpace).",".floor($X2).",".floor($Y+$YOffset+$YSize-$YSpace),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4826
+            $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
4683 4827
 
4684
-                 if ( $Rounded )
4685
-                  $this->drawRoundedFilledRectangle($X1+1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,$RoundRadius,$Color);
4686
-                 else
4687
-                  {
4688
-                   $this->drawFilledRectangle($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,$Color);
4828
+            $Color = array("TransCorner"=>TRUE,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB);
4689 4829
 
4690
-                   if ( $InnerColor != NULL ) { $this->drawRectangle(min($X1,$X2)+1,$Y+$YOffset+$YSpace+1,max($X1,$X2)-1,$Y+$YOffset+$YSize-$YSpace-1,$InnerColor); }
4830
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
4831
+            {
4832
+            if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
4833
+            if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
4691 4834
 
4692
-                   if ( $Gradient )
4693
-                    {
4694
-                     $this->Shadow  = FALSE;
4835
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
4836
+            $X     = $this->GraphAreaX1 + $XMargin;
4695 4837
 
4696
-                     if ( $GradientMode == GRADIENT_SIMPLE )
4697
-                      {
4698
-                       if ( $Serie["Data"][$Key] >= 0 )
4699
-                        $GradienColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4700
-                       else
4701
-                        $GradienColor = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
4838
+            $XSize   = ($XStep / (1+$Interleave) );
4839
+            $XOffset = -($XSize/2);
4702 4840
 
4703
-                       $this->drawGradientArea($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,DIRECTION_HORIZONTAL,$GradienColor);
4704
-                      }
4705
-                     elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
4706
-                      {
4707
-                       $GradienColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
4708
-                       $GradienColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4709
-                       $YSpan = floor($YSize / 3);
4710
-
4711
-                       $this->drawGradientArea($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSpan-$YSpace,DIRECTION_VERTICAL,$GradienColor1);
4712
-                       $this->drawGradientArea($X1,$Y+$YOffset+$YSpan,$X2,$Y+$YOffset+$YSize-$YSpace,DIRECTION_VERTICAL,$GradienColor2);
4713
-                      }
4714
-                     $this->Shadow = $RestoreShadow;
4715
-                    }
4716
-                  }
4841
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4842
+            foreach($PosArray as $Key => $Height)
4843
+            {
4844
+                if ( $Height != VOID && $Serie["Data"][$Key] != 0 )
4845
+                {
4846
+                if ( $Serie["Data"][$Key] > 0 ) { $Pos = "+"; } else { $Pos = "-"; }
4717 4847
 
4718
-                 if ( $Draw0Line )
4719
-                  {
4720
-                   $Line0Color = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20);
4848
+                if ( !isset($LastY[$Key] ) ) { $LastY[$Key] = ""; }
4849
+                if ( !isset($LastY[$Key][$Pos] ) ) { $LastY[$Key][$Pos] = $YZero; }
4721 4850
 
4722
-                   if ( abs($X1 - $X2) > 3 ) { $Line0Width = 3; } else { $Line0Width = 1; }
4723
-                   if ( $X2 - $X1 < 0 ) { $Line0Width = -$Line0Width; }
4851
+                $Y1 = $LastY[$Key][$Pos];
4852
+                $Y2 = $Y1 - $Height;
4724 4853
 
4725
-                   $this->drawFilledRectangle(floor($X1),$Y+$YOffset+$YSpace,floor($X1)+$Line0Width,$Y+$YOffset+$YSize-$YSpace,$Line0Color);
4726
-                   $this->drawLine(floor($X1),$Y+$YOffset+$YSpace,floor($X1),$Y+$YOffset+$YSize-$YSpace,$Line0Color);
4727
-                  }
4728
-                }
4854
+                if ( ($Rounded || $BorderR != -1) && ($Pos == "+" && $Y1 != $YZero) ) { $YSpaceUp = 1; } else { $YSpaceUp = 0; }
4855
+                if ( ($Rounded || $BorderR != -1) && ($Pos == "-" && $Y1 != $YZero) ) { $YSpaceDown = 1; } else { $YSpaceDown = 0; }
4729 4856
 
4730
-               if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) 
4731
-                {
4732
-                 if ( $DisplayShadow ) { $this->Shadow = TRUE; }
4733
-
4734
-                 $Caption   = $this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit);
4735
-                 $TxtPos    = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
4736
-                 $TxtWidth  = $TxtPos[1]["X"] - $TxtPos[0]["X"] + $TxtMargin;
4737
-
4738
-                 if ( $DisplayPos == LABEL_POS_INSIDE && abs($TxtWidth) < abs($BarWidth) )
4739
-                  {
4740
-                   $CenterX = ($X2-$X1)/2 + $X1;
4741
-                   $CenterY = (($Y+$YOffset+$YSize-$YSpace)-($Y+$YOffset+$YSpace))/2 + ($Y+$YOffset+$YSpace);
4742
-
4743
-                   $this->drawText($CenterX,$CenterY,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize));
4744
-                  }
4745
-                 else
4746
-                  {
4747
-                   if ( $Serie["Data"][$Key] >= 0 ) { $Align = TEXT_ALIGN_MIDDLELEFT; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_MIDDLERIGHT; $Offset = -$DisplayOffset; }
4748
-                   $this->drawText($X2+$Offset,$Y+$YOffset+$YSize/2,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align,"FontSize"=>$DisplaySize));
4749
-                  }
4750
-
4751
-                 $this->Shadow = $RestoreShadow;
4752
-                }
4753
-              }
4754
-             $Y = $Y + $YStep;
4755
-             $ID++;
4756
-            }
4757
-          }
4758
-         $CurrentSerie++;
4759
-        }
4760
-      }
4761
-    }
4857
+                if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset).",".floor($Y1-$YSpaceUp+$YSpaceDown).",".floor($X+$XOffset+$XSize).",".floor($Y2),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4762 4858
 
4763
-   /* Draw a bar chart */
4764
-   function drawStackedBarChart($Format=NULL)
4765
-    {
4766
-     $DisplayValues	= isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
4767
-     $DisplayOrientation = isset($Format["DisplayOrientation"]) ? $Format["DisplayOrientation"] : ORIENTATION_AUTO;
4768
-     $DisplayRound      = isset($Format["DisplayRound"]) ? $Format["DisplayRound"] : 0;
4769
-     $DisplayColor	= isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
4770
-     $DisplayFont	= isset($Format["DisplayFont"]) ? $Format["DisplayFont"] : $this->FontName;
4771
-     $DisplaySize	= isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontSize;
4772
-     $DisplayR		= isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
4773
-     $DisplayG		= isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
4774
-     $DisplayB		= isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
4775
-     $Interleave	= isset($Format["Interleave"]) ? $Format["Interleave"] : .5;
4776
-     $Rounded		= isset($Format["Rounded"]) ? $Format["Rounded"] : FALSE;
4777
-     $RoundRadius	= isset($Format["RoundRadius"]) ? $Format["RoundRadius"] : 4;
4778
-     $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
4779
-     $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
4780
-     $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
4781
-     $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
4782
-     $Gradient		= isset($Format["Gradient"]) ? $Format["Gradient"] : FALSE;
4783
-     $GradientMode	= isset($Format["GradientMode"]) ? $Format["GradientMode"] : GRADIENT_SIMPLE;
4784
-     $GradientAlpha	= isset($Format["GradientAlpha"]) ? $Format["GradientAlpha"] : 20;
4785
-     $GradientStartR	= isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255;
4786
-     $GradientStartG	= isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255;
4787
-     $GradientStartB	= isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255;
4788
-     $GradientEndR	= isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 0;
4789
-     $GradientEndG	= isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 0;
4790
-     $GradientEndB	= isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 0;
4791
-     $InnerSurrounding	= isset($Format["InnerSurrounding"]) ? $Format["InnerSurrounding"] : NULL;
4792
-     $InnerBorderR	= isset($Format["InnerBorderR"]) ? $Format["InnerBorderR"] : -1;
4793
-     $InnerBorderG	= isset($Format["InnerBorderG"]) ? $Format["InnerBorderG"] : -1;
4794
-     $InnerBorderB	= isset($Format["InnerBorderB"]) ? $Format["InnerBorderB"] : -1;
4795
-     $RecordImageMap	= isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
4796
-     $FontFactor	= isset($Format["FontFactor"]) ? $Format["FontFactor"] : 8;
4797
-
4798
-     $this->LastChartLayout = CHART_LAST_LAYOUT_STACKED;
4799
-
4800
-     $Data = $this->DataSet->getData();
4801
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
4802
-
4803
-     $RestoreShadow = $this->Shadow;
4804
-
4805
-     $LastX = ""; $LastY = "";
4806
-     foreach($Data["Series"] as $SerieName => $Serie)
4807
-      {
4808
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
4809
-        {
4810
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
4811
-         if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = 255; $DisplayG = 255; $DisplayB = 255; }
4812
-         if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
4813
-         if ( $InnerSurrounding != NULL ) { $InnerBorderR = $R+$InnerSurrounding; $InnerBorderG = $G+$InnerSurrounding; $InnerBorderB = $B+$InnerSurrounding; }
4814
-         if ( $InnerBorderR == -1 ) { $InnerColor = NULL; } else { $InnerColor = array("R"=>$InnerBorderR,"G"=>$InnerBorderG,"B"=>$InnerBorderB); }
4815
-
4816
-         $AxisID	= $Serie["Axis"];
4817
-         $Mode		= $Data["Axis"][$AxisID]["Display"];
4818
-         $Format	= $Data["Axis"][$AxisID]["Format"];
4819
-         $Unit		= $Data["Axis"][$AxisID]["Unit"];
4820
-
4821
-         if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
4822
-
4823
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]),TRUE);
4824
-         $YZero    = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
4825
-
4826
-         $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
4827
-
4828
-         $Color = array("TransCorner"=>TRUE,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB);
4829
-
4830
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
4831
-          {
4832
-           if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
4833
-           if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
4834
-
4835
-           if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
4836
-           $X     = $this->GraphAreaX1 + $XMargin;
4837
-
4838
-           $XSize   = ($XStep / (1+$Interleave) );
4839
-           $XOffset = -($XSize/2);
4840
-
4841
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4842
-           foreach($PosArray as $Key => $Height)
4843
-            {
4844
-             if ( $Height != VOID && $Serie["Data"][$Key] != 0 )
4845
-              {
4846
-               if ( $Serie["Data"][$Key] > 0 ) { $Pos = "+"; } else { $Pos = "-"; }
4847
-
4848
-               if ( !isset($LastY[$Key] ) ) { $LastY[$Key] = ""; }
4849
-               if ( !isset($LastY[$Key][$Pos] ) ) { $LastY[$Key][$Pos] = $YZero; }
4850
-
4851
-               $Y1 = $LastY[$Key][$Pos];
4852
-               $Y2 = $Y1 - $Height;
4853
-
4854
-               if ( ($Rounded || $BorderR != -1) && ($Pos == "+" && $Y1 != $YZero) ) { $YSpaceUp = 1; } else { $YSpaceUp = 0; }
4855
-               if ( ($Rounded || $BorderR != -1) && ($Pos == "-" && $Y1 != $YZero) ) { $YSpaceDown = 1; } else { $YSpaceDown = 0; }
4856
-
4857
-               if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset).",".floor($Y1-$YSpaceUp+$YSpaceDown).",".floor($X+$XOffset+$XSize).",".floor($Y2),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4858
-
4859
-               if ( $Rounded )
4859
+                if ( $Rounded )
4860 4860
                 $this->drawRoundedFilledRectangle($X+$XOffset,$Y1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2,$RoundRadius,$Color);
4861
-               else
4861
+                else
4862 4862
                 {
4863
-                 $this->drawFilledRectangle($X+$XOffset,$Y1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2,$Color);
4863
+                    $this->drawFilledRectangle($X+$XOffset,$Y1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2,$Color);
4864 4864
 
4865
-                 if ( $InnerColor != NULL ) { $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; $this->drawRectangle(min($X+$XOffset+1,$X+$XOffset+$XSize),min($Y1-$YSpaceUp+$YSpaceDown,$Y2)+1,max($X+$XOffset+1,$X+$XOffset+$XSize)-1,max($Y1-$YSpaceUp+$YSpaceDown,$Y2)-1,$InnerColor); $this->Shadow = $RestoreShadow;}
4865
+                    if ( $InnerColor != NULL ) { $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; $this->drawRectangle(min($X+$XOffset+1,$X+$XOffset+$XSize),min($Y1-$YSpaceUp+$YSpaceDown,$Y2)+1,max($X+$XOffset+1,$X+$XOffset+$XSize)-1,max($Y1-$YSpaceUp+$YSpaceDown,$Y2)-1,$InnerColor); $this->Shadow = $RestoreShadow;}
4866 4866
 
4867
-                 if ( $Gradient )
4868
-                  {
4869
-                   $this->Shadow  = FALSE;
4867
+                    if ( $Gradient )
4868
+                    {
4869
+                    $this->Shadow  = FALSE;
4870 4870
 
4871
-                   if ( $GradientMode == GRADIENT_SIMPLE )
4871
+                    if ( $GradientMode == GRADIENT_SIMPLE )
4872 4872
                     {
4873
-                     $GradientColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4874
-                     $this->drawGradientArea($X+$XOffset,$Y1-1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2+1,DIRECTION_VERTICAL,$GradientColor);
4873
+                        $GradientColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4874
+                        $this->drawGradientArea($X+$XOffset,$Y1-1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2+1,DIRECTION_VERTICAL,$GradientColor);
4875 4875
                     }
4876
-                   elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
4876
+                    elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
4877 4877
                     {
4878
-                     $GradientColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
4879
-                     $GradientColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4880
-                     $XSpan = floor($XSize / 3);
4878
+                        $GradientColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
4879
+                        $GradientColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4880
+                        $XSpan = floor($XSize / 3);
4881 4881
 
4882
-                     $this->drawGradientArea($X+$XOffset-.5,$Y1-.5-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSpan,$Y2+.5,DIRECTION_HORIZONTAL,$GradientColor1);
4883
-                     $this->drawGradientArea($X+$XSpan+$XOffset-.5,$Y1-.5-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2+.5,DIRECTION_HORIZONTAL,$GradientColor2);
4882
+                        $this->drawGradientArea($X+$XOffset-.5,$Y1-.5-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSpan,$Y2+.5,DIRECTION_HORIZONTAL,$GradientColor1);
4883
+                        $this->drawGradientArea($X+$XSpan+$XOffset-.5,$Y1-.5-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2+.5,DIRECTION_HORIZONTAL,$GradientColor2);
4884
+                    }
4885
+                    $this->Shadow = $RestoreShadow;
4884 4886
                     }
4885
-                   $this->Shadow = $RestoreShadow;
4886
-                  }
4887 4887
                 }
4888 4888
 
4889
-               if ( $DisplayValues )
4889
+                if ( $DisplayValues )
4890 4890
                 {
4891
-                 $BarHeight = abs($Y2-$Y1)-2;
4892
-                 $BarWidth  = $XSize+($XOffset/2)-$FontFactor;
4891
+                    $BarHeight = abs($Y2-$Y1)-2;
4892
+                    $BarWidth  = $XSize+($XOffset/2)-$FontFactor;
4893 4893
 
4894
-                 $Caption   = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
4895
-                 $TxtPos    = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
4896
-                 $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]);
4897
-                 $TxtWidth  = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]);
4894
+                    $Caption   = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
4895
+                    $TxtPos    = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
4896
+                    $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]);
4897
+                    $TxtWidth  = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]);
4898 4898
 
4899
-                 $XCenter = ( ($X+$XOffset+$XSize) - ($X+$XOffset) ) / 2 + $X+$XOffset;
4900
-                 $YCenter = ( ($Y2) - ($Y1-$YSpaceUp+$YSpaceDown) ) / 2 + $Y1-$YSpaceUp+$YSpaceDown;
4899
+                    $XCenter = ( ($X+$XOffset+$XSize) - ($X+$XOffset) ) / 2 + $X+$XOffset;
4900
+                    $YCenter = ( ($Y2) - ($Y1-$YSpaceUp+$YSpaceDown) ) / 2 + $Y1-$YSpaceUp+$YSpaceDown;
4901 4901
 
4902
-                 $Done = FALSE;
4903
-                 if ( $DisplayOrientation == ORIENTATION_HORIZONTAL || $DisplayOrientation == ORIENTATION_AUTO )
4904
-                  {
4905
-                   if ( $TxtHeight < $BarHeight && $TxtWidth < $BarWidth  )
4902
+                    $Done = FALSE;
4903
+                    if ( $DisplayOrientation == ORIENTATION_HORIZONTAL || $DisplayOrientation == ORIENTATION_AUTO )
4906 4904
                     {
4907
-                     $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
4908
-                     $Done = TRUE;
4905
+                    if ( $TxtHeight < $BarHeight && $TxtWidth < $BarWidth  )
4906
+                    {
4907
+                        $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
4908
+                        $Done = TRUE;
4909
+                    }
4909 4910
                     }
4910
-                  }
4911 4911
 
4912
-                 if ( $DisplayOrientation == ORIENTATION_VERTICAL || ( $DisplayOrientation == ORIENTATION_AUTO && !$Done) )
4913
-                  {
4914
-                   if ( $TxtHeight < $BarWidth && $TxtWidth < $BarHeight  )
4912
+                    if ( $DisplayOrientation == ORIENTATION_VERTICAL || ( $DisplayOrientation == ORIENTATION_AUTO && !$Done) )
4913
+                    {
4914
+                    if ( $TxtHeight < $BarWidth && $TxtWidth < $BarHeight  )
4915 4915
                     $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Angle"=>90,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
4916
-                  }
4916
+                    }
4917 4917
                 }
4918 4918
 
4919
-               $LastY[$Key][$Pos] = $Y2;
4920
-              }
4919
+                $LastY[$Key][$Pos] = $Y2;
4920
+                }
4921 4921
 
4922
-             $X = $X + $XStep;
4922
+                $X = $X + $XStep;
4923
+            }
4923 4924
             }
4924
-          }
4925
-         else
4926
-          {
4927
-           if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
4928
-           if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
4925
+            else
4926
+            {
4927
+            if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
4928
+            if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
4929 4929
 
4930
-           if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
4931
-           $Y     = $this->GraphAreaY1 + $XMargin;
4930
+            if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
4931
+            $Y     = $this->GraphAreaY1 + $XMargin;
4932 4932
 
4933
-           $YSize   = $YStep / (1+$Interleave);
4934
-           $YOffset = -($YSize/2);
4933
+            $YSize   = $YStep / (1+$Interleave);
4934
+            $YOffset = -($YSize/2);
4935 4935
 
4936
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4937
-           foreach($PosArray as $Key => $Width)
4936
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
4937
+            foreach($PosArray as $Key => $Width)
4938 4938
             {
4939
-             if ( $Width != VOID && $Serie["Data"][$Key] != 0 )
4940
-              {
4941
-               if ( $Serie["Data"][$Key] > 0 ) { $Pos = "+"; } else { $Pos = "-"; }
4939
+                if ( $Width != VOID && $Serie["Data"][$Key] != 0 )
4940
+                {
4941
+                if ( $Serie["Data"][$Key] > 0 ) { $Pos = "+"; } else { $Pos = "-"; }
4942 4942
 
4943
-               if ( !isset($LastX[$Key] ) ) { $LastX[$Key] = ""; }
4944
-               if ( !isset($LastX[$Key][$Pos] ) ) { $LastX[$Key][$Pos] = $YZero; }
4943
+                if ( !isset($LastX[$Key] ) ) { $LastX[$Key] = ""; }
4944
+                if ( !isset($LastX[$Key][$Pos] ) ) { $LastX[$Key][$Pos] = $YZero; }
4945 4945
 
4946
-               $X1 = $LastX[$Key][$Pos];
4947
-               $X2 = $X1 + $Width;
4946
+                $X1 = $LastX[$Key][$Pos];
4947
+                $X2 = $X1 + $Width;
4948 4948
 
4949
-               if ( ($Rounded || $BorderR != -1) && ($Pos == "+" && $X1 != $YZero) ) { $XSpaceLeft = 2; } else { $XSpaceLeft = 0; }
4950
-               if ( ($Rounded || $BorderR != -1) && ($Pos == "-" && $X1 != $YZero) ) { $XSpaceRight = 2; } else { $XSpaceRight = 0; }
4949
+                if ( ($Rounded || $BorderR != -1) && ($Pos == "+" && $X1 != $YZero) ) { $XSpaceLeft = 2; } else { $XSpaceLeft = 0; }
4950
+                if ( ($Rounded || $BorderR != -1) && ($Pos == "-" && $X1 != $YZero) ) { $XSpaceRight = 2; } else { $XSpaceRight = 0; }
4951 4951
 
4952
-               if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1+$XSpaceLeft).",".floor($Y+$YOffset).",".floor($X2-$XSpaceRight).",".floor($Y+$YOffset+$YSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4952
+                if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1+$XSpaceLeft).",".floor($Y+$YOffset).",".floor($X2-$XSpaceRight).",".floor($Y+$YOffset+$YSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
4953 4953
 
4954
-               if ( $Rounded )
4954
+                if ( $Rounded )
4955 4955
                 $this->drawRoundedFilledRectangle($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,$RoundRadius,$Color);
4956
-               else
4956
+                else
4957 4957
                 {
4958
-                 $this->drawFilledRectangle($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,$Color);
4958
+                    $this->drawFilledRectangle($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,$Color);
4959 4959
 
4960
-                 if ( $InnerColor != NULL ) { $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; $this->drawRectangle(min($X1+$XSpaceLeft,$X2-$XSpaceRight)+1,min($Y+$YOffset,$Y+$YOffset+$YSize)+1,max($X1+$XSpaceLeft,$X2-$XSpaceRight)-1,max($Y+$YOffset,$Y+$YOffset+$YSize)-1,$InnerColor); $this->Shadow = $RestoreShadow;}
4960
+                    if ( $InnerColor != NULL ) { $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; $this->drawRectangle(min($X1+$XSpaceLeft,$X2-$XSpaceRight)+1,min($Y+$YOffset,$Y+$YOffset+$YSize)+1,max($X1+$XSpaceLeft,$X2-$XSpaceRight)-1,max($Y+$YOffset,$Y+$YOffset+$YSize)-1,$InnerColor); $this->Shadow = $RestoreShadow;}
4961 4961
 
4962
-                 if ( $Gradient )
4963
-                  {
4964
-                   $this->Shadow  = FALSE;
4962
+                    if ( $Gradient )
4963
+                    {
4964
+                    $this->Shadow  = FALSE;
4965 4965
 
4966
-                   if ( $GradientMode == GRADIENT_SIMPLE )
4966
+                    if ( $GradientMode == GRADIENT_SIMPLE )
4967 4967
                     {
4968
-                     $GradientColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4969
-                     $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,DIRECTION_HORIZONTAL,$GradientColor);
4968
+                        $GradientColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4969
+                        $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,DIRECTION_HORIZONTAL,$GradientColor);
4970 4970
                     }
4971
-                   elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
4971
+                    elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
4972 4972
                     {
4973
-                     $GradientColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
4974
-                     $GradientColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4975
-                     $YSpan = floor($YSize / 3);
4973
+                        $GradientColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
4974
+                        $GradientColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
4975
+                        $YSpan = floor($YSize / 3);
4976 4976
 
4977
-                     $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSpan,DIRECTION_VERTICAL,$GradientColor1);
4978
-                     $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset+$YSpan,$X2-$XSpaceRight,$Y+$YOffset+$YSize,DIRECTION_VERTICAL,$GradientColor2);
4977
+                        $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSpan,DIRECTION_VERTICAL,$GradientColor1);
4978
+                        $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset+$YSpan,$X2-$XSpaceRight,$Y+$YOffset+$YSize,DIRECTION_VERTICAL,$GradientColor2);
4979
+                    }
4980
+                    $this->Shadow = $RestoreShadow;
4979 4981
                     }
4980
-                   $this->Shadow = $RestoreShadow;
4981
-                  }
4982 4982
                 }
4983 4983
 
4984
-               if ( $DisplayValues )
4984
+                if ( $DisplayValues )
4985 4985
                 {
4986
-                 $BarWidth = abs($X2-$X1)-$FontFactor;
4987
-                 $BarHeight = $YSize+($YOffset/2)-$FontFactor/2;
4988
-                 $Caption   = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
4989
-                 $TxtPos    = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
4990
-                 $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]);
4991
-                 $TxtWidth  = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]);
4992
-
4993
-                 $XCenter  = ( $X2 - $X1 ) / 2 + $X1;
4994
-                 $YCenter  = ( ($Y+$YOffset+$YSize) - ($Y+$YOffset) ) / 2 + $Y+$YOffset;
4995
-
4996
-                 $Done = FALSE;
4997
-                 if ( $DisplayOrientation == ORIENTATION_HORIZONTAL || $DisplayOrientation == ORIENTATION_AUTO )
4998
-                  {
4999
-                   if ( $TxtHeight < $BarHeight && $TxtWidth < $BarWidth  )
4986
+                    $BarWidth = abs($X2-$X1)-$FontFactor;
4987
+                    $BarHeight = $YSize+($YOffset/2)-$FontFactor/2;
4988
+                    $Caption   = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
4989
+                    $TxtPos    = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
4990
+                    $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]);
4991
+                    $TxtWidth  = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]);
4992
+
4993
+                    $XCenter  = ( $X2 - $X1 ) / 2 + $X1;
4994
+                    $YCenter  = ( ($Y+$YOffset+$YSize) - ($Y+$YOffset) ) / 2 + $Y+$YOffset;
4995
+
4996
+                    $Done = FALSE;
4997
+                    if ( $DisplayOrientation == ORIENTATION_HORIZONTAL || $DisplayOrientation == ORIENTATION_AUTO )
5000 4998
                     {
5001
-                     $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
5002
-                     $Done = TRUE;
4999
+                    if ( $TxtHeight < $BarHeight && $TxtWidth < $BarWidth  )
5000
+                    {
5001
+                        $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
5002
+                        $Done = TRUE;
5003
+                    }
5003 5004
                     }
5004
-                  }
5005 5005
 
5006
-                 if ( $DisplayOrientation == ORIENTATION_VERTICAL || ( $DisplayOrientation == ORIENTATION_AUTO && !$Done) )
5007
-                  {
5008
-                   if ( $TxtHeight < $BarWidth && $TxtWidth < $BarHeight  )
5006
+                    if ( $DisplayOrientation == ORIENTATION_VERTICAL || ( $DisplayOrientation == ORIENTATION_AUTO && !$Done) )
5007
+                    {
5008
+                    if ( $TxtHeight < $BarWidth && $TxtWidth < $BarHeight  )
5009 5009
                     $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Angle"=>90,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
5010
-                  }
5010
+                    }
5011 5011
                 }
5012 5012
 
5013
-               $LastX[$Key][$Pos] = $X2;
5014
-              }
5013
+                $LastX[$Key][$Pos] = $X2;
5014
+                }
5015 5015
 
5016
-             $Y = $Y + $YStep;
5016
+                $Y = $Y + $YStep;
5017
+            }
5017 5018
             }
5018
-          }
5019 5019
         }
5020
-      }
5020
+        }
5021 5021
     }
5022 5022
 
5023
-   /* Draw a stacked area chart */
5024
-   function drawStackedAreaChart($Format=NULL)
5023
+    /* Draw a stacked area chart */
5024
+    function drawStackedAreaChart($Format=NULL)
5025 5025
     {
5026
-     $DrawLine		= isset($Format["DrawLine"]) ? $Format["DrawLine"] : FALSE;
5027
-     $LineSurrounding	= isset($Format["LineSurrounding"]) ? $Format["LineSurrounding"] : NULL;
5028
-     $LineR		= isset($Format["LineR"]) ? $Format["LineR"] : VOID;
5029
-     $LineG		= isset($Format["LineG"]) ? $Format["LineG"] : VOID;
5030
-     $LineB		= isset($Format["LineB"]) ? $Format["LineB"] : VOID;
5031
-     $LineAlpha		= isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 100;
5032
-     $DrawPlot		= isset($Format["DrawPlot"]) ? $Format["DrawPlot"] : FALSE;
5033
-     $PlotRadius	= isset($Format["PlotRadius"]) ? $Format["PlotRadius"] : 2;
5034
-     $PlotBorder	= isset($Format["PlotBorder"]) ? $Format["PlotBorder"] : 1;
5035
-     $PlotBorderSurrounding = isset($Format["PlotBorderSurrounding"]) ? $Format["PlotBorderSurrounding"] : NULL;
5036
-     $PlotBorderR	= isset($Format["PlotBorderR"]) ? $Format["PlotBorderR"] : 0;
5037
-     $PlotBorderG	= isset($Format["PlotBorderG"]) ? $Format["PlotBorderG"] : 0;
5038
-     $PlotBorderB	= isset($Format["PlotBorderB"]) ? $Format["PlotBorderB"] : 0;
5039
-     $PlotBorderAlpha	= isset($Format["PlotBorderAlpha"]) ? $Format["PlotBorderAlpha"] : 50;
5040
-     $ForceTransparency	= isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : NULL;
5041
-
5042
-     $this->LastChartLayout = CHART_LAST_LAYOUT_STACKED;
5043
-
5044
-     $Data = $this->DataSet->getData();
5045
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
5046
-
5047
-     $RestoreShadow = $this->Shadow;
5048
-     $this->Shadow  = FALSE;
5049
-
5050
-     /* Build the offset data series */
5051
-     $OffsetData    = "";
5052
-     $OverallOffset = "";
5053
-     $SerieOrder    = "";
5054
-     foreach($Data["Series"] as $SerieName => $Serie)
5055
-      {
5056
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
5057
-        {
5058
-         $SerieOrder[] = $SerieName;
5059
-
5060
-         foreach($Serie["Data"] as $Key => $Value)
5061
-          {
5062
-           if ( $Value == VOID ) { $Value = 0; }
5063
-           if ($Value >= 0) { $Sign = "+"; } else { $Sign = "-"; }
5064
-           if ( !isset($OverallOffset[$Key]) || !isset($OverallOffset[$Key][$Sign]) ) { $OverallOffset[$Key][$Sign] = 0; }
5065
-
5066
-           if ( $Sign == "+" )
5026
+        $DrawLine		= isset($Format["DrawLine"]) ? $Format["DrawLine"] : FALSE;
5027
+        $LineSurrounding	= isset($Format["LineSurrounding"]) ? $Format["LineSurrounding"] : NULL;
5028
+        $LineR		= isset($Format["LineR"]) ? $Format["LineR"] : VOID;
5029
+        $LineG		= isset($Format["LineG"]) ? $Format["LineG"] : VOID;
5030
+        $LineB		= isset($Format["LineB"]) ? $Format["LineB"] : VOID;
5031
+        $LineAlpha		= isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 100;
5032
+        $DrawPlot		= isset($Format["DrawPlot"]) ? $Format["DrawPlot"] : FALSE;
5033
+        $PlotRadius	= isset($Format["PlotRadius"]) ? $Format["PlotRadius"] : 2;
5034
+        $PlotBorder	= isset($Format["PlotBorder"]) ? $Format["PlotBorder"] : 1;
5035
+        $PlotBorderSurrounding = isset($Format["PlotBorderSurrounding"]) ? $Format["PlotBorderSurrounding"] : NULL;
5036
+        $PlotBorderR	= isset($Format["PlotBorderR"]) ? $Format["PlotBorderR"] : 0;
5037
+        $PlotBorderG	= isset($Format["PlotBorderG"]) ? $Format["PlotBorderG"] : 0;
5038
+        $PlotBorderB	= isset($Format["PlotBorderB"]) ? $Format["PlotBorderB"] : 0;
5039
+        $PlotBorderAlpha	= isset($Format["PlotBorderAlpha"]) ? $Format["PlotBorderAlpha"] : 50;
5040
+        $ForceTransparency	= isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : NULL;
5041
+
5042
+        $this->LastChartLayout = CHART_LAST_LAYOUT_STACKED;
5043
+
5044
+        $Data = $this->DataSet->getData();
5045
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
5046
+
5047
+        $RestoreShadow = $this->Shadow;
5048
+        $this->Shadow  = FALSE;
5049
+
5050
+        /* Build the offset data series */
5051
+        $OffsetData    = "";
5052
+        $OverallOffset = "";
5053
+        $SerieOrder    = "";
5054
+        foreach($Data["Series"] as $SerieName => $Serie)
5055
+        {
5056
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
5057
+        {
5058
+            $SerieOrder[] = $SerieName;
5059
+
5060
+            foreach($Serie["Data"] as $Key => $Value)
5061
+            {
5062
+            if ( $Value == VOID ) { $Value = 0; }
5063
+            if ($Value >= 0) { $Sign = "+"; } else { $Sign = "-"; }
5064
+            if ( !isset($OverallOffset[$Key]) || !isset($OverallOffset[$Key][$Sign]) ) { $OverallOffset[$Key][$Sign] = 0; }
5065
+
5066
+            if ( $Sign == "+" )
5067 5067
             { $Data["Series"][$SerieName]["Data"][$Key] = $Value + $OverallOffset[$Key][$Sign]; }
5068
-           else
5068
+            else
5069 5069
             { $Data["Series"][$SerieName]["Data"][$Key] = $Value - $OverallOffset[$Key][$Sign]; }
5070 5070
 
5071
-           $OverallOffset[$Key][$Sign] = $OverallOffset[$Key][$Sign] + abs($Value);
5072
-          }
5071
+            $OverallOffset[$Key][$Sign] = $OverallOffset[$Key][$Sign] + abs($Value);
5072
+            }
5073 5073
         } 
5074
-      }
5075
-     $SerieOrder = array_reverse($SerieOrder);
5074
+        }
5075
+        $SerieOrder = array_reverse($SerieOrder);
5076 5076
 
5077
-     $LastX = ""; $LastY = "";
5078
-     foreach($SerieOrder as $Key => $SerieName)
5079
-      {
5080
-       $Serie = $Data["Series"][$SerieName];
5081
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
5077
+        $LastX = ""; $LastY = "";
5078
+        foreach($SerieOrder as $Key => $SerieName)
5082 5079
         {
5083
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
5084
-         if ( $ForceTransparency != NULL ) { $Alpha = $ForceTransparency; }
5080
+        $Serie = $Data["Series"][$SerieName];
5081
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
5082
+        {
5083
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
5084
+            if ( $ForceTransparency != NULL ) { $Alpha = $ForceTransparency; }
5085 5085
 
5086
-         $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
5086
+            $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
5087 5087
 
5088
-         if ( $LineSurrounding != NULL )
5089
-          $LineColor = array("R"=>$R+$LineSurrounding,"G"=>$G+$LineSurrounding,"B"=>$B+$LineSurrounding,"Alpha"=>$Alpha);
5090
-         elseif ( $LineR != VOID )
5091
-          $LineColor = array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha);
5092
-         else
5093
-          $LineColor = $Color;
5088
+            if ( $LineSurrounding != NULL )
5089
+            $LineColor = array("R"=>$R+$LineSurrounding,"G"=>$G+$LineSurrounding,"B"=>$B+$LineSurrounding,"Alpha"=>$Alpha);
5090
+            elseif ( $LineR != VOID )
5091
+            $LineColor = array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha);
5092
+            else
5093
+            $LineColor = $Color;
5094 5094
 
5095
-         if ( $PlotBorderSurrounding != NULL )
5096
-          $PlotBorderColor = array("R"=>$R+$PlotBorderSurrounding,"G"=>$G+$PlotBorderSurrounding,"B"=>$B+$PlotBorderSurrounding,"Alpha"=>$PlotBorderAlpha);
5097
-         else
5098
-          $PlotBorderColor = array("R"=>$PlotBorderR,"G"=>$PlotBorderG,"B"=>$PlotBorderB,"Alpha"=>$PlotBorderAlpha);
5095
+            if ( $PlotBorderSurrounding != NULL )
5096
+            $PlotBorderColor = array("R"=>$R+$PlotBorderSurrounding,"G"=>$G+$PlotBorderSurrounding,"B"=>$B+$PlotBorderSurrounding,"Alpha"=>$PlotBorderAlpha);
5097
+            else
5098
+            $PlotBorderColor = array("R"=>$PlotBorderR,"G"=>$PlotBorderG,"B"=>$PlotBorderB,"Alpha"=>$PlotBorderAlpha);
5099 5099
 
5100
-         $AxisID	= $Serie["Axis"];
5101
-         $Mode		= $Data["Axis"][$AxisID]["Display"];
5102
-         $Format	= $Data["Axis"][$AxisID]["Format"];
5103
-         $Unit		= $Data["Axis"][$AxisID]["Unit"];
5100
+            $AxisID	= $Serie["Axis"];
5101
+            $Mode		= $Data["Axis"][$AxisID]["Display"];
5102
+            $Format	= $Data["Axis"][$AxisID]["Format"];
5103
+            $Unit		= $Data["Axis"][$AxisID]["Unit"];
5104 5104
 
5105
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]),TRUE);
5106
-         $YZero    = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
5105
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]),TRUE);
5106
+            $YZero    = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
5107 5107
 
5108
-         $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
5108
+            $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
5109 5109
 
5110
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
5111
-          {
5112
-           if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
5113
-           if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
5110
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
5111
+            {
5112
+            if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
5113
+            if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
5114 5114
 
5115
-           if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
5116
-           $X = $this->GraphAreaX1 + $XMargin;
5115
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
5116
+            $X = $this->GraphAreaX1 + $XMargin;
5117 5117
 
5118
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
5118
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
5119 5119
 
5120
-           $Plots = ""; $Plots[] = $X; $Plots[] = $YZero;
5121
-           foreach($PosArray as $Key => $Height)
5120
+            $Plots = ""; $Plots[] = $X; $Plots[] = $YZero;
5121
+            foreach($PosArray as $Key => $Height)
5122 5122
             {
5123
-             if ( $Height != VOID ) { $Plots[] = $X; $Plots[] = $YZero-$Height; }
5124
-             $X = $X + $XStep;
5123
+                if ( $Height != VOID ) { $Plots[] = $X; $Plots[] = $YZero-$Height; }
5124
+                $X = $X + $XStep;
5125 5125
             }
5126
-           $Plots[] = $X-$XStep; $Plots[] = $YZero;
5126
+            $Plots[] = $X-$XStep; $Plots[] = $YZero;
5127 5127
 
5128
-           $this->drawPolygon($Plots,$Color);
5128
+            $this->drawPolygon($Plots,$Color);
5129 5129
 
5130
-           $this->Shadow = $RestoreShadow;
5131
-           if ( $DrawLine ) { for($i=2; $i<=count($Plots)-6; $i=$i+2) { $this->drawLine($Plots[$i],$Plots[$i+1],$Plots[$i+2],$Plots[$i+3],$LineColor); } }
5132
-           if ( $DrawPlot )
5130
+            $this->Shadow = $RestoreShadow;
5131
+            if ( $DrawLine ) { for($i=2; $i<=count($Plots)-6; $i=$i+2) { $this->drawLine($Plots[$i],$Plots[$i+1],$Plots[$i+2],$Plots[$i+3],$LineColor); } }
5132
+            if ( $DrawPlot )
5133 5133
             {
5134
-             for($i=2; $i<=count($Plots)-4; $i=$i+2)
5135
-              {
5136
-               if ( $PlotBorder != 0 )
5134
+                for($i=2; $i<=count($Plots)-4; $i=$i+2)
5135
+                {
5136
+                if ( $PlotBorder != 0 )
5137 5137
                 { $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius+$PlotBorder,$PlotBorderColor); }
5138 5138
 
5139
-               $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius,$Color);
5140
-              }
5139
+                $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius,$Color);
5140
+                }
5141
+            }
5142
+            $this->Shadow = FALSE;
5141 5143
             }
5142
-           $this->Shadow = FALSE;
5143
-          }
5144
-         elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
5145
-          {
5146
-           if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
5147
-           if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
5144
+            elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
5145
+            {
5146
+            if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
5147
+            if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
5148 5148
 
5149
-           if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
5150
-           $Y = $this->GraphAreaY1 + $XMargin;
5149
+            if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
5150
+            $Y = $this->GraphAreaY1 + $XMargin;
5151 5151
 
5152
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
5152
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
5153 5153
 
5154
-           $Plots = ""; $Plots[] = $YZero; $Plots[] = $Y;
5155
-           foreach($PosArray as $Key => $Height)
5154
+            $Plots = ""; $Plots[] = $YZero; $Plots[] = $Y;
5155
+            foreach($PosArray as $Key => $Height)
5156 5156
             {
5157
-             if ( $Height != VOID ) { $Plots[] = $YZero+$Height; $Plots[] = $Y; }
5158
-             $Y = $Y + $YStep;
5157
+                if ( $Height != VOID ) { $Plots[] = $YZero+$Height; $Plots[] = $Y; }
5158
+                $Y = $Y + $YStep;
5159 5159
             }
5160
-           $Plots[] = $YZero; $Plots[] = $Y-$YStep;
5160
+            $Plots[] = $YZero; $Plots[] = $Y-$YStep;
5161 5161
 
5162
-           $this->drawPolygon($Plots,$Color);
5162
+            $this->drawPolygon($Plots,$Color);
5163 5163
 
5164
-           $this->Shadow = $RestoreShadow;
5165
-           if ( $DrawLine ) { for($i=2; $i<=count($Plots)-6; $i=$i+2) { $this->drawLine($Plots[$i],$Plots[$i+1],$Plots[$i+2],$Plots[$i+3],$LineColor); } }
5166
-           if ( $DrawPlot )
5164
+            $this->Shadow = $RestoreShadow;
5165
+            if ( $DrawLine ) { for($i=2; $i<=count($Plots)-6; $i=$i+2) { $this->drawLine($Plots[$i],$Plots[$i+1],$Plots[$i+2],$Plots[$i+3],$LineColor); } }
5166
+            if ( $DrawPlot )
5167 5167
             {
5168
-             for($i=2; $i<=count($Plots)-4; $i=$i+2)
5169
-              {
5170
-               if ( $PlotBorder != 0 )
5168
+                for($i=2; $i<=count($Plots)-4; $i=$i+2)
5169
+                {
5170
+                if ( $PlotBorder != 0 )
5171 5171
                 { $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius+$PlotBorder,$PlotBorderColor); }
5172 5172
 
5173
-               $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius,$Color);
5174
-              }
5173
+                $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius,$Color);
5174
+                }
5175
+            }
5176
+            $this->Shadow = FALSE;
5175 5177
             }
5176
-           $this->Shadow = FALSE;
5177
-          }
5178 5178
         }
5179
-      }
5180
-     $this->Shadow = $RestoreShadow;
5179
+        }
5180
+        $this->Shadow = $RestoreShadow;
5181 5181
     }
5182 5182
 
5183
-   /* Returns a random color */
5184
-   function getRandomColor($Alpha=100)
5183
+    /* Returns a random color */
5184
+    function getRandomColor($Alpha=100)
5185 5185
     { return(array("R"=>rand(0,255),"G"=>rand(0,255),"B"=>rand(0,255),"Alpha"=>$Alpha)); }
5186 5186
  
5187
-   /* Validate a palette */
5188
-   function validatePalette($Colors,$Surrounding=NULL)
5187
+    /* Validate a palette */
5188
+    function validatePalette($Colors,$Surrounding=NULL)
5189 5189
     {
5190
-     $Result = "";
5190
+        $Result = "";
5191 5191
 
5192
-     if ( !is_array($Colors) ) { return($this->getRandomColor()); }
5192
+        if ( !is_array($Colors) ) { return($this->getRandomColor()); }
5193 5193
 
5194
-     foreach($Colors as $Key => $Values)
5195
-      {
5196
-       if ( isset($Values["R"]) ) { $Result[$Key]["R"] = $Values["R"]; } else { $Result[$Key]["R"] = rand(0,255); }
5197
-       if ( isset($Values["G"]) ) { $Result[$Key]["G"] = $Values["G"]; } else { $Result[$Key]["G"] = rand(0,255); }
5198
-       if ( isset($Values["B"]) ) { $Result[$Key]["B"] = $Values["B"]; } else { $Result[$Key]["B"] = rand(0,255); }
5199
-       if ( isset($Values["Alpha"]) ) { $Result[$Key]["Alpha"] = $Values["Alpha"]; } else { $Result[$Key]["Alpha"] = 100; }
5194
+        foreach($Colors as $Key => $Values)
5195
+        {
5196
+        if ( isset($Values["R"]) ) { $Result[$Key]["R"] = $Values["R"]; } else { $Result[$Key]["R"] = rand(0,255); }
5197
+        if ( isset($Values["G"]) ) { $Result[$Key]["G"] = $Values["G"]; } else { $Result[$Key]["G"] = rand(0,255); }
5198
+        if ( isset($Values["B"]) ) { $Result[$Key]["B"] = $Values["B"]; } else { $Result[$Key]["B"] = rand(0,255); }
5199
+        if ( isset($Values["Alpha"]) ) { $Result[$Key]["Alpha"] = $Values["Alpha"]; } else { $Result[$Key]["Alpha"] = 100; }
5200 5200
 
5201
-       if ( $Surrounding != NULL )
5201
+        if ( $Surrounding != NULL )
5202 5202
         {
5203
-         $Result[$Key]["BorderR"] = $Result[$Key]["R"] + $Surrounding;
5204
-         $Result[$Key]["BorderG"] = $Result[$Key]["G"] + $Surrounding;
5205
-         $Result[$Key]["BorderB"] = $Result[$Key]["B"] + $Surrounding;
5203
+            $Result[$Key]["BorderR"] = $Result[$Key]["R"] + $Surrounding;
5204
+            $Result[$Key]["BorderG"] = $Result[$Key]["G"] + $Surrounding;
5205
+            $Result[$Key]["BorderB"] = $Result[$Key]["B"] + $Surrounding;
5206 5206
         }
5207
-       else
5207
+        else
5208 5208
         {
5209
-         if ( isset($Values["BorderR"]) )     { $Result[$Key]["BorderR"] = $Values["BorderR"]; } else { $Result[$Key]["BorderR"] = $Result[$Key]["R"]; }
5210
-         if ( isset($Values["BorderG"]) )     { $Result[$Key]["BorderG"] = $Values["BorderG"]; } else { $Result[$Key]["BorderG"] = $Result[$Key]["G"]; }
5211
-         if ( isset($Values["BorderB"]) )     { $Result[$Key]["BorderB"] = $Values["BorderB"]; } else { $Result[$Key]["BorderB"] = $Result[$Key]["B"]; }
5212
-         if ( isset($Values["BorderAlpha"]) ) { $Result[$Key]["BorderAlpha"] = $Values["BorderAlpha"]; } else { $Result[$Key]["BorderAlpha"] = $Result[$Key]["Alpha"]; }
5209
+            if ( isset($Values["BorderR"]) )     { $Result[$Key]["BorderR"] = $Values["BorderR"]; } else { $Result[$Key]["BorderR"] = $Result[$Key]["R"]; }
5210
+            if ( isset($Values["BorderG"]) )     { $Result[$Key]["BorderG"] = $Values["BorderG"]; } else { $Result[$Key]["BorderG"] = $Result[$Key]["G"]; }
5211
+            if ( isset($Values["BorderB"]) )     { $Result[$Key]["BorderB"] = $Values["BorderB"]; } else { $Result[$Key]["BorderB"] = $Result[$Key]["B"]; }
5212
+            if ( isset($Values["BorderAlpha"]) ) { $Result[$Key]["BorderAlpha"] = $Values["BorderAlpha"]; } else { $Result[$Key]["BorderAlpha"] = $Result[$Key]["Alpha"]; }
5213
+        }
5213 5214
         }
5214
-      }
5215 5215
 
5216
-     return($Result);
5216
+        return($Result);
5217 5217
     }
5218 5218
 
5219
-   /* Draw the derivative chart associated to the data series */
5220
-   function drawDerivative($Format=NULL)
5219
+    /* Draw the derivative chart associated to the data series */
5220
+    function drawDerivative($Format=NULL)
5221 5221
     {
5222
-     $Offset		= isset($Format["Offset"]) ? $Format["Offset"] : 10;
5223
-     $SerieSpacing	= isset($Format["SerieSpacing"]) ? $Format["SerieSpacing"] : 3;
5224
-     $DerivativeHeight	= isset($Format["DerivativeHeight"]) ? $Format["DerivativeHeight"] : 4;
5225
-     $ShadedSlopeBox	= isset($Format["ShadedSlopeBox"]) ? $Format["ShadedSlopeBox"] : FALSE;
5226
-     $DrawBackground	= isset($Format["DrawBackground"]) ? $Format["DrawBackground"] : TRUE;
5227
-     $BackgroundR	= isset($Format["BackgroundR"]) ? $Format["BackgroundR"] : 255;
5228
-     $BackgroundG	= isset($Format["BackgroundG"]) ? $Format["BackgroundG"] : 255;
5229
-     $BackgroundB	= isset($Format["BackgroundB"]) ? $Format["BackgroundB"] : 255;
5230
-     $BackgroundAlpha	= isset($Format["BackgroundAlpha"]) ? $Format["BackgroundAlpha"] : 20;
5231
-     $DrawBorder	= isset($Format["DrawBorder"]) ? $Format["DrawBorder"] : TRUE;
5232
-     $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : 0;
5233
-     $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : 0;
5234
-     $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : 0;
5235
-     $BorderAlpha	= isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 100;
5236
-     $Caption		= isset($Format["Caption"]) ? $Format["Caption"] : TRUE;
5237
-     $CaptionHeight	= isset($Format["CaptionHeight"]) ? $Format["CaptionHeight"] : 10;
5238
-     $CaptionWidth	= isset($Format["CaptionWidth"]) ? $Format["CaptionWidth"] : 20;
5239
-     $CaptionMargin	= isset($Format["CaptionMargin"]) ? $Format["CaptionMargin"] : 4;
5240
-     $CaptionLine	= isset($Format["CaptionLine"]) ? $Format["CaptionLine"] : FALSE;
5241
-     $CaptionBox	= isset($Format["CaptionBox"]) ? $Format["CaptionBox"] : FALSE;
5242
-     $CaptionBorderR	= isset($Format["CaptionBorderR"]) ? $Format["CaptionBorderR"] : 0;
5243
-     $CaptionBorderG	= isset($Format["CaptionBorderG"]) ? $Format["CaptionBorderG"] : 0;
5244
-     $CaptionBorderB	= isset($Format["CaptionBorderB"]) ? $Format["CaptionBorderB"] : 0;
5245
-     $CaptionFillR	= isset($Format["CaptionFillR"]) ? $Format["CaptionFillR"] : 255;
5246
-     $CaptionFillG	= isset($Format["CaptionFillG"]) ? $Format["CaptionFillG"] : 255;
5247
-     $CaptionFillB	= isset($Format["CaptionFillB"]) ? $Format["CaptionFillB"] : 255;
5248
-     $CaptionFillAlpha	= isset($Format["CaptionFillAlpha"]) ? $Format["CaptionFillAlpha"] : 80;
5249
-     $PositiveSlopeStartR	= isset($Format["PositiveSlopeStartR"]) ? $Format["PositiveSlopeStartR"] : 184;
5250
-     $PositiveSlopeStartG	= isset($Format["PositiveSlopeStartG"]) ? $Format["PositiveSlopeStartG"] : 234;
5251
-     $PositiveSlopeStartB	= isset($Format["PositiveSlopeStartB"]) ? $Format["PositiveSlopeStartB"] : 88;
5252
-     $PositiveSlopeEndR		= isset($Format["PositiveSlopeStartR"]) ? $Format["PositiveSlopeStartR"] : 239;
5253
-     $PositiveSlopeEndG		= isset($Format["PositiveSlopeStartG"]) ? $Format["PositiveSlopeStartG"] : 31;
5254
-     $PositiveSlopeEndB		= isset($Format["PositiveSlopeStartB"]) ? $Format["PositiveSlopeStartB"] : 36;
5255
-     $NegativeSlopeStartR	= isset($Format["NegativeSlopeStartR"]) ? $Format["NegativeSlopeStartR"] : 184;
5256
-     $NegativeSlopeStartG	= isset($Format["NegativeSlopeStartG"]) ? $Format["NegativeSlopeStartG"] : 234;
5257
-     $NegativeSlopeStartB	= isset($Format["NegativeSlopeStartB"]) ? $Format["NegativeSlopeStartB"] : 88;
5258
-     $NegativeSlopeEndR		= isset($Format["NegativeSlopeStartR"]) ? $Format["NegativeSlopeStartR"] : 67;
5259
-     $NegativeSlopeEndG		= isset($Format["NegativeSlopeStartG"]) ? $Format["NegativeSlopeStartG"] : 124;
5260
-     $NegativeSlopeEndB		= isset($Format["NegativeSlopeStartB"]) ? $Format["NegativeSlopeStartB"] : 227;
5261
-
5262
-     $Data = $this->DataSet->getData();
5263
-
5264
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
5265
-
5266
-     if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
5267
-      $YPos = $this->DataSet->Data["GraphArea"]["Y2"] + $Offset;
5268
-     else
5269
-      $XPos = $this->DataSet->Data["GraphArea"]["X2"] + $Offset;
5270
-
5271
-     foreach($Data["Series"] as $SerieName => $Serie)
5272
-      {
5273
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
5274
-        {
5275
-         $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
5276
-
5277
-         $AxisID   = $Serie["Axis"];
5278
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
5279
-
5280
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
5281
-          {
5282
-           if ( $Caption )
5283
-            {
5284
-             if ( $CaptionLine ) 
5285
-              {
5286
-               $StartX = floor($this->GraphAreaX1-$CaptionWidth+$XMargin-$CaptionMargin);
5287
-               $EndX   = floor($this->GraphAreaX1-$CaptionMargin+$XMargin);
5288
-
5289
-               $CaptionSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight);
5290
-               if ( $CaptionBox ) { $this->drawFilledRectangle($StartX,$YPos,$EndX,$YPos+$CaptionHeight,array("R"=>$CaptionFillR,"G"=>$CaptionFillG,"B"=>$CaptionFillB,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB,"Alpha"=>$CaptionFillAlpha)); }
5291
-               $this->drawLine($StartX+2,$YPos+($CaptionHeight/2),$EndX-2,$YPos+($CaptionHeight/2),$CaptionSettings);
5292
-              }
5293
-             else
5294
-              $this->drawFilledRectangle($this->GraphAreaX1-$CaptionWidth+$XMargin-$CaptionMargin,$YPos,$this->GraphAreaX1-$CaptionMargin+$XMargin,$YPos+$CaptionHeight,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB));
5295
-            }
5296
-
5297
-           if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
5298
-           $X = $this->GraphAreaX1 + $XMargin;
5299
-
5300
-           $TopY    = $YPos + ($CaptionHeight/2) - ($DerivativeHeight/2);
5301
-           $BottomY = $YPos + ($CaptionHeight/2) + ($DerivativeHeight/2);
5302
-
5303
-           $StartX  = floor($this->GraphAreaX1+$XMargin);
5304
-           $EndX    = floor($this->GraphAreaX2-$XMargin);
5305
-
5306
-           if ( $DrawBackground ) { $this->drawFilledRectangle($StartX-1,$TopY-1,$EndX+1,$BottomY+1,array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha)); }
5307
-           if ( $DrawBorder ) { $this->drawRectangle($StartX-1,$TopY-1,$EndX+1,$BottomY+1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
5308
-
5309
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
5310
-
5311
-           $RestoreShadow = $this->Shadow;
5312
-           $this->Shadow  = FALSE;
5313
-
5314
-           /* Determine the Max slope index */
5315
-           $LastX = NULL; $LastY = NULL; $MinSlope = 0; $MaxSlope = 1;
5316
-           foreach($PosArray as $Key => $Y)
5317
-            {
5318
-             if ( $Y != VOID && $LastX != NULL )
5319
-              { $Slope = ($LastY - $Y); if ( $Slope > $MaxSlope ) { $MaxSlope = $Slope; } if ( $Slope < $MinSlope ) { $MinSlope = $Slope; } }
5320
-
5321
-             if ( $Y == VOID )
5322
-              { $LastX = NULL; $LastY = NULL; }
5323
-             else
5324
-              { $LastX = $X; $LastY = $Y; }
5325
-            }
5326
-
5327
-           $LastX = NULL; $LastY = NULL; $LastColor = NULL;
5328
-           foreach($PosArray as $Key => $Y)
5329
-            {
5330
-             if ( $Y != VOID && $LastY != NULL )
5331
-              {
5332
-               $Slope = ($LastY - $Y);
5333
-
5334
-               if ( $Slope >= 0 )
5222
+        $Offset		= isset($Format["Offset"]) ? $Format["Offset"] : 10;
5223
+        $SerieSpacing	= isset($Format["SerieSpacing"]) ? $Format["SerieSpacing"] : 3;
5224
+        $DerivativeHeight	= isset($Format["DerivativeHeight"]) ? $Format["DerivativeHeight"] : 4;
5225
+        $ShadedSlopeBox	= isset($Format["ShadedSlopeBox"]) ? $Format["ShadedSlopeBox"] : FALSE;
5226
+        $DrawBackground	= isset($Format["DrawBackground"]) ? $Format["DrawBackground"] : TRUE;
5227
+        $BackgroundR	= isset($Format["BackgroundR"]) ? $Format["BackgroundR"] : 255;
5228
+        $BackgroundG	= isset($Format["BackgroundG"]) ? $Format["BackgroundG"] : 255;
5229
+        $BackgroundB	= isset($Format["BackgroundB"]) ? $Format["BackgroundB"] : 255;
5230
+        $BackgroundAlpha	= isset($Format["BackgroundAlpha"]) ? $Format["BackgroundAlpha"] : 20;
5231
+        $DrawBorder	= isset($Format["DrawBorder"]) ? $Format["DrawBorder"] : TRUE;
5232
+        $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : 0;
5233
+        $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : 0;
5234
+        $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : 0;
5235
+        $BorderAlpha	= isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 100;
5236
+        $Caption		= isset($Format["Caption"]) ? $Format["Caption"] : TRUE;
5237
+        $CaptionHeight	= isset($Format["CaptionHeight"]) ? $Format["CaptionHeight"] : 10;
5238
+        $CaptionWidth	= isset($Format["CaptionWidth"]) ? $Format["CaptionWidth"] : 20;
5239
+        $CaptionMargin	= isset($Format["CaptionMargin"]) ? $Format["CaptionMargin"] : 4;
5240
+        $CaptionLine	= isset($Format["CaptionLine"]) ? $Format["CaptionLine"] : FALSE;
5241
+        $CaptionBox	= isset($Format["CaptionBox"]) ? $Format["CaptionBox"] : FALSE;
5242
+        $CaptionBorderR	= isset($Format["CaptionBorderR"]) ? $Format["CaptionBorderR"] : 0;
5243
+        $CaptionBorderG	= isset($Format["CaptionBorderG"]) ? $Format["CaptionBorderG"] : 0;
5244
+        $CaptionBorderB	= isset($Format["CaptionBorderB"]) ? $Format["CaptionBorderB"] : 0;
5245
+        $CaptionFillR	= isset($Format["CaptionFillR"]) ? $Format["CaptionFillR"] : 255;
5246
+        $CaptionFillG	= isset($Format["CaptionFillG"]) ? $Format["CaptionFillG"] : 255;
5247
+        $CaptionFillB	= isset($Format["CaptionFillB"]) ? $Format["CaptionFillB"] : 255;
5248
+        $CaptionFillAlpha	= isset($Format["CaptionFillAlpha"]) ? $Format["CaptionFillAlpha"] : 80;
5249
+        $PositiveSlopeStartR	= isset($Format["PositiveSlopeStartR"]) ? $Format["PositiveSlopeStartR"] : 184;
5250
+        $PositiveSlopeStartG	= isset($Format["PositiveSlopeStartG"]) ? $Format["PositiveSlopeStartG"] : 234;
5251
+        $PositiveSlopeStartB	= isset($Format["PositiveSlopeStartB"]) ? $Format["PositiveSlopeStartB"] : 88;
5252
+        $PositiveSlopeEndR		= isset($Format["PositiveSlopeStartR"]) ? $Format["PositiveSlopeStartR"] : 239;
5253
+        $PositiveSlopeEndG		= isset($Format["PositiveSlopeStartG"]) ? $Format["PositiveSlopeStartG"] : 31;
5254
+        $PositiveSlopeEndB		= isset($Format["PositiveSlopeStartB"]) ? $Format["PositiveSlopeStartB"] : 36;
5255
+        $NegativeSlopeStartR	= isset($Format["NegativeSlopeStartR"]) ? $Format["NegativeSlopeStartR"] : 184;
5256
+        $NegativeSlopeStartG	= isset($Format["NegativeSlopeStartG"]) ? $Format["NegativeSlopeStartG"] : 234;
5257
+        $NegativeSlopeStartB	= isset($Format["NegativeSlopeStartB"]) ? $Format["NegativeSlopeStartB"] : 88;
5258
+        $NegativeSlopeEndR		= isset($Format["NegativeSlopeStartR"]) ? $Format["NegativeSlopeStartR"] : 67;
5259
+        $NegativeSlopeEndG		= isset($Format["NegativeSlopeStartG"]) ? $Format["NegativeSlopeStartG"] : 124;
5260
+        $NegativeSlopeEndB		= isset($Format["NegativeSlopeStartB"]) ? $Format["NegativeSlopeStartB"] : 227;
5261
+
5262
+        $Data = $this->DataSet->getData();
5263
+
5264
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
5265
+
5266
+        if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
5267
+        $YPos = $this->DataSet->Data["GraphArea"]["Y2"] + $Offset;
5268
+        else
5269
+        $XPos = $this->DataSet->Data["GraphArea"]["X2"] + $Offset;
5270
+
5271
+        foreach($Data["Series"] as $SerieName => $Serie)
5272
+        {
5273
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
5274
+        {
5275
+            $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
5276
+
5277
+            $AxisID   = $Serie["Axis"];
5278
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
5279
+
5280
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
5281
+            {
5282
+            if ( $Caption )
5283
+            {
5284
+                if ( $CaptionLine ) 
5285
+                {
5286
+                $StartX = floor($this->GraphAreaX1-$CaptionWidth+$XMargin-$CaptionMargin);
5287
+                $EndX   = floor($this->GraphAreaX1-$CaptionMargin+$XMargin);
5288
+
5289
+                $CaptionSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight);
5290
+                if ( $CaptionBox ) { $this->drawFilledRectangle($StartX,$YPos,$EndX,$YPos+$CaptionHeight,array("R"=>$CaptionFillR,"G"=>$CaptionFillG,"B"=>$CaptionFillB,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB,"Alpha"=>$CaptionFillAlpha)); }
5291
+                $this->drawLine($StartX+2,$YPos+($CaptionHeight/2),$EndX-2,$YPos+($CaptionHeight/2),$CaptionSettings);
5292
+                }
5293
+                else
5294
+                $this->drawFilledRectangle($this->GraphAreaX1-$CaptionWidth+$XMargin-$CaptionMargin,$YPos,$this->GraphAreaX1-$CaptionMargin+$XMargin,$YPos+$CaptionHeight,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB));
5295
+            }
5296
+
5297
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
5298
+            $X = $this->GraphAreaX1 + $XMargin;
5299
+
5300
+            $TopY    = $YPos + ($CaptionHeight/2) - ($DerivativeHeight/2);
5301
+            $BottomY = $YPos + ($CaptionHeight/2) + ($DerivativeHeight/2);
5302
+
5303
+            $StartX  = floor($this->GraphAreaX1+$XMargin);
5304
+            $EndX    = floor($this->GraphAreaX2-$XMargin);
5305
+
5306
+            if ( $DrawBackground ) { $this->drawFilledRectangle($StartX-1,$TopY-1,$EndX+1,$BottomY+1,array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha)); }
5307
+            if ( $DrawBorder ) { $this->drawRectangle($StartX-1,$TopY-1,$EndX+1,$BottomY+1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
5308
+
5309
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
5310
+
5311
+            $RestoreShadow = $this->Shadow;
5312
+            $this->Shadow  = FALSE;
5313
+
5314
+            /* Determine the Max slope index */
5315
+            $LastX = NULL; $LastY = NULL; $MinSlope = 0; $MaxSlope = 1;
5316
+            foreach($PosArray as $Key => $Y)
5317
+            {
5318
+                if ( $Y != VOID && $LastX != NULL )
5319
+                { $Slope = ($LastY - $Y); if ( $Slope > $MaxSlope ) { $MaxSlope = $Slope; } if ( $Slope < $MinSlope ) { $MinSlope = $Slope; } }
5320
+
5321
+                if ( $Y == VOID )
5322
+                { $LastX = NULL; $LastY = NULL; }
5323
+                else
5324
+                { $LastX = $X; $LastY = $Y; }
5325
+            }
5326
+
5327
+            $LastX = NULL; $LastY = NULL; $LastColor = NULL;
5328
+            foreach($PosArray as $Key => $Y)
5329
+            {
5330
+                if ( $Y != VOID && $LastY != NULL )
5331
+                {
5332
+                $Slope = ($LastY - $Y);
5333
+
5334
+                if ( $Slope >= 0 )
5335 5335
                 {
5336
-                 $SlopeIndex = (100 / $MaxSlope) * $Slope;
5337
-                 $R = (($PositiveSlopeEndR - $PositiveSlopeStartR)/100)*$SlopeIndex+$PositiveSlopeStartR;
5338
-                 $G = (($PositiveSlopeEndG - $PositiveSlopeStartG)/100)*$SlopeIndex+$PositiveSlopeStartG;
5339
-                 $B = (($PositiveSlopeEndB - $PositiveSlopeStartB)/100)*$SlopeIndex+$PositiveSlopeStartB;
5336
+                    $SlopeIndex = (100 / $MaxSlope) * $Slope;
5337
+                    $R = (($PositiveSlopeEndR - $PositiveSlopeStartR)/100)*$SlopeIndex+$PositiveSlopeStartR;
5338
+                    $G = (($PositiveSlopeEndG - $PositiveSlopeStartG)/100)*$SlopeIndex+$PositiveSlopeStartG;
5339
+                    $B = (($PositiveSlopeEndB - $PositiveSlopeStartB)/100)*$SlopeIndex+$PositiveSlopeStartB;
5340 5340
                 }
5341
-               elseif ( $Slope < 0 )
5341
+                elseif ( $Slope < 0 )
5342 5342
                 {
5343
-                 $SlopeIndex = (100 / abs($MinSlope)) * abs($Slope);
5344
-                 $R = (($NegativeSlopeEndR - $NegativeSlopeStartR)/100)*$SlopeIndex+$NegativeSlopeStartR;
5345
-                 $G = (($NegativeSlopeEndG - $NegativeSlopeStartG)/100)*$SlopeIndex+$NegativeSlopeStartG;
5346
-                 $B = (($NegativeSlopeEndB - $NegativeSlopeStartB)/100)*$SlopeIndex+$NegativeSlopeStartB;
5343
+                    $SlopeIndex = (100 / abs($MinSlope)) * abs($Slope);
5344
+                    $R = (($NegativeSlopeEndR - $NegativeSlopeStartR)/100)*$SlopeIndex+$NegativeSlopeStartR;
5345
+                    $G = (($NegativeSlopeEndG - $NegativeSlopeStartG)/100)*$SlopeIndex+$NegativeSlopeStartG;
5346
+                    $B = (($NegativeSlopeEndB - $NegativeSlopeStartB)/100)*$SlopeIndex+$NegativeSlopeStartB;
5347 5347
                 }
5348 5348
 
5349
-               $Color = array("R"=>$R,"G"=>$G,"B"=>$B);
5349
+                $Color = array("R"=>$R,"G"=>$G,"B"=>$B);
5350 5350
 
5351
-               if ( $ShadedSlopeBox && $LastColor != NULL ) // && $Slope != 0
5351
+                if ( $ShadedSlopeBox && $LastColor != NULL ) // && $Slope != 0
5352 5352
                 {
5353
-                 $GradientSettings = array("StartR"=>$LastColor["R"],"StartG"=>$LastColor["G"],"StartB"=>$LastColor["B"],"EndR"=>$R,"EndG"=>$G,"EndB"=>$B);
5354
-                 $this->drawGradientArea($LastX,$TopY,$X,$BottomY,DIRECTION_HORIZONTAL,$GradientSettings);
5353
+                    $GradientSettings = array("StartR"=>$LastColor["R"],"StartG"=>$LastColor["G"],"StartB"=>$LastColor["B"],"EndR"=>$R,"EndG"=>$G,"EndB"=>$B);
5354
+                    $this->drawGradientArea($LastX,$TopY,$X,$BottomY,DIRECTION_HORIZONTAL,$GradientSettings);
5355 5355
                 }
5356
-               elseif ( !$ShadedSlopeBox || $LastColor == NULL ) // || $Slope == 0
5356
+                elseif ( !$ShadedSlopeBox || $LastColor == NULL ) // || $Slope == 0
5357 5357
                 $this->drawFilledRectangle(floor($LastX),$TopY,floor($X),$BottomY,$Color);
5358 5358
 
5359
-               $LastColor = $Color;
5360
-              }
5359
+                $LastColor = $Color;
5360
+                }
5361 5361
 
5362
-             if ( $Y == VOID )
5363
-              { $LastY = NULL; }
5364
-             else
5365
-              { $LastX = $X; $LastY = $Y; }
5362
+                if ( $Y == VOID )
5363
+                { $LastY = NULL; }
5364
+                else
5365
+                { $LastX = $X; $LastY = $Y; }
5366 5366
 
5367
-             $X = $X + $XStep;
5367
+                $X = $X + $XStep;
5368 5368
             }
5369 5369
 
5370
-           $YPos = $YPos + $CaptionHeight + $SerieSpacing;
5371
-          }
5372
-         else
5373
-          {
5374
-           if ( $Caption )
5370
+            $YPos = $YPos + $CaptionHeight + $SerieSpacing;
5371
+            }
5372
+            else
5373
+            {
5374
+            if ( $Caption )
5375 5375
             {
5376
-             $StartY = floor($this->GraphAreaY1-$CaptionWidth+$XMargin-$CaptionMargin);
5377
-             $EndY   = floor($this->GraphAreaY1-$CaptionMargin+$XMargin);
5378
-             if ( $CaptionLine ) 
5379
-              {
5380
-               $CaptionSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight);
5381
-               if ( $CaptionBox ) { $this->drawFilledRectangle($XPos,$StartY,$XPos+$CaptionHeight,$EndY,array("R"=>$CaptionFillR,"G"=>$CaptionFillG,"B"=>$CaptionFillB,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB,"Alpha"=>$CaptionFillAlpha)); }
5382
-               $this->drawLine($XPos+($CaptionHeight/2),$StartY+2,$XPos+($CaptionHeight/2),$EndY-2,$CaptionSettings);
5383
-              }
5384
-             else
5385
-              $this->drawFilledRectangle($XPos,$StartY,$XPos+$CaptionHeight,$EndY,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB));
5376
+                $StartY = floor($this->GraphAreaY1-$CaptionWidth+$XMargin-$CaptionMargin);
5377
+                $EndY   = floor($this->GraphAreaY1-$CaptionMargin+$XMargin);
5378
+                if ( $CaptionLine ) 
5379
+                {
5380
+                $CaptionSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight);
5381
+                if ( $CaptionBox ) { $this->drawFilledRectangle($XPos,$StartY,$XPos+$CaptionHeight,$EndY,array("R"=>$CaptionFillR,"G"=>$CaptionFillG,"B"=>$CaptionFillB,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB,"Alpha"=>$CaptionFillAlpha)); }
5382
+                $this->drawLine($XPos+($CaptionHeight/2),$StartY+2,$XPos+($CaptionHeight/2),$EndY-2,$CaptionSettings);
5383
+                }
5384
+                else
5385
+                $this->drawFilledRectangle($XPos,$StartY,$XPos+$CaptionHeight,$EndY,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB));
5386 5386
             }
5387 5387
 
5388 5388
 
5389
-           if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
5390
-           $Y = $this->GraphAreaY1 + $XMargin;
5389
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
5390
+            $Y = $this->GraphAreaY1 + $XMargin;
5391 5391
 
5392
-           $TopX    = $XPos + ($CaptionHeight/2) - ($DerivativeHeight/2);
5393
-           $BottomX = $XPos + ($CaptionHeight/2) + ($DerivativeHeight/2);
5392
+            $TopX    = $XPos + ($CaptionHeight/2) - ($DerivativeHeight/2);
5393
+            $BottomX = $XPos + ($CaptionHeight/2) + ($DerivativeHeight/2);
5394 5394
 
5395
-           $StartY  = floor($this->GraphAreaY1+$XMargin);
5396
-           $EndY    = floor($this->GraphAreaY2-$XMargin);
5395
+            $StartY  = floor($this->GraphAreaY1+$XMargin);
5396
+            $EndY    = floor($this->GraphAreaY2-$XMargin);
5397 5397
 
5398
-           if ( $DrawBackground ) { $this->drawFilledRectangle($TopX-1,$StartY-1,$BottomX+1,$EndY+1,array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha)); }
5399
-           if ( $DrawBorder ) { $this->drawRectangle($TopX-1,$StartY-1,$BottomX+1,$EndY+1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
5398
+            if ( $DrawBackground ) { $this->drawFilledRectangle($TopX-1,$StartY-1,$BottomX+1,$EndY+1,array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha)); }
5399
+            if ( $DrawBorder ) { $this->drawRectangle($TopX-1,$StartY-1,$BottomX+1,$EndY+1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
5400 5400
 
5401
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
5401
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
5402 5402
 
5403
-           $RestoreShadow = $this->Shadow;
5404
-           $this->Shadow  = FALSE;
5403
+            $RestoreShadow = $this->Shadow;
5404
+            $this->Shadow  = FALSE;
5405 5405
 
5406
-           /* Determine the Max slope index */
5407
-           $LastX = NULL; $LastY = NULL; $MinSlope = 0; $MaxSlope = 1;
5408
-           foreach($PosArray as $Key => $X)
5406
+            /* Determine the Max slope index */
5407
+            $LastX = NULL; $LastY = NULL; $MinSlope = 0; $MaxSlope = 1;
5408
+            foreach($PosArray as $Key => $X)
5409 5409
             {
5410
-             if ( $X != VOID && $LastX != NULL )
5411
-              { $Slope = ($X - $LastX); if ( $Slope > $MaxSlope ) { $MaxSlope = $Slope; } if ( $Slope < $MinSlope ) { $MinSlope = $Slope; } }
5410
+                if ( $X != VOID && $LastX != NULL )
5411
+                { $Slope = ($X - $LastX); if ( $Slope > $MaxSlope ) { $MaxSlope = $Slope; } if ( $Slope < $MinSlope ) { $MinSlope = $Slope; } }
5412 5412
 
5413
-             if ( $X == VOID )
5414
-              { $LastX = NULL; }
5415
-             else
5416
-              { $LastX = $X; }
5413
+                if ( $X == VOID )
5414
+                { $LastX = NULL; }
5415
+                else
5416
+                { $LastX = $X; }
5417 5417
             }
5418 5418
 
5419
-           $LastX = NULL; $LastY = NULL; $LastColor = NULL;
5420
-           foreach($PosArray as $Key => $X)
5419
+            $LastX = NULL; $LastY = NULL; $LastColor = NULL;
5420
+            foreach($PosArray as $Key => $X)
5421 5421
             {
5422
-             if ( $X != VOID && $LastX != NULL )
5423
-              {
5424
-               $Slope = ($X - $LastX);
5422
+                if ( $X != VOID && $LastX != NULL )
5423
+                {
5424
+                $Slope = ($X - $LastX);
5425 5425
 
5426
-               if ( $Slope >= 0 )
5426
+                if ( $Slope >= 0 )
5427 5427
                 {
5428
-                 $SlopeIndex = (100 / $MaxSlope) * $Slope;
5429
-                 $R = (($PositiveSlopeEndR - $PositiveSlopeStartR)/100)*$SlopeIndex+$PositiveSlopeStartR;
5430
-                 $G = (($PositiveSlopeEndG - $PositiveSlopeStartG)/100)*$SlopeIndex+$PositiveSlopeStartG;
5431
-                 $B = (($PositiveSlopeEndB - $PositiveSlopeStartB)/100)*$SlopeIndex+$PositiveSlopeStartB;
5428
+                    $SlopeIndex = (100 / $MaxSlope) * $Slope;
5429
+                    $R = (($PositiveSlopeEndR - $PositiveSlopeStartR)/100)*$SlopeIndex+$PositiveSlopeStartR;
5430
+                    $G = (($PositiveSlopeEndG - $PositiveSlopeStartG)/100)*$SlopeIndex+$PositiveSlopeStartG;
5431
+                    $B = (($PositiveSlopeEndB - $PositiveSlopeStartB)/100)*$SlopeIndex+$PositiveSlopeStartB;
5432 5432
                 }
5433
-               elseif ( $Slope < 0 )
5433
+                elseif ( $Slope < 0 )
5434 5434
                 {
5435
-                 $SlopeIndex = (100 / abs($MinSlope)) * abs($Slope);
5436
-                 $R = (($NegativeSlopeEndR - $NegativeSlopeStartR)/100)*$SlopeIndex+$NegativeSlopeStartR;
5437
-                 $G = (($NegativeSlopeEndG - $NegativeSlopeStartG)/100)*$SlopeIndex+$NegativeSlopeStartG;
5438
-                 $B = (($NegativeSlopeEndB - $NegativeSlopeStartB)/100)*$SlopeIndex+$NegativeSlopeStartB;
5435
+                    $SlopeIndex = (100 / abs($MinSlope)) * abs($Slope);
5436
+                    $R = (($NegativeSlopeEndR - $NegativeSlopeStartR)/100)*$SlopeIndex+$NegativeSlopeStartR;
5437
+                    $G = (($NegativeSlopeEndG - $NegativeSlopeStartG)/100)*$SlopeIndex+$NegativeSlopeStartG;
5438
+                    $B = (($NegativeSlopeEndB - $NegativeSlopeStartB)/100)*$SlopeIndex+$NegativeSlopeStartB;
5439 5439
                 }
5440 5440
 
5441
-               $Color = array("R"=>$R,"G"=>$G,"B"=>$B);
5441
+                $Color = array("R"=>$R,"G"=>$G,"B"=>$B);
5442 5442
 
5443
-               if ( $ShadedSlopeBox && $LastColor != NULL )
5443
+                if ( $ShadedSlopeBox && $LastColor != NULL )
5444 5444
                 {
5445
-                 $GradientSettings = array("StartR"=>$LastColor["R"],"StartG"=>$LastColor["G"],"StartB"=>$LastColor["B"],"EndR"=>$R,"EndG"=>$G,"EndB"=>$B);
5445
+                    $GradientSettings = array("StartR"=>$LastColor["R"],"StartG"=>$LastColor["G"],"StartB"=>$LastColor["B"],"EndR"=>$R,"EndG"=>$G,"EndB"=>$B);
5446 5446
 
5447
-                 $this->drawGradientArea($TopX,$LastY,$BottomX,$Y,DIRECTION_VERTICAL,$GradientSettings);
5447
+                    $this->drawGradientArea($TopX,$LastY,$BottomX,$Y,DIRECTION_VERTICAL,$GradientSettings);
5448 5448
                 }
5449
-               elseif ( !$ShadedSlopeBox || $LastColor == NULL ) 
5449
+                elseif ( !$ShadedSlopeBox || $LastColor == NULL ) 
5450 5450
                 $this->drawFilledRectangle($TopX,floor($LastY),$BottomX,floor($Y),$Color);
5451 5451
 
5452
-               $LastColor = $Color;
5453
-              }
5452
+                $LastColor = $Color;
5453
+                }
5454 5454
 
5455
-             if ( $X == VOID )
5456
-              { $LastX = NULL; }
5457
-             else
5458
-              { $LastX = $X; $LastY = $Y; }
5455
+                if ( $X == VOID )
5456
+                { $LastX = NULL; }
5457
+                else
5458
+                { $LastX = $X; $LastY = $Y; }
5459 5459
 
5460
-             $Y = $Y + $XStep;
5460
+                $Y = $Y + $XStep;
5461 5461
             }
5462 5462
 
5463
-           $XPos = $XPos + $CaptionHeight + $SerieSpacing;
5464
-          }
5463
+            $XPos = $XPos + $CaptionHeight + $SerieSpacing;
5464
+            }
5465 5465
 
5466
-         $this->Shadow = $RestoreShadow;
5466
+            $this->Shadow = $RestoreShadow;
5467
+        }
5467 5468
         }
5468
-      }
5469 5469
     }
5470 5470
 
5471
-   /* Draw the line of best fit */
5472
-   function drawBestFit($Format="")
5471
+    /* Draw the line of best fit */
5472
+    function drawBestFit($Format="")
5473 5473
     {
5474
-     $OverrideTicks	= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
5475
-     $OverrideR		= isset($Format["R"]) ? $Format["R"] : VOID;
5476
-     $OverrideG		= isset($Format["G"]) ? $Format["G"] : VOID;
5477
-     $OverrideB		= isset($Format["B"]) ? $Format["B"] : VOID;
5478
-     $OverrideAlpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : VOID;
5479
-
5480
-     $Data = $this->DataSet->getData();
5481
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
5482
-
5483
-     foreach($Data["Series"] as $SerieName => $Serie)
5484
-      {
5485
-       if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
5486
-        {
5487
-         if ( $OverrideR != VOID && $OverrideG != VOID && $OverrideB != VOID ) { $R = $OverrideR; $G = $OverrideG; $B = $OverrideB; } else { $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; }
5488
-         if ( $OverrideTicks == NULL ) { $Ticks = $Serie["Ticks"]; } else { $Ticks = $OverrideTicks; }
5489
-         if ( $OverrideAlpha == VOID ) { $Alpha = $Serie["Color"]["Alpha"]; } else { $Alpha = $OverrideAlpha; }
5490
-
5491
-         $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks);
5492
-
5493
-         $AxisID   = $Serie["Axis"];
5494
-         $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
5495
-
5496
-         if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
5497
-          {
5498
-           if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
5499
-           $X = $this->GraphAreaX1 + $XMargin;
5500
-
5501
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
5502
-           $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0;
5503
-           foreach($PosArray as $Key => $Y)
5504
-            {
5505
-             if ( $Y != VOID )
5506
-              {
5507
-               $Sxy = $Sxy + $X*$Y;
5508
-               $Sx  = $Sx + $X;
5509
-               $Sy  = $Sy + $Y;
5510
-               $Sxx = $Sxx + $X*$X;
5511
-              }
5512
-
5513
-             $X = $X + $XStep;
5514
-            }
5515
-           $n = count($this->DataSet->stripVOID($PosArray)); //$n = count($PosArray);
5516
-           $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx));
5517
-           $B = (($Sy)-($M*$Sx))/($n);
5518
-
5519
-           $X1 = $this->GraphAreaX1 + $XMargin;
5520
-           $Y1 = $M * $X1 + $B;
5521
-           $X2 = $this->GraphAreaX2 - $XMargin;
5522
-           $Y2 = $M * $X2 + $B;
5523
-
5524
-           if ( $Y1 < $this->GraphAreaY1 ) { $X1 = $X1 + ($this->GraphAreaY1-$Y1); $Y1 = $this->GraphAreaY1; }
5525
-           if ( $Y1 > $this->GraphAreaY2 ) { $X1 = $X1 + ($Y1-$this->GraphAreaY2); $Y1 = $this->GraphAreaY2; }
5526
-           if ( $Y2 < $this->GraphAreaY1 ) { $X2 = $X2 - ($this->GraphAreaY1-$Y2); $Y2 = $this->GraphAreaY1; }
5527
-           if ( $Y2 > $this->GraphAreaY2 ) { $X2 = $X2 - ($Y2-$this->GraphAreaY2); $Y2 = $this->GraphAreaY2; }
5528
-
5529
-           $this->drawLine($X1,$Y1,$X2,$Y2,$Color);
5530
-          }
5531
-         else
5532
-          {
5533
-           if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
5534
-           $Y = $this->GraphAreaY1 + $XMargin;
5535
-
5536
-           if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
5537
-           $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0;
5538
-           foreach($PosArray as $Key => $X)
5539
-            {
5540
-             if ( $X != VOID )
5541
-              {
5542
-               $Sxy = $Sxy + $X*$Y;
5543
-               $Sx  = $Sx + $Y;
5544
-               $Sy  = $Sy + $X;
5545
-               $Sxx = $Sxx + $Y*$Y;
5546
-              }
5547
-
5548
-             $Y = $Y + $YStep;
5549
-            }
5550
-           $n = count($this->DataSet->stripVOID($PosArray)); //$n = count($PosArray);
5551
-           $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx));
5552
-           $B = (($Sy)-($M*$Sx))/($n);
5553
-
5554
-           $Y1 = $this->GraphAreaY1 + $XMargin;
5555
-           $X1 = $M * $Y1 + $B;
5556
-           $Y2 = $this->GraphAreaY2 - $XMargin;
5557
-           $X2 = $M * $Y2 + $B;
5558
-
5559
-           if ( $X1 < $this->GraphAreaX1 ) { $Y1 = $Y1 + ($this->GraphAreaX1-$X1); $X1 = $this->GraphAreaX1; }
5560
-           if ( $X1 > $this->GraphAreaX2 ) { $Y1 = $Y1 + ($X1-$this->GraphAreaX2); $X1 = $this->GraphAreaX2; }
5561
-           if ( $X2 < $this->GraphAreaX1 ) { $Y2 = $Y2 - ($this->GraphAreaY1-$X2); $X2 = $this->GraphAreaX1; }
5562
-           if ( $X2 > $this->GraphAreaX2 ) { $Y2 = $Y2 - ($X2-$this->GraphAreaX2); $X2 = $this->GraphAreaX2; }
5563
-
5564
-           $this->drawLine($X1,$Y1,$X2,$Y2,$Color);
5565
-          }
5566
-        }
5567
-      }
5474
+        $OverrideTicks	= isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
5475
+        $OverrideR		= isset($Format["R"]) ? $Format["R"] : VOID;
5476
+        $OverrideG		= isset($Format["G"]) ? $Format["G"] : VOID;
5477
+        $OverrideB		= isset($Format["B"]) ? $Format["B"] : VOID;
5478
+        $OverrideAlpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : VOID;
5479
+
5480
+        $Data = $this->DataSet->getData();
5481
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
5482
+
5483
+        foreach($Data["Series"] as $SerieName => $Serie)
5484
+        {
5485
+        if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
5486
+        {
5487
+            if ( $OverrideR != VOID && $OverrideG != VOID && $OverrideB != VOID ) { $R = $OverrideR; $G = $OverrideG; $B = $OverrideB; } else { $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; }
5488
+            if ( $OverrideTicks == NULL ) { $Ticks = $Serie["Ticks"]; } else { $Ticks = $OverrideTicks; }
5489
+            if ( $OverrideAlpha == VOID ) { $Alpha = $Serie["Color"]["Alpha"]; } else { $Alpha = $OverrideAlpha; }
5490
+
5491
+            $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks);
5492
+
5493
+            $AxisID   = $Serie["Axis"];
5494
+            $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
5495
+
5496
+            if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
5497
+            {
5498
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
5499
+            $X = $this->GraphAreaX1 + $XMargin;
5500
+
5501
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
5502
+            $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0;
5503
+            foreach($PosArray as $Key => $Y)
5504
+            {
5505
+                if ( $Y != VOID )
5506
+                {
5507
+                $Sxy = $Sxy + $X*$Y;
5508
+                $Sx  = $Sx + $X;
5509
+                $Sy  = $Sy + $Y;
5510
+                $Sxx = $Sxx + $X*$X;
5511
+                }
5512
+
5513
+                $X = $X + $XStep;
5514
+            }
5515
+            $n = count($this->DataSet->stripVOID($PosArray)); //$n = count($PosArray);
5516
+            $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx));
5517
+            $B = (($Sy)-($M*$Sx))/($n);
5518
+
5519
+            $X1 = $this->GraphAreaX1 + $XMargin;
5520
+            $Y1 = $M * $X1 + $B;
5521
+            $X2 = $this->GraphAreaX2 - $XMargin;
5522
+            $Y2 = $M * $X2 + $B;
5523
+
5524
+            if ( $Y1 < $this->GraphAreaY1 ) { $X1 = $X1 + ($this->GraphAreaY1-$Y1); $Y1 = $this->GraphAreaY1; }
5525
+            if ( $Y1 > $this->GraphAreaY2 ) { $X1 = $X1 + ($Y1-$this->GraphAreaY2); $Y1 = $this->GraphAreaY2; }
5526
+            if ( $Y2 < $this->GraphAreaY1 ) { $X2 = $X2 - ($this->GraphAreaY1-$Y2); $Y2 = $this->GraphAreaY1; }
5527
+            if ( $Y2 > $this->GraphAreaY2 ) { $X2 = $X2 - ($Y2-$this->GraphAreaY2); $Y2 = $this->GraphAreaY2; }
5528
+
5529
+            $this->drawLine($X1,$Y1,$X2,$Y2,$Color);
5530
+            }
5531
+            else
5532
+            {
5533
+            if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
5534
+            $Y = $this->GraphAreaY1 + $XMargin;
5535
+
5536
+            if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
5537
+            $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0;
5538
+            foreach($PosArray as $Key => $X)
5539
+            {
5540
+                if ( $X != VOID )
5541
+                {
5542
+                $Sxy = $Sxy + $X*$Y;
5543
+                $Sx  = $Sx + $Y;
5544
+                $Sy  = $Sy + $X;
5545
+                $Sxx = $Sxx + $Y*$Y;
5546
+                }
5547
+
5548
+                $Y = $Y + $YStep;
5549
+            }
5550
+            $n = count($this->DataSet->stripVOID($PosArray)); //$n = count($PosArray);
5551
+            $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx));
5552
+            $B = (($Sy)-($M*$Sx))/($n);
5553
+
5554
+            $Y1 = $this->GraphAreaY1 + $XMargin;
5555
+            $X1 = $M * $Y1 + $B;
5556
+            $Y2 = $this->GraphAreaY2 - $XMargin;
5557
+            $X2 = $M * $Y2 + $B;
5558
+
5559
+            if ( $X1 < $this->GraphAreaX1 ) { $Y1 = $Y1 + ($this->GraphAreaX1-$X1); $X1 = $this->GraphAreaX1; }
5560
+            if ( $X1 > $this->GraphAreaX2 ) { $Y1 = $Y1 + ($X1-$this->GraphAreaX2); $X1 = $this->GraphAreaX2; }
5561
+            if ( $X2 < $this->GraphAreaX1 ) { $Y2 = $Y2 - ($this->GraphAreaY1-$X2); $X2 = $this->GraphAreaX1; }
5562
+            if ( $X2 > $this->GraphAreaX2 ) { $Y2 = $Y2 - ($X2-$this->GraphAreaX2); $X2 = $this->GraphAreaX2; }
5563
+
5564
+            $this->drawLine($X1,$Y1,$X2,$Y2,$Color);
5565
+            }
5566
+        }
5567
+        }
5568 5568
     }
5569 5569
 
5570
-   /* Write labels */
5571
-   function writeLabel($SeriesName,$Indexes,$Format="")
5570
+    /* Write labels */
5571
+    function writeLabel($SeriesName,$Indexes,$Format="")
5572 5572
     {
5573
-     $OverrideTitle	= isset($Format["OverrideTitle"]) ? $Format["OverrideTitle"] : NULL;
5574
-     $ForceLabels	= isset($Format["ForceLabels"]) ? $Format["ForceLabels"] : NULL;
5575
-     $DrawPoint		= isset($Format["DrawPoint"]) ? $Format["DrawPoint"] : LABEL_POINT_BOX;
5576
-     $DrawVerticalLine	= isset($Format["DrawVerticalLine"]) ? $Format["DrawVerticalLine"] : FALSE;
5577
-     $VerticalLineR	= isset($Format["VerticalLineR"]) ? $Format["VerticalLineR"] : 0;
5578
-     $VerticalLineG	= isset($Format["VerticalLineG"]) ? $Format["VerticalLineG"] : 0;
5579
-     $VerticalLineB	= isset($Format["VerticalLineB"]) ? $Format["VerticalLineB"] : 0;
5580
-     $VerticalLineAlpha	= isset($Format["VerticalLineAlpha"]) ? $Format["VerticalLineAlpha"] : 40;
5581
-     $VerticalLineTicks	= isset($Format["VerticalLineTicks"]) ? $Format["VerticalLineTicks"] : 2;
5582
-
5583
-     $Data = $this->DataSet->getData();
5584
-     list($XMargin,$XDivs) = $this->scaleGetXSettings();
5585
-
5586
-     if ( !is_array($Indexes) )    { $Index = $Indexes; $Indexes = ""; $Indexes[] = $Index; }
5587
-     if ( !is_array($SeriesName) ) { $SerieName = $SeriesName; $SeriesName = ""; $SeriesName[] = $SerieName; }
5588
-     if ( $ForceLabels != NULL && !is_array($ForceLabels) ) { $ForceLabel = $ForceLabels; $ForceLabels = ""; $ForceLabels[] = $ForceLabel; }
5589
-
5590
-     foreach ($Indexes as $Key => $Index)
5591
-      {
5592
-       $Series = "";
5593
-
5594
-       if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
5595
-        {
5596
-         if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
5597
-         $X = $this->GraphAreaX1 + $XMargin + $Index * $XStep;
5598
-
5599
-         if ( $DrawVerticalLine ) { $this->drawLine($X,$this->GraphAreaY1+$Data["YMargin"],$X,$this->GraphAreaY2-$Data["YMargin"],array("R"=>$VerticalLineR,"G"=>$VerticalLineG,"B"=>$VerticalLineB,"Alpha"=>$VerticalLineAlpha,"Ticks"=>$VerticalLineTicks)); }
5600
-
5601
-         $MinY = $this->GraphAreaY2;
5602
-         foreach ($SeriesName as $iKey => $SerieName)
5603
-          {
5604
-           if ( isset($Data["Series"][$SerieName]["Data"][$Index]) )
5605
-            {
5606
-             $AxisID      = $Data["Series"][$SerieName]["Axis"];
5607
-
5608
-             if ( $OverrideTitle != NULL)
5609
-              $Description = $OverrideTitle;
5610
-             elseif ( count($SeriesName) == 1 )
5611
-              {
5612
-               if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
5573
+        $OverrideTitle	= isset($Format["OverrideTitle"]) ? $Format["OverrideTitle"] : NULL;
5574
+        $ForceLabels	= isset($Format["ForceLabels"]) ? $Format["ForceLabels"] : NULL;
5575
+        $DrawPoint		= isset($Format["DrawPoint"]) ? $Format["DrawPoint"] : LABEL_POINT_BOX;
5576
+        $DrawVerticalLine	= isset($Format["DrawVerticalLine"]) ? $Format["DrawVerticalLine"] : FALSE;
5577
+        $VerticalLineR	= isset($Format["VerticalLineR"]) ? $Format["VerticalLineR"] : 0;
5578
+        $VerticalLineG	= isset($Format["VerticalLineG"]) ? $Format["VerticalLineG"] : 0;
5579
+        $VerticalLineB	= isset($Format["VerticalLineB"]) ? $Format["VerticalLineB"] : 0;
5580
+        $VerticalLineAlpha	= isset($Format["VerticalLineAlpha"]) ? $Format["VerticalLineAlpha"] : 40;
5581
+        $VerticalLineTicks	= isset($Format["VerticalLineTicks"]) ? $Format["VerticalLineTicks"] : 2;
5582
+
5583
+        $Data = $this->DataSet->getData();
5584
+        list($XMargin,$XDivs) = $this->scaleGetXSettings();
5585
+
5586
+        if ( !is_array($Indexes) )    { $Index = $Indexes; $Indexes = ""; $Indexes[] = $Index; }
5587
+        if ( !is_array($SeriesName) ) { $SerieName = $SeriesName; $SeriesName = ""; $SeriesName[] = $SerieName; }
5588
+        if ( $ForceLabels != NULL && !is_array($ForceLabels) ) { $ForceLabel = $ForceLabels; $ForceLabels = ""; $ForceLabels[] = $ForceLabel; }
5589
+
5590
+        foreach ($Indexes as $Key => $Index)
5591
+        {
5592
+        $Series = "";
5593
+
5594
+        if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
5595
+        {
5596
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
5597
+            $X = $this->GraphAreaX1 + $XMargin + $Index * $XStep;
5598
+
5599
+            if ( $DrawVerticalLine ) { $this->drawLine($X,$this->GraphAreaY1+$Data["YMargin"],$X,$this->GraphAreaY2-$Data["YMargin"],array("R"=>$VerticalLineR,"G"=>$VerticalLineG,"B"=>$VerticalLineB,"Alpha"=>$VerticalLineAlpha,"Ticks"=>$VerticalLineTicks)); }
5600
+
5601
+            $MinY = $this->GraphAreaY2;
5602
+            foreach ($SeriesName as $iKey => $SerieName)
5603
+            {
5604
+            if ( isset($Data["Series"][$SerieName]["Data"][$Index]) )
5605
+            {
5606
+                $AxisID      = $Data["Series"][$SerieName]["Axis"];
5607
+
5608
+                if ( $OverrideTitle != NULL)
5609
+                $Description = $OverrideTitle;
5610
+                elseif ( count($SeriesName) == 1 )
5611
+                {
5612
+                if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
5613 5613
                 $Description = $Data["Series"][$SerieName]["Description"]." - ".$Data["Series"][$Data["Abscissa"]]["Data"][$Index];
5614
-               else
5614
+                else
5615 5615
                 $Description = $Data["Series"][$SerieName]["Description"];
5616
-              }
5617
-             elseif ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
5618
-              $Description = $Data["Series"][$Data["Abscissa"]]["Data"][$Index];
5619
-
5620
-             $AxisMode     = $Data["Axis"][$AxisID]["Display"];
5621
-             $AxisFormat   = $Data["Axis"][$AxisID]["Format"];
5622
-             $AxisUnit     = $Data["Axis"][$AxisID]["Unit"];
5623
-
5624
-             $Serie = "";
5625
-             $Serie["R"] = $Data["Series"][$SerieName]["Color"]["R"];
5626
-             $Serie["G"] = $Data["Series"][$SerieName]["Color"]["G"];
5627
-             $Serie["B"] = $Data["Series"][$SerieName]["Color"]["B"];
5628
-             $Serie["Alpha"] = $Data["Series"][$SerieName]["Color"]["Alpha"];
5629
-
5630
-             if ( count($SeriesName) == 1 && isset($Data["Series"][$SerieName]["XOffset"]) )
5631
-              $SerieOffset = $Data["Series"][$SerieName]["XOffset"];
5632
-             else
5633
-              $SerieOffset = 0;
5634
-
5635
-             $Value = $Data["Series"][$SerieName]["Data"][$Index];
5636
-             if ( $Value == VOID ) { $Value = "NaN"; }
5637
-
5638
-             if ( $ForceLabels != NULL )
5639
-              $Caption = isset($ForceLabels[$Key]) ? $ForceLabels[$Key] : "Not set";
5640
-             else
5641
-              $Caption = $this->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit);
5642
-
5643
-             if ( $this->LastChartLayout == CHART_LAST_LAYOUT_STACKED )
5644
-              {
5645
-               if ( $Value >=0 ) { $LookFor = "+"; } else { $LookFor = "-"; }
5646
-
5647
-               $Value = 0; $Done = FALSE;
5648
-               foreach($Data["Series"] as $Name => $SerieLookup)
5616
+                }
5617
+                elseif ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
5618
+                $Description = $Data["Series"][$Data["Abscissa"]]["Data"][$Index];
5619
+
5620
+                $AxisMode     = $Data["Axis"][$AxisID]["Display"];
5621
+                $AxisFormat   = $Data["Axis"][$AxisID]["Format"];
5622
+                $AxisUnit     = $Data["Axis"][$AxisID]["Unit"];
5623
+
5624
+                $Serie = "";
5625
+                $Serie["R"] = $Data["Series"][$SerieName]["Color"]["R"];
5626
+                $Serie["G"] = $Data["Series"][$SerieName]["Color"]["G"];
5627
+                $Serie["B"] = $Data["Series"][$SerieName]["Color"]["B"];
5628
+                $Serie["Alpha"] = $Data["Series"][$SerieName]["Color"]["Alpha"];
5629
+
5630
+                if ( count($SeriesName) == 1 && isset($Data["Series"][$SerieName]["XOffset"]) )
5631
+                $SerieOffset = $Data["Series"][$SerieName]["XOffset"];
5632
+                else
5633
+                $SerieOffset = 0;
5634
+
5635
+                $Value = $Data["Series"][$SerieName]["Data"][$Index];
5636
+                if ( $Value == VOID ) { $Value = "NaN"; }
5637
+
5638
+                if ( $ForceLabels != NULL )
5639
+                $Caption = isset($ForceLabels[$Key]) ? $ForceLabels[$Key] : "Not set";
5640
+                else
5641
+                $Caption = $this->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit);
5642
+
5643
+                if ( $this->LastChartLayout == CHART_LAST_LAYOUT_STACKED )
5644
+                {
5645
+                if ( $Value >=0 ) { $LookFor = "+"; } else { $LookFor = "-"; }
5646
+
5647
+                $Value = 0; $Done = FALSE;
5648
+                foreach($Data["Series"] as $Name => $SerieLookup)
5649 5649
                 {
5650
-                 if ( $SerieLookup["isDrawable"] == TRUE && $Name != $Data["Abscissa"] && !$Done )
5651
-                  {
5652
-                   if ( isset($Data["Series"][$Name]["Data"][$Index]) && $Data["Series"][$Name]["Data"][$Index] != VOID )
5650
+                    if ( $SerieLookup["isDrawable"] == TRUE && $Name != $Data["Abscissa"] && !$Done )
5651
+                    {
5652
+                    if ( isset($Data["Series"][$Name]["Data"][$Index]) && $Data["Series"][$Name]["Data"][$Index] != VOID )
5653 5653
                     {
5654
-                     if ($Data["Series"][$Name]["Data"][$Index] >= 0 && $LookFor == "+" ) { $Value = $Value + $Data["Series"][$Name]["Data"][$Index]; }
5655
-                     if ($Data["Series"][$Name]["Data"][$Index] < 0 && $LookFor == "-" )  { $Value = $Value - $Data["Series"][$Name]["Data"][$Index]; }
5656
-                     if ($Name == $SerieName ) { $Done = TRUE; }
5654
+                        if ($Data["Series"][$Name]["Data"][$Index] >= 0 && $LookFor == "+" ) { $Value = $Value + $Data["Series"][$Name]["Data"][$Index]; }
5655
+                        if ($Data["Series"][$Name]["Data"][$Index] < 0 && $LookFor == "-" )  { $Value = $Value - $Data["Series"][$Name]["Data"][$Index]; }
5656
+                        if ($Name == $SerieName ) { $Done = TRUE; }
5657 5657
                     }
5658
-                  }
5658
+                    }
5659
+                }
5659 5660
                 }
5660
-              }
5661 5661
 
5662
-             $X = floor($this->GraphAreaX1 + $XMargin + $Index * $XStep + $SerieOffset);
5663
-             $Y = floor($this->scaleComputeY($Value,array("AxisID"=>$AxisID)));
5662
+                $X = floor($this->GraphAreaX1 + $XMargin + $Index * $XStep + $SerieOffset);
5663
+                $Y = floor($this->scaleComputeY($Value,array("AxisID"=>$AxisID)));
5664 5664
 
5665
-             if ($Y < $MinY) { $MinY = $Y; }
5665
+                if ($Y < $MinY) { $MinY = $Y; }
5666 5666
 
5667
-             if ( $DrawPoint == LABEL_POINT_CIRCLE )
5668
-              $this->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
5669
-             elseif ( $DrawPoint == LABEL_POINT_BOX )
5670
-              $this->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
5667
+                if ( $DrawPoint == LABEL_POINT_CIRCLE )
5668
+                $this->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
5669
+                elseif ( $DrawPoint == LABEL_POINT_BOX )
5670
+                $this->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
5671 5671
 
5672
-             $Series[] = array("Format"=>$Serie,"Caption"=>$Caption);
5672
+                $Series[] = array("Format"=>$Serie,"Caption"=>$Caption);
5673 5673
             }
5674
-          }
5675
-         $this->drawLabelBox($X,$MinY-3,$Description,$Series,$Format);
5674
+            }
5675
+            $this->drawLabelBox($X,$MinY-3,$Description,$Series,$Format);
5676 5676
 
5677 5677
         }
5678
-       else
5678
+        else
5679 5679
         {
5680
-         if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
5681
-         $Y = $this->GraphAreaY1 + $XMargin + $Index * $XStep;
5680
+            if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
5681
+            $Y = $this->GraphAreaY1 + $XMargin + $Index * $XStep;
5682 5682
 
5683
-         if ( $DrawVerticalLine ) { $this->drawLine($this->GraphAreaX1+$Data["YMargin"],$Y,$this->GraphAreaX2-$Data["YMargin"],$Y,array("R"=>$VerticalLineR,"G"=>$VerticalLineG,"B"=>$VerticalLineB,"Alpha"=>$VerticalLineAlpha,"Ticks"=>$VerticalLineTicks)); }
5683
+            if ( $DrawVerticalLine ) { $this->drawLine($this->GraphAreaX1+$Data["YMargin"],$Y,$this->GraphAreaX2-$Data["YMargin"],$Y,array("R"=>$VerticalLineR,"G"=>$VerticalLineG,"B"=>$VerticalLineB,"Alpha"=>$VerticalLineAlpha,"Ticks"=>$VerticalLineTicks)); }
5684 5684
 
5685
-         $MinX = $this->GraphAreaX2;
5686
-         foreach ($SeriesName as $Key => $SerieName)
5687
-          {
5688
-           if ( isset($Data["Series"][$SerieName]["Data"][$Index]) )
5685
+            $MinX = $this->GraphAreaX2;
5686
+            foreach ($SeriesName as $Key => $SerieName)
5687
+            {
5688
+            if ( isset($Data["Series"][$SerieName]["Data"][$Index]) )
5689 5689
             {
5690
-             $AxisID      = $Data["Series"][$SerieName]["Axis"];
5690
+                $AxisID      = $Data["Series"][$SerieName]["Axis"];
5691 5691
 
5692
-             if ( $OverrideTitle != NULL)
5693
-              $Description = $OverrideTitle;
5694
-             elseif ( count($SeriesName) == 1 )
5695
-              {
5696
-               if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
5692
+                if ( $OverrideTitle != NULL)
5693
+                $Description = $OverrideTitle;
5694
+                elseif ( count($SeriesName) == 1 )
5695
+                {
5696
+                if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
5697 5697
                 $Description = $Data["Series"][$SerieName]["Description"]." - ".$Data["Series"][$Data["Abscissa"]]["Data"][$Index];
5698
-               else
5698
+                else
5699 5699
                 $Description = $Data["Series"][$SerieName]["Description"];
5700
-              }
5701
-             elseif ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
5702
-              $Description = $Data["Series"][$Data["Abscissa"]]["Data"][$Index];
5703
-
5704
-             $AxisMode     = $Data["Axis"][$AxisID]["Display"];
5705
-             $AxisFormat   = $Data["Axis"][$AxisID]["Format"];
5706
-             $AxisUnit     = $Data["Axis"][$AxisID]["Unit"];
5707
-
5708
-             $Serie = "";
5709
-             if ( isset($Data["Extended"]["Palette"][$Index] ) )
5710
-              {
5711
-               $Serie["R"] = $Data["Extended"]["Palette"][$Index]["R"];
5712
-               $Serie["G"] = $Data["Extended"]["Palette"][$Index]["G"];
5713
-               $Serie["B"] = $Data["Extended"]["Palette"][$Index]["B"];
5714
-               $Serie["Alpha"] = $Data["Extended"]["Palette"][$Index]["Alpha"];
5715
-              }
5716
-             else
5717
-              {
5718
-               $Serie["R"] = $Data["Series"][$SerieName]["Color"]["R"];
5719
-               $Serie["G"] = $Data["Series"][$SerieName]["Color"]["G"];
5720
-               $Serie["B"] = $Data["Series"][$SerieName]["Color"]["B"];
5721
-               $Serie["Alpha"] = $Data["Series"][$SerieName]["Color"]["Alpha"];
5722
-              }
5723
-
5724
-             if ( count($SeriesName) == 1 && isset($Data["Series"][$SerieName]["XOffset"]) )
5725
-              $SerieOffset = $Data["Series"][$SerieName]["XOffset"];
5726
-             else
5727
-              $SerieOffset = 0;
5728
-
5729
-             $Value = $Data["Series"][$SerieName]["Data"][$Index];
5730
-             if ( $ForceLabels != NULL )
5731
-              $Caption = isset($ForceLabels[$Key]) ? $ForceLabels[$Key] : "Not set";
5732
-             else
5733
-              $Caption = $this->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit);
5734
-             if ( $Value == VOID ) { $Value = "NaN"; }
5735
-
5736
-             if ( $this->LastChartLayout == CHART_LAST_LAYOUT_STACKED )
5737
-              {
5738
-               if ( $Value >=0 ) { $LookFor = "+"; } else { $LookFor = "-"; }
5739
-
5740
-               $Value = 0; $Done = FALSE;
5741
-               foreach($Data["Series"] as $Name => $SerieLookup)
5700
+                }
5701
+                elseif ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
5702
+                $Description = $Data["Series"][$Data["Abscissa"]]["Data"][$Index];
5703
+
5704
+                $AxisMode     = $Data["Axis"][$AxisID]["Display"];
5705
+                $AxisFormat   = $Data["Axis"][$AxisID]["Format"];
5706
+                $AxisUnit     = $Data["Axis"][$AxisID]["Unit"];
5707
+
5708
+                $Serie = "";
5709
+                if ( isset($Data["Extended"]["Palette"][$Index] ) )
5710
+                {
5711
+                $Serie["R"] = $Data["Extended"]["Palette"][$Index]["R"];
5712
+                $Serie["G"] = $Data["Extended"]["Palette"][$Index]["G"];
5713
+                $Serie["B"] = $Data["Extended"]["Palette"][$Index]["B"];
5714
+                $Serie["Alpha"] = $Data["Extended"]["Palette"][$Index]["Alpha"];
5715
+                }
5716
+                else
5717
+                {
5718
+                $Serie["R"] = $Data["Series"][$SerieName]["Color"]["R"];
5719
+                $Serie["G"] = $Data["Series"][$SerieName]["Color"]["G"];
5720
+                $Serie["B"] = $Data["Series"][$SerieName]["Color"]["B"];
5721
+                $Serie["Alpha"] = $Data["Series"][$SerieName]["Color"]["Alpha"];
5722
+                }
5723
+
5724
+                if ( count($SeriesName) == 1 && isset($Data["Series"][$SerieName]["XOffset"]) )
5725
+                $SerieOffset = $Data["Series"][$SerieName]["XOffset"];
5726
+                else
5727
+                $SerieOffset = 0;
5728
+
5729
+                $Value = $Data["Series"][$SerieName]["Data"][$Index];
5730
+                if ( $ForceLabels != NULL )
5731
+                $Caption = isset($ForceLabels[$Key]) ? $ForceLabels[$Key] : "Not set";
5732
+                else
5733
+                $Caption = $this->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit);
5734
+                if ( $Value == VOID ) { $Value = "NaN"; }
5735
+
5736
+                if ( $this->LastChartLayout == CHART_LAST_LAYOUT_STACKED )
5737
+                {
5738
+                if ( $Value >=0 ) { $LookFor = "+"; } else { $LookFor = "-"; }
5739
+
5740
+                $Value = 0; $Done = FALSE;
5741
+                foreach($Data["Series"] as $Name => $SerieLookup)
5742 5742
                 {
5743
-                 if ( $SerieLookup["isDrawable"] == TRUE && $Name != $Data["Abscissa"] && !$Done )
5744
-                  {
5745
-                   if ( isset($Data["Series"][$Name]["Data"][$Index]) && $Data["Series"][$Name]["Data"][$Index] != VOID )
5743
+                    if ( $SerieLookup["isDrawable"] == TRUE && $Name != $Data["Abscissa"] && !$Done )
5744
+                    {
5745
+                    if ( isset($Data["Series"][$Name]["Data"][$Index]) && $Data["Series"][$Name]["Data"][$Index] != VOID )
5746 5746
                     {
5747
-                     if ($Data["Series"][$Name]["Data"][$Index] >= 0 && $LookFor == "+" ) { $Value = $Value + $Data["Series"][$Name]["Data"][$Index]; }
5748
-                     if ($Data["Series"][$Name]["Data"][$Index] < 0 && $LookFor == "-" )  { $Value = $Value - $Data["Series"][$Name]["Data"][$Index]; }
5749
-                     if ($Name == $SerieName ) { $Done = TRUE; }
5747
+                        if ($Data["Series"][$Name]["Data"][$Index] >= 0 && $LookFor == "+" ) { $Value = $Value + $Data["Series"][$Name]["Data"][$Index]; }
5748
+                        if ($Data["Series"][$Name]["Data"][$Index] < 0 && $LookFor == "-" )  { $Value = $Value - $Data["Series"][$Name]["Data"][$Index]; }
5749
+                        if ($Name == $SerieName ) { $Done = TRUE; }
5750 5750
                     }
5751
-                  }
5751
+                    }
5752
+                }
5752 5753
                 }
5753
-              }
5754 5754
 
5755
-             $X = floor($this->scaleComputeY($Value,array("AxisID"=>$AxisID)));
5756
-             $Y = floor($this->GraphAreaY1 + $XMargin + $Index * $XStep + $SerieOffset);
5755
+                $X = floor($this->scaleComputeY($Value,array("AxisID"=>$AxisID)));
5756
+                $Y = floor($this->GraphAreaY1 + $XMargin + $Index * $XStep + $SerieOffset);
5757 5757
 
5758
-             if ($X < $MinX) { $MinX = $X; }
5758
+                if ($X < $MinX) { $MinX = $X; }
5759 5759
 
5760
-             if ( $DrawPoint == LABEL_POINT_CIRCLE )
5761
-              $this->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
5762
-             elseif ( $DrawPoint == LABEL_POINT_BOX )
5763
-              $this->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
5760
+                if ( $DrawPoint == LABEL_POINT_CIRCLE )
5761
+                $this->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
5762
+                elseif ( $DrawPoint == LABEL_POINT_BOX )
5763
+                $this->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
5764 5764
 
5765
-             $Series[] = array("Format"=>$Serie,"Caption"=>$Caption);
5765
+                $Series[] = array("Format"=>$Serie,"Caption"=>$Caption);
5766 5766
             }
5767
-          }
5768
-         $this->drawLabelBox($MinX,$Y-3,$Description,$Series,$Format);
5767
+            }
5768
+            $this->drawLabelBox($MinX,$Y-3,$Description,$Series,$Format);
5769 5769
 
5770 5770
         }
5771
-      }
5771
+        }
5772 5772
     }
5773 5773
 
5774
-   /* Draw a label box */
5775
-   function drawLabelBox($X,$Y,$Title,$Captions,$Format="")
5774
+    /* Draw a label box */
5775
+    function drawLabelBox($X,$Y,$Title,$Captions,$Format="")
5776 5776
     {
5777
-     $NoTitle		= isset($Format["NoTitle"]) ? $Format["NoTitle"] : NULL;
5778
-     $BoxWidth		= isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 50;
5779
-     $DrawSerieColor	= isset($Format["DrawSerieColor"]) ? $Format["DrawSerieColor"] : TRUE;
5780
-     $SerieR		= isset($Format["SerieR"]) ? $Format["SerieR"] : NULL;
5781
-     $SerieG		= isset($Format["SerieG"]) ? $Format["SerieG"] : NULL;
5782
-     $SerieB		= isset($Format["SerieB"]) ? $Format["SerieB"] : NULL;
5783
-     $SerieAlpha	= isset($Format["SerieAlpha"]) ? $Format["SerieAlpha"] : NULL;
5784
-     $SerieBoxSize	= isset($Format["SerieBoxSize"]) ? $Format["SerieBoxSize"] : 6;
5785
-     $SerieBoxSpacing	= isset($Format["SerieBoxSpacing"]) ? $Format["SerieBoxSpacing"] : 4;
5786
-     $VerticalMargin	= isset($Format["VerticalMargin"]) ? $Format["VerticalMargin"] : 10;
5787
-     $HorizontalMargin	= isset($Format["HorizontalMargin"]) ? $Format["HorizontalMargin"] : 8;
5788
-     $R			= isset($Format["R"]) ? $Format["R"] : $this->FontColorR;
5789
-     $G			= isset($Format["G"]) ? $Format["G"] : $this->FontColorG;
5790
-     $B			= isset($Format["B"]) ? $Format["B"] : $this->FontColorB;
5791
-     $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : $this->FontColorA;
5792
-     $FontName		= isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
5793
-     $FontSize		= isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
5794
-     $TitleMode		= isset($Format["TitleMode"]) ? $Format["TitleMode"] : LABEL_TITLE_NOBACKGROUND;
5795
-     $TitleR		= isset($Format["TitleR"]) ? $Format["TitleR"] : $R;
5796
-     $TitleG		= isset($Format["TitleG"]) ? $Format["TitleG"] : $G;
5797
-     $TitleB		= isset($Format["TitleB"]) ? $Format["TitleB"] : $B;
5798
-     $TitleBackgroundR	= isset($Format["TitleBackgroundR"]) ? $Format["TitleBackgroundR"] : 0;
5799
-     $TitleBackgroundG	= isset($Format["TitleBackgroundG"]) ? $Format["TitleBackgroundG"] : 0;
5800
-     $TitleBackgroundB	= isset($Format["TitleBackgroundB"]) ? $Format["TitleBackgroundB"] : 0;
5801
-     $GradientStartR	= isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255;
5802
-     $GradientStartG	= isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255;
5803
-     $GradientStartB	= isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255;
5804
-     $GradientEndR	= isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 220;
5805
-     $GradientEndG	= isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 220;
5806
-     $GradientEndB	= isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 220;
5807
-
5808
-     if ( !$DrawSerieColor ) { $SerieBoxSize = 0; $SerieBoxSpacing = 0; }
5809
-
5810
-     $TxtPos      = $this->getTextBox($X,$Y,$FontName,$FontSize,0,$Title);
5811
-     $TitleWidth  = ($TxtPos[1]["X"] - $TxtPos[0]["X"])+$VerticalMargin*2;
5812
-     $TitleHeight = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]);
5813
-
5814
-     if ( $NoTitle ) { $TitleWidth = 0; $TitleHeight = 0; }
5815
-
5816
-     $CaptionWidth = 0; $CaptionHeight = -$HorizontalMargin;
5817
-     foreach($Captions as $Key =>$Caption)
5818
-      {
5819
-       $TxtPos        = $this->getTextBox($X,$Y,$FontName,$FontSize,0,$Caption["Caption"]);
5820
-       $CaptionWidth  = max($CaptionWidth,($TxtPos[1]["X"] - $TxtPos[0]["X"])+$VerticalMargin*2);
5821
-       $CaptionHeight = $CaptionHeight + max(($TxtPos[0]["Y"] - $TxtPos[2]["Y"]),($SerieBoxSize+2)) + $HorizontalMargin;
5822
-      }
5823
-
5824
-     if ( $CaptionHeight <= 5 ) { $CaptionHeight = $CaptionHeight + $HorizontalMargin/2; }
5825
-
5826
-     if ( $DrawSerieColor ) { $CaptionWidth = $CaptionWidth + $SerieBoxSize + $SerieBoxSpacing; }
5827
-
5828
-     $BoxWidth = max($BoxWidth,$TitleWidth,$CaptionWidth);
5829
-
5830
-     $XMin = $X - 5 - floor(($BoxWidth-10) / 2);
5831
-     $XMax = $X + 5 + floor(($BoxWidth-10) / 2);
5832
-
5833
-     $RestoreShadow = $this->Shadow;
5834
-     if ( $this->Shadow == TRUE )
5835
-      {
5836
-       $this->Shadow = FALSE;
5837
-
5838
-       $Poly = "";
5839
-       $Poly[] = $X+$this->ShadowX; $Poly[] = $Y+$this->ShadowX;
5840
-       $Poly[] = $X+5+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
5841
-       $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
5842
-
5843
-       if ( $NoTitle )
5844
-        {
5845
-         $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2+$this->ShadowX;
5846
-         $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2+$this->ShadowX;
5847
-        }
5848
-       else
5849
-        {
5850
-         $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3+$this->ShadowX;
5851
-         $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3+$this->ShadowX;
5852
-        }
5853
-
5854
-       $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
5855
-       $Poly[] = $X-5+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
5856
-       $this->drawPolygon($Poly,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
5857
-      }
5858
-
5859
-     /* Draw the background */
5860
-     $GradientSettings = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB);
5861
-     if ( $NoTitle )
5862
-      $this->drawGradientArea($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-6,DIRECTION_VERTICAL,$GradientSettings);
5863
-     else
5864
-      $this->drawGradientArea($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-6,DIRECTION_VERTICAL,$GradientSettings);
5865
-     $Poly = ""; $Poly[] = $X; $Poly[] = $Y; $Poly[] = $X-5; $Poly[] = $Y-5; $Poly[] = $X+5; $Poly[] = $Y-5;
5866
-     $this->drawPolygon($Poly,array("R"=>$GradientEndR,"G"=>$GradientEndG,"B"=>$GradientEndB,"NoBorder"=>TRUE));
5867
-
5868
-     /* Outer border */
5869
-     $OuterBorderColor = $this->allocateColor($this->Picture,100,100,100,100);
5870
-     imageline($this->Picture,$XMin,$Y-5,$X-5,$Y-5,$OuterBorderColor);
5871
-     imageline($this->Picture,$X,$Y,$X-5,$Y-5,$OuterBorderColor);
5872
-     imageline($this->Picture,$X,$Y,$X+5,$Y-5,$OuterBorderColor);
5873
-     imageline($this->Picture,$X+5,$Y-5,$XMax,$Y-5,$OuterBorderColor);
5874
-     if ( $NoTitle )
5875
-      {
5876
-       imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMin,$Y-5,$OuterBorderColor);
5877
-       imageline($this->Picture,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-5,$OuterBorderColor);
5878
-       imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$OuterBorderColor);
5879
-      }
5880
-     else
5881
-      {
5882
-       imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMin,$Y-5,$OuterBorderColor);
5883
-       imageline($this->Picture,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5,$OuterBorderColor);
5884
-       imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$OuterBorderColor);
5885
-      }
5886
-
5887
-     /* Inner border */
5888
-     $InnerBorderColor = $this->allocateColor($this->Picture,255,255,255,100);
5889
-     imageline($this->Picture,$XMin+1,$Y-6,$X-5,$Y-6,$InnerBorderColor);
5890
-     imageline($this->Picture,$X,$Y-1,$X-5,$Y-6,$InnerBorderColor);
5891
-     imageline($this->Picture,$X,$Y-1,$X+5,$Y-6,$InnerBorderColor);
5892
-     imageline($this->Picture,$X+5,$Y-6,$XMax-1,$Y-6,$InnerBorderColor);
5893
-     if ( $NoTitle )
5894
-      {
5895
-       imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMin+1,$Y-6,$InnerBorderColor);
5896
-       imageline($this->Picture,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax-1,$Y-6,$InnerBorderColor);
5897
-       imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$InnerBorderColor);
5898
-      }
5899
-     else
5900
-      {
5901
-       imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMin+1,$Y-6,$InnerBorderColor);
5902
-       imageline($this->Picture,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax-1,$Y-6,$InnerBorderColor);
5903
-       imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$InnerBorderColor);
5904
-      }
5905
-
5906
-     /* Draw the separator line */
5907
-     if ( $TitleMode == LABEL_TITLE_NOBACKGROUND && !$NoTitle )
5908
-      {
5909
-       $YPos    = $Y-7-$CaptionHeight-$HorizontalMargin-$HorizontalMargin/2;
5910
-       $XMargin = $VerticalMargin / 2;
5911
-       $this->drawLine($XMin+$XMargin,$YPos+1,$XMax-$XMargin,$YPos+1,array("R"=>$GradientEndR,"G"=>$GradientEndG,"B"=>$GradientEndB));
5912
-       $this->drawLine($XMin+$XMargin,$YPos,$XMax-$XMargin,$YPos,array("R"=>$GradientStartR,"G"=>$GradientStartG,"B"=>$GradientStartB));
5913
-      }
5914
-     elseif ( $TitleMode == LABEL_TITLE_BACKGROUND )
5915
-      {
5916
-       $this->drawFilledRectangle($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2,array("R"=>$TitleBackgroundR,"G"=>$TitleBackgroundG,"B"=>$TitleBackgroundB));
5917
-       imageline($this->Picture,$XMin+1,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2+1,$XMax-1,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2+1,$InnerBorderColor);
5918
-      }
5919
-
5920
-     /* Write the description */
5921
-     if ( !$NoTitle )
5922
-      $this->drawText($XMin+$VerticalMargin,$Y-7-$CaptionHeight-$HorizontalMargin*2,$Title,array("Align"=>TEXT_ALIGN_BOTTOMLEFT,"R"=>$TitleR,"G"=>$TitleG,"B"=>$TitleB));
5923
-
5924
-     /* Write the value */
5925
-     $YPos = $Y-5-$HorizontalMargin; $XPos = $XMin+$VerticalMargin+$SerieBoxSize+$SerieBoxSpacing;
5926
-     foreach($Captions as $Key => $Caption)
5927
-      {
5928
-       $CaptionTxt    = $Caption["Caption"];
5929
-       $TxtPos        = $this->getTextBox($XPos,$YPos,$FontName,$FontSize,0,$CaptionTxt);
5930
-       $CaptionHeight = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]);
5931
-
5932
-       /* Write the serie color if needed */
5933
-       if ( $DrawSerieColor )
5934
-        {
5935
-         $BoxSettings = array("R"=>$Caption["Format"]["R"],"G"=>$Caption["Format"]["G"],"B"=>$Caption["Format"]["B"],"Alpha"=>$Caption["Format"]["Alpha"],"BorderR"=>0,"BorderG"=>0,"BorderB"=>0);
5936
-         $this->drawFilledRectangle($XMin+$VerticalMargin,$YPos-$SerieBoxSize,$XMin+$VerticalMargin+$SerieBoxSize,$YPos,$BoxSettings);
5937
-        }
5938
-
5939
-       $this->drawText($XPos,$YPos,$CaptionTxt,array("Align"=>TEXT_ALIGN_BOTTOMLEFT));
5940
-
5941
-       $YPos = $YPos - $CaptionHeight - $HorizontalMargin;
5942
-      }
5943
-
5944
-     $this->Shadow = $RestoreShadow;
5777
+        $NoTitle		= isset($Format["NoTitle"]) ? $Format["NoTitle"] : NULL;
5778
+        $BoxWidth		= isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 50;
5779
+        $DrawSerieColor	= isset($Format["DrawSerieColor"]) ? $Format["DrawSerieColor"] : TRUE;
5780
+        $SerieR		= isset($Format["SerieR"]) ? $Format["SerieR"] : NULL;
5781
+        $SerieG		= isset($Format["SerieG"]) ? $Format["SerieG"] : NULL;
5782
+        $SerieB		= isset($Format["SerieB"]) ? $Format["SerieB"] : NULL;
5783
+        $SerieAlpha	= isset($Format["SerieAlpha"]) ? $Format["SerieAlpha"] : NULL;
5784
+        $SerieBoxSize	= isset($Format["SerieBoxSize"]) ? $Format["SerieBoxSize"] : 6;
5785
+        $SerieBoxSpacing	= isset($Format["SerieBoxSpacing"]) ? $Format["SerieBoxSpacing"] : 4;
5786
+        $VerticalMargin	= isset($Format["VerticalMargin"]) ? $Format["VerticalMargin"] : 10;
5787
+        $HorizontalMargin	= isset($Format["HorizontalMargin"]) ? $Format["HorizontalMargin"] : 8;
5788
+        $R			= isset($Format["R"]) ? $Format["R"] : $this->FontColorR;
5789
+        $G			= isset($Format["G"]) ? $Format["G"] : $this->FontColorG;
5790
+        $B			= isset($Format["B"]) ? $Format["B"] : $this->FontColorB;
5791
+        $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : $this->FontColorA;
5792
+        $FontName		= isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
5793
+        $FontSize		= isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
5794
+        $TitleMode		= isset($Format["TitleMode"]) ? $Format["TitleMode"] : LABEL_TITLE_NOBACKGROUND;
5795
+        $TitleR		= isset($Format["TitleR"]) ? $Format["TitleR"] : $R;
5796
+        $TitleG		= isset($Format["TitleG"]) ? $Format["TitleG"] : $G;
5797
+        $TitleB		= isset($Format["TitleB"]) ? $Format["TitleB"] : $B;
5798
+        $TitleBackgroundR	= isset($Format["TitleBackgroundR"]) ? $Format["TitleBackgroundR"] : 0;
5799
+        $TitleBackgroundG	= isset($Format["TitleBackgroundG"]) ? $Format["TitleBackgroundG"] : 0;
5800
+        $TitleBackgroundB	= isset($Format["TitleBackgroundB"]) ? $Format["TitleBackgroundB"] : 0;
5801
+        $GradientStartR	= isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255;
5802
+        $GradientStartG	= isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255;
5803
+        $GradientStartB	= isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255;
5804
+        $GradientEndR	= isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 220;
5805
+        $GradientEndG	= isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 220;
5806
+        $GradientEndB	= isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 220;
5807
+
5808
+        if ( !$DrawSerieColor ) { $SerieBoxSize = 0; $SerieBoxSpacing = 0; }
5809
+
5810
+        $TxtPos      = $this->getTextBox($X,$Y,$FontName,$FontSize,0,$Title);
5811
+        $TitleWidth  = ($TxtPos[1]["X"] - $TxtPos[0]["X"])+$VerticalMargin*2;
5812
+        $TitleHeight = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]);
5813
+
5814
+        if ( $NoTitle ) { $TitleWidth = 0; $TitleHeight = 0; }
5815
+
5816
+        $CaptionWidth = 0; $CaptionHeight = -$HorizontalMargin;
5817
+        foreach($Captions as $Key =>$Caption)
5818
+        {
5819
+        $TxtPos        = $this->getTextBox($X,$Y,$FontName,$FontSize,0,$Caption["Caption"]);
5820
+        $CaptionWidth  = max($CaptionWidth,($TxtPos[1]["X"] - $TxtPos[0]["X"])+$VerticalMargin*2);
5821
+        $CaptionHeight = $CaptionHeight + max(($TxtPos[0]["Y"] - $TxtPos[2]["Y"]),($SerieBoxSize+2)) + $HorizontalMargin;
5822
+        }
5823
+
5824
+        if ( $CaptionHeight <= 5 ) { $CaptionHeight = $CaptionHeight + $HorizontalMargin/2; }
5825
+
5826
+        if ( $DrawSerieColor ) { $CaptionWidth = $CaptionWidth + $SerieBoxSize + $SerieBoxSpacing; }
5827
+
5828
+        $BoxWidth = max($BoxWidth,$TitleWidth,$CaptionWidth);
5829
+
5830
+        $XMin = $X - 5 - floor(($BoxWidth-10) / 2);
5831
+        $XMax = $X + 5 + floor(($BoxWidth-10) / 2);
5832
+
5833
+        $RestoreShadow = $this->Shadow;
5834
+        if ( $this->Shadow == TRUE )
5835
+        {
5836
+        $this->Shadow = FALSE;
5837
+
5838
+        $Poly = "";
5839
+        $Poly[] = $X+$this->ShadowX; $Poly[] = $Y+$this->ShadowX;
5840
+        $Poly[] = $X+5+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
5841
+        $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
5842
+
5843
+        if ( $NoTitle )
5844
+        {
5845
+            $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2+$this->ShadowX;
5846
+            $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2+$this->ShadowX;
5847
+        }
5848
+        else
5849
+        {
5850
+            $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3+$this->ShadowX;
5851
+            $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3+$this->ShadowX;
5852
+        }
5853
+
5854
+        $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
5855
+        $Poly[] = $X-5+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
5856
+        $this->drawPolygon($Poly,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
5857
+        }
5858
+
5859
+        /* Draw the background */
5860
+        $GradientSettings = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB);
5861
+        if ( $NoTitle )
5862
+        $this->drawGradientArea($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-6,DIRECTION_VERTICAL,$GradientSettings);
5863
+        else
5864
+        $this->drawGradientArea($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-6,DIRECTION_VERTICAL,$GradientSettings);
5865
+        $Poly = ""; $Poly[] = $X; $Poly[] = $Y; $Poly[] = $X-5; $Poly[] = $Y-5; $Poly[] = $X+5; $Poly[] = $Y-5;
5866
+        $this->drawPolygon($Poly,array("R"=>$GradientEndR,"G"=>$GradientEndG,"B"=>$GradientEndB,"NoBorder"=>TRUE));
5867
+
5868
+        /* Outer border */
5869
+        $OuterBorderColor = $this->allocateColor($this->Picture,100,100,100,100);
5870
+        imageline($this->Picture,$XMin,$Y-5,$X-5,$Y-5,$OuterBorderColor);
5871
+        imageline($this->Picture,$X,$Y,$X-5,$Y-5,$OuterBorderColor);
5872
+        imageline($this->Picture,$X,$Y,$X+5,$Y-5,$OuterBorderColor);
5873
+        imageline($this->Picture,$X+5,$Y-5,$XMax,$Y-5,$OuterBorderColor);
5874
+        if ( $NoTitle )
5875
+        {
5876
+        imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMin,$Y-5,$OuterBorderColor);
5877
+        imageline($this->Picture,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-5,$OuterBorderColor);
5878
+        imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$OuterBorderColor);
5879
+        }
5880
+        else
5881
+        {
5882
+        imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMin,$Y-5,$OuterBorderColor);
5883
+        imageline($this->Picture,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5,$OuterBorderColor);
5884
+        imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$OuterBorderColor);
5885
+        }
5886
+
5887
+        /* Inner border */
5888
+        $InnerBorderColor = $this->allocateColor($this->Picture,255,255,255,100);
5889
+        imageline($this->Picture,$XMin+1,$Y-6,$X-5,$Y-6,$InnerBorderColor);
5890
+        imageline($this->Picture,$X,$Y-1,$X-5,$Y-6,$InnerBorderColor);
5891
+        imageline($this->Picture,$X,$Y-1,$X+5,$Y-6,$InnerBorderColor);
5892
+        imageline($this->Picture,$X+5,$Y-6,$XMax-1,$Y-6,$InnerBorderColor);
5893
+        if ( $NoTitle )
5894
+        {
5895
+        imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMin+1,$Y-6,$InnerBorderColor);
5896
+        imageline($this->Picture,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax-1,$Y-6,$InnerBorderColor);
5897
+        imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$InnerBorderColor);
5898
+        }
5899
+        else
5900
+        {
5901
+        imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMin+1,$Y-6,$InnerBorderColor);
5902
+        imageline($this->Picture,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax-1,$Y-6,$InnerBorderColor);
5903
+        imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$InnerBorderColor);
5904
+        }
5905
+
5906
+        /* Draw the separator line */
5907
+        if ( $TitleMode == LABEL_TITLE_NOBACKGROUND && !$NoTitle )
5908
+        {
5909
+        $YPos    = $Y-7-$CaptionHeight-$HorizontalMargin-$HorizontalMargin/2;
5910
+        $XMargin = $VerticalMargin / 2;
5911
+        $this->drawLine($XMin+$XMargin,$YPos+1,$XMax-$XMargin,$YPos+1,array("R"=>$GradientEndR,"G"=>$GradientEndG,"B"=>$GradientEndB));
5912
+        $this->drawLine($XMin+$XMargin,$YPos,$XMax-$XMargin,$YPos,array("R"=>$GradientStartR,"G"=>$GradientStartG,"B"=>$GradientStartB));
5913
+        }
5914
+        elseif ( $TitleMode == LABEL_TITLE_BACKGROUND )
5915
+        {
5916
+        $this->drawFilledRectangle($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2,array("R"=>$TitleBackgroundR,"G"=>$TitleBackgroundG,"B"=>$TitleBackgroundB));
5917
+        imageline($this->Picture,$XMin+1,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2+1,$XMax-1,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2+1,$InnerBorderColor);
5918
+        }
5919
+
5920
+        /* Write the description */
5921
+        if ( !$NoTitle )
5922
+        $this->drawText($XMin+$VerticalMargin,$Y-7-$CaptionHeight-$HorizontalMargin*2,$Title,array("Align"=>TEXT_ALIGN_BOTTOMLEFT,"R"=>$TitleR,"G"=>$TitleG,"B"=>$TitleB));
5923
+
5924
+        /* Write the value */
5925
+        $YPos = $Y-5-$HorizontalMargin; $XPos = $XMin+$VerticalMargin+$SerieBoxSize+$SerieBoxSpacing;
5926
+        foreach($Captions as $Key => $Caption)
5927
+        {
5928
+        $CaptionTxt    = $Caption["Caption"];
5929
+        $TxtPos        = $this->getTextBox($XPos,$YPos,$FontName,$FontSize,0,$CaptionTxt);
5930
+        $CaptionHeight = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]);
5931
+
5932
+        /* Write the serie color if needed */
5933
+        if ( $DrawSerieColor )
5934
+        {
5935
+            $BoxSettings = array("R"=>$Caption["Format"]["R"],"G"=>$Caption["Format"]["G"],"B"=>$Caption["Format"]["B"],"Alpha"=>$Caption["Format"]["Alpha"],"BorderR"=>0,"BorderG"=>0,"BorderB"=>0);
5936
+            $this->drawFilledRectangle($XMin+$VerticalMargin,$YPos-$SerieBoxSize,$XMin+$VerticalMargin+$SerieBoxSize,$YPos,$BoxSettings);
5937
+        }
5938
+
5939
+        $this->drawText($XPos,$YPos,$CaptionTxt,array("Align"=>TEXT_ALIGN_BOTTOMLEFT));
5940
+
5941
+        $YPos = $YPos - $CaptionHeight - $HorizontalMargin;
5942
+        }
5943
+
5944
+        $this->Shadow = $RestoreShadow;
5945 5945
     }
5946 5946
 
5947
-   /* Draw a basic shape */
5948
-   function drawShape($X,$Y,$Shape,$PlotSize,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha)
5947
+    /* Draw a basic shape */
5948
+    function drawShape($X,$Y,$Shape,$PlotSize,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha)
5949 5949
     {
5950
-     if ( $Shape == SERIE_SHAPE_FILLEDCIRCLE )
5951
-      {
5952
-       if ( $PlotBorder ) { $this->drawFilledCircle($X,$Y,$PlotSize+$BorderSize,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
5953
-       $this->drawFilledCircle($X,$Y,$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5954
-      }
5955
-     elseif ( $Shape == SERIE_SHAPE_FILLEDSQUARE )
5956
-      {
5957
-       if ( $PlotBorder ) { $this->drawFilledRectangle($X-$PlotSize-$BorderSize,$Y-$PlotSize-$BorderSize,$X+$PlotSize+$BorderSize,$Y+$PlotSize+$BorderSize,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
5958
-       $this->drawFilledRectangle($X-$PlotSize,$Y-$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5959
-      }
5960
-     elseif ( $Shape == SERIE_SHAPE_FILLEDTRIANGLE )
5961
-      {
5962
-       if ( $PlotBorder )
5963
-        {
5964
-         $Pos = ""; $Pos[]=$X; $Pos[]=$Y-$PlotSize-$BorderSize; $Pos[]=$X-$PlotSize-$BorderSize; $Pos[]=$Y+$PlotSize+$BorderSize; $Pos[]=$X+$PlotSize+$BorderSize; $Pos[]=$Y+$PlotSize+$BorderSize;
5965
-         $this->drawPolygon($Pos,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha));
5966
-        }
5967
-
5968
-       $Pos = ""; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X-$PlotSize; $Pos[]=$Y+$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y+$PlotSize;
5969
-       $this->drawPolygon($Pos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5970
-      }
5971
-     elseif ( $Shape == SERIE_SHAPE_TRIANGLE )
5972
-      {
5973
-       $this->drawLine($X,$Y-$PlotSize,$X-$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5974
-       $this->drawLine($X-$PlotSize,$Y+$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5975
-       $this->drawLine($X+$PlotSize,$Y+$PlotSize,$X,$Y-$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5976
-      }
5977
-     elseif ( $Shape == SERIE_SHAPE_SQUARE )
5978
-      $this->drawRectangle($X-$PlotSize,$Y-$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5979
-     elseif ( $Shape == SERIE_SHAPE_CIRCLE )
5980
-      $this->drawCircle($X,$Y,$PlotSize,$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5981
-     elseif ( $Shape == SERIE_SHAPE_DIAMOND )
5982
-      {
5983
-       $Pos = ""; $Pos[]=$X-$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize;
5984
-       $this->drawPolygon($Pos,array("NoFill"=>TRUE,"BorderR"=>$R,"BorderG"=>$G,"BorderB"=>$B,"BorderAlpha"=>$Alpha));
5985
-      }      
5986
-     elseif ( $Shape == SERIE_SHAPE_FILLEDDIAMOND )
5987
-      {
5988
-       if ( $PlotBorder )
5989
-        {
5990
-         $Pos = ""; $Pos[]=$X-$PlotSize-$BorderSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize-$BorderSize; $Pos[]=$X+$PlotSize+$BorderSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize+$BorderSize;
5991
-         $this->drawPolygon($Pos,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha));
5992
-        }
5993
-
5994
-       $Pos = ""; $Pos[]=$X-$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize;
5995
-       $this->drawPolygon($Pos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5996
-      }      
5950
+        if ( $Shape == SERIE_SHAPE_FILLEDCIRCLE )
5951
+        {
5952
+        if ( $PlotBorder ) { $this->drawFilledCircle($X,$Y,$PlotSize+$BorderSize,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
5953
+        $this->drawFilledCircle($X,$Y,$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5954
+        }
5955
+        elseif ( $Shape == SERIE_SHAPE_FILLEDSQUARE )
5956
+        {
5957
+        if ( $PlotBorder ) { $this->drawFilledRectangle($X-$PlotSize-$BorderSize,$Y-$PlotSize-$BorderSize,$X+$PlotSize+$BorderSize,$Y+$PlotSize+$BorderSize,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
5958
+        $this->drawFilledRectangle($X-$PlotSize,$Y-$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5959
+        }
5960
+        elseif ( $Shape == SERIE_SHAPE_FILLEDTRIANGLE )
5961
+        {
5962
+        if ( $PlotBorder )
5963
+        {
5964
+            $Pos = ""; $Pos[]=$X; $Pos[]=$Y-$PlotSize-$BorderSize; $Pos[]=$X-$PlotSize-$BorderSize; $Pos[]=$Y+$PlotSize+$BorderSize; $Pos[]=$X+$PlotSize+$BorderSize; $Pos[]=$Y+$PlotSize+$BorderSize;
5965
+            $this->drawPolygon($Pos,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha));
5966
+        }
5967
+
5968
+        $Pos = ""; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X-$PlotSize; $Pos[]=$Y+$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y+$PlotSize;
5969
+        $this->drawPolygon($Pos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5970
+        }
5971
+        elseif ( $Shape == SERIE_SHAPE_TRIANGLE )
5972
+        {
5973
+        $this->drawLine($X,$Y-$PlotSize,$X-$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5974
+        $this->drawLine($X-$PlotSize,$Y+$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5975
+        $this->drawLine($X+$PlotSize,$Y+$PlotSize,$X,$Y-$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5976
+        }
5977
+        elseif ( $Shape == SERIE_SHAPE_SQUARE )
5978
+        $this->drawRectangle($X-$PlotSize,$Y-$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5979
+        elseif ( $Shape == SERIE_SHAPE_CIRCLE )
5980
+        $this->drawCircle($X,$Y,$PlotSize,$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5981
+        elseif ( $Shape == SERIE_SHAPE_DIAMOND )
5982
+        {
5983
+        $Pos = ""; $Pos[]=$X-$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize;
5984
+        $this->drawPolygon($Pos,array("NoFill"=>TRUE,"BorderR"=>$R,"BorderG"=>$G,"BorderB"=>$B,"BorderAlpha"=>$Alpha));
5985
+        }      
5986
+        elseif ( $Shape == SERIE_SHAPE_FILLEDDIAMOND )
5987
+        {
5988
+        if ( $PlotBorder )
5989
+        {
5990
+            $Pos = ""; $Pos[]=$X-$PlotSize-$BorderSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize-$BorderSize; $Pos[]=$X+$PlotSize+$BorderSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize+$BorderSize;
5991
+            $this->drawPolygon($Pos,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha));
5992
+        }
5993
+
5994
+        $Pos = ""; $Pos[]=$X-$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize;
5995
+        $this->drawPolygon($Pos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
5996
+        }      
5997 5997
     }
5998 5998
 
5999
-   function drawPolygonChart($Points,$Format="")
5999
+    function drawPolygonChart($Points,$Format="")
6000 6000
     {
6001
-     $R			= isset($Format["R"]) ? $Format["R"] : 0;
6002
-     $G			= isset($Format["G"]) ? $Format["G"] : 0;
6003
-     $B			= isset($Format["B"]) ? $Format["B"] : 0;
6004
-     $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
6005
-     $NoFill		= isset($Format["NoFill"]) ? $Format["NoFill"] : FALSE;
6006
-     $NoBorder		= isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE;
6007
-     $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
6008
-     $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
6009
-     $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
6010
-     $BorderAlpha 	= isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha / 2;
6011
-     $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
6012
-     $Threshold         = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
6013
-
6014
-     if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
6015
-
6016
-     $RestoreShadow = $this->Shadow;
6017
-     $this->Shadow = FALSE;
6018
-
6019
-     $AllIntegers = TRUE;
6020
-     for($i=0;$i<=count($Points)-2;$i=$i+2)
6021
-      { if ( $this->getFirstDecimal($Points[$i+1]) != 0 ) { $AllIntegers = FALSE; } }
6022
-
6023
-     /* Convert polygon to segments */
6024
-     $Segments = "";
6025
-     for($i=2;$i<=count($Points)-2;$i=$i+2)
6026
-      { $Segments[] = array("X1"=>$Points[$i-2],"Y1"=>$Points[$i-1],"X2"=>$Points[$i],"Y2"=>$Points[$i+1]); }
6027
-     $Segments[] = array("X1"=>$Points[$i-2],"Y1"=>$Points[$i-1],"X2"=>$Points[0],"Y2"=>$Points[1]);
6028
-
6029
-     /* Simplify straight lines */
6030
-     $Result = ""; $inHorizon = FALSE; $LastX = VOID;
6031
-     foreach($Segments as $Key => $Pos)
6032
-      {
6033
-       if ( $Pos["Y1"] != $Pos["Y2"] )
6034
-        {
6035
-         if ( $inHorizon ) { $inHorizon = FALSE; $Result[] = array("X1"=>$LastX,"Y1"=>$Pos["Y1"],"X2"=>$Pos["X1"],"Y2"=>$Pos["Y1"]); }
6036
-
6037
-         $Result[] = array("X1"=>$Pos["X1"],"Y1"=>$Pos["Y1"],"X2"=>$Pos["X2"],"Y2"=>$Pos["Y2"]);
6038
-        }
6039
-       else { if ( !$inHorizon ) { $inHorizon = TRUE; $LastX = $Pos["X1"];} }
6040
-      }
6041
-     $Segments = $Result;
6042
-
6043
-     /* Do we have something to draw */
6044
-     if ( $Segments == "" ) { return(0); }
6045
-
6046
-     /* For segments debugging purpose */
6047
-     //foreach($Segments as $Key => $Pos)
6048
-     // echo $Pos["X1"].",".$Pos["Y1"].",".$Pos["X2"].",".$Pos["Y2"]."\r\n";
6049
-
6050
-     /* Find out the min & max Y boundaries */
6051
-     $MinY = OUT_OF_SIGHT; $MaxY = OUT_OF_SIGHT;
6052
-     foreach($Segments as $Key => $Coords)
6053
-      {
6054
-       if ( $MinY == OUT_OF_SIGHT || $MinY > min($Coords["Y1"],$Coords["Y2"]) ) { $MinY = min($Coords["Y1"],$Coords["Y2"]); }
6055
-       if ( $MaxY == OUT_OF_SIGHT || $MaxY < max($Coords["Y1"],$Coords["Y2"]) ) { $MaxY = max($Coords["Y1"],$Coords["Y2"]); }
6056
-      }
6057
-
6058
-     if ( $AllIntegers ) { $YStep = 1; } else { $YStep = .5; }
6059
-
6060
-     $MinY = floor($MinY); $MaxY = floor($MaxY);
6061
-
6062
-     /* Scan each Y lines */
6063
-     $DefaultColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
6064
-     $DebugLine = 0; $DebugColor = $this->allocateColor($this->Picture,255,0,0,100);
6065
-
6066
-     $MinY = floor($MinY); $MaxY = floor($MaxY); $YStep = 1; 
6067
-
6068
-     if ( !$NoFill )
6069
-      {
6070
-       //if ( $DebugLine ) { $MinY = $DebugLine; $MaxY = $DebugLine; }
6071
-       for($Y=$MinY;$Y<=$MaxY;$Y=$Y+$YStep)
6072
-        {
6073
-         $Intersections = ""; $LastSlope = NULL; $RestoreLast = "-";
6074
-         foreach($Segments as $Key => $Coords)
6075
-          {
6076
-           $X1 = $Coords["X1"]; $X2 = $Coords["X2"]; $Y1 = $Coords["Y1"]; $Y2 = $Coords["Y2"];
6077
-
6078
-           if ( min($Y1,$Y2) <= $Y && max($Y1,$Y2) >= $Y )
6079
-            {
6080
-             if ( $Y1 == $Y2 )
6081
-              { $X = $X1; }
6082
-             else
6083
-              { $X = $X1 + ( ($Y-$Y1)*$X2 - ($Y-$Y1)*$X1 ) / ($Y2-$Y1); }
6084
-
6085
-             $X = floor($X);
6086
-
6087
-             if ( $X2 == $X1 )
6088
-              { $Slope = "!"; }
6089
-             else
6090
-              {
6091
-               $SlopeC = ($Y2 - $Y1) / ($X2 - $X1);
6092
-               if( $SlopeC == 0 )
6001
+        $R			= isset($Format["R"]) ? $Format["R"] : 0;
6002
+        $G			= isset($Format["G"]) ? $Format["G"] : 0;
6003
+        $B			= isset($Format["B"]) ? $Format["B"] : 0;
6004
+        $Alpha		= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
6005
+        $NoFill		= isset($Format["NoFill"]) ? $Format["NoFill"] : FALSE;
6006
+        $NoBorder		= isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE;
6007
+        $BorderR		= isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
6008
+        $BorderG		= isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
6009
+        $BorderB		= isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
6010
+        $BorderAlpha 	= isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha / 2;
6011
+        $Surrounding	= isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
6012
+        $Threshold         = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
6013
+
6014
+        if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
6015
+
6016
+        $RestoreShadow = $this->Shadow;
6017
+        $this->Shadow = FALSE;
6018
+
6019
+        $AllIntegers = TRUE;
6020
+        for($i=0;$i<=count($Points)-2;$i=$i+2)
6021
+        { if ( $this->getFirstDecimal($Points[$i+1]) != 0 ) { $AllIntegers = FALSE; } }
6022
+
6023
+        /* Convert polygon to segments */
6024
+        $Segments = "";
6025
+        for($i=2;$i<=count($Points)-2;$i=$i+2)
6026
+        { $Segments[] = array("X1"=>$Points[$i-2],"Y1"=>$Points[$i-1],"X2"=>$Points[$i],"Y2"=>$Points[$i+1]); }
6027
+        $Segments[] = array("X1"=>$Points[$i-2],"Y1"=>$Points[$i-1],"X2"=>$Points[0],"Y2"=>$Points[1]);
6028
+
6029
+        /* Simplify straight lines */
6030
+        $Result = ""; $inHorizon = FALSE; $LastX = VOID;
6031
+        foreach($Segments as $Key => $Pos)
6032
+        {
6033
+        if ( $Pos["Y1"] != $Pos["Y2"] )
6034
+        {
6035
+            if ( $inHorizon ) { $inHorizon = FALSE; $Result[] = array("X1"=>$LastX,"Y1"=>$Pos["Y1"],"X2"=>$Pos["X1"],"Y2"=>$Pos["Y1"]); }
6036
+
6037
+            $Result[] = array("X1"=>$Pos["X1"],"Y1"=>$Pos["Y1"],"X2"=>$Pos["X2"],"Y2"=>$Pos["Y2"]);
6038
+        }
6039
+        else { if ( !$inHorizon ) { $inHorizon = TRUE; $LastX = $Pos["X1"];} }
6040
+        }
6041
+        $Segments = $Result;
6042
+
6043
+        /* Do we have something to draw */
6044
+        if ( $Segments == "" ) { return(0); }
6045
+
6046
+        /* For segments debugging purpose */
6047
+        //foreach($Segments as $Key => $Pos)
6048
+        // echo $Pos["X1"].",".$Pos["Y1"].",".$Pos["X2"].",".$Pos["Y2"]."\r\n";
6049
+
6050
+        /* Find out the min & max Y boundaries */
6051
+        $MinY = OUT_OF_SIGHT; $MaxY = OUT_OF_SIGHT;
6052
+        foreach($Segments as $Key => $Coords)
6053
+        {
6054
+        if ( $MinY == OUT_OF_SIGHT || $MinY > min($Coords["Y1"],$Coords["Y2"]) ) { $MinY = min($Coords["Y1"],$Coords["Y2"]); }
6055
+        if ( $MaxY == OUT_OF_SIGHT || $MaxY < max($Coords["Y1"],$Coords["Y2"]) ) { $MaxY = max($Coords["Y1"],$Coords["Y2"]); }
6056
+        }
6057
+
6058
+        if ( $AllIntegers ) { $YStep = 1; } else { $YStep = .5; }
6059
+
6060
+        $MinY = floor($MinY); $MaxY = floor($MaxY);
6061
+
6062
+        /* Scan each Y lines */
6063
+        $DefaultColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
6064
+        $DebugLine = 0; $DebugColor = $this->allocateColor($this->Picture,255,0,0,100);
6065
+
6066
+        $MinY = floor($MinY); $MaxY = floor($MaxY); $YStep = 1; 
6067
+
6068
+        if ( !$NoFill )
6069
+        {
6070
+        //if ( $DebugLine ) { $MinY = $DebugLine; $MaxY = $DebugLine; }
6071
+        for($Y=$MinY;$Y<=$MaxY;$Y=$Y+$YStep)
6072
+        {
6073
+            $Intersections = ""; $LastSlope = NULL; $RestoreLast = "-";
6074
+            foreach($Segments as $Key => $Coords)
6075
+            {
6076
+            $X1 = $Coords["X1"]; $X2 = $Coords["X2"]; $Y1 = $Coords["Y1"]; $Y2 = $Coords["Y2"];
6077
+
6078
+            if ( min($Y1,$Y2) <= $Y && max($Y1,$Y2) >= $Y )
6079
+            {
6080
+                if ( $Y1 == $Y2 )
6081
+                { $X = $X1; }
6082
+                else
6083
+                { $X = $X1 + ( ($Y-$Y1)*$X2 - ($Y-$Y1)*$X1 ) / ($Y2-$Y1); }
6084
+
6085
+                $X = floor($X);
6086
+
6087
+                if ( $X2 == $X1 )
6088
+                { $Slope = "!"; }
6089
+                else
6090
+                {
6091
+                $SlopeC = ($Y2 - $Y1) / ($X2 - $X1);
6092
+                if( $SlopeC == 0 )
6093 6093
                 { $Slope = "="; }
6094
-               elseif( $SlopeC > 0 )
6094
+                elseif( $SlopeC > 0 )
6095 6095
                 { $Slope = "+"; }
6096
-               elseif ( $SlopeC < 0 )
6096
+                elseif ( $SlopeC < 0 )
6097 6097
                 { $Slope = "-"; }
6098
-              }
6098
+                }
6099 6099
 
6100
-             if ( !is_array($Intersections) )
6101
-              { $Intersections[] = $X; }
6102
-             elseif( !in_array($X,$Intersections) )
6103
-              { $Intersections[] = $X; }
6104
-             elseif( in_array($X,$Intersections) )
6105
-              {
6106
-               if ($Y == $DebugLine) { echo $Slope."/".$LastSlope."(".$X.") "; }
6100
+                if ( !is_array($Intersections) )
6101
+                { $Intersections[] = $X; }
6102
+                elseif( !in_array($X,$Intersections) )
6103
+                { $Intersections[] = $X; }
6104
+                elseif( in_array($X,$Intersections) )
6105
+                {
6106
+                if ($Y == $DebugLine) { echo $Slope."/".$LastSlope."(".$X.") "; }
6107 6107
 
6108
-               if ( $Slope == "=" && $LastSlope == "-"  )                             { $Intersections[] = $X; }
6109
-               if ( $Slope != $LastSlope && $LastSlope != "!" && $LastSlope != "=" )  { $Intersections[] = $X; }
6110
-               if ( $Slope != $LastSlope && $LastSlope == "!" && $Slope == "+" )      { $Intersections[] = $X; }
6111
-              }
6108
+                if ( $Slope == "=" && $LastSlope == "-"  )                             { $Intersections[] = $X; }
6109
+                if ( $Slope != $LastSlope && $LastSlope != "!" && $LastSlope != "=" )  { $Intersections[] = $X; }
6110
+                if ( $Slope != $LastSlope && $LastSlope == "!" && $Slope == "+" )      { $Intersections[] = $X; }
6111
+                }
6112 6112
 
6113
-             if ( is_array($Intersections) && in_array($X,$Intersections) && $LastSlope == "=" && ($Slope == "-" )) { $Intersections[] = $X; }
6113
+                if ( is_array($Intersections) && in_array($X,$Intersections) && $LastSlope == "=" && ($Slope == "-" )) { $Intersections[] = $X; }
6114 6114
 
6115
-             $LastSlope = $Slope;
6115
+                $LastSlope = $Slope;
6116
+            }
6116 6117
             }
6117
-          }
6118
-         if ( $RestoreLast != "-" ) { $Intersections[] = $RestoreLast; echo "@".$Y."\r\n"; }
6118
+            if ( $RestoreLast != "-" ) { $Intersections[] = $RestoreLast; echo "@".$Y."\r\n"; }
6119 6119
 
6120
-         if ( is_array($Intersections) )
6121
-          {
6122
-           sort($Intersections);
6120
+            if ( is_array($Intersections) )
6121
+            {
6122
+            sort($Intersections);
6123 6123
 
6124
-           if ($Y == $DebugLine) { print_r($Intersections); }
6124
+            if ($Y == $DebugLine) { print_r($Intersections); }
6125 6125
 
6126
-           /* Remove NULL plots */
6127
-           $Result = "";
6128
-           for($i=0;$i<=count($Intersections)-1;$i=$i+2)
6126
+            /* Remove NULL plots */
6127
+            $Result = "";
6128
+            for($i=0;$i<=count($Intersections)-1;$i=$i+2)
6129 6129
             {
6130
-             if ( isset($Intersections[$i+1]) )
6131
-              { if ( $Intersections[$i] != $Intersections[$i+1] ) { $Result[] = $Intersections[$i]; $Result[] = $Intersections[$i+1]; } }
6130
+                if ( isset($Intersections[$i+1]) )
6131
+                { if ( $Intersections[$i] != $Intersections[$i+1] ) { $Result[] = $Intersections[$i]; $Result[] = $Intersections[$i+1]; } }
6132 6132
             }
6133 6133
 
6134
-           if ( is_array($Result) )
6134
+            if ( is_array($Result) )
6135 6135
             {
6136
-             $Intersections = $Result;
6136
+                $Intersections = $Result;
6137 6137
 
6138
-             $LastX = OUT_OF_SIGHT;
6139
-             foreach($Intersections as $Key => $X)
6140
-              {
6141
-               if ( $LastX == OUT_OF_SIGHT )
6138
+                $LastX = OUT_OF_SIGHT;
6139
+                foreach($Intersections as $Key => $X)
6140
+                {
6141
+                if ( $LastX == OUT_OF_SIGHT )
6142 6142
                 $LastX = $X;
6143
-               elseif ( $LastX != OUT_OF_SIGHT )
6143
+                elseif ( $LastX != OUT_OF_SIGHT )
6144 6144
                 {
6145
-                 if ( $this->getFirstDecimal($LastX) > 1 ) { $LastX++; }
6145
+                    if ( $this->getFirstDecimal($LastX) > 1 ) { $LastX++; }
6146 6146
 
6147
-                 $Color = $DefaultColor;
6148
-                 if ( $Threshold != NULL )
6149
-                  {
6150
-                   foreach($Threshold as $Key => $Parameters)
6147
+                    $Color = $DefaultColor;
6148
+                    if ( $Threshold != NULL )
6151 6149
                     {
6152
-                     if ( $Y <= $Parameters["MinX"] && $Y >= $Parameters["MaxX"])
6153
-                      {
6154
-                       if ( isset($Parameters["R"]) ) { $R = $Parameters["R"]; } else { $R = 0; }
6155
-                       if ( isset($Parameters["G"]) ) { $G = $Parameters["G"]; } else { $G = 0; }
6156
-                       if ( isset($Parameters["B"]) ) { $B = $Parameters["B"]; } else { $B = 0; }
6157
-                       if ( isset($Parameters["Alpha"]) ) { $Alpha = $Parameters["Alpha"]; } else { $Alpha = 100; }
6158
-                       $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
6159
-                      }
6150
+                    foreach($Threshold as $Key => $Parameters)
6151
+                    {
6152
+                        if ( $Y <= $Parameters["MinX"] && $Y >= $Parameters["MaxX"])
6153
+                        {
6154
+                        if ( isset($Parameters["R"]) ) { $R = $Parameters["R"]; } else { $R = 0; }
6155
+                        if ( isset($Parameters["G"]) ) { $G = $Parameters["G"]; } else { $G = 0; }
6156
+                        if ( isset($Parameters["B"]) ) { $B = $Parameters["B"]; } else { $B = 0; }
6157
+                        if ( isset($Parameters["Alpha"]) ) { $Alpha = $Parameters["Alpha"]; } else { $Alpha = 100; }
6158
+                        $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
6159
+                        }
6160
+                    }
6160 6161
                     }
6161
-                  }
6162 6162
 
6163
-                 imageline($this->Picture,$LastX,$Y,$X,$Y,$Color);
6163
+                    imageline($this->Picture,$LastX,$Y,$X,$Y,$Color);
6164 6164
 
6165
-                 if ( $Y == $DebugLine) { imageline($this->Picture,$LastX,$Y,$X,$Y,$DebugColor); }
6165
+                    if ( $Y == $DebugLine) { imageline($this->Picture,$LastX,$Y,$X,$Y,$DebugColor); }
6166 6166
 
6167
-                 $LastX = OUT_OF_SIGHT;
6167
+                    $LastX = OUT_OF_SIGHT;
6168 6168
                 }
6169
-              }
6169
+                }
6170
+            }
6170 6171
             }
6171
-          }
6172 6172
         }
6173
-      }
6173
+        }
6174 6174
 
6175
-     /* Draw the polygon border, if required */
6176
-     if ( !$NoBorder)
6177
-      {
6178
-       foreach($Segments as $Key => $Coords)
6175
+        /* Draw the polygon border, if required */
6176
+        if ( !$NoBorder)
6177
+        {
6178
+        foreach($Segments as $Key => $Coords)
6179 6179
         $this->drawLine($Coords["X1"],$Coords["Y1"],$Coords["X2"],$Coords["Y2"],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Threshold"=>$Threshold));
6180
-      }
6180
+        }
6181 6181
 
6182
-     $this->Shadow = $RestoreShadow;
6182
+        $this->Shadow = $RestoreShadow;
6183 6183
     }
6184 6184
 
6185
-   /* Return the abscissa margin */
6186
-   function getAbscissaMargin($Data)
6185
+    /* Return the abscissa margin */
6186
+    function getAbscissaMargin($Data)
6187 6187
     {
6188
-     foreach($Data["Axis"] as $AxisID => $Values) { if ( $Values["Identity"] == AXIS_X ) { return($Values["Margin"]); } }
6189
-     return(0);
6188
+        foreach($Data["Axis"] as $AxisID => $Values) { if ( $Values["Identity"] == AXIS_X ) { return($Values["Margin"]); } }
6189
+        return(0);
6190 6190
     }
6191 6191
 
6192
-  }
6192
+    }
6193 6193
 ?>
6194 6194
\ No newline at end of file
Please login to merge, or discard this patch.
default/boinc/modules/boincstats/includes/pchart/class/pImage.class.php 2 patches
Doc Comments   +17 added lines patch added patch discarded remove patch
@@ -82,6 +82,12 @@  discard block
 block discarded – undo
82 82
    var $LastChartLayout	= CHART_LAST_LAYOUT_REGULAR;	// Last layout : regular or stacked
83 83
 
84 84
    /* Class constructor */
85
+
86
+   /**
87
+    * @param integer $XSize
88
+    * @param integer $YSize
89
+    * @param pData $DataSet
90
+    */
85 91
    function pImage($XSize,$YSize,$DataSet=NULL,$TransparentBackground=FALSE)
86 92
     {
87 93
      $this->TransparentBackground = $TransparentBackground;
@@ -126,6 +132,13 @@  discard block
 block discarded – undo
126 132
     }
127 133
 
128 134
    /* Set the graph area position */
135
+
136
+   /**
137
+    * @param integer $X1
138
+    * @param integer $Y1
139
+    * @param integer $X2
140
+    * @param integer $Y2
141
+    */
129 142
    function setGraphArea($X1,$Y1,$X2,$Y2)
130 143
     {
131 144
      if ( $X2 < $X1 || $X1 == $X2 || $Y2 < $Y1 || $Y1 == $Y2 ) { return(-1); }
@@ -145,6 +158,10 @@  discard block
 block discarded – undo
145 158
     { return($this->YSize); }
146 159
 
147 160
    /* Render the picture to a file */
161
+
162
+   /**
163
+    * @param string $FileName
164
+    */
148 165
    function render($FileName)
149 166
     {
150 167
      if ( $this->TransparentBackground ) { imagealphablending($this->Picture,false); imagesavealpha($this->Picture,true); }
Please login to merge, or discard this patch.
Indentation   +361 added lines, -361 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
- /*
2
+    /*
3 3
      pDraw - pChart core class
4 4
 
5 5
      Version     : 2.1.3
@@ -13,460 +13,460 @@  discard block
 block discarded – undo
13 13
      You can find the whole class documentation on the pChart web site.
14 14
  */
15 15
 
16
- /* The GD extension is mandatory */
17
- if (!extension_loaded('gd') && !extension_loaded('gd2'))
18
-  {
19
-   echo "GD extension must be loaded. \r\n";
20
-   exit();
21
-  }
22
-
23
- /* Image map handling */
24
- define("IMAGE_MAP_STORAGE_FILE"	, 680001);
25
- define("IMAGE_MAP_STORAGE_SESSION"	, 680002);
26
-
27
- /* Last generated chart layout */
28
- define("CHART_LAST_LAYOUT_REGULAR"	, 680011);
29
- define("CHART_LAST_LAYOUT_STACKED"	, 680012);
30
-
31
- /* ImageMap string delimiter */
32
- define("IMAGE_MAP_DELIMITER"		, chr(1));
33
-
34
- class pImage extends pDraw
35
-  {
36
-   /* Image settings, size, quality, .. */
37
-   var $XSize		= NULL;				// Width of the picture
38
-   var $YSize		= NULL;				// Height of the picture
39
-   var $Picture		= NULL;				// GD picture object
40
-   var $Antialias	= TRUE;				// Turn antialias on or off
41
-   var $AntialiasQuality  = 0;				// Quality of the antialiasing implementation (0-1)
42
-   var $Mask		= "";				// Already drawn pixels mask (Filled circle implementation)
43
-   var $TransparentBackground = FALSE;			// Just to know if we need to flush the alpha channels when rendering
44
-
45
-   /* Graph area settings */
46
-   var $GraphAreaX1	= NULL;				// Graph area X origin
47
-   var $GraphAreaY1	= NULL;				// Graph area Y origin
48
-   var $GraphAreaX2	= NULL;				// Graph area bottom right X position
49
-   var $GraphAreaY2	= NULL;				// Graph area bottom right Y position
50
-
51
-   /* Scale settings */
52
-   var $ScaleMinDivHeight = 20;				// Minimum height for scame divs
53
-
54
-   /* Font properties */
55
-   var $FontName	= "sites/all/libraries/fonts/DejaVuSans.ttf";	// Default font file
56
-   var $FontSize	= 12;				// Default font size
57
-   var $FontBox		= NULL;				// Return the bounding box of the last written string
58
-   var $FontColorR	= 0;				// Default color settings
59
-   var $FontColorG	= 0;				// Default color settings
60
-   var $FontColorB	= 0;				// Default color settings
61
-   var $FontColorA	= 100;				// Default transparency
62
-
63
-   /* Shadow properties */
64
-   var $Shadow		= FALSE;			// Turn shadows on or off
65
-   var $ShadowX		= NULL;				// X Offset of the shadow
66
-   var $ShadowY		= NULL;				// Y Offset of the shadow
67
-   var $ShadowR		= NULL;				// R component of the shadow
68
-   var $ShadowG		= NULL;				// G component of the shadow
69
-   var $ShadowB		= NULL;				// B component of the shadow
70
-   var $Shadowa		= NULL;				// Alpha level of the shadow
71
-
72
-   /* Image map */
73
-   var $ImageMap	= NULL;				// Aray containing the image map
74
-   var $ImageMapIndex	= "pChart";			// Name of the session array
75
-   var $ImageMapStorageMode = NULL;			// Save the current imagemap storage mode
76
-   var $ImageMapAutoDelete  = TRUE;			// Automatic deletion of the image map temp files
77
-
78
-   /* Data Set */
79
-   var $DataSet		= NULL;				// Attached dataset
80
-
81
-   /* Last generated chart info */
82
-   var $LastChartLayout	= CHART_LAST_LAYOUT_REGULAR;	// Last layout : regular or stacked
83
-
84
-   /* Class constructor */
85
-   function pImage($XSize,$YSize,$DataSet=NULL,$TransparentBackground=FALSE)
16
+    /* The GD extension is mandatory */
17
+    if (!extension_loaded('gd') && !extension_loaded('gd2'))
86 18
     {
87
-     $this->TransparentBackground = $TransparentBackground;
88
-
89
-     if ( $DataSet != NULL ) { $this->DataSet = $DataSet; }
90
-
91
-     $this->XSize   = $XSize;
92
-     $this->YSize   = $YSize;
93
-     $this->Picture = imagecreatetruecolor($XSize,$YSize);
94
-
95
-     if ( $this->TransparentBackground )
96
-      {
97
-       imagealphablending($this->Picture,FALSE);
98
-       imagefilledrectangle($this->Picture, 0,0,$XSize, $YSize, imagecolorallocatealpha($this->Picture, 255, 255, 255, 127));
99
-       imagealphablending($this->Picture,TRUE);
100
-       imagesavealpha($this->Picture,true); 
101
-      }
102
-     else
103
-      {
104
-       $C_White = $this->AllocateColor($this->Picture,255,255,255);
105
-       imagefilledrectangle($this->Picture,0,0,$XSize,$YSize,$C_White);
106
-      }
19
+    echo "GD extension must be loaded. \r\n";
20
+    exit();
107 21
     }
108 22
 
109
-   /* Enable / Disable and set shadow properties */
110
-   function setShadow($Enabled=TRUE,$Format="")
23
+    /* Image map handling */
24
+    define("IMAGE_MAP_STORAGE_FILE"	, 680001);
25
+    define("IMAGE_MAP_STORAGE_SESSION"	, 680002);
26
+
27
+    /* Last generated chart layout */
28
+    define("CHART_LAST_LAYOUT_REGULAR"	, 680011);
29
+    define("CHART_LAST_LAYOUT_STACKED"	, 680012);
30
+
31
+    /* ImageMap string delimiter */
32
+    define("IMAGE_MAP_DELIMITER"		, chr(1));
33
+
34
+    class pImage extends pDraw
35
+    {
36
+    /* Image settings, size, quality, .. */
37
+    var $XSize		= NULL;				// Width of the picture
38
+    var $YSize		= NULL;				// Height of the picture
39
+    var $Picture		= NULL;				// GD picture object
40
+    var $Antialias	= TRUE;				// Turn antialias on or off
41
+    var $AntialiasQuality  = 0;				// Quality of the antialiasing implementation (0-1)
42
+    var $Mask		= "";				// Already drawn pixels mask (Filled circle implementation)
43
+    var $TransparentBackground = FALSE;			// Just to know if we need to flush the alpha channels when rendering
44
+
45
+    /* Graph area settings */
46
+    var $GraphAreaX1	= NULL;				// Graph area X origin
47
+    var $GraphAreaY1	= NULL;				// Graph area Y origin
48
+    var $GraphAreaX2	= NULL;				// Graph area bottom right X position
49
+    var $GraphAreaY2	= NULL;				// Graph area bottom right Y position
50
+
51
+    /* Scale settings */
52
+    var $ScaleMinDivHeight = 20;				// Minimum height for scame divs
53
+
54
+    /* Font properties */
55
+    var $FontName	= "sites/all/libraries/fonts/DejaVuSans.ttf";	// Default font file
56
+    var $FontSize	= 12;				// Default font size
57
+    var $FontBox		= NULL;				// Return the bounding box of the last written string
58
+    var $FontColorR	= 0;				// Default color settings
59
+    var $FontColorG	= 0;				// Default color settings
60
+    var $FontColorB	= 0;				// Default color settings
61
+    var $FontColorA	= 100;				// Default transparency
62
+
63
+    /* Shadow properties */
64
+    var $Shadow		= FALSE;			// Turn shadows on or off
65
+    var $ShadowX		= NULL;				// X Offset of the shadow
66
+    var $ShadowY		= NULL;				// Y Offset of the shadow
67
+    var $ShadowR		= NULL;				// R component of the shadow
68
+    var $ShadowG		= NULL;				// G component of the shadow
69
+    var $ShadowB		= NULL;				// B component of the shadow
70
+    var $Shadowa		= NULL;				// Alpha level of the shadow
71
+
72
+    /* Image map */
73
+    var $ImageMap	= NULL;				// Aray containing the image map
74
+    var $ImageMapIndex	= "pChart";			// Name of the session array
75
+    var $ImageMapStorageMode = NULL;			// Save the current imagemap storage mode
76
+    var $ImageMapAutoDelete  = TRUE;			// Automatic deletion of the image map temp files
77
+
78
+    /* Data Set */
79
+    var $DataSet		= NULL;				// Attached dataset
80
+
81
+    /* Last generated chart info */
82
+    var $LastChartLayout	= CHART_LAST_LAYOUT_REGULAR;	// Last layout : regular or stacked
83
+
84
+    /* Class constructor */
85
+    function pImage($XSize,$YSize,$DataSet=NULL,$TransparentBackground=FALSE)
111 86
     {
112
-     $X	    = isset($Format["X"]) ? $Format["X"] : 2;
113
-     $Y	    = isset($Format["Y"]) ? $Format["Y"] : 2;
114
-     $R	    = isset($Format["R"]) ? $Format["R"] : 0;
115
-     $G	    = isset($Format["G"]) ? $Format["G"] : 0;
116
-     $B	    = isset($Format["B"]) ? $Format["B"] : 0;
117
-     $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 10;
118
-
119
-     $this->Shadow  = $Enabled;
120
-     $this->ShadowX = $X;
121
-     $this->ShadowY = $Y;
122
-     $this->ShadowR = $R;
123
-     $this->ShadowG = $G;
124
-     $this->ShadowB = $B;
125
-     $this->Shadowa = $Alpha;
87
+        $this->TransparentBackground = $TransparentBackground;
88
+
89
+        if ( $DataSet != NULL ) { $this->DataSet = $DataSet; }
90
+
91
+        $this->XSize   = $XSize;
92
+        $this->YSize   = $YSize;
93
+        $this->Picture = imagecreatetruecolor($XSize,$YSize);
94
+
95
+        if ( $this->TransparentBackground )
96
+        {
97
+        imagealphablending($this->Picture,FALSE);
98
+        imagefilledrectangle($this->Picture, 0,0,$XSize, $YSize, imagecolorallocatealpha($this->Picture, 255, 255, 255, 127));
99
+        imagealphablending($this->Picture,TRUE);
100
+        imagesavealpha($this->Picture,true); 
101
+        }
102
+        else
103
+        {
104
+        $C_White = $this->AllocateColor($this->Picture,255,255,255);
105
+        imagefilledrectangle($this->Picture,0,0,$XSize,$YSize,$C_White);
106
+        }
126 107
     }
127 108
 
128
-   /* Set the graph area position */
129
-   function setGraphArea($X1,$Y1,$X2,$Y2)
109
+    /* Enable / Disable and set shadow properties */
110
+    function setShadow($Enabled=TRUE,$Format="")
130 111
     {
131
-     if ( $X2 < $X1 || $X1 == $X2 || $Y2 < $Y1 || $Y1 == $Y2 ) { return(-1); }
112
+        $X	    = isset($Format["X"]) ? $Format["X"] : 2;
113
+        $Y	    = isset($Format["Y"]) ? $Format["Y"] : 2;
114
+        $R	    = isset($Format["R"]) ? $Format["R"] : 0;
115
+        $G	    = isset($Format["G"]) ? $Format["G"] : 0;
116
+        $B	    = isset($Format["B"]) ? $Format["B"] : 0;
117
+        $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 10;
118
+
119
+        $this->Shadow  = $Enabled;
120
+        $this->ShadowX = $X;
121
+        $this->ShadowY = $Y;
122
+        $this->ShadowR = $R;
123
+        $this->ShadowG = $G;
124
+        $this->ShadowB = $B;
125
+        $this->Shadowa = $Alpha;
126
+    }
132 127
 
133
-     $this->GraphAreaX1 = $X1; $this->DataSet->Data["GraphArea"]["X1"] = $X1;
134
-     $this->GraphAreaY1 = $Y1; $this->DataSet->Data["GraphArea"]["Y1"] = $Y1;
135
-     $this->GraphAreaX2 = $X2; $this->DataSet->Data["GraphArea"]["X2"] = $X2;
136
-     $this->GraphAreaY2 = $Y2; $this->DataSet->Data["GraphArea"]["Y2"] = $Y2;
128
+    /* Set the graph area position */
129
+    function setGraphArea($X1,$Y1,$X2,$Y2)
130
+    {
131
+        if ( $X2 < $X1 || $X1 == $X2 || $Y2 < $Y1 || $Y1 == $Y2 ) { return(-1); }
132
+
133
+        $this->GraphAreaX1 = $X1; $this->DataSet->Data["GraphArea"]["X1"] = $X1;
134
+        $this->GraphAreaY1 = $Y1; $this->DataSet->Data["GraphArea"]["Y1"] = $Y1;
135
+        $this->GraphAreaX2 = $X2; $this->DataSet->Data["GraphArea"]["X2"] = $X2;
136
+        $this->GraphAreaY2 = $Y2; $this->DataSet->Data["GraphArea"]["Y2"] = $Y2;
137 137
     }
138 138
 
139
-   /* Return the width of the picture */
140
-   function getWidth()
139
+    /* Return the width of the picture */
140
+    function getWidth()
141 141
     { return($this->XSize); }
142 142
 
143
-   /* Return the heigth of the picture */
144
-   function getHeight()
143
+    /* Return the heigth of the picture */
144
+    function getHeight()
145 145
     { return($this->YSize); }
146 146
 
147
-   /* Render the picture to a file */
148
-   function render($FileName)
147
+    /* Render the picture to a file */
148
+    function render($FileName)
149 149
     {
150
-     if ( $this->TransparentBackground ) { imagealphablending($this->Picture,false); imagesavealpha($this->Picture,true); }
151
-     imagepng($this->Picture,$FileName);
150
+        if ( $this->TransparentBackground ) { imagealphablending($this->Picture,false); imagesavealpha($this->Picture,true); }
151
+        imagepng($this->Picture,$FileName);
152 152
     }
153 153
 
154
-   /* Render the picture to a web browser stream */
155
-   function stroke($BrowserExpire=FALSE)
154
+    /* Render the picture to a web browser stream */
155
+    function stroke($BrowserExpire=FALSE)
156 156
     {
157
-     if ( $this->TransparentBackground ) { imagealphablending($this->Picture,false); imagesavealpha($this->Picture,true); }
157
+        if ( $this->TransparentBackground ) { imagealphablending($this->Picture,false); imagesavealpha($this->Picture,true); }
158 158
 
159
-     if ( $BrowserExpire )
160
-      {
161
-       header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
162
-       header("Cache-Control: no-cache");
163
-       header("Pragma: no-cache");
164
-      }
159
+        if ( $BrowserExpire )
160
+        {
161
+        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
162
+        header("Cache-Control: no-cache");
163
+        header("Pragma: no-cache");
164
+        }
165 165
 
166
-     header('Content-type: image/png');
167
-     imagepng($this->Picture);
166
+        header('Content-type: image/png');
167
+        imagepng($this->Picture);
168 168
     }
169 169
 
170
-   /* Automatic output method based on the calling interface */
171
-   function autoOutput($FileName="output.png")
170
+    /* Automatic output method based on the calling interface */
171
+    function autoOutput($FileName="output.png")
172 172
     {
173
-     if (php_sapi_name() == "cli")
174
-      $this->Render($FileName);
175
-     else
176
-      $this->Stroke();
173
+        if (php_sapi_name() == "cli")
174
+        $this->Render($FileName);
175
+        else
176
+        $this->Stroke();
177 177
     }
178 178
 
179
-   /* Return the length between two points */
180
-   function getLength($X1,$Y1,$X2,$Y2)
179
+    /* Return the length between two points */
180
+    function getLength($X1,$Y1,$X2,$Y2)
181 181
     { return(sqrt(pow(max($X1,$X2)-min($X1,$X2),2)+pow(max($Y1,$Y2)-min($Y1,$Y2),2))); }
182 182
 
183
-   /* Return the orientation of a line */
184
-   function getAngle($X1,$Y1,$X2,$Y2)
183
+    /* Return the orientation of a line */
184
+    function getAngle($X1,$Y1,$X2,$Y2)
185 185
     {
186
-     $Opposite = $Y2 - $Y1; $Adjacent = $X2 - $X1;$Angle = rad2deg(atan2($Opposite,$Adjacent));
187
-     if ($Angle > 0) { return($Angle); } else { return(360-abs($Angle)); }
186
+        $Opposite = $Y2 - $Y1; $Adjacent = $X2 - $X1;$Angle = rad2deg(atan2($Opposite,$Adjacent));
187
+        if ($Angle > 0) { return($Angle); } else { return(360-abs($Angle)); }
188 188
     }
189 189
 
190
-   /* Return the surrounding box of text area */
191
-   function getTextBox_deprecated($X,$Y,$FontName,$FontSize,$Angle,$Text)
190
+    /* Return the surrounding box of text area */
191
+    function getTextBox_deprecated($X,$Y,$FontName,$FontSize,$Angle,$Text)
192 192
     {
193
-     $Size    = imagettfbbox($FontSize,$Angle,$FontName,$Text);
194
-     $Width   = $this->getLength($Size[0],$Size[1],$Size[2],$Size[3])+1;
195
-     $Height  = $this->getLength($Size[2],$Size[3],$Size[4],$Size[5])+1;
193
+        $Size    = imagettfbbox($FontSize,$Angle,$FontName,$Text);
194
+        $Width   = $this->getLength($Size[0],$Size[1],$Size[2],$Size[3])+1;
195
+        $Height  = $this->getLength($Size[2],$Size[3],$Size[4],$Size[5])+1;
196 196
 
197
-     $RealPos[0]["X"] = $X; $RealPos[0]["Y"] = $Y;
198
-     $RealPos[1]["X"] = cos((360-$Angle)*PI/180)*$Width + $RealPos[0]["X"]; $RealPos[1]["Y"] = sin((360-$Angle)*PI/180)*$Width + $RealPos[0]["Y"];
199
-     $RealPos[2]["X"] = cos((270-$Angle)*PI/180)*$Height + $RealPos[1]["X"]; $RealPos[2]["Y"] = sin((270-$Angle)*PI/180)*$Height + $RealPos[1]["Y"];
200
-     $RealPos[3]["X"] = cos((180-$Angle)*PI/180)*$Width + $RealPos[2]["X"]; $RealPos[3]["Y"] = sin((180-$Angle)*PI/180)*$Width + $RealPos[2]["Y"];
197
+        $RealPos[0]["X"] = $X; $RealPos[0]["Y"] = $Y;
198
+        $RealPos[1]["X"] = cos((360-$Angle)*PI/180)*$Width + $RealPos[0]["X"]; $RealPos[1]["Y"] = sin((360-$Angle)*PI/180)*$Width + $RealPos[0]["Y"];
199
+        $RealPos[2]["X"] = cos((270-$Angle)*PI/180)*$Height + $RealPos[1]["X"]; $RealPos[2]["Y"] = sin((270-$Angle)*PI/180)*$Height + $RealPos[1]["Y"];
200
+        $RealPos[3]["X"] = cos((180-$Angle)*PI/180)*$Width + $RealPos[2]["X"]; $RealPos[3]["Y"] = sin((180-$Angle)*PI/180)*$Width + $RealPos[2]["Y"];
201 201
 
202
-     $RealPos[TEXT_ALIGN_BOTTOMLEFT]["X"] = $RealPos[0]["X"];	$RealPos[TEXT_ALIGN_BOTTOMLEFT]["Y"] = $RealPos[0]["Y"];
203
-     $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["X"] = $RealPos[1]["X"];	$RealPos[TEXT_ALIGN_BOTTOMRIGHT]["Y"] = $RealPos[1]["Y"];
202
+        $RealPos[TEXT_ALIGN_BOTTOMLEFT]["X"] = $RealPos[0]["X"];	$RealPos[TEXT_ALIGN_BOTTOMLEFT]["Y"] = $RealPos[0]["Y"];
203
+        $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["X"] = $RealPos[1]["X"];	$RealPos[TEXT_ALIGN_BOTTOMRIGHT]["Y"] = $RealPos[1]["Y"];
204 204
 
205
-     return($RealPos);
205
+        return($RealPos);
206 206
     }
207 207
 
208
-   /* Return the surrounding box of text area */
209
-   function getTextBox($X,$Y,$FontName,$FontSize,$Angle,$Text)
208
+    /* Return the surrounding box of text area */
209
+    function getTextBox($X,$Y,$FontName,$FontSize,$Angle,$Text)
210 210
     {
211
-     $coords = imagettfbbox($FontSize, 0, $FontName, $Text);
212
-
213
-     $a = deg2rad($Angle); $ca = cos($a); $sa = sin($a); $RealPos = array();
214
-     for($i = 0; $i < 7; $i += 2)
215
-      {
216
-       $RealPos[$i/2]["X"] = $X + round($coords[$i] * $ca + $coords[$i+1] * $sa);
217
-       $RealPos[$i/2]["Y"] = $Y + round($coords[$i+1] * $ca - $coords[$i] * $sa);
218
-      }
219
-
220
-     $RealPos[TEXT_ALIGN_BOTTOMLEFT]["X"]	= $RealPos[0]["X"];	$RealPos[TEXT_ALIGN_BOTTOMLEFT]["Y"]	= $RealPos[0]["Y"];
221
-     $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["X"]	= $RealPos[1]["X"];	$RealPos[TEXT_ALIGN_BOTTOMRIGHT]["Y"]	= $RealPos[1]["Y"];
222
-     $RealPos[TEXT_ALIGN_TOPLEFT]["X"]		= $RealPos[3]["X"];	$RealPos[TEXT_ALIGN_TOPLEFT]["Y"]	= $RealPos[3]["Y"];
223
-     $RealPos[TEXT_ALIGN_TOPRIGHT]["X"]		= $RealPos[2]["X"];	$RealPos[TEXT_ALIGN_TOPRIGHT]["Y"]	= $RealPos[2]["Y"];
224
-     $RealPos[TEXT_ALIGN_BOTTOMMIDDLE]["X"]	= ($RealPos[1]["X"]-$RealPos[0]["X"])/2+$RealPos[0]["X"];	$RealPos[TEXT_ALIGN_BOTTOMMIDDLE]["Y"]	= ($RealPos[0]["Y"]-$RealPos[1]["Y"])/2+$RealPos[1]["Y"];
225
-     $RealPos[TEXT_ALIGN_TOPMIDDLE]["X"]	= ($RealPos[2]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"];	$RealPos[TEXT_ALIGN_TOPMIDDLE]["Y"]	= ($RealPos[3]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"];
226
-     $RealPos[TEXT_ALIGN_MIDDLELEFT]["X"]	= ($RealPos[0]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"];	$RealPos[TEXT_ALIGN_MIDDLELEFT]["Y"]	= ($RealPos[0]["Y"]-$RealPos[3]["Y"])/2+$RealPos[3]["Y"];
227
-     $RealPos[TEXT_ALIGN_MIDDLERIGHT]["X"]	= ($RealPos[1]["X"]-$RealPos[2]["X"])/2+$RealPos[2]["X"];	$RealPos[TEXT_ALIGN_MIDDLERIGHT]["Y"]	= ($RealPos[1]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"];
228
-     $RealPos[TEXT_ALIGN_MIDDLEMIDDLE]["X"]	= ($RealPos[1]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"];	$RealPos[TEXT_ALIGN_MIDDLEMIDDLE]["Y"]	= ($RealPos[0]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"];
229
-
230
-     return($RealPos);
211
+        $coords = imagettfbbox($FontSize, 0, $FontName, $Text);
212
+
213
+        $a = deg2rad($Angle); $ca = cos($a); $sa = sin($a); $RealPos = array();
214
+        for($i = 0; $i < 7; $i += 2)
215
+        {
216
+        $RealPos[$i/2]["X"] = $X + round($coords[$i] * $ca + $coords[$i+1] * $sa);
217
+        $RealPos[$i/2]["Y"] = $Y + round($coords[$i+1] * $ca - $coords[$i] * $sa);
218
+        }
219
+
220
+        $RealPos[TEXT_ALIGN_BOTTOMLEFT]["X"]	= $RealPos[0]["X"];	$RealPos[TEXT_ALIGN_BOTTOMLEFT]["Y"]	= $RealPos[0]["Y"];
221
+        $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["X"]	= $RealPos[1]["X"];	$RealPos[TEXT_ALIGN_BOTTOMRIGHT]["Y"]	= $RealPos[1]["Y"];
222
+        $RealPos[TEXT_ALIGN_TOPLEFT]["X"]		= $RealPos[3]["X"];	$RealPos[TEXT_ALIGN_TOPLEFT]["Y"]	= $RealPos[3]["Y"];
223
+        $RealPos[TEXT_ALIGN_TOPRIGHT]["X"]		= $RealPos[2]["X"];	$RealPos[TEXT_ALIGN_TOPRIGHT]["Y"]	= $RealPos[2]["Y"];
224
+        $RealPos[TEXT_ALIGN_BOTTOMMIDDLE]["X"]	= ($RealPos[1]["X"]-$RealPos[0]["X"])/2+$RealPos[0]["X"];	$RealPos[TEXT_ALIGN_BOTTOMMIDDLE]["Y"]	= ($RealPos[0]["Y"]-$RealPos[1]["Y"])/2+$RealPos[1]["Y"];
225
+        $RealPos[TEXT_ALIGN_TOPMIDDLE]["X"]	= ($RealPos[2]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"];	$RealPos[TEXT_ALIGN_TOPMIDDLE]["Y"]	= ($RealPos[3]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"];
226
+        $RealPos[TEXT_ALIGN_MIDDLELEFT]["X"]	= ($RealPos[0]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"];	$RealPos[TEXT_ALIGN_MIDDLELEFT]["Y"]	= ($RealPos[0]["Y"]-$RealPos[3]["Y"])/2+$RealPos[3]["Y"];
227
+        $RealPos[TEXT_ALIGN_MIDDLERIGHT]["X"]	= ($RealPos[1]["X"]-$RealPos[2]["X"])/2+$RealPos[2]["X"];	$RealPos[TEXT_ALIGN_MIDDLERIGHT]["Y"]	= ($RealPos[1]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"];
228
+        $RealPos[TEXT_ALIGN_MIDDLEMIDDLE]["X"]	= ($RealPos[1]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"];	$RealPos[TEXT_ALIGN_MIDDLEMIDDLE]["Y"]	= ($RealPos[0]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"];
229
+
230
+        return($RealPos);
231 231
     }
232 232
 
233
-   /* Set current font properties */
234
-   function setFontProperties($Format="")
233
+    /* Set current font properties */
234
+    function setFontProperties($Format="")
235 235
     {
236
-     $R		= isset($Format["R"]) ? $Format["R"] : -1;
237
-     $G		= isset($Format["G"]) ? $Format["G"] : -1;
238
-     $B		= isset($Format["B"]) ? $Format["B"] : -1;
239
-     $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
240
-     $FontName	= isset($Format["FontName"]) ? $Format["FontName"] : NULL;
241
-     $FontSize	= isset($Format["FontSize"]) ? $Format["FontSize"] : NULL;
242
-
243
-     if ( $R != -1)       {  $this->FontColorR = $R; }
244
-     if ( $G != -1)       {  $this->FontColorG = $G; }
245
-     if ( $B != -1)       {  $this->FontColorB = $B; }
246
-     if ( $Alpha != NULL) {  $this->FontColorA = $Alpha; }
247
-
248
-     if ( $FontName != NULL  )
249
-      $this->FontName = $FontName;
236
+        $R		= isset($Format["R"]) ? $Format["R"] : -1;
237
+        $G		= isset($Format["G"]) ? $Format["G"] : -1;
238
+        $B		= isset($Format["B"]) ? $Format["B"] : -1;
239
+        $Alpha	= isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
240
+        $FontName	= isset($Format["FontName"]) ? $Format["FontName"] : NULL;
241
+        $FontSize	= isset($Format["FontSize"]) ? $Format["FontSize"] : NULL;
242
+
243
+        if ( $R != -1)       {  $this->FontColorR = $R; }
244
+        if ( $G != -1)       {  $this->FontColorG = $G; }
245
+        if ( $B != -1)       {  $this->FontColorB = $B; }
246
+        if ( $Alpha != NULL) {  $this->FontColorA = $Alpha; }
247
+
248
+        if ( $FontName != NULL  )
249
+        $this->FontName = $FontName;
250 250
  
251
-     if ( $FontSize != NULL  )
252
-      $this->FontSize = $FontSize;
251
+        if ( $FontSize != NULL  )
252
+        $this->FontSize = $FontSize;
253 253
     }
254 254
 
255
-   /* Returns the 1st decimal values (used to correct AA bugs) */
256
-   function getFirstDecimal($Value)
255
+    /* Returns the 1st decimal values (used to correct AA bugs) */
256
+    function getFirstDecimal($Value)
257 257
     {
258
-     $Values = preg_split("/\./",$Value);
259
-     if ( isset($Values[1]) ) { return(substr($Values[1],0,1)); } else { return(0); }
258
+        $Values = preg_split("/\./",$Value);
259
+        if ( isset($Values[1]) ) { return(substr($Values[1],0,1)); } else { return(0); }
260 260
     }
261 261
 
262
-   /* Attach a dataset to your pChart Object */
263
-   function setDataSet(&$DataSet)
262
+    /* Attach a dataset to your pChart Object */
263
+    function setDataSet(&$DataSet)
264 264
     { $this->DataSet = $DataSet; }
265 265
 
266
-   /* Print attached dataset contents to STDOUT */
267
-   function printDataSet()
266
+    /* Print attached dataset contents to STDOUT */
267
+    function printDataSet()
268 268
     { print_r($this->DataSet); }
269 269
 
270
-   /* Initialise the image map methods */
271
-   function initialiseImageMap($Name="pChart",$StorageMode=IMAGE_MAP_STORAGE_SESSION,$UniqueID="imageMap",$StorageFolder="tmp")
270
+    /* Initialise the image map methods */
271
+    function initialiseImageMap($Name="pChart",$StorageMode=IMAGE_MAP_STORAGE_SESSION,$UniqueID="imageMap",$StorageFolder="tmp")
272 272
     {
273
-     $this->ImageMapIndex 		= $Name;
274
-     $this->ImageMapStorageMode		= $StorageMode;
275
-
276
-     if ($StorageMode == IMAGE_MAP_STORAGE_SESSION)
277
-      {
278
-       if(!isset($_SESSION)) { session_start(); }
279
-       $_SESSION[$this->ImageMapIndex]    = NULL;
280
-      }
281
-     elseif($StorageMode == IMAGE_MAP_STORAGE_FILE)
282
-      {
283
-       $this->ImageMapFileName 		= $UniqueID;
284
-       $this->ImageMapStorageFolder	= $StorageFolder;
285
-
286
-       if (file_exists($StorageFolder."/".$UniqueID.".map")) { unlink($StorageFolder."/".$UniqueID.".map"); }
287
-      }
273
+        $this->ImageMapIndex 		= $Name;
274
+        $this->ImageMapStorageMode		= $StorageMode;
275
+
276
+        if ($StorageMode == IMAGE_MAP_STORAGE_SESSION)
277
+        {
278
+        if(!isset($_SESSION)) { session_start(); }
279
+        $_SESSION[$this->ImageMapIndex]    = NULL;
280
+        }
281
+        elseif($StorageMode == IMAGE_MAP_STORAGE_FILE)
282
+        {
283
+        $this->ImageMapFileName 		= $UniqueID;
284
+        $this->ImageMapStorageFolder	= $StorageFolder;
285
+
286
+        if (file_exists($StorageFolder."/".$UniqueID.".map")) { unlink($StorageFolder."/".$UniqueID.".map"); }
287
+        }
288 288
     }
289 289
 
290
-   /* Add a zone to the image map */
291
-   function addToImageMap($Type,$Plots,$Color=NULL,$Title=NULL,$Message=NULL,$HTMLEncode=FALSE)
290
+    /* Add a zone to the image map */
291
+    function addToImageMap($Type,$Plots,$Color=NULL,$Title=NULL,$Message=NULL,$HTMLEncode=FALSE)
292 292
     {
293
-     if ( $this->ImageMapStorageMode == NULL ) { $this->initialiseImageMap(); }
294
-
295
-     /* Encode the characters in the imagemap in HTML standards */
296
-     $Title   = str_replace("&#8364;","\u20AC",$Title);
297
-     $Title   = htmlentities($Title,ENT_QUOTES,"ISO-8859-15");
298
-     if ( $HTMLEncode )
299
-      {
300
-       $Message = htmlentities($Message,ENT_QUOTES,"ISO-8859-15");
301
-       $Message = str_replace("&lt;","<",$Message);
302
-       $Message = str_replace("&gt;",">",$Message);
303
-      }
304
-
305
-     if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
306
-      {
307
-       if(!isset($_SESSION)) { $this->initialiseImageMap(); }
308
-       $_SESSION[$this->ImageMapIndex][] = array($Type,$Plots,$Color,$Title,$Message);
309
-      }
310
-     elseif($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE)
311
-      {
312
-       $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'a');
313
-       fwrite($Handle, $Type.IMAGE_MAP_DELIMITER.$Plots.IMAGE_MAP_DELIMITER.$Color.IMAGE_MAP_DELIMITER.$Title.IMAGE_MAP_DELIMITER.$Message."\r\n");
314
-       fclose($Handle);
315
-      }
293
+        if ( $this->ImageMapStorageMode == NULL ) { $this->initialiseImageMap(); }
294
+
295
+        /* Encode the characters in the imagemap in HTML standards */
296
+        $Title   = str_replace("&#8364;","\u20AC",$Title);
297
+        $Title   = htmlentities($Title,ENT_QUOTES,"ISO-8859-15");
298
+        if ( $HTMLEncode )
299
+        {
300
+        $Message = htmlentities($Message,ENT_QUOTES,"ISO-8859-15");
301
+        $Message = str_replace("&lt;","<",$Message);
302
+        $Message = str_replace("&gt;",">",$Message);
303
+        }
304
+
305
+        if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
306
+        {
307
+        if(!isset($_SESSION)) { $this->initialiseImageMap(); }
308
+        $_SESSION[$this->ImageMapIndex][] = array($Type,$Plots,$Color,$Title,$Message);
309
+        }
310
+        elseif($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE)
311
+        {
312
+        $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'a');
313
+        fwrite($Handle, $Type.IMAGE_MAP_DELIMITER.$Plots.IMAGE_MAP_DELIMITER.$Color.IMAGE_MAP_DELIMITER.$Title.IMAGE_MAP_DELIMITER.$Message."\r\n");
314
+        fclose($Handle);
315
+        }
316 316
     }
317 317
 
318
-   /* Remove VOID values from an imagemap custom values array */
319
-   function removeVOIDFromArray($SerieName, $Values)
318
+    /* Remove VOID values from an imagemap custom values array */
319
+    function removeVOIDFromArray($SerieName, $Values)
320 320
     {
321
-     if ( !isset($this->DataSet->Data["Series"][$SerieName]) ) { return(-1); }
321
+        if ( !isset($this->DataSet->Data["Series"][$SerieName]) ) { return(-1); }
322 322
 
323
-     $Result = "";
324
-     foreach($this->DataSet->Data["Series"][$SerieName]["Data"] as $Key => $Value)
325
-      { if ( $Value != VOID && isset($Values[$Key]) ) { $Result[] = $Values[$Key]; } }
326
-     return($Result);
323
+        $Result = "";
324
+        foreach($this->DataSet->Data["Series"][$SerieName]["Data"] as $Key => $Value)
325
+        { if ( $Value != VOID && isset($Values[$Key]) ) { $Result[] = $Values[$Key]; } }
326
+        return($Result);
327 327
     }
328 328
 
329
-   /* Replace the title of one image map serie */
330
-   function replaceImageMapTitle($OldTitle, $NewTitle)
329
+    /* Replace the title of one image map serie */
330
+    function replaceImageMapTitle($OldTitle, $NewTitle)
331 331
     {
332
-     if ( $this->ImageMapStorageMode == NULL ) { return(-1); }
332
+        if ( $this->ImageMapStorageMode == NULL ) { return(-1); }
333 333
 
334
-     if ( is_array($NewTitle) ) { $NewTitle = $this->removeVOIDFromArray($OldTitle, $NewTitle); }
334
+        if ( is_array($NewTitle) ) { $NewTitle = $this->removeVOIDFromArray($OldTitle, $NewTitle); }
335 335
  
336
-     if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
337
-      {
338
-       if(!isset($_SESSION)) { return(-1); }
339
-       if ( is_array($NewTitle) )
336
+        if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
337
+        {
338
+        if(!isset($_SESSION)) { return(-1); }
339
+        if ( is_array($NewTitle) )
340 340
         { $ID = 0; foreach($_SESSION[$this->ImageMapIndex] as $Key => $Settings) { if ( $Settings[3] == $OldTitle && isset($NewTitle[$ID])) { $_SESSION[$this->ImageMapIndex][$Key][3] = $NewTitle[$ID]; $ID++; } } }
341
-       else
341
+        else
342 342
         { foreach($_SESSION[$this->ImageMapIndex] as $Key => $Settings) { if ( $Settings[3] == $OldTitle ) { $_SESSION[$this->ImageMapIndex][$Key][3] = $NewTitle; } } }
343
-      }
344
-     elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE )
345
-      {
346
-       $TempArray = "";
347
-       $Handle    = @fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", "r");
348
-       if ($Handle)
343
+        }
344
+        elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE )
345
+        {
346
+        $TempArray = "";
347
+        $Handle    = @fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", "r");
348
+        if ($Handle)
349 349
         {
350
-         while (($Buffer = fgets($Handle, 4096)) !== false)
351
-          {
352
-           $Fields      = split(IMAGE_MAP_DELIMITER,str_replace(array(chr(10),chr(13)),"",$Buffer));
353
-           $TempArray[] = array($Fields[0],$Fields[1],$Fields[2],$Fields[3],$Fields[4]);
354
-          }
355
-         fclose($Handle);
356
-
357
-         if ( is_array($NewTitle) )
358
-          { $ID = 0; foreach($TempArray as $Key => $Settings) { if ( $Settings[3] == $OldTitle && isset($NewTitle[$ID]) ) { $TempArray[$Key][3] = $NewTitle[$ID]; $ID++; } } }
359
-         else
360
-          { foreach($TempArray as $Key => $Settings) { if ( $Settings[3] == $OldTitle ) { $TempArray[$Key][3] = $NewTitle; } } }
361
-
362
-         $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'w');
363
-         foreach($TempArray as $Key => $Settings)
364
-          { fwrite($Handle, $Settings[0].IMAGE_MAP_DELIMITER.$Settings[1].IMAGE_MAP_DELIMITER.$Settings[2].IMAGE_MAP_DELIMITER.$Settings[3].IMAGE_MAP_DELIMITER.$Settings[4]."\r\n"); }
365
-         fclose($Handle);
350
+            while (($Buffer = fgets($Handle, 4096)) !== false)
351
+            {
352
+            $Fields      = split(IMAGE_MAP_DELIMITER,str_replace(array(chr(10),chr(13)),"",$Buffer));
353
+            $TempArray[] = array($Fields[0],$Fields[1],$Fields[2],$Fields[3],$Fields[4]);
354
+            }
355
+            fclose($Handle);
356
+
357
+            if ( is_array($NewTitle) )
358
+            { $ID = 0; foreach($TempArray as $Key => $Settings) { if ( $Settings[3] == $OldTitle && isset($NewTitle[$ID]) ) { $TempArray[$Key][3] = $NewTitle[$ID]; $ID++; } } }
359
+            else
360
+            { foreach($TempArray as $Key => $Settings) { if ( $Settings[3] == $OldTitle ) { $TempArray[$Key][3] = $NewTitle; } } }
361
+
362
+            $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'w');
363
+            foreach($TempArray as $Key => $Settings)
364
+            { fwrite($Handle, $Settings[0].IMAGE_MAP_DELIMITER.$Settings[1].IMAGE_MAP_DELIMITER.$Settings[2].IMAGE_MAP_DELIMITER.$Settings[3].IMAGE_MAP_DELIMITER.$Settings[4]."\r\n"); }
365
+            fclose($Handle);
366
+        }
366 367
         }
367
-      }
368 368
     }
369 369
 
370
-   /* Replace the values of the image map contents */
371
-   function replaceImageMapValues($Title, $Values)
370
+    /* Replace the values of the image map contents */
371
+    function replaceImageMapValues($Title, $Values)
372 372
     {
373
-     if ( $this->ImageMapStorageMode == NULL ) { return(-1); }
374
-
375
-     $Values = $this->removeVOIDFromArray($Title, $Values);
376
-     $ID = 0; 
377
-     if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
378
-      {
379
-       if(!isset($_SESSION)) { return(-1); }
380
-       foreach($_SESSION[$this->ImageMapIndex] as $Key => $Settings) { if ( $Settings[3] == $Title ) { if ( isset($Values[$ID]) ) { $_SESSION[$this->ImageMapIndex][$Key][4] = $Values[$ID]; } $ID++; } }
381
-      }
382
-     elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE )
383
-      {
384
-       $TempArray = "";
385
-       $Handle    = @fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", "r");
386
-       if ($Handle)
373
+        if ( $this->ImageMapStorageMode == NULL ) { return(-1); }
374
+
375
+        $Values = $this->removeVOIDFromArray($Title, $Values);
376
+        $ID = 0; 
377
+        if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
378
+        {
379
+        if(!isset($_SESSION)) { return(-1); }
380
+        foreach($_SESSION[$this->ImageMapIndex] as $Key => $Settings) { if ( $Settings[3] == $Title ) { if ( isset($Values[$ID]) ) { $_SESSION[$this->ImageMapIndex][$Key][4] = $Values[$ID]; } $ID++; } }
381
+        }
382
+        elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE )
387 383
         {
388
-         while (($Buffer = fgets($Handle, 4096)) !== false)
389
-          {
390
-           $Fields      = split(IMAGE_MAP_DELIMITER,str_replace(array(chr(10),chr(13)),"",$Buffer));
391
-           $TempArray[] = array($Fields[0],$Fields[1],$Fields[2],$Fields[3],$Fields[4]);
392
-          }
393
-         fclose($Handle);
394
-
395
-         foreach($TempArray as $Key => $Settings) { if ( $Settings[3] == $Title ) { if ( isset($Values[$ID]) ) { $TempArray[$Key][4] = $Values[$ID]; } $ID++; } }
396
-
397
-         $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'w');
398
-         foreach($TempArray as $Key => $Settings)
399
-          { fwrite($Handle, $Settings[0].IMAGE_MAP_DELIMITER.$Settings[1].IMAGE_MAP_DELIMITER.$Settings[2].IMAGE_MAP_DELIMITER.$Settings[3].IMAGE_MAP_DELIMITER.$Settings[4]."\r\n"); }
400
-         fclose($Handle);
384
+        $TempArray = "";
385
+        $Handle    = @fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", "r");
386
+        if ($Handle)
387
+        {
388
+            while (($Buffer = fgets($Handle, 4096)) !== false)
389
+            {
390
+            $Fields      = split(IMAGE_MAP_DELIMITER,str_replace(array(chr(10),chr(13)),"",$Buffer));
391
+            $TempArray[] = array($Fields[0],$Fields[1],$Fields[2],$Fields[3],$Fields[4]);
392
+            }
393
+            fclose($Handle);
394
+
395
+            foreach($TempArray as $Key => $Settings) { if ( $Settings[3] == $Title ) { if ( isset($Values[$ID]) ) { $TempArray[$Key][4] = $Values[$ID]; } $ID++; } }
396
+
397
+            $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'w');
398
+            foreach($TempArray as $Key => $Settings)
399
+            { fwrite($Handle, $Settings[0].IMAGE_MAP_DELIMITER.$Settings[1].IMAGE_MAP_DELIMITER.$Settings[2].IMAGE_MAP_DELIMITER.$Settings[3].IMAGE_MAP_DELIMITER.$Settings[4]."\r\n"); }
400
+            fclose($Handle);
401
+        }
401 402
         }
402
-      }
403 403
     }
404 404
 
405
-   /* Dump the image map */
406
-   function dumpImageMap($Name="pChart",$StorageMode=IMAGE_MAP_STORAGE_SESSION,$UniqueID="imageMap",$StorageFolder="tmp")
405
+    /* Dump the image map */
406
+    function dumpImageMap($Name="pChart",$StorageMode=IMAGE_MAP_STORAGE_SESSION,$UniqueID="imageMap",$StorageFolder="tmp")
407 407
     {
408
-     $this->ImageMapIndex 		= $Name;
409
-     $this->ImageMapStorageMode		= $StorageMode;
408
+        $this->ImageMapIndex 		= $Name;
409
+        $this->ImageMapStorageMode		= $StorageMode;
410 410
 
411
-     if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
412
-      {
413
-       if(!isset($_SESSION)) { session_start(); }
414
-       if ( $_SESSION[$Name] != NULL )
411
+        if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
412
+        {
413
+        if(!isset($_SESSION)) { session_start(); }
414
+        if ( $_SESSION[$Name] != NULL )
415 415
         {
416
-         foreach($_SESSION[$Name] as $Key => $Params)
417
-          { echo $Params[0].IMAGE_MAP_DELIMITER.$Params[1].IMAGE_MAP_DELIMITER.$Params[2].IMAGE_MAP_DELIMITER.$Params[3].IMAGE_MAP_DELIMITER.$Params[4]."\r\n"; }
416
+            foreach($_SESSION[$Name] as $Key => $Params)
417
+            { echo $Params[0].IMAGE_MAP_DELIMITER.$Params[1].IMAGE_MAP_DELIMITER.$Params[2].IMAGE_MAP_DELIMITER.$Params[3].IMAGE_MAP_DELIMITER.$Params[4]."\r\n"; }
418 418
         }
419
-      }
420
-     elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE )
421
-      {
422
-       if (file_exists($StorageFolder."/".$UniqueID.".map"))
419
+        }
420
+        elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE )
421
+        {
422
+        if (file_exists($StorageFolder."/".$UniqueID.".map"))
423 423
         {
424
-         $Handle = @fopen($StorageFolder."/".$UniqueID.".map", "r");
425
-         if ($Handle) { while (($Buffer = fgets($Handle, 4096)) !== false) { echo $Buffer; } }
426
-         fclose($Handle);
424
+            $Handle = @fopen($StorageFolder."/".$UniqueID.".map", "r");
425
+            if ($Handle) { while (($Buffer = fgets($Handle, 4096)) !== false) { echo $Buffer; } }
426
+            fclose($Handle);
427 427
 
428
-         if ( $this->ImageMapAutoDelete ) { unlink($StorageFolder."/".$UniqueID.".map"); }
428
+            if ( $this->ImageMapAutoDelete ) { unlink($StorageFolder."/".$UniqueID.".map"); }
429
+        }
429 430
         }
430
-      }
431 431
 
432
-     /* When the image map is returned to the client, the script ends */
433
-     exit();
432
+        /* When the image map is returned to the client, the script ends */
433
+        exit();
434 434
     }
435 435
 
436
-   /* Return the HTML converted color from the RGB composite values */
437
-   function toHTMLColor($R,$G,$B)
436
+    /* Return the HTML converted color from the RGB composite values */
437
+    function toHTMLColor($R,$G,$B)
438 438
     {
439
-     $R=intval($R); $G=intval($G); $B=intval($B);
440
-     $R=dechex($R<0?0:($R>255?255:$R)); $G=dechex($G<0?0:($G>255?255:$G));$B=dechex($B<0?0:($B>255?255:$B));
441
-     $Color="#".(strlen($R) < 2?'0':'').$R; $Color.=(strlen($G) < 2?'0':'').$G; $Color.= (strlen($B) < 2?'0':'').$B;
442
-     return($Color);
439
+        $R=intval($R); $G=intval($G); $B=intval($B);
440
+        $R=dechex($R<0?0:($R>255?255:$R)); $G=dechex($G<0?0:($G>255?255:$G));$B=dechex($B<0?0:($B>255?255:$B));
441
+        $Color="#".(strlen($R) < 2?'0':'').$R; $Color.=(strlen($G) < 2?'0':'').$G; $Color.= (strlen($B) < 2?'0':'').$B;
442
+        return($Color);
443 443
     }
444 444
 
445
-   /* Reverse an array of points */
446
-   function reversePlots($Plots)
445
+    /* Reverse an array of points */
446
+    function reversePlots($Plots)
447 447
     {
448
-     $Result = "";
449
-     for($i=count($Plots)-2;$i>=0;$i=$i-2) { $Result[] = $Plots[$i]; $Result[] = $Plots[$i+1]; }
450
-     return($Result);
448
+        $Result = "";
449
+        for($i=count($Plots)-2;$i>=0;$i=$i-2) { $Result[] = $Plots[$i]; $Result[] = $Plots[$i+1]; }
450
+        return($Result);
451 451
     }
452 452
 
453
-   /* Mirror Effect */
454
-   function drawAreaMirror($X,$Y,$Width,$Height,$Format="")
453
+    /* Mirror Effect */
454
+    function drawAreaMirror($X,$Y,$Width,$Height,$Format="")
455 455
     {
456
-     $StartAlpha	= isset($Format["StartAlpha"]) ? $Format["StartAlpha"] : 80;
457
-     $EndAlpha		= isset($Format["EndAlpha"]) ? $Format["EndAlpha"] : 0;
456
+        $StartAlpha	= isset($Format["StartAlpha"]) ? $Format["StartAlpha"] : 80;
457
+        $EndAlpha		= isset($Format["EndAlpha"]) ? $Format["EndAlpha"] : 0;
458 458
 
459
-     $AlphaStep = ($StartAlpha-$EndAlpha)/$Height;
459
+        $AlphaStep = ($StartAlpha-$EndAlpha)/$Height;
460 460
 
461
-     $Picture = imagecreatetruecolor($this->XSize,$this->YSize);
462
-     imagecopy($Picture,$this->Picture,0,0,0,0,$this->XSize,$this->YSize);
461
+        $Picture = imagecreatetruecolor($this->XSize,$this->YSize);
462
+        imagecopy($Picture,$this->Picture,0,0,0,0,$this->XSize,$this->YSize);
463 463
      
464
-     for($i=1;$i<=$Height;$i++)
465
-      {
466
-       if ( $Y+($i-1) < $this->YSize && $Y-$i > 0 ) { imagecopymerge($Picture,$this->Picture,$X,$Y+($i-1),$X,$Y-$i,$Width,1,$StartAlpha-$AlphaStep*$i); }
467
-      }
464
+        for($i=1;$i<=$Height;$i++)
465
+        {
466
+        if ( $Y+($i-1) < $this->YSize && $Y-$i > 0 ) { imagecopymerge($Picture,$this->Picture,$X,$Y+($i-1),$X,$Y-$i,$Width,1,$StartAlpha-$AlphaStep*$i); }
467
+        }
468 468
 
469
-     imagecopy($this->Picture,$Picture,0,0,0,0,$this->XSize,$this->YSize);
469
+        imagecopy($this->Picture,$Picture,0,0,0,0,$this->XSize,$this->YSize);
470
+    }
470 471
     }
471
-  }
472 472
 ?>
473 473
\ No newline at end of file
Please login to merge, or discard this patch.