Completed
Branch master (9528ad)
by Michael
04:32
created
class/PEAR.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -490,7 +490,7 @@
 block discarded – undo
490 490
      * handling applied.  If the $mode and $options parameters are not
491 491
      * specified, the object's defaults are used.
492 492
      *
493
-     * @param mixed $message a text error message or a PEAR error object
493
+     * @param string|null $message a text error message or a PEAR error object
494 494
      *
495 495
      * @param int $code      a numeric error code (it is up to your class
496 496
      *                  to define these if you want to use codes)
Please login to merge, or discard this patch.
Indentation   +979 added lines, -979 removed lines patch added patch discarded remove patch
@@ -40,25 +40,25 @@  discard block
 block discarded – undo
40 40
 define('references_PEAR_ERROR_EXCEPTION', 32);
41 41
 /**#@-*/
42 42
 define('references_PEAR_ZE2', (function_exists('version_compare') &&
43
-                    version_compare(zend_version(), "2-dev", "ge")));
43
+					version_compare(zend_version(), "2-dev", "ge")));
44 44
 
45 45
 if (substr(PHP_OS, 0, 3) == 'WIN') {
46
-    define('references_OS_WINDOWS', true);
47
-    define('references_OS_UNIX',    false);
48
-    define('references_PEAR_OS',    'Windows');
46
+	define('references_OS_WINDOWS', true);
47
+	define('references_OS_UNIX',    false);
48
+	define('references_PEAR_OS',    'Windows');
49 49
 } else {
50
-    define('references_OS_WINDOWS', false);
51
-    define('references_OS_UNIX',    true);
52
-    define('references_PEAR_OS',    'Unix'); // blatant assumption
50
+	define('references_OS_WINDOWS', false);
51
+	define('references_OS_UNIX',    true);
52
+	define('references_PEAR_OS',    'Unix'); // blatant assumption
53 53
 }
54 54
 
55 55
 // instant backwards compatibility
56 56
 if (!defined('PATH_SEPARATOR')) {
57
-    if (references_OS_WINDOWS) {
58
-        define('PATH_SEPARATOR', ';');
59
-    } else {
60
-        define('PATH_SEPARATOR', ':');
61
-    }
57
+	if (references_OS_WINDOWS) {
58
+		define('PATH_SEPARATOR', ';');
59
+	} else {
60
+		define('PATH_SEPARATOR', ':');
61
+	}
62 62
 }
63 63
 
64 64
 $GLOBALS['_PEAR_default_error_mode']     = references_PEAR_ERROR_RETURN;
@@ -101,704 +101,704 @@  discard block
 block discarded – undo
101 101
  */
102 102
 class references_PEAR
