X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fjobqueue%2FJob.php;h=9ccf6f84657c3ec4c386323b2c304e7477fa8ec5;hp=37e3d0fa18a27dc6ec7c7585ec3b52b2edc7e2d1;hb=e3bd13db0c285f312e31bb1b7271af4628cca80c;hpb=ae69acacf567077b3f49d1fe6c3f3770e72a9093 diff --git a/includes/jobqueue/Job.php b/includes/jobqueue/Job.php index 37e3d0fa18..9ccf6f8465 100644 --- a/includes/jobqueue/Job.php +++ b/includes/jobqueue/Job.php @@ -47,6 +47,9 @@ abstract class Job implements IJobSpecification { /** @var string Text for error that occurred last */ protected $error; + /** @var callable[] */ + protected $teardownCallbacks = []; + /** * Run the job * @return bool Success @@ -279,6 +282,25 @@ abstract class Job implements IJobSpecification { return $this->hasRootJobParams() && !empty( $this->params['rootJobIsSelf'] ); } + /** + * @param callable $callback + * @since 1.27 + */ + protected function addTeardownCallback( $callback ) { + $this->teardownCallbacks[] = $callback; + } + + /** + * Do any final cleanup after run(), deferred updates, and all DB commits happen + * + * @since 1.27 + */ + public function teardown() { + foreach ( $this->teardownCallbacks as $callback ) { + call_user_func( $callback ); + } + } + /** * Insert a single job into the queue. * @return bool True on success @@ -293,14 +315,6 @@ abstract class Job implements IJobSpecification { * @return string */ public function toString() { - $truncFunc = function ( $value ) { - $value = (string)$value; - if ( mb_strlen( $value ) > 1024 ) { - $value = "string(" . mb_strlen( $value ) . ")"; - } - return $value; - }; - $paramString = ''; if ( $this->params ) { foreach ( $this->params as $key => $value ) { @@ -310,14 +324,14 @@ abstract class Job implements IJobSpecification { if ( is_array( $value ) ) { $filteredValue = []; foreach ( $value as $k => $v ) { - if ( is_scalar( $v ) ) { - $filteredValue[$k] = $truncFunc( $v ); + $json = FormatJson::encode( $v ); + if ( $json === false || mb_strlen( $json ) > 512 ) { + $filteredValue[$k] = gettype( $v ) . '(...)'; } else { - $filteredValue = null; - break; + $filteredValue[$k] = $v; } } - if ( $filteredValue && count( $filteredValue ) < 10 ) { + if ( count( $filteredValue ) <= 10 ) { $value = FormatJson::encode( $filteredValue ); } else { $value = "array(" . count( $value ) . ")"; @@ -326,7 +340,12 @@ abstract class Job implements IJobSpecification { $value = "object(" . get_class( $value ) . ")"; } - $paramString .= "$key={$truncFunc( $value )}"; + $flatValue = (string)$value; + if ( mb_strlen( $value ) > 1024 ) { + $flatValue = "string(" . mb_strlen( $value ) . ")"; + } + + $paramString .= "$key={$flatValue}"; } }