Changeset 2249 for sandbox/workflow/branches/609/lib/factory/Factory.php
- Timestamp:
- 03/15/10 14:41:49 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sandbox/workflow/branches/609/lib/factory/Factory.php
r2233 r2249 58 58 59 59 /** 60 * Just forward this call to the correct class.60 * Just forward this call. 61 61 * 62 62 * @access public 63 * @retu n object63 * @return object 64 64 * @static 65 65 */ 66 66 public static function &getInstance() { 67 67 68 /* oops. we are in the process space. */ 69 if (Security::isEnabled()) { 70 71 /* must instatiate it */ 72 if (is_null(self::$_securedFactory)) 73 self::$_securedFactory = new ProcessFactory(); 74 75 $args = func_get_args(); 76 return call_user_func_array(array(self::$_securedFactory, "getInstance"), $args); 77 78 } 79 /* regular module space */ 80 else { 81 82 /* must instatiate it */ 83 if (is_null(self::$_unsecuredFactory)) 84 self::$_unsecuredFactory = new WorkflowFactory(); 85 86 $args = func_get_args(); 87 return call_user_func_array(array(self::$_unsecuredFactory, "getInstance"), $args); 88 } 68 $args = func_get_args(); 69 return self::_callMethod(__FUNCTION__, $args); 89 70 } 90 71 91 72 92 73 /** 93 * Just forward this call to the correct class.74 * Just forward this call. 94 75 * 95 76 * @access public 96 * @retu n object77 * @return object 97 78 * @static 98 79 */ 99 80 public static function &newInstance() { 100 81 101 /* oops. we are in the process space. */ 102 if (Security::isEnabled()) { 82 $args = func_get_args(); 83 return self::_callMethod(__FUNCTION__, $args); 84 } 103 85 104 /* must instatiate it */ 86 87 /** 88 * Selecting the proper factory to call. This function 89 * should never be called with a random $methodName. Allowed 90 * values are 'getInstance' and 'newInstance'. 91 * 92 * @access private 93 * @return object 94 * @static 95 */ 96 private static function &_callMethod($methodName, $args) { 97 98 /* security off (module space) */ 99 if (!Security::isEnabled()) { 100 101 /* it must be instatiated */ 102 if (is_null(self::$_unsecuredFactory)) 103 self::$_unsecuredFactory = new WorkflowFactory(); 104 105 return call_user_func_array(array(self::$_unsecuredFactory, $methodName), $args); 106 } 107 /* oops. we are in the process space (restricted). */ 108 else { 109 110 /* it must be instatiated */ 105 111 if (is_null(self::$_securedFactory)) 106 112 self::$_securedFactory = new ProcessFactory(); 107 113 108 $args = func_get_args(); 109 return call_user_func_array(array(self::$_securedFactory, "newInstance"), $args); 114 /** 115 * If the class is not allowed, we must check who is trying 116 * to instantiate it. If it's a module guy, let's allow him. 117 * Throw up the exception otherwise. 118 */ 119 try { 120 $obj = call_user_func_array(array(self::$_securedFactory, $methodName), $args); 121 } 110 122 111 } 112 /* regular module space */ 113 else { 123 /** 124 * We are erroneously catching any exceptions. We should catch only the 'class not allowed' 125 * types of exceptions. To do so, a custom exception class must be defined. 126 */ 127 catch(Exception $e) { 114 128 115 /* must instatiate it */ 116 if (is_null(self::$_unsecuredFactory)) 117 self::$_unsecuredFactory = new WorkflowFactory(); 129 /** 130 * Here we are using depth 2 in isSafeDir method, because we are on a private 131 * method. Thus, we need to know if the "caller's caller's" function is on a 132 * safe dir, instead of the direct caller's method. 133 */ 134 if (Security::isSafeDir(2)) 135 $obj = call_user_func_array(array(self::$_unsecuredFactory, $methodName), $args); 118 136 119 $args = func_get_args(); 120 return call_user_func_array(array(self::$_unsecuredFactory, "newInstance"), $args); 137 /* nasty one. take this... */ 138 else 139 throw($e); 140 } 141 142 // finally 143 return $obj; 121 144 } 122 145 }
Note: See TracChangeset
for help on using the changeset viewer.