public function __construct($background = false, $auto_destroy_results = true) { $this->background = $background; $this->auto_destroy_results = $auto_destroy_results; $hash_ok = false; do { $this->randomHash = self::generateRandomString(25); $job_set = JobSet::model()->find('hash=:hash', array(':hash' => $this->randomHash)); if ($job_set == null) { $hash_ok = true; } } while (!$hash_ok); $this->JobSet = new JobSet(); $this->JobSet->hash = $this->randomHash; $this->JobSet->needed = 1; $this->JobSet->save(); $this->taskList = new Net_Gearman_Set(); $this->jobCounter = 0; global $WorkerJobSetResults; if (!isset($WorkerJobSetResults)) { $WorkerJobSetResults = array(); } $WorkerJobSetResults[$this->randomHash] = array(); $this->results = array(); }
public static function BatchConvert($svg, $data = array(), $background = false) { $count = count($data); if ($count == 0) { return null; } $workerJobSet = new WorkerJobSet($background, false); for ($i = 0; $i < $count; ++$i) { $workerJobSet->addTask('Svg2Pdf', "Convert", array($svg, $data[$i])); } // svg 2 pdf jobs $svg_to_pdf_jobs = array(); // optimize fetch from database, not to load everying if we need only id $criteria = new CDbCriteria(); $criteria->select = 't.id'; $criteria->condition = 't.job_set_id = ' . $workerJobSet->getJobSetId(); $JobList = Job::model()->findAll($criteria); // $JobList = Job::model()->findAll('job_set_id=:job_set_id', array(':job_set_id' => $workerJobSet->getJobSetId())); foreach ($JobList as $Job) { $svg_to_pdf_jobs[] = $Job->id; } if (!$background) { $result = $workerJobSet->run(); if ($result != null) { $workerJobSetMerge = new WorkerJobSet($background, false); $workerJobSetMerge->addTask('Svg2Pdf', 'MergePDF', array($svg_to_pdf_jobs)); $resultPDF = $workerJobSetMerge->run(); // clean up database $jobSet = JobSet::model()->find('id=:id', array(':id' => $workerJobSet->getJobSetId())); if ($jobSet != null) { $jobSet->delete(); } $jobSetMerge = JobSet::model()->find('id=:id', array(':id' => $workerJobSetMerge->getJobSetId())); if ($jobSetMerge != null) { $jobSetMerge->delete(); } if (isset($resultPDF[0])) { return $resultPDF[0]; } else { return null; } } else { return null; } } else { $job_id = $workerJobSet->addTask('Svg2Pdf', 'MergePDF', array($svg_to_pdf_jobs)); $result = $workerJobSet->run(); $workerJobSet->setFinalJobResultId($job_id); return $workerJobSet->getJobSetId(); } }