/** * Mine or remine the first available operations * * @param int $limit * @param string $phase * * @return array Success/failure counts report */ function mineSome($limit = 100, $phase = "mine") { $report = array("success" => 0, "failure" => 0); if (!$limit) { return $report; } $operation = new COperation(); /** @var COperation[] $operations */ $operations = array(); if ($phase == "remine") { $date = CMbDT::date(self::$remine_delay); $where["date"] = "< '{$date}'"; $where["remined"] = "= '0'"; $mined = $this->loadList($where, null, $limit); $operation_ids = CMbArray::pluck($mined, "operation_id"); $operations = $operation->loadAll($operation_ids); } if ($phase == "postmine") { $date = CMbDT::date(self::$postmine_delay); $where["date"] = "< '{$date}'"; $where["postmined"] = "= '0'"; $mined = $this->loadList($where, null, $limit); $operation_ids = CMbArray::pluck($mined, "operation_id"); $operations = $operation->loadAll($operation_ids); } if ($phase == "mine") { $date = CMbDT::date(self::$mine_delay); $table = $this->_spec->table; $ljoin[$table] = "{$table}.operation_id = operations.operation_id"; $where[] = "operations.date < '{$date}'"; $where["{$table}.operation_id"] = "IS NULL"; $operations = $operation->loadList($where, null, $limit, null, $ljoin); } $plages = CStoredObject::massLoadFwdRef($operations, "plageop_id"); $salles = CStoredObject::massLoadFwdRef($plages, "salle_id"); CStoredObject::massLoadFwdRef($salles, "bloc_id"); foreach ($operations as $_operation) { $_operation->loadRefPlageOp(); $this->mine($_operation); if ($msg = $this->store()) { trigger_error($msg, UI_MSG_ERROR); $report["failure"]++; continue; } $report["success"]++; } return $report; }