public function execute() { $this->init(); $this->reader->seek(max(0, waRequest::request('row', 0, waRequest::TYPE_INT))); $limit = max(1, waRequest::request('limit', 50, waRequest::TYPE_INT)); $this->reader->columns(array(array('shopCsvProductviewController', 'tableRowHandler'), array(__CLASS__, 'columns'))); $n = 0; $this->response['tbody'] = ''; while (++$n <= $limit && $this->reader->next()) { $this->response['tbody'] .= $this->reader->getTableRow(); } $this->response['rows_count'] = $this->reader->count(); $this->response['current'] = $this->reader->key(); }
protected function info() { $interval = 0; if (!empty($this->data['timestamp'])) { $interval = time() - $this->data['timestamp']; } $response = array('time' => sprintf('%d:%02d:%02d', floor($interval / 3600), floor($interval / 60) % 60, $interval % 60), 'processId' => $this->processId, 'progress' => 0.0, 'ready' => $this->isDone(), 'count' => empty($this->data['count']) ? false : $this->data['count'], 'memory' => sprintf('%0.2fMByte', $this->data['memory'] / 1048576), 'memory_avg' => sprintf('%0.2fMByte', $this->data['memory_avg'] / 1048576)); $stage_count = 0; //count($this->data['current']); foreach ($this->data['current'] as $stage => $current) { if ($this->data['count'][$stage]) { if ($stage == self::STAGE_SKU) { if ($this->data['drection'] == 'import') { $response['progress'] += 100.0 * (1.0 * $current / $this->data['count'][$stage] - 1.0) / $this->data['count'][self::STAGE_PRODUCT]; } } else { ++$stage_count; $response['progress'] += 100.0 * (1.0 * $current / $this->data['count'][$stage]); } } } $response['progress'] = sprintf('%0.3f%%', $response['progress'] / max(1, $stage_count)); $response['stage_count'] = $stage_count; $response['current_count'] = $this->data['current']; $response['processed_count'] = $this->data['processed_count']; $this->getResponse()->addHeader('Content-type', 'application/json'); $this->getResponse()->sendHeaders(); if ($this->writer) { $response['file'] = urlencode(basename($this->writer->file())); } if ($response['ready']) { $response['report'] = $this->report(); if (!empty($this->data['emulate'])) { $callback = create_function('$a', 'return count($a)>1;'); $emulate = array(); foreach ($this->data['emulate'] as $row => $key) { if (!isset($emulate[$key])) { $emulate[$key] = array(); } $emulate[$key][] = $row; } $params = array(); if ($collision = array_filter($emulate, $callback)) { $response['collision'] = array(); foreach ($collision as $key => $rows) { $rows = array_map('intval', $rows); asort($rows); $response['collision'][] = array('key' => $key, 'rows' => $rows); $params[$key] = $rows; } } else { $response['collision'] = true; } if (!empty($this->reader)) { $response['rows_count'] = $this->reader->count(); shopCsvReader::snapshot($this->reader, $params); unset($params); } } } echo $this->json($response); }