103 103
 {
104
-    // {{{ properties
105
-
106
-    /**
107
-     * Whether to enable internal debug messages.
108
-     *
109
-     * @var     bool
110
-     * @access  private
111
-     */
112
-    public $_debug = false;
113
-
114
-    /**
115
-     * Default error mode for this object.
116
-     *
117
-     * @var     int
118
-     * @access  private
119
-     */
120
-    public $_default_error_mode = null;
121
-
122
-    /**
123
-     * Default error options used for this object when error mode
124
-     * is references_PEAR_ERROR_TRIGGER.
125
-     *
126
-     * @var     int
127
-     * @access  private
128
-     */
129
-    public $_default_error_options = null;
130
-
131
-    /**
132
-     * Default error handler (callback) for this object, if error mode is
133
-     * references_PEAR_ERROR_CALLBACK.
134
-     *
135
-     * @var     string
136
-     * @access  private
137
-     */
138
-    public $_default_error_handler = '';
139
-
140
-    /**
141
-     * Which class to use for error objects.
142
-     *
143
-     * @var     string
144
-     * @access  private
145
-     */
146
-    public $_error_class = 'PEAR_Error';
147
-
148
-    /**
149
-     * An array of expected errors.
150
-     *
151
-     * @var     array
152
-     * @access  private
153
-     */
154
-    public $_expected_errors = array();
155
-
156
-    // }}}
157
-
158
-    // {{{ constructor
159
-
160
-    /**
161
-     * Constructor.  Registers this object in
162
-     * $_PEAR_destructor_object_list for destructor emulation if a
163
-     * destructor object exists.
164
-     *
165
-     * @param string $error_class  (optional) which class to use for
166
-     *        error objects, defaults to PEAR_Error.
167
-     * @access public
168
-     * @return void
169
-     */
170
-    function __construct($error_class = null)
171
-    {
172
-        $classname = strtolower(get_class($this));
173
-        if ($this->_debug) {
174
-            print "PEAR constructor called, class=$classname\n";
175
-        }
176
-        if ($error_class !== null) {
177
-            $this->_error_class = $error_class;
178
-        }
179
-        while ($classname && strcasecmp($classname, "pear")) {
180
-            $destructor = "_$classname";
181
-            if (method_exists($this, $destructor)) {
182
-                global $_PEAR_destructor_object_list;
183
-                $_PEAR_destructor_object_list[] = &$this;
184
-                if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
185
-                    register_shutdown_function("references_PEAR_call_destructors");
186
-                    $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
187
-                }
188
-                break;
189
-            } else {
190
-                $classname = get_parent_class($classname);
191
-            }
192
-        }
193
-    }
194
-
195
-    // }}}
196
-    // {{{ destructor
197
-
198
-    /**
199
-     * Destructor (the emulated type of...).  Does nothing right now,
200
-     * but is included for forward compatibility, so subclass
201
-     * destructors should always call it.
202
-     *
203
-     * See the note in the class desciption about output from
204
-     * destructors.
205
-     *
206
-     * @access public
207
-     * @return void
208
-     */
209
-    function _PEAR() {
210
-        if ($this->_debug) {
211
-            printf("PEAR destructor called, class=%s\n", strtolower(get_class($this)));
212
-        }
213
-    }
214
-
215
-    // }}}
216
-    // {{{ getStaticProperty()
217
-
218
-    /**
219
-    * If you have a class that's mostly/entirely static, and you need static
220
-    * properties, you can use this method to simulate them. Eg. in your method(s)
221
-    * do this: $myVar = &references_PEAR::getStaticProperty('myclass', 'myVar');
222
-    * You MUST use a reference, or they will not persist!
223
-    *
224
-    * @access public
225
-    * @param  string $class  The calling classname, to prevent clashes
226
-    * @param  string $var    The variable to retrieve.
227
-    * @return mixed   A reference to the variable. If not set it will be
228
-    *                 auto initialised to NULL.
229
-    */
230
-    function &getStaticProperty($class, $var)
231
-    {
232
-        static $properties;
233
-        if (!isset($properties[$class])) {
234
-            $properties[$class] = array();
235
-        }
236
-        if (!array_key_exists($var, $properties[$class])) {
237
-            $properties[$class][$var] = null;
238
-        }
239
-        return $properties[$class][$var];
240
-    }
241
-
242
-    // }}}
243
-    // {{{ registerShutdownFunc()
244
-
245
-    /**
246
-    * Use this function to register a shutdown method for static
247
-    * classes.
248
-    *
249
-    * @access public
250
-    * @param  mixed $func  The function name (or array of class/method) to call
251
-    * @param  mixed $args  The arguments to pass to the function
252
-    * @return void
253
-    */
254
-    function registerShutdownFunc($func, $args = array())
255
-    {
256
-        // if we are called statically, there is a potential
257
-        // that no shutdown func is registered.  Bug #6445
258
-        if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
259
-            register_shutdown_function("references__PEAR_call_destructors");
260
-            $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
261
-        }
262
-        $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
263
-    }
264
-
265
-    // }}}
266
-    // {{{ isError()
267
-
268
-    /**
269
-     * Tell whether a value is a PEAR error.
270
-     *
271
-     * @param   mixed $data   the value to test
272
-     * @param   int   $code   if $data is an error object, return true
273
-     *                        only if $code is a string and
274
-     *                        $obj->getMessage() == $code or
275
-     *                        $code is an integer and $obj->getCode() == $code
276
-     * @access  public
277
-     * @return  bool    true if parameter is an error
278
-     */
279
-    function isError($data, $code = null)
280
-    {
281
-        if (is_a($data, 'PEAR_Error')) {
282
-            if (is_null($code)) {
283
-                return true;
284
-            } elseif (is_string($code)) {
285
-                return $data->getMessage() == $code;
286
-            } else {
287
-                return $data->getCode() == $code;
288
-            }
289
-        }
290
-        return false;
291
-    }
292
-
293
-    // }}}
294
-    // {{{ setErrorHandling()
295
-
296
-    /**
297
-     * Sets how errors generated by this object should be handled.
298
-     * Can be invoked both in objects and statically.  If called
299
-     * statically, setErrorHandling sets the default behaviour for all
300
-     * PEAR objects.  If called in an object, setErrorHandling sets
301
-     * the default behaviour for that object.
302
-     *
303
-     * @param int $mode
304
-     *        One of references_PEAR_ERROR_RETURN, references_PEAR_ERROR_PRINT,
305
-     *        references_PEAR_ERROR_TRIGGER, references_PEAR_ERROR_DIE,
306
-     *        references_PEAR_ERROR_CALLBACK or references_PEAR_ERROR_EXCEPTION.
307
-     *
308
-     * @param mixed $options
309
-     *        When $mode is references_PEAR_ERROR_TRIGGER, this is the error level (one
310
-     *        of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
311
-     *
312
-     *        When $mode is references_PEAR_ERROR_CALLBACK, this parameter is expected
313
-     *        to be the callback function or method.  A callback
314
-     *        function is a string with the name of the function, a
315
-     *        callback method is an array of two elements: the element
316
-     *        at index 0 is the object, and the element at index 1 is
317
-     *        the name of the method to call in the object.
318
-     *
319
-     *        When $mode is references_PEAR_ERROR_PRINT or references_PEAR_ERROR_DIE, this is
320
-     *        a printf format string used when printing the error
321
-     *        message.
322
-     *
323
-     * @access public
324
-     * @return void
325
-     * @see references_PEAR_ERROR_RETURN
326
-     * @see references_PEAR_ERROR_PRINT
327
-     * @see references_PEAR_ERROR_TRIGGER
328
-     * @see references_PEAR_ERROR_DIE
329
-     * @see references_PEAR_ERROR_CALLBACK
330
-     * @see references_PEAR_ERROR_EXCEPTION
331
-     *
332
-     * @since PHP 4.0.5
333
-     */
334
-
335
-    function setErrorHandling($mode = null, $options = null)
336
-    {
337
-        if (isset($this) && is_a($this, 'PEAR')) {
338
-            $setmode     = &$this->_default_error_mode;
339
-            $setoptions  = &$this->_default_error_options;
340
-        } else {
341
-            $setmode     = &$GLOBALS['_PEAR_default_error_mode'];
342
-            $setoptions  = &$GLOBALS['_PEAR_default_error_options'];
343
-        }
344
-
345
-        switch ($mode) {
346
-            case references_PEAR_ERROR_EXCEPTION:
347
-            case references_PEAR_ERROR_RETURN:
348
-            case references_PEAR_ERROR_PRINT:
349
-            case references_PEAR_ERROR_TRIGGER:
350
-            case references_PEAR_ERROR_DIE:
351
-            case null:
352
-                $setmode = $mode;
353
-                $setoptions = $options;
354
-                break;
355
-
356
-            case references_PEAR_ERROR_CALLBACK:
357
-                $setmode = $mode;
358
-                // class/object method callback
359
-                if (is_callable($options)) {
360
-                    $setoptions = $options;
361
-                } else {
362
-                    trigger_error("invalid error callback", E_USER_WARNING);
363
-                }
364
-                break;
365
-
366
-            default:
367
-                trigger_error("invalid error mode", E_USER_WARNING);
368
-                break;
369
-        }
370
-    }
371
-
372
-    // }}}
373
-    // {{{ expectError()
374
-
375
-    /**
376
-     * This method is used to tell which errors you expect to get.
377
-     * Expected errors are always returned with error mode
378
-     * references_PEAR_ERROR_RETURN.  Expected error codes are stored in a stack,
379
-     * and this method pushes a new element onto it.  The list of
380
-     * expected errors are in effect until they are popped off the
381
-     * stack with the popExpect() method.
382
-     *
383
-     * Note that this method can not be called statically
384
-     *
385
-     * @param mixed $code a single error code or an array of error codes to expect
386
-     *
387
-     * @return int     the new depth of the "expected errors" stack
388
-     * @access public
389
-     */
390
-    function expectError($code = '*')
391
-    {
392
-        if (is_array($code)) {
393
-            array_push($this->_expected_errors, $code);
394
-        } else {
395
-            array_push($this->_expected_errors, array($code));
396
-        }
397
-        return sizeof($this->_expected_errors);
398
-    }
399
-
400
-    // }}}
401
-    // {{{ popExpect()
402
-
403
-    /**
404
-     * This method pops one element off the expected error codes
405
-     * stack.
406
-     *
407
-     * @return array   the list of error codes that were popped
408
-     */
409
-    function popExpect()
410
-    {
411
-        return array_pop($this->_expected_errors);
412
-    }
413
-
414
-    // }}}
415
-    // {{{ _checkDelExpect()
416
-
417
-    /**
418
-     * This method checks unsets an error code if available
419
-     *
420
-     * @param mixed error code
421
-     * @return bool true if the error code was unset, false otherwise
422
-     * @access private
423
-     * @since PHP 4.3.0
424
-     */
425
-    function _checkDelExpect($error_code)
426
-    {
427
-        $deleted = false;
428
-
429
-        foreach ($this->_expected_errors AS $key => $error_array) {
430
-            if (in_array($error_code, $error_array)) {
431
-                unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
432
-                $deleted = true;
433
-            }
434
-
435
-            // clean up empty arrays
436
-            if (0 == count($this->_expected_errors[$key])) {
437
-                unset($this->_expected_errors[$key]);
438
-            }
439
-        }
440
-        return $deleted;
441
-    }
442
-
443
-    // }}}
444
-    // {{{ delExpect()
445
-
446
-    /**
447
-     * This method deletes all occurences of the specified element from
448
-     * the expected error codes stack.
449
-     *
450
-     * @param  mixed $error_code error code that should be deleted
451
-     * @return mixed list of error codes that were deleted or error
452
-     * @access public
453
-     * @since PHP 4.3.0
454
-     */
455
-    function delExpect($error_code)
456
-    {
457
-        $deleted = false;
458
-
459
-        if ((is_array($error_code) && (0 != count($error_code)))) {
460
-            // $error_code is a non-empty array here;
461
-            // we walk through it trying to unset all
462
-            // values
463
-            foreach($error_code as $key => $error) {
464
-                if ($this->_checkDelExpect($error)) {
465
-                    $deleted =  true;
466
-                } else {
467
-                    $deleted = false;
468
-                }
469
-            }
470
-            return $deleted ? true : references_PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
471
-        } elseif (!empty($error_code)) {
472
-            // $error_code comes alone, trying to unset it
473
-            if ($this->_checkDelExpect($error_code)) {
474
-                return true;
475
-            } else {
476
-                return references_PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
477
-            }
478
-        } else {
479
-            // $error_code is empty
480
-            return references_PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
481
-        }
482
-    }
483
-
484
-    // }}}
485
-    // {{{ raiseError()
486
-
487
-    /**
488
-     * This method is a wrapper that returns an instance of the
489
-     * configured error class with this object's default error
490
-     * handling applied.  If the $mode and $options parameters are not
491
-     * specified, the object's defaults are used.
492
-     *
493
-     * @param mixed $message a text error message or a PEAR error object
494
-     *
495
-     * @param int $code      a numeric error code (it is up to your class
496
-     *                  to define these if you want to use codes)
497
-     *
498
-     * @param int $mode      One of references_PEAR_ERROR_RETURN, references_PEAR_ERROR_PRINT,
499
-     *                  references_PEAR_ERROR_TRIGGER, references_PEAR_ERROR_DIE,
500
-     *                  references_PEAR_ERROR_CALLBACK, references_PEAR_ERROR_EXCEPTION.
501
-     *
502
-     * @param mixed $options If $mode is references_PEAR_ERROR_TRIGGER, this parameter
503
-     *                  specifies the PHP-internal error level (one of
504
-     *                  E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
505
-     *                  If $mode is references_PEAR_ERROR_CALLBACK, this
506
-     *                  parameter specifies the callback function or
507
-     *                  method.  In other error modes this parameter
508
-     *                  is ignored.
509
-     *
510
-     * @param string $userinfo If you need to pass along for example debug
511
-     *                  information, this parameter is meant for that.
512
-     *
513
-     * @param string $error_class The returned error object will be
514
-     *                  instantiated from this class, if specified.
515
-     *
516
-     * @param bool $skipmsg If true, raiseError will only pass error codes,
517
-     *                  the error message parameter will be dropped.
518
-     *
519
-     * @access public
520
-     * @return object   a PEAR error object
521
-     * @see references_PEAR::setErrorHandling
522
-     * @since PHP 4.0.5
523
-     */
524
-    function &raiseError($message = null,
525
-                         $code = null,
526
-                         $mode = null,
527
-                         $options = null,
528
-                         $userinfo = null,
529
-                         $error_class = null,
530
-                         $skipmsg = false)
531
-    {
532
-        // The error is yet a PEAR error object
533
-        if (is_object($message)) {
534
-            $code        = $message->getCode();
535
-            $userinfo    = $message->getUserInfo();
536
-            $error_class = $message->getType();
537
-            $message->error_message_prefix = '';
538
-            $message     = $message->getMessage();
539
-        }
540
-
541
-        if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {
542
-            if ($exp[0] == "*" ||
543
-                (is_int(reset($exp)) && in_array($code, $exp)) ||
544
-                (is_string(reset($exp)) && in_array($message, $exp))) {
545
-                $mode = references_PEAR_ERROR_RETURN;
546
-            }
547
-        }
548
-        // No mode given, try global ones
549
-        if ($mode === null) {
550
-            // Class error handler
551
-            if (isset($this) && isset($this->_default_error_mode)) {
552
-                $mode    = $this->_default_error_mode;
553
-                $options = $this->_default_error_options;
554
-            // Global error handler
555
-            } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
556
-                $mode    = $GLOBALS['_PEAR_default_error_mode'];
557
-                $options = $GLOBALS['_PEAR_default_error_options'];
558
-            }
559
-        }
560
-
561
-        if ($error_class !== null) {
562
-            $ec = $error_class;
563
-        } elseif (isset($this) && isset($this->_error_class)) {
564
-            $ec = $this->_error_class;
565
-        } else {
566
-            $ec = 'references_PEAR_Error';
567
-        }
568
-        if ($skipmsg) {
569
-            $a = new $ec($code, $mode, $options, $userinfo);
570
-            return $a;
571
-        } else {
572
-            $a = new $ec($message, $code, $mode, $options, $userinfo);
573
-            return $a;
574
-        }
575
-    }
576
-
577
-    // }}}
578
-    // {{{ throwError()
579
-
580
-    /**
581
-     * Simpler form of raiseError with fewer options.  In most cases
582
-     * message, code and userinfo are enough.
583
-     *
584
-     * @param string $message
585
-     *
586
-     */
587
-    function &throwError($message = null,
588
-                         $code = null,
589
-                         $userinfo = null)
590
-    {
591
-        if (isset($this) && is_a($this, 'PEAR')) {
592
-            $a = &$this->raiseError($message, $code, null, null, $userinfo);
593
-            return $a;
594
-        } else {
595
-            $a = &references_PEAR::raiseError($message, $code, null, null, $userinfo);
596
-            return $a;
597
-        }
598
-    }
599
-
600
-    // }}}
601
-    function staticPushErrorHandling($mode, $options = null)
602
-    {
603
-        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
604
-        $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
605
-        $def_options = &$GLOBALS['_PEAR_default_error_options'];
606
-        $stack[] = array($def_mode, $def_options);
607
-        switch ($mode) {
608
-            case references_PEAR_ERROR_EXCEPTION:
609
-            case references_PEAR_ERROR_RETURN:
610
-            case references_PEAR_ERROR_PRINT:
611
-            case references_PEAR_ERROR_TRIGGER:
612
-            case references_PEAR_ERROR_DIE:
613
-            case null:
614
-                $def_mode = $mode;
615
-                $def_options = $options;
616
-                break;
617
-
618
-            case references_PEAR_ERROR_CALLBACK:
619
-                $def_mode = $mode;
620
-                // class/object method callback
621
-                if (is_callable($options)) {
622
-                    $def_options = $options;
623
-                } else {
624
-                    trigger_error("invalid error callback", E_USER_WARNING);
625
-                }
626
-                break;
627
-
628
-            default:
629
-                trigger_error("invalid error mode", E_USER_WARNING);
630
-                break;
631
-        }
632
-        $stack[] = array($mode, $options);
633
-        return true;
634
-    }
635
-
636
-    function staticPopErrorHandling()
637
-    {
638
-        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
639
-        $setmode     = &$GLOBALS['_PEAR_default_error_mode'];
640
-        $setoptions  = &$GLOBALS['_PEAR_default_error_options'];
641
-        array_pop($stack);
642
-        list($mode, $options) = $stack[sizeof($stack) - 1];
643
-        array_pop($stack);
644
-        switch ($mode) {
645
-            case references_PEAR_ERROR_EXCEPTION:
646
-            case references_PEAR_ERROR_RETURN:
647
-            case references_PEAR_ERROR_PRINT:
648
-            case references_PEAR_ERROR_TRIGGER:
649
-            case references_PEAR_ERROR_DIE:
650
-            case null:
651
-                $setmode = $mode;
652
-                $setoptions = $options;
653
-                break;
654
-
655
-            case references_PEAR_ERROR_CALLBACK:
656
-                $setmode = $mode;
657
-                // class/object method callback
658
-                if (is_callable($options)) {
659
-                    $setoptions = $options;
660
-                } else {
661
-                    trigger_error("invalid error callback", E_USER_WARNING);
662
-                }
663
-                break;
664
-
665
-            default:
666
-                trigger_error("invalid error mode", E_USER_WARNING);
667
-                break;
668
-        }
669
-        return true;
670
-    }
671
-
672
-    // {{{ pushErrorHandling()
673
-
674
-    /**
675
-     * Push a new error handler on top of the error handler options stack. With this
676
-     * you can easily override the actual error handler for some code and restore
677
-     * it later with popErrorHandling.
678
-     *
679
-     * @param mixed $mode (same as setErrorHandling)
680
-     * @param mixed $options (same as setErrorHandling)
681
-     *
682
-     * @return bool Always true
683
-     *
684
-     * @see references_PEAR::setErrorHandling
685
-     */
686
-    function pushErrorHandling($mode, $options = null)
687
-    {
688
-        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
689
-        if (isset($this) && is_a($this, 'PEAR')) {
690
-            $def_mode    = &$this->_default_error_mode;
691
-            $def_options = &$this->_default_error_options;
692
-        } else {
693
-            $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
694
-            $def_options = &$GLOBALS['_PEAR_default_error_options'];
695
-        }
696
-        $stack[] = array($def_mode, $def_options);
697
-
698
-        if (isset($this) && is_a($this, 'PEAR')) {
699
-            $this->setErrorHandling($mode, $options);
700
-        } else {
701
-            references_PEAR::setErrorHandling($mode, $options);
702
-        }
703
-        $stack[] = array($mode, $options);
704
-        return true;
705
-    }
706
-
707
-    // }}}
708
-    // {{{ popErrorHandling()
709
-
710
-    /**
711
-    * Pop the last error handler used
712
-    *
713
-    * @return bool Always true
714
-    *
715
-    * @see references_PEAR::pushErrorHandling
716
-    */
717
-    function popErrorHandling()
718
-    {
719
-        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
720
-        array_pop($stack);
721
-        list($mode, $options) = $stack[sizeof($stack) - 1];
722
-        array_pop($stack);
723
-        if (isset($this) && is_a($this, 'PEAR')) {
724
-            $this->setErrorHandling($mode, $options);
725
-        } else {
726
-            references_PEAR::setErrorHandling($mode, $options);
727
-        }
728
-        return true;
729
-    }
730
-
731
-    // }}}
732
-    // {{{ loadExtension()
733
-
734
-    /**
735
-    * OS independant PHP extension load. Remember to take care
736
-    * on the correct extension name for case sensitive OSes.
737
-    *
738
-    * @param string $ext The extension name
739
-    * @return bool Success or not on the dl() call
740
-    */
741
-    function loadExtension($ext)
742
-    {
743
-        if (!extension_loaded($ext)) {
744
-            // if either returns true dl() will produce a FATAL error, stop that
745
-            if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
746
-                return false;
747
-            }
748
-            if (references_OS_WINDOWS) {
749
-                $suffix = '.dll';
750
-            } elseif (PHP_OS == 'HP-UX') {
751
-                $suffix = '.sl';
752
-            } elseif (PHP_OS == 'AIX') {
753
-                $suffix = '.a';
754
-            } elseif (PHP_OS == 'OSX') {
755
-                $suffix = '.bundle';
756
-            } else {
757
-                $suffix = '.so';
758
-            }
759
-            return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
760
-        }
761
-        return true;
762
-    }
763
-
764
-    // }}}
104
+	// {{{ properties
105
+
106
+	/**
107
+	 * Whether to enable internal debug messages.
108
+	 *
109
+	 * @var     bool
110
+	 * @access  private
111
+	 */
112
+	public $_debug = false;
113
+
114
+	/**
115
+	 * Default error mode for this object.
116
+	 *
117
+	 * @var     int
118
+	 * @access  private
119
+	 */
120
+	public $_default_error_mode = null;
121
+
122
+	/**
123
+	 * Default error options used for this object when error mode
124
+	 * is references_PEAR_ERROR_TRIGGER.
125
+	 *
126
+	 * @var     int
127
+	 * @access  private
128
+	 */
129
+	public $_default_error_options = null;
130
+
131
+	/**
132
+	 * Default error handler (callback) for this object, if error mode is
133
+	 * references_PEAR_ERROR_CALLBACK.
134
+	 *
135
+	 * @var     string
136
+	 * @access  private
137
+	 */
138
+	public $_default_error_handler = '';
139
+
140
+	/**
141
+	 * Which class to use for error objects.
142
+	 *
143
+	 * @var     string
144
+	 * @access  private
145
+	 */
146
+	public $_error_class = 'PEAR_Error';
147
+
148
+	/**
149
+	 * An array of expected errors.
150
+	 *
151
+	 * @var     array
152
+	 * @access  private
153
+	 */
154
+	public $_expected_errors = array();
155
+
156
+	// }}}
157
+
158
+	// {{{ constructor
159
+
160
+	/**
161
+	 * Constructor.  Registers this object in
162
+	 * $_PEAR_destructor_object_list for destructor emulation if a
163
+	 * destructor object exists.
164
+	 *
165
+	 * @param string $error_class  (optional) which class to use for
166
+	 *        error objects, defaults to PEAR_Error.
167
+	 * @access public
168
+	 * @return void
169
+	 */
170
+	function __construct($error_class = null)
171
+	{
172
+		$classname = strtolower(get_class($this));
173
+		if ($this->_debug) {
174
+			print "PEAR constructor called, class=$classname\n";
175
+		}
176
+		if ($error_class !== null) {
177
+			$this->_error_class = $error_class;
178
+		}
179
+		while ($classname && strcasecmp($classname, "pear")) {
180
+			$destructor = "_$classname";
181
+			if (method_exists($this, $destructor)) {
182
+				global $_PEAR_destructor_object_list;
183
+				$_PEAR_destructor_object_list[] = &$this;
184
+				if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
185
+					register_shutdown_function("references_PEAR_call_destructors");
186
+					$GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
187
+				}
188
+				break;
189
+			} else {
190
+				$classname = get_parent_class($classname);
191
+			}
192
+		}
193
+	}
194
+
195
+	// }}}
196
+	// {{{ destructor
197
+
198
+	/**
199
+	 * Destructor (the emulated type of...).  Does nothing right now,
200
+	 * but is included for forward compatibility, so subclass
201
+	 * destructors should always call it.
202
+	 *
203
+	 * See the note in the class desciption about output from
204
+	 * destructors.
205
+	 *
206
+	 * @access public
207
+	 * @return void
208
+	 */
209
+	function _PEAR() {
210
+		if ($this->_debug) {
211
+			printf("PEAR destructor called, class=%s\n", strtolower(get_class($this)));
212
+		}
213
+	}
214
+
215
+	// }}}
216
+	// {{{ getStaticProperty()
217
+
218
+	/**
219
+	 * If you have a class that's mostly/entirely static, and you need static
220
+	 * properties, you can use this method to simulate them. Eg. in your method(s)
221
+	 * do this: $myVar = &references_PEAR::getStaticProperty('myclass', 'myVar');
222
+	 * You MUST use a reference, or they will not persist!
223
+	 *
224
+	 * @access public
225
+	 * @param  string $class  The calling classname, to prevent clashes
226
+	 * @param  string $var    The variable to retrieve.
227
+	 * @return mixed   A reference to the variable. If not set it will be
228
+	 *                 auto initialised to NULL.
229
+	 */
230
+	function &getStaticProperty($class, $var)
231
+	{
232
+		static $properties;
233
+		if (!isset($properties[$class])) {
234
+			$properties[$class] = array();
235
+		}
236
+		if (!array_key_exists($var, $properties[$class])) {
237
+			$properties[$class][$var] = null;
238
+		}
239
+		return $properties[$class][$var];
240
+	}
241
+
242
+	// }}}
243
+	// {{{ registerShutdownFunc()
244
+
245
+	/**
246
+	 * Use this function to register a shutdown method for static
247
+	 * classes.
248
+	 *
249
+	 * @access public
250
+	 * @param  mixed $func  The function name (or array of class/method) to call
251
+	 * @param  mixed $args  The arguments to pass to the function
252
+	 * @return void
253
+	 */
254
+	function registerShutdownFunc($func, $args = array())
255
+	{
256
+		// if we are called statically, there is a potential
257
+		// that no shutdown func is registered.  Bug #6445
258
+		if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
259
+			register_shutdown_function("references__PEAR_call_destructors");
260
+			$GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
261
+		}
262
+		$GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
263
+	}
264
+
265
+	// }}}
266
+	// {{{ isError()
267
+
268
+	/**
269
+	 * Tell whether a value is a PEAR error.
270
+	 *
271
+	 * @param   mixed $data   the value to test
272
+	 * @param   int   $code   if $data is an error object, return true
273
+	 *                        only if $code is a string and
274
+	 *                        $obj->getMessage() == $code or
275
+	 *                        $code is an integer and $obj->getCode() == $code
276
+	 * @access  public
277
+	 * @return  bool    true if parameter is an error
278
+	 */
279
+	function isError($data, $code = null)
280
+	{
281
+		if (is_a($data, 'PEAR_Error')) {
282
+			if (is_null($code)) {
283
+				return true;
284
+			} elseif (is_string($code)) {
285
+				return $data->getMessage() == $code;
286
+			} else {
287
+				return $data->getCode() == $code;
288
+			}
289
+		}
290
+		return false;
291
+	}
292
+
293
+	// }}}
294
+	// {{{ setErrorHandling()
295
+
296
+	/**
297
+	 * Sets how errors generated by this object should be handled.
298
+	 * Can be invoked both in objects and statically.  If called
299
+	 * statically, setErrorHandling sets the default behaviour for all
300
+	 * PEAR objects.  If called in an object, setErrorHandling sets
301
+	 * the default behaviour for that object.
302
+	 *
303
+	 * @param int $mode
304
+	 *        One of references_PEAR_ERROR_RETURN, references_PEAR_ERROR_PRINT,
305
+	 *        references_PEAR_ERROR_TRIGGER, references_PEAR_ERROR_DIE,
306
+	 *        references_PEAR_ERROR_CALLBACK or references_PEAR_ERROR_EXCEPTION.
307
+	 *
308
+	 * @param mixed $options
309
+	 *        When $mode is references_PEAR_ERROR_TRIGGER, this is the error level (one
310
+	 *        of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
311
+	 *
312
+	 *        When $mode is references_PEAR_ERROR_CALLBACK, this parameter is expected
313
+	 *        to be the callback function or method.  A callback
314
+	 *        function is a string with the name of the function, a
315
+	 *        callback method is an array of two elements: the element
316
+	 *        at index 0 is the object, and the element at index 1 is
317
+	 *        the name of the method to call in the object.
318
+	 *
319
+	 *        When $mode is references_PEAR_ERROR_PRINT or references_PEAR_ERROR_DIE, this is
320
+	 *        a printf format string used when printing the error
321
+	 *        message.
322
+	 *
323
+	 * @access public
324
+	 * @return void
325
+	 * @see references_PEAR_ERROR_RETURN
326
+	 * @see references_PEAR_ERROR_PRINT
327
+	 * @see references_PEAR_ERROR_TRIGGER
328
+	 * @see references_PEAR_ERROR_DIE
329
+	 * @see references_PEAR_ERROR_CALLBACK
330
+	 * @see references_PEAR_ERROR_EXCEPTION
331
+	 *
332
+	 * @since PHP 4.0.5
333
+	 */
334
+
335
+	function setErrorHandling($mode = null, $options = null)
336
+	{
337
+		if (isset($this) && is_a($this, 'PEAR')) {
338
+			$setmode     = &$this->_default_error_mode;
339
+			$setoptions  = &$this->_default_error_options;
340
+		} else {
341
+			$setmode     = &$GLOBALS['_PEAR_default_error_mode'];
342
+			$setoptions  = &$GLOBALS['_PEAR_default_error_options'];
343
+		}
344
+
345
+		switch ($mode) {
346
+			case references_PEAR_ERROR_EXCEPTION:
347
+			case references_PEAR_ERROR_RETURN:
348
+			case references_PEAR_ERROR_PRINT:
349
+			case references_PEAR_ERROR_TRIGGER:
350
+			case references_PEAR_ERROR_DIE:
351
+			case null:
352
+				$setmode = $mode;
353
+				$setoptions = $options;
354
+				break;
355
+
356
+			case references_PEAR_ERROR_CALLBACK:
357
+				$setmode = $mode;
358
+				// class/object method callback
359
+				if (is_callable($options)) {
360
+					$setoptions = $options;
361
+				} else {
362
+					trigger_error("invalid error callback", E_USER_WARNING);
363
+				}
364
+				break;
365
+
366
+			default:
367
+				trigger_error("invalid error mode", E_USER_WARNING);
368
+				break;
369
+		}
370
+	}
371
+
372
+	// }}}
373
+	// {{{ expectError()
374
+
375
+	/**
376
+	 * This method is used to tell which errors you expect to get.
377
+	 * Expected errors are always returned with error mode
378
+	 * references_PEAR_ERROR_RETURN.  Expected error codes are stored in a stack,
379
+	 * and this method pushes a new element onto it.  The list of
380
+	 * expected errors are in effect until they are popped off the
381
+	 * stack with the popExpect() method.
382
+	 *
383
+	 * Note that this method can not be called statically
384
+	 *
385
+	 * @param mixed $code a single error code or an array of error codes to expect
386
+	 *
387
+	 * @return int     the new depth of the "expected errors" stack
388
+	 * @access public
389
+	 */
390
+	function expectError($code = '*')
391
+	{
392
+		if (is_array($code)) {
393
+			array_push($this->_expected_errors, $code);
394
+		} else {
395
+			array_push($this->_expected_errors, array($code));
396
+		}
397
+		return sizeof($this->_expected_errors);
398
+	}
399
+
400
+	// }}}
401
+	// {{{ popExpect()
402
+
403
+	/**
404
+	 * This method pops one element off the expected error codes
405
+	 * stack.
406
+	 *
407
+	 * @return array   the list of error codes that were popped
408
+	 */
409
+	function popExpect()
410
+	{
411
+		return array_pop($this->_expected_errors);
412
+	}
413
+
414
+	// }}}
415
+	// {{{ _checkDelExpect()
416
+
417
+	/**
418
+	 * This method checks unsets an error code if available
419
+	 *
420
+	 * @param mixed error code
421
+	 * @return bool true if the error code was unset, false otherwise
422
+	 * @access private
423
+	 * @since PHP 4.3.0
424
+	 */
425
+	function _checkDelExpect($error_code)
426
+	{
427
+		$deleted = false;
428
+
429
+		foreach ($this->_expected_errors AS $key => $error_array) {
430
+			if (in_array($error_code, $error_array)) {
431
+				unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
432
+				$deleted = true;
433
+			}
434
+
435
+			// clean up empty arrays
436
+			if (0 == count($this->_expected_errors[$key])) {
437
+				unset($this->_expected_errors[$key]);
438
+			}
439
+		}
440
+		return $deleted;
441
+	}
442
+
443
+	// }}}
444
+	// {{{ delExpect()
445
+
446
+	/**
447
+	 * This method deletes all occurences of the specified element from
448
+	 * the expected error codes stack.
449
+	 *
450
+	 * @param  mixed $error_code error code that should be deleted
451
+	 * @return mixed list of error codes that were deleted or error
452
+	 * @access public
453
+	 * @since PHP 4.3.0
454
+	 */
455
+	function delExpect($error_code)
456
+	{
457
+		$deleted = false;
458
+
459
+		if ((is_array($error_code) && (0 != count($error_code)))) {
460
+			// $error_code is a non-empty array here;
461
+			// we walk through it trying to unset all
462
+			// values
463
+			foreach($error_code as $key => $error) {
464
+				if ($this->_checkDelExpect($error)) {
465
+					$deleted =  true;
466
+				} else {
467
+					$deleted = false;
468
+				}
469
+			}
470
+			return $deleted ? true : references_PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
471
+		} elseif (!empty($error_code)) {
472
+			// $error_code comes alone, trying to unset it
473
+			if ($this->_checkDelExpect($error_code)) {
474
+				return true;
475
+			} else {
476
+				return references_PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
477
+			}
478
+		} else {
479
+			// $error_code is empty
480
+			return references_PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
481
+		}
482
+	}
483
+
484
+	// }}}
485
+	// {{{ raiseError()
486
+
487
+	/**
488
+	 * This method is a wrapper that returns an instance of the
489
+	 * configured error class with this object's default error
490
+	 * handling applied.  If the $mode and $options parameters are not
491
+	 * specified, the object's defaults are used.
492
+	 *
493
+	 * @param mixed $message a text error message or a PEAR error object
494
+	 *
495
+	 * @param int $code      a numeric error code (it is up to your class
496
+	 *                  to define these if you want to use codes)
497
+	 *
498
+	 * @param int $mode      One of references_PEAR_ERROR_RETURN, references_PEAR_ERROR_PRINT,
499
+	 *                  references_PEAR_ERROR_TRIGGER, references_PEAR_ERROR_DIE,
500
+	 *                  references_PEAR_ERROR_CALLBACK, references_PEAR_ERROR_EXCEPTION.
501
+	 *
502
+	 * @param mixed $options If $mode is references_PEAR_ERROR_TRIGGER, this parameter
503
+	 *                  specifies the PHP-internal error level (one of
504
+	 *                  E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
505
+	 *                  If $mode is references_PEAR_ERROR_CALLBACK, this
506
+	 *                  parameter specifies the callback function or
507
+	 *                  method.  In other error modes this parameter
508
+	 *                  is ignored.
509
+	 *
510
+	 * @param string $userinfo If you need to pass along for example debug
511
+	 *                  information, this parameter is meant for that.
512
+	 *
513
+	 * @param string $error_class The returned error object will be
514
+	 *                  instantiated from this class, if specified.
515
+	 *
516
+	 * @param bool $skipmsg If true, raiseError will only pass error codes,
517
+	 *                  the error message parameter will be dropped.
518
+	 *
519
+	 * @access public
520
+	 * @return object   a PEAR error object
521
+	 * @see references_PEAR::setErrorHandling
522
+	 * @since PHP 4.0.5
523
+	 */
524
+	function &raiseError($message = null,
525
+						 $code = null,
526
+						 $mode = null,
527
+						 $options = null,
528
+						 $userinfo = null,
529
+						 $error_class = null,
530
+						 $skipmsg = false)
531
+	{
532
+		// The error is yet a PEAR error object
533
+		if (is_object($message)) {
534
+			$code        = $message->getCode();
535
+			$userinfo    = $message->getUserInfo();
536
+			$error_class = $message->getType();
537
+			$message->error_message_prefix = '';
538
+			$message     = $message->getMessage();
539
+		}
540
+
541
+		if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {
542
+			if ($exp[0] == "*" ||
543
+				(is_int(reset($exp)) && in_array($code, $exp)) ||
544
+				(is_string(reset($exp)) && in_array($message, $exp))) {
545
+				$mode = references_PEAR_ERROR_RETURN;
546
+			}
547
+		}
548
+		// No mode given, try global ones
549
+		if ($mode === null) {
550
+			// Class error handler
551
+			if (isset($this) && isset($this->_default_error_mode)) {
552
+				$mode    = $this->_default_error_mode;
553
+				$options = $this->_default_error_options;
554
+			// Global error handler
555
+			} elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
556
+				$mode    = $GLOBALS['_PEAR_default_error_mode'];
557
+				$options = $GLOBALS['_PEAR_default_error_options'];
558
+			}
559
+		}
560
+
561
+		if ($error_class !== null) {
562
+			$ec = $error_class;
563
+		} elseif (isset($this) && isset($this->_error_class)) {
564
+			$ec = $this->_error_class;
565
+		} else {
566
+			$ec = 'references_PEAR_Error';
567
+		}
568
+		if ($skipmsg) {
569
+			$a = new $ec($code, $mode, $options, $userinfo);
570
+			return $a;
571
+		} else {
572
+			$a = new $ec($message, $code, $mode, $options, $userinfo);
573
+			return $a;
574
+		}
575
+	}
576
+
577
+	// }}}
578
+	// {{{ throwError()
579
+
580
+	/**
581
+	 * Simpler form of raiseError with fewer options.  In most cases
582
+	 * message, code and userinfo are enough.
583
+	 *
584
+	 * @param string $message
585
+	 *
586
+	 */
587
+	function &throwError($message = null,
588
+						 $code = null,
589
+						 $userinfo = null)
590
+	{
591
+		if (isset($this) && is_a($this, 'PEAR')) {
592
+			$a = &$this->raiseError($message, $code, null, null, $userinfo);
593
+			return $a;
594
+		} else {
595
+			$a = &references_PEAR::raiseError($message, $code, null, null, $userinfo);
596
+			return $a;
597
+		}
598
+	}
599
+
600
+	// }}}
601
+	function staticPushErrorHandling($mode, $options = null)
602
+	{
603
+		$stack = &$GLOBALS['_PEAR_error_handler_stack'];
604
+		$def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
605
+		$def_options = &$GLOBALS['_PEAR_default_error_options'];
606
+		$stack[] = array($def_mode, $def_options);
607
+		switch ($mode) {
608
+			case references_PEAR_ERROR_EXCEPTION:
609
+			case references_PEAR_ERROR_RETURN:
610
+			case references_PEAR_ERROR_PRINT:
611
+			case references_PEAR_ERROR_TRIGGER:
612
+			case references_PEAR_ERROR_DIE:
613
+			case null:
614
+				$def_mode = $mode;
615
+				$def_options = $options;
616
+				break;
617
+
618
+			case references_PEAR_ERROR_CALLBACK:
619
+				$def_mode = $mode;
620
+				// class/object method callback
621
+				if (is_callable($options)) {
622
+					$def_options = $options;
623
+				} else {
624
+					trigger_error("invalid error callback", E_USER_WARNING);
625
+				}
626
+				break;
627
+
628
+			default:
629
+				trigger_error("invalid error mode", E_USER_WARNING);
630
+				break;
631
+		}
632
+		$stack[] = array($mode, $options);
633
+		return true;
634
+	}
635
+
636
+	function staticPopErrorHandling()
637
+	{
638
+		$stack = &$GLOBALS['_PEAR_error_handler_stack'];
639
+		$setmode     = &$GLOBALS['_PEAR_default_error_mode'];
640
+		$setoptions  = &$GLOBALS['_PEAR_default_error_options'];
641
+		array_pop($stack);
642
+		list($mode, $options) = $stack[sizeof($stack) - 1];
643
+		array_pop($stack);
644
+		switch ($mode) {
645
+			case references_PEAR_ERROR_EXCEPTION:
646
+			case references_PEAR_ERROR_RETURN:
647
+			case references_PEAR_ERROR_PRINT:
648
+			case references_PEAR_ERROR_TRIGGER:
649
+			case references_PEAR_ERROR_DIE:
650
+			case null:
651
+				$setmode = $mode;
652
+				$setoptions = $options;
653
+				break;
654
+
655
+			case references_PEAR_ERROR_CALLBACK:
656
+				$setmode = $mode;
657
+				// class/object method callback
658
+				if (is_callable($options)) {
659
+					$setoptions = $options;
660
+				} else {
661
+					trigger_error("invalid error callback", E_USER_WARNING);
662
+				}
663
+				break;
664
+
665
+			default:
666
+				trigger_error("invalid error mode", E_USER_WARNING);
667
+				break;
668
+		}
669
+		return true;
670
+	}
671
+
672
+	// {{{ pushErrorHandling()
673
+
674
+	/**
675
+	 * Push a new error handler on top of the error handler options stack. With this
676
+	 * you can easily override the actual error handler for some code and restore
677
+	 * it later with popErrorHandling.
678
+	 *
679
+	 * @param mixed $mode (same as setErrorHandling)
680
+	 * @param mixed $options (same as setErrorHandling)
681
+	 *
682
+	 * @return bool Always true
683
+	 *
684
+	 * @see references_PEAR::setErrorHandling
685
+	 */
686
+	function pushErrorHandling($mode, $options = null)
687
+	{
688
+		$stack = &$GLOBALS['_PEAR_error_handler_stack'];
689
+		if (isset($this) && is_a($this, 'PEAR')) {
690
+			$def_mode    = &$this->_default_error_mode;
691
+			$def_options = &$this->_default_error_options;
692
+		} else {
693
+			$def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
694
+			$def_options = &$GLOBALS['_PEAR_default_error_options'];
695
+		}
696
+		$stack[] = array($def_mode, $def_options);
697
+
698
+		if (isset($this) && is_a($this, 'PEAR')) {
699
+			$this->setErrorHandling($mode, $options);
700
+		} else {
701
+			references_PEAR::setErrorHandling($mode, $options);
702
+		}
703
+		$stack[] = array($mode, $options);
704
+		return true;
705
+	}
706
+
707
+	// }}}
708
+	// {{{ popErrorHandling()
709
+
710
+	/**
711
+	 * Pop the last error handler used
712
+	 *
713
+	 * @return bool Always true
714
+	 *
715
+	 * @see references_PEAR::pushErrorHandling
716
+	 */
717
+	function popErrorHandling()
718
+	{
719
+		$stack = &$GLOBALS['_PEAR_error_handler_stack'];
720
+		array_pop($stack);
721
+		list($mode, $options) = $stack[sizeof($stack) - 1];
722
+		array_pop($stack);
723
+		if (isset($this) && is_a($this, 'PEAR')) {
724
+			$this->setErrorHandling($mode, $options);
725
+		} else {
726
+			references_PEAR::setErrorHandling($mode, $options);
727
+		}
728
+		return true;
729
+	}
730
+
731
+	// }}}
732
+	// {{{ loadExtension()
733
+
734
+	/**
735
+	 * OS independant PHP extension load. Remember to take care
736
+	 * on the correct extension name for case sensitive OSes.
737
+	 *
738
+	 * @param string $ext The extension name
739
+	 * @return bool Success or not on the dl() call
740
+	 */
741
+	function loadExtension($ext)
742
+	{
743
+		if (!extension_loaded($ext)) {
744
+			// if either returns true dl() will produce a FATAL error, stop that
745
+			if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
746
+				return false;
747
+			}
748
+			if (references_OS_WINDOWS) {
749
+				$suffix = '.dll';
750
+			} elseif (PHP_OS == 'HP-UX') {
751
+				$suffix = '.sl';
752
+			} elseif (PHP_OS == 'AIX') {
753
+				$suffix = '.a';
754
+			} elseif (PHP_OS == 'OSX') {
755
+				$suffix = '.bundle';
756
+			} else {
757
+				$suffix = '.so';
758
+			}
759
+			return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
760
+		}
761
+		return true;
762
+	}
763
+
764
+	// }}}
765 765
 }
