| 
<?php
 namespace JLaso\ToolsLib;
 
 /**
 * A class to control the status of the tasks, have to be used by the invoker (start-task) and by the
 * status requester (status-task)
 */
 class Status extends CommonAbstract
 {
 const QUEUED = 'queued';
 const PROCESSING = 'processing';
 const DONE = 'done';
 
 /**
 * obtain the status for the id passed, if not exists the status returned is ""
 *
 * @param $id
 * @return string
 */
 public function getInfo($id)
 {
 if (!$this->existsStatusFile()) {
 return "";
 }
 
 $status = $this->getStatusContent();
 
 return isset($status[$id]) ? $status[$id] : "";
 
 }
 
 /**
 * get the content of the status file as an array with $id=>$status
 *
 * @return array
 */
 public function getStatusContent($dontUnlock = false)
 {
 $status = array();
 
 $content = $this->getStatusFileContent($dontUnlock);
 
 $rows = preg_split("/$\R?^/m", $content);
 
 foreach ($rows as $row) {
 $row = str_replace("\n", "", $row);
 if (trim($row)) {
 list($id, $text) = explode("|", $row);
 $status[intval($id)] = $text;
 }
 }
 
 return $status;
 }
 
 /**
 * get the list of the tasks that are unfinished
 *
 * @return array
 */
 function getNotDoneTasks()
 {
 $statuses = $this->getStatusContent();
 foreach ($statuses as $id => $status) {
 if (strpos($status, self::DONE) === 0) {
 unset($status[$id]);
 }
 }
 
 return $statuses;
 }
 
 /**
 * update the status for the $id into the status file
 *
 * @param $id
 * @param $message
 */
 public function updateStatus($id, $message)
 {
 $this->lockStatusFile(false);
 $status = $this->getStatusContent(self::DONT_UNLOCK);
 $status[$id] = $message;
 $this->dumpStatusContent($status);
 $this->unlockStatusFile();
 }
 
 /**
 * saves the content of the internal status array to the status file
 *
 * @param array $content
 */
 protected function dumpStatusContent($content = array())
 {
 $tmp = "";
 foreach ($content as $id => $msg) {
 $tmp .= $id . '|' . $msg . "\n";
 }
 $this->putStatusFileContent($tmp);
 }
 }
 |