766 766
 
767 767
 // {{{ _PEAR_call_destructors()
768 768
 
769 769
 function references_PEAR_call_destructors()
770 770
 {
771
-    global $_PEAR_destructor_object_list;
772
-    if (is_array($_PEAR_destructor_object_list) &&
773
-        sizeof($_PEAR_destructor_object_list))
774
-    {
775
-        reset($_PEAR_destructor_object_list);
776
-        if (references_PEAR::getStaticProperty('PEAR', 'destructlifo')) {
777
-            $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
778
-        }
779
-        while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
780
-            $classname = get_class($objref);
781
-            while ($classname) {
782
-                $destructor = "_$classname";
783
-                if (method_exists($objref, $destructor)) {
784
-                    $objref->$destructor();
785
-                    break;
786
-                } else {
787
-                    $classname = get_parent_class($classname);
788
-                }
789
-            }
790
-        }
791
-        // Empty the object list to ensure that destructors are
792
-        // not called more than once.
793
-        $_PEAR_destructor_object_list = array();
794
-    }
795
-
796
-    // Now call the shutdown functions
797
-    if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {
798
-        foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
799
-            call_user_func_array($value[0], $value[1]);
800
-        }
801
-    }
771
+	global $_PEAR_destructor_object_list;
772
+	if (is_array($_PEAR_destructor_object_list) &&
773
+		sizeof($_PEAR_destructor_object_list))
774
+	{
775
+		reset($_PEAR_destructor_object_list);
776
+		if (references_PEAR::getStaticProperty('PEAR', 'destructlifo')) {
777
+			$_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
778
+		}
779
+		while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
780
+			$classname = get_class($objref);
781
+			while ($classname) {
782
+				$destructor = "_$classname";
783
+				if (method_exists($objref, $destructor)) {
784
+					$objref->$destructor();
785
+					break;
786
+				} else {
787
+					$classname = get_parent_class($classname);
788
+				}
789
+			}
790
+		}
791
+		// Empty the object list to ensure that destructors are
792
+		// not called more than once.
793
+		$_PEAR_destructor_object_list = array();
794
+	}
795
+
796
+	// Now call the shutdown functions
797
+	if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {
798
+		foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
799
+			call_user_func_array($value[0], $value[1]);
800
+		}
801
+	}
802 802
 }
803 803
 
804 804
 // }}}
@@ -821,281 +821,281 @@  discard block
 block discarded – undo
821 821
  */
822 822
 class references_PEAR_Error
823 823
 {
824
-    // {{{ properties
825
-
826
-    public $error_message_prefix = '';
827
-    public $mode                 = references_PEAR_ERROR_RETURN;
828
-    public $level                = E_USER_NOTICE;
829
-    public $code                 = -1;
830
-    public $message              = '';
831
-    public $userinfo             = '';
832
-    public $backtrace            = null;
833
-
834
-    // }}}
835
-    // {{{ constructor
836
-
837
-    /**
838
-     * PEAR_Error constructor
839
-     *
840
-     * @param string $message  message
841
-     *
842
-     * @param int $code     (optional) error code
843
-     *
844
-     * @param int $mode     (optional) error mode, one of: references_PEAR_ERROR_RETURN,
845
-     * references_PEAR_ERROR_PRINT, references_PEAR_ERROR_DIE, references_PEAR_ERROR_TRIGGER,
846
-     * references_PEAR_ERROR_CALLBACK or references_PEAR_ERROR_EXCEPTION
847
-     *
848
-     * @param mixed $options   (optional) error level, _OR_ in the case of
849
-     * references_PEAR_ERROR_CALLBACK, the callback function or object/method
850
-     * tuple.
851
-     *
852
-     * @param string $userinfo (optional) additional user/debug info
853
-     *
854
-     * @access public
855
-     *
856
-     */
857
-    function __construct($message = 'unknown error', $code = null,
858
-                        $mode = null, $options = null, $userinfo = null)
859
-    {
860
-        if ($mode === null) {
861
-            $mode = references_PEAR_ERROR_RETURN;
862
-        }
863
-        $this->message   = $message;
864
-        $this->code      = $code;
865
-        $this->mode      = $mode;
866
-        $this->userinfo  = $userinfo;
867
-        if (!references_PEAR::getStaticProperty('PEAR_Error', 'skiptrace')) {
868
-            $this->backtrace = debug_backtrace();
869
-            if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
870
-                unset($this->backtrace[0]['object']);
871
-            }
872
-        }
873
-        if ($mode & references_PEAR_ERROR_CALLBACK) {
874
-            $this->level = E_USER_NOTICE;
875
-            $this->callback = $options;
876
-        } else {
877
-            if ($options === null) {
878
-                $options = E_USER_NOTICE;
879
-            }
880
-            $this->level = $options;
881
-            $this->callback = null;
882
-        }
883
-        if ($this->mode & references_PEAR_ERROR_PRINT) {
884
-            if (is_null($options) || is_int($options)) {
885
-                $format = "%s";
886
-            } else {
887
-                $format = $options;
888
-            }
889
-            printf($format, $this->getMessage());
890
-        }
891
-        if ($this->mode & references_PEAR_ERROR_TRIGGER) {
892
-            trigger_error($this->getMessage(), $this->level);
893
-        }
894
-        if ($this->mode & references_PEAR_ERROR_DIE) {
895
-            $msg = $this->getMessage();
896
-            if (is_null($options) || is_int($options)) {
897
-                $format = "%s";
898
-                if (substr($msg, -1) != "\n") {
899
-                    $msg .= "\n";
900
-                }
901
-            } else {
902
-                $format = $options;
903
-            }
904
-            die(sprintf($format, $msg));
905
-        }
906
-        if ($this->mode & references_PEAR_ERROR_CALLBACK) {
907
-            if (is_callable($this->callback)) {
908
-                call_user_func($this->callback, $this);
909
-            }
910
-        }
911
-        if ($this->mode & references_PEAR_ERROR_EXCEPTION) {
912
-            trigger_error("references_PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
913
-            eval('$e = new Exception($this->message, $this->code);throw($e);');
914
-        }
915
-    }
916
-
917
-    // }}}
918
-    // {{{ getMode()
919
-
920
-    /**
921
-     * Get the error mode from an error object.
922
-     *
923
-     * @return int error mode
924
-     * @access public
925
-     */
926
-    function getMode() {
927
-        return $this->mode;
928
-    }
929
-
930
-    // }}}
931
-    // {{{ getCallback()
932
-
933
-    /**
934
-     * Get the callback function/method from an error object.
935
-     *
936
-     * @return mixed callback function or object/method array
937
-     * @access public
938
-     */
939
-    function getCallback() {
940
-        return $this->callback;
941
-    }
942
-
943
-    // }}}
944
-    // {{{ getMessage()
945
-
946
-
947
-    /**
948
-     * Get the error message from an error object.
949
-     *
950
-     * @return  string  full error message
951
-     * @access public
952
-     */
953
-    function getMessage()
954
-    {
955
-        return ($this->error_message_prefix . $this->message);
956
-    }
957
-
958
-
959
-    // }}}
960
-    // {{{ getCode()
961
-
962
-    /**
963
-     * Get error code from an error object
964
-     *
965
-     * @return int error code
966
-     * @access public
967
-     */
968
-     function getCode()
969
-     {
970
-        return $this->code;
971
-     }
972
-
973
-    // }}}
974
-    // {{{ getType()
975
-
976
-    /**
977
-     * Get the name of this error/exception.
978
-     *
979
-     * @return string error/exception name (type)
980
-     * @access public
981
-     */
982
-    function getType()
983
-    {
984
-        return get_class($this);
985
-    }
986
-
987
-    // }}}
988
-    // {{{ getUserInfo()
989
-
990
-    /**
991
-     * Get additional user-supplied information.
992
-     *
993
-     * @return string user-supplied information
994
-     * @access public
995
-     */
996
-    function getUserInfo()
997
-    {
998
-        return $this->userinfo;
999
-    }
1000
-
1001
-    // }}}
1002
-    // {{{ getDebugInfo()
1003
-
1004
-    /**
1005
-     * Get additional debug information supplied by the application.
1006
-     *
1007
-     * @return string debug information
1008
-     * @access public
1009
-     */
1010
-    function getDebugInfo()
1011
-    {
1012
-        return $this->getUserInfo();
1013
-    }
1014
-
1015
-    // }}}
1016
-    // {{{ getBacktrace()
1017
-
1018
-    /**
1019
-     * Get the call backtrace from where the error was generated.
1020
-     * Supported with PHP 4.3.0 or newer.
1021
-     *
1022
-     * @param int $frame (optional) what frame to fetch
1023
-     * @return array Backtrace, or NULL if not available.
1024
-     * @access public
1025
-     */
1026
-    function getBacktrace($frame = null)
1027
-    {
1028
-        if (defined('PEAR_IGNORE_BACKTRACE')) {
1029
-            return null;
1030
-        }
1031
-        if ($frame === null) {
1032
-            return $this->backtrace;
1033
-        }
1034
-        return $this->backtrace[$frame];
1035
-    }
1036
-
1037
-    // }}}
1038
-    // {{{ addUserInfo()
1039
-
1040
-    function addUserInfo($info)
1041
-    {
1042
-        if (empty($this->userinfo)) {
1043
-            $this->userinfo = $info;
1044
-        } else {
1045
-            $this->userinfo .= " ** $info";
1046
-        }
1047
-    }
1048
-
1049
-    // }}}
1050
-    // {{{ toString()
1051
-
1052
-    /**
1053
-     * Make a string representation of this object.
1054
-     *
1055
-     * @return string a string with an object summary
1056
-     * @access public
1057
-     */
1058
-    function toString() {
1059
-        $modes = array();
1060
-        $levels = array(E_USER_NOTICE  => 'notice',
1061
-                        E_USER_WARNING => 'warning',
1062
-                        E_USER_ERROR   => 'error');
1063
-        if ($this->mode & references_PEAR_ERROR_CALLBACK) {
1064
-            if (is_array($this->callback)) {
1065
-                $callback = (is_object($this->callback[0]) ?
1066
-                    strtolower(get_class($this->callback[0])) :
1067
-                    $this->callback[0]) . '::' .
1068
-                    $this->callback[1];
1069
-            } else {
1070
-                $callback = $this->callback;
1071
-            }
1072
-            return sprintf('[%s: message="%s" code=%d mode=callback '.
1073
-                           'callback=%s prefix="%s" info="%s"]',
1074
-                           strtolower(get_class($this)), $this->message, $this->code,
1075
-                           $callback, $this->error_message_prefix,
1076
-                           $this->userinfo);
1077
-        }
1078
-        if ($this->mode & references_PEAR_ERROR_PRINT) {
1079
-            $modes[] = 'print';
1080
-        }
1081
-        if ($this->mode & references_PEAR_ERROR_TRIGGER) {
1082
-            $modes[] = 'trigger';
1083
-        }
1084
-        if ($this->mode & references_PEAR_ERROR_DIE) {
1085
-            $modes[] = 'die';
1086
-        }
1087
-        if ($this->mode & references_PEAR_ERROR_RETURN) {
1088
-            $modes[] = 'return';
1089
-        }
1090
-        return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
1091
-                       'prefix="%s" info="%s"]',
1092
-                       strtolower(get_class($this)), $this->message, $this->code,
1093
-                       implode("|", $modes), $levels[$this->level],
1094
-                       $this->error_message_prefix,
1095
-                       $this->userinfo);
1096
-    }
1097
-
1098
-    // }}}
824
+	// {{{ properties
825
+
826
+	public $error_message_prefix = '';
827
+	public $mode                 = references_PEAR_ERROR_RETURN;
828
+	public $level                = E_USER_NOTICE;
829
+	public $code                 = -1;
830
+	public $message              = '';
831
+	public $userinfo             = '';
832
+	public $backtrace            = null;
833
+
834
+	// }}}
835
+	// {{{ constructor
836
+
837
+	/**
838
+	 * PEAR_Error constructor
839
+	 *
840
+	 * @param string $message  message
841
+	 *
842
+	 * @param int $code     (optional) error code
843
+	 *
844
+	 * @param int $mode     (optional) error mode, one of: references_PEAR_ERROR_RETURN,
845
+	 * references_PEAR_ERROR_PRINT, references_PEAR_ERROR_DIE, references_PEAR_ERROR_TRIGGER,
846
+	 * references_PEAR_ERROR_CALLBACK or references_PEAR_ERROR_EXCEPTION
847
+	 *
848
+	 * @param mixed $options   (optional) error level, _OR_ in the case of
849
+	 * references_PEAR_ERROR_CALLBACK, the callback function or object/method
850
+	 * tuple.
851
+	 *
852
+	 * @param string $userinfo (optional) additional user/debug info
853
+	 *
854
+	 * @access public
855
+	 *
856
+	 */
857
+	function __construct($message = 'unknown error', $code = null,
858
+						$mode = null, $options = null, $userinfo = null)
859
+	{
860
+		if ($mode === null) {
861
+			$mode = references_PEAR_ERROR_RETURN;
862
+		}
863
+		$this->message   = $message;
864
+		$this->code      = $code;
865
+		$this->mode      = $mode;
866
+		$this->userinfo  = $userinfo;
867
+		if (!references_PEAR::getStaticProperty('PEAR_Error', 'skiptrace')) {
868
+			$this->backtrace = debug_backtrace();
869
+			if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
870
+				unset($this->backtrace[0]['object']);
871
+			}
872
+		}
873
+		if ($mode & references_PEAR_ERROR_CALLBACK) {
874
+			$this->level = E_USER_NOTICE;
875
+			$this->callback = $options;
876
+		} else {
877
+			if ($options === null) {
878
+				$options = E_USER_NOTICE;
879
+			}
880
+			$this->level = $options;
881
+			$this->callback = null;
882
+		}
883
+		if ($this->mode & references_PEAR_ERROR_PRINT) {
884
+			if (is_null($options) || is_int($options)) {
885
+				$format = "%s";
886
+			} else {
887
+				$format = $options;
888
+			}
889
+			printf($format, $this->getMessage());
890
+		}
891
+		if ($this->mode & references_PEAR_ERROR_TRIGGER) {
892
+			trigger_error($this->getMessage(), $this->level);
893
+		}
894
+		if ($this->mode & references_PEAR_ERROR_DIE) {
895
+			$msg = $this->getMessage();
896
+			if (is_null($options) || is_int($options)) {
897
+				$format = "%s";
898
+				if (substr($msg, -1) != "\n") {
899
+					$msg .= "\n";
900
+				}
901
+			} else {
902
+				$format = $options;
903
+			}
904
+			die(sprintf($format, $msg));
905
+		}
906
+		if ($this->mode & references_PEAR_ERROR_CALLBACK) {
907
+			if (is_callable($this->callback)) {
908
+				call_user_func($this->callback, $this);
909
+			}
910
+		}
911
+		if ($this->mode & references_PEAR_ERROR_EXCEPTION) {
912
+			trigger_error("references_PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
913
+			eval('$e = new Exception($this->message, $this->code);throw($e);');
914
+		}
915
+	}
916
+
917
+	// }}}
918
+	// {{{ getMode()
919
+
920
+	/**
921
+	 * Get the error mode from an error object.
922
+	 *
923
+	 * @return int error mode
924
+	 * @access public
925
+	 */
926
+	function getMode() {
927
+		return $this->mode;
928
+	}
929
+
930
+	// }}}
931
+	// {{{ getCallback()
932
+
933
+	/**
934
+	 * Get the callback function/method from an error object.
935
+	 *
936
+	 * @return mixed callback function or object/method array
937
+	 * @access public
938
+	 */
939
+	function getCallback() {
940
+		return $this->callback;
941
+	}
942
+
943
+	// }}}
944
+	// {{{ getMessage()
945
+
946
+
947
+	/**
948
+	 * Get the error message from an error object.
949
+	 *
950
+	 * @return  string  full error message
951
+	 * @access public
952
+	 */
953
+	function getMessage()
954
+	{
955
+		return ($this->error_message_prefix . $this->message);
956
+	}
957
+
958
+
959
+	// }}}
960
+	// {{{ getCode()
961
+
962
+	/**
963
+	 * Get error code from an error object
964
+	 *
965
+	 * @return int error code
966
+	 * @access public
967
+	 */
968
+	 function getCode()
969
+	 {
970
+		return $this->code;
971
+	 }
972
+
973
+	// }}}
974
+	// {{{ getType()
975
+
976
+	/**
977
+	 * Get the name of this error/exception.
978
+	 *
979
+	 * @return string error/exception name (type)
980
+	 * @access public
981
+	 */
982
+	function getType()
983
+	{
984
+		return get_class($this);
985
+	}
986
+
987
+	// }}}
988
+	// {{{ getUserInfo()
989
+
990
+	/**
991
+	 * Get additional user-supplied information.
992
+	 *
993
+	 * @return string user-supplied information
994
+	 * @access public
995
+	 */
996
+	function getUserInfo()
997
+	{
998
+		return $this->userinfo;
999
+	}
1000
+
1001
+	// }}}
1002
+	// {{{ getDebugInfo()
1003
+
1004
+	/**
1005
+	 * Get additional debug information supplied by the application.
1006
+	 *
1007
+	 * @return string debug information
1008
+	 * @access public
1009
+	 */
1010
+	function getDebugInfo()
1011
+	{
1012
+		return $this->getUserInfo();
1013
+	}
1014
+
1015
+	// }}}
1016
+	// {{{ getBacktrace()
1017
+
1018
+	/**
1019
+	 * Get the call backtrace from where the error was generated.
1020
+	 * Supported with PHP 4.3.0 or newer.
1021
+	 *
1022
+	 * @param int $frame (optional) what frame to fetch
1023
+	 * @return array Backtrace, or NULL if not available.
1024
+	 * @access public
1025
+	 */
1026
+	function getBacktrace($frame = null)
1027
+	{
1028
+		if (defined('PEAR_IGNORE_BACKTRACE')) {
1029
+			return null;
1030
+		}
1031
+		if ($frame === null) {
1032
+			return $this->backtrace;
1033
+		}
1034
+		return $this->backtrace[$frame];
1035
+	}
1036
+
1037
+	// }}}
1038
+	// {{{ addUserInfo()
1039
+
1040
+	function addUserInfo($info)
1041
+	{
1042
+		if (empty($this->userinfo)) {
1043
+			$this->userinfo = $info;
1044
+		} else {
1045
+			$this->userinfo .= " ** $info";
1046
+		}
1047
+	}
1048
+
1049
+	// }}}
1050
+	// {{{ toString()
1051
+
1052
+	/**
1053
+	 * Make a string representation of this object.
1054
+	 *
1055
+	 * @return string a string with an object summary
1056
+	 * @access public
1057
+	 */
1058
+	function toString() {
1059
+		$modes = array();
1060
+		$levels = array(E_USER_NOTICE  => 'notice',
1061
+						E_USER_WARNING => 'warning',
1062
+						E_USER_ERROR   => 'error');
1063
+		if ($this->mode & references_PEAR_ERROR_CALLBACK) {
1064
+			if (is_array($this->callback)) {
1065
+				$callback = (is_object($this->callback[0]) ?
1066
+					strtolower(get_class($this->callback[0])) :
1067
+					$this->callback[0]) . '::' .
1068
+					$this->callback[1];
1069
+			} else {
1070
+				$callback = $this->callback;
1071
+			}
1072
+			return sprintf('[%s: message="%s" code=%d mode=callback '.
1073
+						   'callback=%s prefix="%s" info="%s"]',
1074
+						   strtolower(get_class($this)), $this->message, $this->code,
1075
+						   $callback, $this->error_message_prefix,
1076
+						   $this->userinfo);
1077
+		}
1078
+		if ($this->mode & references_PEAR_ERROR_PRINT) {
1079
+			$modes[] = 'print';
1080
+		}
1081
+		if ($this->mode & references_PEAR_ERROR_TRIGGER) {
1082
+			$modes[] = 'trigger';
1083
+		}
1084
+		if ($this->mode & references_PEAR_ERROR_DIE) {
1085
+			$modes[] = 'die';
1086
+		}
1087
+		if ($this->mode & references_PEAR_ERROR_RETURN) {
1088
+			$modes[] = 'return';
1089
+		}
1090
+		return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
1091
+					   'prefix="%s" info="%s"]',
1092
+					   strtolower(get_class($this)), $this->message, $this->code,
1093
+					   implode("|", $modes), $levels[$this->level],
1094
+					   $this->error_message_prefix,
1095
+					   $this->userinfo);
1096
+	}
1097
+
1098
+	// }}}
1099 1099
 }
1100 1100
 
1101 1101
 /*
Please login to merge, or discard this patch.
Spacing   +24 added lines, -25 removed lines patch added patch discarded remove patch
@@ -28,11 +28,11 @@  discard block
 block discarded – undo
28 28
 /**#@+
29 29
  * ERROR constants
30 30
  */
31
-define('references_PEAR_ERROR_RETURN',     1);
32
-define('references_PEAR_ERROR_PRINT',      2);
33
-define('references_PEAR_ERROR_TRIGGER',    4);
34
-define('references_PEAR_ERROR_DIE',        8);
35
-define('references_PEAR_ERROR_CALLBACK',  16);
31
+define('references_PEAR_ERROR_RETURN', 1);
32
+define('references_PEAR_ERROR_PRINT', 2);
33
+define('references_PEAR_ERROR_TRIGGER', 4);
34
+define('references_PEAR_ERROR_DIE', 8);
35
+define('references_PEAR_ERROR_CALLBACK', 16);
36 36
 /**
37 37
  * WARNING: obsolete
38 38
  * @deprecated
@@ -44,12 +44,12 @@  discard block
 block discarded – undo
44 44
 
45 45
 if (substr(PHP_OS, 0, 3) == 'WIN') {
46 46
     define('references_OS_WINDOWS', true);
47
-    define('references_OS_UNIX',    false);
48
-    define('references_PEAR_OS',    'Windows');
47
+    define('references_OS_UNIX', false);
48
+    define('references_PEAR_OS', 'Windows');
49 49
 } else {
50 50
     define('references_OS_WINDOWS', false);
51
-    define('references_OS_UNIX',    true);
52
-    define('references_PEAR_OS',    'Unix'); // blatant assumption
51
+    define('references_OS_UNIX', true);
52
+    define('references_PEAR_OS', 'Unix'); // blatant assumption
53 53
 }
54 54
 
55 55
 // instant backwards compatibility
@@ -460,9 +460,9 @@  discard block
 block discarded – undo
460 460
             // $error_code is a non-empty array here;
461 461
             // we walk through it trying to unset all
462 462
             // values
463
-            foreach($error_code as $key => $error) {
463
+            foreach ($error_code as $key => $error) {
464 464
                 if ($this->_checkDelExpect($error)) {
465
-                    $deleted =  true;
465
+                    $deleted = true;
466 466
                 } else {
467 467
                     $deleted = false;
468 468
                 }
@@ -870,7 +870,7 @@  discard block
 block discarded – undo
870 870
                 unset($this->backtrace[0]['object']);
871 871
             }
872 872
         }
873
-        if ($mode & references_PEAR_ERROR_CALLBACK) {
873
+        if ($mode&references_PEAR_ERROR_CALLBACK) {
874 874
             $this->level = E_USER_NOTICE;
875 875
             $this->callback = $options;
876 876
         } else {
@@ -880,7 +880,7 @@  discard block
 block discarded – undo
880 880
             $this->level = $options;
881 881
             $this->callback = null;
882 882
         }
883
-        if ($this->mode & references_PEAR_ERROR_PRINT) {
883
+        if ($this->mode&references_PEAR_ERROR_PRINT) {
884 884
             if (is_null($options) || is_int($options)) {
885 885
                 $format = "%s";
886 886
             } else {
@@ -888,10 +888,10 @@  discard block
 block discarded – undo
888 888
             }
889 889
             printf($format, $this->getMessage());
890 890
         }
891
-        if ($this->mode & references_PEAR_ERROR_TRIGGER) {
891
+        if ($this->mode&references_PEAR_ERROR_TRIGGER) {
892 892
             trigger_error($this->getMessage(), $this->level);
893 893
         }
894
-        if ($this->mode & references_PEAR_ERROR_DIE) {
894
+        if ($this->mode&references_PEAR_ERROR_DIE) {
895 895
             $msg = $this->getMessage();
896 896
             if (is_null($options) || is_int($options)) {
897 897
                 $format = "%s";
@@ -903,12 +903,12 @@  discard block
 block discarded – undo
903 903
             }
904 904
             die(sprintf($format, $msg));
905 905
         }
906
-        if ($this->mode & references_PEAR_ERROR_CALLBACK) {
906
+        if ($this->mode&references_PEAR_ERROR_CALLBACK) {
907 907
             if (is_callable($this->callback)) {
908 908
                 call_user_func($this->callback, $this);
909 909
             }
910 910
         }
911
-        if ($this->mode & references_PEAR_ERROR_EXCEPTION) {
911
+        if ($this->mode&references_PEAR_ERROR_EXCEPTION) {
912 912
             trigger_error("references_PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
913 913
             eval('$e = new Exception($this->message, $this->code);throw($e);');
914 914
         }
@@ -952,7 +952,7 @@  discard block
 block discarded – undo
952 952
      */
953 953
     function getMessage()
954 954
     {
955
-        return ($this->error_message_prefix . $this->message);
955
+        return ($this->error_message_prefix.$this->message);
956 956
     }
957 957
 
958 958
 
@@ -1060,11 +1060,10 @@  discard block
 block discarded – undo
1060 1060
         $levels = array(E_USER_NOTICE  => 'notice',
1061 1061
                         E_USER_WARNING => 'warning',
1062 1062
                         E_USER_ERROR   => 'error');
1063
-        if ($this->mode & references_PEAR_ERROR_CALLBACK) {
1063
+        if ($this->mode&references_PEAR_ERROR_CALLBACK) {
1064 1064
             if (is_array($this->callback)) {
1065 1065
                 $callback = (is_object($this->callback[0]) ?
1066
-                    strtolower(get_class($this->callback[0])) :
1067
-                    $this->callback[0]) . '::' .
1066
+                    strtolower(get_class($this->callback[0])) : $this->callback[0]).'::'.
1068 1067
                     $this->callback[1];
1069 1068
             } else {
1070 1069
                 $callback = $this->callback;
@@ -1075,16 +1074,16 @@  discard block
 block discarded – undo
1075 1074
                            $callback, $this->error_message_prefix,
1076 1075
                            $this->userinfo);
1077 1076
         }
1078
-        if ($this->mode & references_PEAR_ERROR_PRINT) {
1077
+        if ($this->mode&references_PEAR_ERROR_PRINT) {
1079 1078
             $modes[] = 'print';
1080 1079
         }
1081
-        if ($this->mode & references_PEAR_ERROR_TRIGGER) {
1080
+        if ($this->mode&references_PEAR_ERROR_TRIGGER) {
1082 1081
             $modes[] = 'trigger';
1083 1082
         }
1084
-        if ($this->mode & references_PEAR_ERROR_DIE) {
1083
+        if ($this->mode&references_PEAR_ERROR_DIE) {
1085 1084
             $modes[] = 'die';
1086 1085
         }
1087
-        if ($this->mode & references_PEAR_ERROR_RETURN) {
1086
+        if ($this->mode&references_PEAR_ERROR_RETURN) {
1088 1087
             $modes[] = 'return';
1089 1088
         }
1090 1089
         return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
Please login to merge, or discard this patch.
class/PersistableObjectHandler.php 1 patch
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -230,7 +230,7 @@  discard block
 block discarded – undo
230 230
      * @param boolean $as_object
231 231
      * @param string $fields Requested fields from the query
232 232
      *
233
-     * @return array
233
+     * @return string
234 234
      */
235 235
     protected function convertResultSet($result, $id_as_key = false, $as_object = true, $fields='*') {
236 236
         $ret = array();
@@ -489,7 +489,7 @@  discard block
 block discarded – undo
489 489
     /**
490 490
      * delete an object from the database
491 491
      *
492
-     * @param object $obj reference to the object to delete
492
+     * @param references_articles $obj reference to the object to delete
493 493
      * @param bool $force
494 494
      * @return bool FALSE if failed.
495 495
      */
Please login to merge, or discard this patch.
class/references_articles.php 1 patch
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -497,7 +497,7 @@  discard block
 block discarded – undo
497 497
 	/**
498 498
 	 * Notification de la publication d'une nouvelle référence
499 499
 	 *
500
-	 * @param object $article	L'annonce pour laquelle on fait la notification
500
+	 * @param references_articles $article	L'annonce pour laquelle on fait la notification
501 501
 	 */
502 502
 	function notifyNewArticle(references_articles $article)
503 503
 	{
@@ -566,7 +566,7 @@  discard block
 block discarded – undo
566 566
 	/**
567 567
 	 * Indique si une référence est visible d'un utilisateur
568 568
 	 *
569
-	 * @param object $article		L'article à controler
569
+	 * @param references_articles $article		L'article à controler
570 570
 	 * @param integer $uid			L'id de l'utilisateur à controler
571 571
 	 * @return boolean
572 572
 	 */
Please login to merge, or discard this patch.
class/references_categories.php 1 patch
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -181,7 +181,7 @@  discard block
 block discarded – undo
181 181
 	/**
182 182
 	 * Notification de la création d'une nouvelle catégorie
183 183
 	 *
184
-	 * @param object $category
184
+	 * @param references_categories $category
185 185
 	 */
186 186
     function notifyNewCategory(references_categories $category)
187 187
     {
@@ -193,7 +193,7 @@  discard block
 block discarded – undo
193 193
 	/**
194 194
 	 * Indique si une catégorie est visible d'un utilisateur
195 195
 	 *
196
-	 * @param object $category		La catégorie à controler
196
+	 * @param references_categories $category		La catégorie à controler
197 197
 	 * @param integer $uid			L'id de l'utilisateur à controler
198 198
 	 * @return boolean
199 199
 	 */
Please login to merge, or discard this patch.
class/references_handlers.php 1 patch
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -44,7 +44,7 @@
 block discarded – undo
44 44
     /**
45 45
      * Retourne l'instance unique de la clanss
46 46
      *
47
-     * @return object
47
+     * @return references_handler
48 48
      */
49 49
 	public static function getInstance()
50 50
 	{
Please login to merge, or discard this patch.
class/references_listFilter.php 1 patch
Doc Comments   +9 added lines, -11 removed lines patch added patch discarded remove patch
@@ -253,7 +253,7 @@  discard block
 block discarded – undo
253 253
 	/**
254 254
 	 * Retourne les noms à utiliser pour les champs de tri (sélecteur de champ et ordre de tri)
255 255
 	 *
256
-	 * @return array	[0] = Nom du sélecteur de champs, [1] = Nom du sélecteur pour le sens du tri
256
+	 * @return string[]	[0] = Nom du sélecteur de champs, [1] = Nom du sélecteur pour le sens du tri
257 257
 	 */
258 258
     private function getSortPlaceHolderNames()
259 259
     {
@@ -278,7 +278,7 @@  discard block
 block discarded – undo
278 278
 	 *
279 279
 	 * @param string $optionName
280 280
 	 * @param mixed $optionValue
281
-	 * @return object
281
+	 * @return references_listFilter
282 282
 	 */
283 283
     public function setOption($optionName, $optionValue)
284 284
     {
@@ -401,7 +401,7 @@  discard block
 block discarded – undo
401 401
      * 		[data]			A ne pas renseigner, contient la valeur saisie par l'utilisateur
402 402
      * 		[operator]		Opérateur de comparaison pour le Criteria
403 403
      * 		[autoComplete]  Indique si on active l'auto complétion sur le champs
404
-     * @return object				L'objet courant pour pouvoir chainer
404
+     * @return references_listFilter				L'objet courant pour pouvoir chainer
405 405
      */
406 406
     function initFilter($fieldName, $parameters)
407 407
     {
@@ -456,7 +456,7 @@  discard block
 block discarded – undo
456 456
     /**
457 457
      * Ajoute les critères par défaut au critère général
458 458
      *
459
-     * @return void
459
+     * @return references_listFilter
460 460
      */
461 461
     private function addDefaultCriterias()
462 462
     {
@@ -581,7 +581,7 @@  discard block
 block discarded – undo
581 581
     /**
582 582
      * Méthode à appeler juste après le constructeur pour qu'elle récupère les données saisies
583 583
      *
584
-     * @return object	L'objet courant pour pouvoir chainer
584
+     * @return references_listFilter	L'objet courant pour pouvoir chainer
585 585
      */
586 586
     function filter()
587 587
     {
@@ -703,7 +703,7 @@  discard block
 block discarded – undo
703 703
 	 *
704 704
 	 * @param string $key
705 705
 	 * @param string $value
706
-	 * @return object
706
+	 * @return references_listFilter
707 707
 	 */
708 708
     function addAdditionnalParameterToPager($key, $value = '')
709 709
     {
@@ -716,7 +716,7 @@  discard block
 block discarded – undo
716 716
 	 *
717 717
 	 * @param string $key
718 718
 	 * @param string $value
719
-	 * @return object
719
+	 * @return references_listFilter
720 720
 	 */
721 721
     function addAdditionnalParameterToClearButton($key, $value = '')
722 722
     {
@@ -727,9 +727,7 @@  discard block
 block discarded – undo
727 727
 	/**
728 728
 	 * Permet d'ajouter des paramètres supplémentaires au pager
729 729
 	 *
730
-	 * @param string $key
731
-	 * @param string $value
732
-	 * @return object
730
+	 * @return references_listFilter
733 731
 	 */
734 732
     function addAditionnalArrayParametersToPager($array)
735 733
     {
@@ -744,7 +742,7 @@  discard block
 block discarded – undo
744 742
     /**
745 743
      * Retourne le pager à utiliser
746 744
      *
747
-     * @return mixed	Null s'il n'y a pas lieu d'y avoir un pager, sinon un objet de type {@link XoopsPageNav}
745
+     * @return XoopsPageNav|null	Null s'il n'y a pas lieu d'y avoir un pager, sinon un objet de type {@link XoopsPageNav}
748 746
      */
749 747
     function getPager()
750 748
     {
Please login to merge, or discard this patch.
class/references_parameters.php 1 patch
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -39,7 +39,7 @@
 block discarded – undo
39 39
      *
40 40
      * @param string $key	Le nom du champ à traiter
41 41
      * @param mixed $value	La valeur à lui attribuer
42
-     * @return object
42
+     * @return references_parameters
43 43
      */
44 44
     function __set($key, $value)
45 45
     {
Please login to merge, or discard this patch.
class/references_plugins.php 1 patch
Doc Comments   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -98,7 +98,7 @@  discard block
 block discarded – undo
98 98
     /**
99 99
      * Retourne l'instance unique de la classe
100 100
      *
101
-     * @return object
101
+     * @return references_plugins
102 102
      */
103 103
 	public static function getInstance()
104 104
 	{
@@ -181,8 +181,8 @@  discard block
 block discarded – undo
181 181
 	 * Déclenchement d'une action et appel des plugins liés
182 182
 	 *
183 183
 	 * @param string $eventToFire	L'action déclenchée
184
-	 * @param object $parameters	Les paramètres à passer à chaque plugin
185
-	 * @return object				L'objet lui même pour chaîner
184
+	 * @param references_parameters $parameters	Les paramètres à passer à chaque plugin
185
+	 * @return references_plugins				L'objet lui même pour chaîner
186 186
 	 */
187 187
 	function fireAction($eventToFire, references_parameters $parameters = null)
188 188
 	{
@@ -214,7 +214,7 @@  discard block
 block discarded – undo
214 214
 	 * Déclenchement d'un filtre et appel des plugins liés
215 215
 	 *
216 216
 	 * @param string $eventToFire	Le filtre appelé
217
-	 * @param object $parameters	Les paramètres à passer à chaque plugin
217
+	 * @param references_parameters $parameters	Les paramètres à passer à chaque plugin
218 218
 	 * @return object				Le contenu de l'objet passé en paramètre
219 219
 	 */
220 220
 	function fireFilter($eventToFire, references_parameters &$parameters)
Please login to merge, or discard this patch.
class/references_utils.php 1 patch
Doc Comments   +11 added lines, -9 removed lines patch added patch discarded remove patch
@@ -48,7 +48,7 @@  discard block
 block discarded – undo
48 48
 	/**
49 49
 	 * Access the only instance of this class
50 50
      *
51
-     * @return	object
51
+     * @return	references_utils
52 52
      *
53 53
      * @static
54 54
      * @staticvar   object
@@ -273,7 +273,7 @@  discard block
 block discarded – undo
273 273
 	/**
274 274
 	 * Send an email from a template to a list of recipients
275 275
 	 *
276
-	 * @param string $tpl_name	Template's name
276
+	 * @param string $tplName	Template's name
277 277
 	 * @param array $recipients	List of recipients
278 278
 	 * @param string $subject	Email's subject
279 279
 	 * @param array $variables	Varirables to give to the template
@@ -386,7 +386,7 @@  discard block
 block discarded – undo
386 386
 	/**
387 387
 	 * Internal function used to get the handler of the current module
388 388
 	 *
389
-	 * @return object The module
389
+	 * @return integer The module
390 390
 	 */
391 391
 	function getModule()
392 392
 	{
@@ -470,7 +470,7 @@  discard block
 block discarded – undo
470 470
 	/**
471 471
 	 * Retourne la liste des emails des utilisateurs membres d'un groupe
472 472
 	 *
473
-	 * @param int $group_id	Group's number
473
+	 * @param int $groupId	Group's number
474 474
 	 * @return array Emails list
475 475
 	 */
476 476
 	function getEmailsFromGroup($groupId)
@@ -487,7 +487,7 @@  discard block
 block discarded – undo
487 487
 	/**
488 488
 	 * Vérifie que l'utilisateur courant fait partie du groupe des administrateurs
489 489
  	 *
490
-	 * @return booleean Admin or not
490
+	 * @return boolean Admin or not
491 491
  	*/
492 492
 	function isAdmin()
493 493
 	{
@@ -589,7 +589,6 @@  discard block
 block discarded – undo
589 589
 	 * Mark the mandatory fields of a form with a star
590 590
 	 *
591 591
 	 * @param object $sform The form to modify
592
-	 * @param string $caracter The character to use to mark fields
593 592
 	 * @return object The modified form
594 593
 	 */
595 594
 	function &formMarkRequiredFields(&$sform)
@@ -931,7 +930,7 @@  discard block
 block discarded – undo
931 930
 	 * Fonction chargée de gérer l'upload
932 931
 	 *
933 932
 	 * @param integer $indice L'indice du fichier à télécharger
934
-	 * @return mixed True si l'upload s'est bien déroulé sinon le message d'erreur correspondant
933
+	 * @return boolean|string True si l'upload s'est bien déroulé sinon le message d'erreur correspondant
935 934
 	 */
936 935
 	function uploadFile($indice, $dstpath = XOOPS_UPLOAD_PATH, $mimeTypes = null, $uploadMaxSize = null, $maxWidth = null, $maxHeight = null)
937 936
 	{
@@ -1016,7 +1015,7 @@  discard block
 block discarded – undo
1016 1015
 	/**
1017 1016
 	 * Ajoute des jours à une date et retourne la nouvelle date au format Date de Mysql
1018 1017
 	 *
1019
-	 * @param integer $durations	Durée en jours
1018
+	 * @param integer $duration	Durée en jours
1020 1019
 	 * @param integer $startingDate	Date de départ (timestamp)
1021 1020
 	 */
1022 1021
 	function addDaysToDate($duration = 1, $startingDate = 0)
@@ -1056,6 +1055,9 @@  discard block
 block discarded – undo
1056 1055
 		return $breadcrumb;
1057 1056
 	}
1058 1057
 
1058
+	/**
1059
+	 * @param string $string
1060
+	 */
1059 1061
 	function close_tags($string)
1060 1062
 	{
1061 1063
 		// match opened tags
@@ -1369,7 +1371,7 @@  discard block
 block discarded – undo
1369 1371
  	 * Create the <option> of an html select
1370 1372
  	 *
1371 1373
  	 * @param array $array	Array of index and labels
1372
- 	 * @param mixed $default	the default value
1374
+ 	 * @param integer $default	the default value
1373 1375
  	 * @return string
1374 1376
  	 */
1375 1377
     private function htmlSelectOptions($array, $default = 0, $withNull = true)
Please login to merge, or discard this patch.