{"action":"created","comment":{"url":"https://api.github.com/repos/akeneo/pim-community-dev/pulls/comments/55700135","id":55700135,"diff_hunk":"@@ -0,0 +1,244 @@\n+<?php\n+\n+namespace Pim\\Component\\Connector\\Reader\\File;\n+\n+use Akeneo\\Component\\Batch\\Item\\InvalidItemException;\n+use Box\\Spout\\Common\\Type;\n+use Box\\Spout\\Reader\\IteratorInterface;\n+use Box\\Spout\\Reader\\ReaderFactory;\n+use Box\\Spout\\Reader\\ReaderInterface;\n+use Symfony\\Component\\Filesystem\\Filesystem;\n+use Symfony\\Component\\HttpFoundation\\File\\File;\n+\n+/**\n+ * File iterator\n+ *\n+ * @author    Marie Bochu <marie.bochu@akeneo.com>\n+ * @copyright 2016 Akeneo SAS (http://www.akeneo.com)\n+ * @license   http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)\n+ */\n+class FileIterator implements FileIteratorInterface\n+{\n+    /** @var string */\n+    protected $type;\n+\n+    /** @var ReaderInterface */\n+    protected $reader;\n+\n+    /** @var string */\n+    protected $filePath;\n+\n+    /** @var string */\n+    protected $extractedPath;\n+\n+    /** @var IteratorInterface */\n+    protected $rows;\n+\n+    /** @var array */\n+    protected $headers;\n+\n+    /**\n+     * @param string $type\n+     */\n+    public function __construct($type)\n+    {\n+        $this->type   = $type;\n+        $this->reader = ReaderFactory::create($type);\n+    }\n+\n+    /**\n+     * {@inheritdoc}\n+     */\n+    public function next()\n+    {\n+        if (null === $this->rows) {\n+            throw new \\Exception('Reader should be initialized');\n+        }\n+\n+        $this->rows->next();\n+    }\n+\n+    /**\n+     * {@inheritdoc}\n+     */\n+    public function rewind()\n+    {\n+        $file = new File($this->filePath);\n+        if ('application/zip' === $file->getMimeType() && Type::XLSX !== $file->getExtension()) {\n+            $this->extractZipArchive();\n+        }\n+\n+        $this->reader->open($this->filePath);\n+        $this->reader->getSheetIterator()->rewind();\n+        $sheet = $this->reader->getSheetIterator()->current();\n+        $sheet->getRowIterator()->rewind();\n+\n+        $this->headers = $sheet->getRowIterator()->current();\n+        $this->rows    = $sheet->getRowIterator();\n+    }\n+\n+    /**\n+     * {@inheritdoc}\n+     */\n+    public function current()\n+    {\n+        $data = $this->rows->current();\n+\n+        if (!$this->valid() || null === $data || empty($data)) {\n+            $this->reset();\n+\n+            return null;\n+        }\n+\n+        if (count($this->headers) !== count($data)) {\n+            throw new InvalidItemException(\n+                'pim_connector.steps.file_reader.invalid_item_columns_count',\n+                $data,\n+                [\n+                    '%totalColumnsCount%' => count($this->headers),\n+                    '%itemColumnsCount%'  => count($data),\n+                    '%filePath%'          => $this->filePath,\n+                    '%lineno%'            => $this->rows->key()\n+                ]\n+            );\n+        }\n+\n+        $data = array_combine($this->headers, $data);\n+\n+        return $data;\n+    }\n+\n+    /**\n+     * {@inheritdoc}\n+     */\n+    public function key()\n+    {\n+        return $this->rows && $this->rows->key();\n+    }\n+\n+    /**\n+     * {@inheritdoc}\n+     */\n+    public function valid()\n+    {\n+        return $this->rows && $this->rows->valid();\n+    }\n+\n+    /**\n+     * {@inheritdoc}\n+     */\n+    public function isInitialized()\n+    {\n+        return null !== $this->rows;\n+    }\n+\n+    /**\n+     * {@inheritdoc}\n+     */\n+    public function reset()\n+    {\n+        $this->rows = null;\n+    }\n+\n+    /**\n+     * {@inheritdoc}\n+     */\n+    public function getReader()\n+    {\n+        return $this->reader;\n+    }\n+\n+    /**\n+     * {@inheritdoc}\n+     */\n+    public function setFilePath($filePath)\n+    {\n+        $this->filePath = $filePath;\n+\n+        return $this;\n+    }\n+\n+    /**\n+     * {@inheritdoc}\n+     */\n+    public function getFilePath()\n+    {","path":"src/Pim/Component/Connector/Reader/File/FileIterator.php","position":165,"original_position":165,"commit_id":"78c66b99af78167225ce408d6abdb2fc89e91b2b","original_commit_id":"78c66b99af78167225ce408d6abdb2fc89e91b2b","user":{"login":"jjanvier","id":3691804,"avatar_url":"https://avatars.githubusercontent.com/u/3691804?v=3","gravatar_id":"","url":"https://api.github.com/users/jjanvier","html_url":"https://github.com/jjanvier","followers_url":"https://api.github.com/users/jjanvier/followers","following_url":"https://api.github.com/users/jjanvier/following{/other_user}","gists_url":"https://api.github.com/users/jjanvier/gists{/gist_id}","starred_url":"https://api.github.com/users/jjanvier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jjanvier/subscriptions","organizations_url":"https://api.github.com/users/jjanvier/orgs","repos_url":"https://api.github.com/users/jjanvier/repos","events_url":"https://api.github.com/users/jjanvier/events{/privacy}","received_events_url":"https://api.github.com/users/jjanvier/received_events","type":"User","site_admin":false},"body":"unsued","created_at":"2016-03-10T15:53:49Z","updated_at":"2016-03-10T15:53:49Z","html_url":"https://github.com/akeneo/pim-community-dev/pull/4131#discussion_r55700135","pull_request_url":"https://api.github.com/repos/akeneo/pim-community-dev/pulls/4131","_links":{"self":{"href":"https://api.github.com/repos/akeneo/pim-community-dev/pulls/comments/55700135"},"html":{"href":"https://github.com/akeneo/pim-community-dev/pull/4131#discussion_r55700135"},"pull_request":{"href":"https://api.github.com/repos/akeneo/pim-community-dev/pulls/4131"}}},"pull_request":{"url":"https://api.github.com/repos/akeneo/pim-community-dev/pulls/4131","id":62370019,"html_url":"https://github.com/akeneo/pim-community-dev/pull/4131","diff_url":"https://github.com/akeneo/pim-community-dev/pull/4131.diff","patch_url":"https://github.com/akeneo/pim-community-dev/pull/4131.patch","issue_url":"https://api.github.com/repos/akeneo/pim-community-dev/issues/4131","number":4131,"state":"open","locked":false,"title":"[WIP] PIM-5093: import products with XLSX files","user":{"login":"skeleton","id":1131230,"avatar_url":"https://avatars.githubusercontent.com/u/1131230?v=3","gravatar_id":"","url":"https://api.github.com/users/skeleton","html_url":"https://github.com/skeleton","followers_url":"https://api.github.com/users/skeleton/followers","following_url":"https://api.github.com/users/skeleton/following{/other_user}","gists_url":"https://api.github.com/users/skeleton/gists{/gist_id}","starred_url":"https://api.github.com/users/skeleton/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/skeleton/subscriptions","organizations_url":"https://api.github.com/users/skeleton/orgs","repos_url":"https://api.github.com/users/skeleton/repos","events_url":"https://api.github.com/users/skeleton/events{/privacy}","received_events_url":"https://api.github.com/users/skeleton/received_events","type":"User","site_admin":false},"body":"```\r\n| Q                                 | A\r\n| --------------------------------- | ---\r\n| Added Specs                       | TODO\r\n| Added Behats                      | to fix :(\r\n| Changelog updated                 | N\r\n| Review and 2 GTM                  | \r\n| Micro Demo to the PO (Story only) |\r\n| Migration script                  |\r\n| Tech Doc                          |\r\n```\r\n","created_at":"2016-03-10T10:42:02Z","updated_at":"2016-03-10T15:53:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"02836ef25ca7f85991e24d37d2ca4df109cd4180","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/akeneo/pim-community-dev/pulls/4131/commits","review_comments_url":"https://api.github.com/repos/akeneo/pim-community-dev/pulls/4131/comments","review_comment_url":"https://api.github.com/repos/akeneo/pim-community-dev/pulls/comments{/number}","comments_url":"https://api.github.com/repos/akeneo/pim-community-dev/issues/4131/comments","statuses_url":"https://api.github.com/repos/akeneo/pim-community-dev/statuses/78c66b99af78167225ce408d6abdb2fc89e91b2b","head":{"label":"akeneo:PIM-5093","ref":"PIM-5093","sha":"78c66b99af78167225ce408d6abdb2fc89e91b2b","user":{"login":"akeneo","id":2510186,"avatar_url":"https://avatars.githubusercontent.com/u/2510186?v=3","gravatar_id":"","url":"https://api.github.com/users/akeneo","html_url":"https://github.com/akeneo","followers_url":"https://api.github.com/users/akeneo/followers","following_url":"https://api.github.com/users/akeneo/following{/other_user}","gists_url":"https://api.github.com/users/akeneo/gists{/gist_id}","starred_url":"https://api.github.com/users/akeneo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akeneo/subscriptions","organizations_url":"https://api.github.com/users/akeneo/orgs","repos_url":"https://api.github.com/users/akeneo/repos","events_url":"https://api.github.com/users/akeneo/events{/privacy}","received_events_url":"https://api.github.com/users/akeneo/received_events","type":"Organization","site_admin":false},"repo":{"id":5367323,"name":"pim-community-dev","full_name":"akeneo/pim-community-dev","owner":{"login":"akeneo","id":2510186,"avatar_url":"https://avatars.githubusercontent.com/u/2510186?v=3","gravatar_id":"","url":"https://api.github.com/users/akeneo","html_url":"https://github.com/akeneo","followers_url":"https://api.github.com/users/akeneo/followers","following_url":"https://api.github.com/users/akeneo/following{/other_user}","gists_url":"https://api.github.com/users/akeneo/gists{/gist_id}","starred_url":"https://api.github.com/users/akeneo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akeneo/subscriptions","organizations_url":"https://api.github.com/users/akeneo/orgs","repos_url":"https://api.github.com/users/akeneo/repos","events_url":"https://api.github.com/users/akeneo/events{/privacy}","received_events_url":"https://api.github.com/users/akeneo/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/akeneo/pim-community-dev","description":"[Community Development Repository] The open source Product Information Management (PIM)","fork":false,"url":"https://api.github.com/repos/akeneo/pim-community-dev","forks_url":"https://api.github.com/repos/akeneo/pim-community-dev/forks","keys_url":"https://api.github.com/repos/akeneo/pim-community-dev/keys{/key_id}","collaborators_url":"https://api.github.com/repos/akeneo/pim-community-dev/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/akeneo/pim-community-dev/teams","hooks_url":"https://api.github.com/repos/akeneo/pim-community-dev/hooks","issue_events_url":"https://api.github.com/repos/akeneo/pim-community-dev/issues/events{/number}","events_url":"https://api.github.com/repos/akeneo/pim-community-dev/events","assignees_url":"https://api.github.com/repos/akeneo/pim-community-dev/assignees{/user}","branches_url":"https://api.github.com/repos/akeneo/pim-community-dev/branches{/branch}","tags_url":"https://api.github.com/repos/akeneo/pim-community-dev/tags","blobs_url":"https://api.github.com/repos/akeneo/pim-community-dev/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/akeneo/pim-community-dev/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/akeneo/pim-community-dev/git/refs{/sha}","trees_url":"https://api.github.com/repos/akeneo/pim-community-dev/git/trees{/sha}","statuses_url":"https://api.github.com/repos/akeneo/pim-community-dev/statuses/{sha}","languages_url":"https://api.github.com/repos/akeneo/pim-community-dev/languages","stargazers_url":"https://api.github.com/repos/akeneo/pim-community-dev/stargazers","contributors_url":"https://api.github.com/repos/akeneo/pim-community-dev/contributors","subscribers_url":"https://api.github.com/repos/akeneo/pim-community-dev/subscribers","subscription_url":"https://api.github.com/repos/akeneo/pim-community-dev/subscription","commits_url":"https://api.github.com/repos/akeneo/pim-community-dev/commits{/sha}","git_commits_url":"https://api.github.com/repos/akeneo/pim-community-dev/git/commits{/sha}","comments_url":"https://api.github.com/repos/akeneo/pim-community-dev/comments{/number}","issue_comment_url":"https://api.github.com/repos/akeneo/pim-community-dev/issues/comments{/number}","contents_url":"https://api.github.com/repos/akeneo/pim-community-dev/contents/{+path}","compare_url":"https://api.github.com/repos/akeneo/pim-community-dev/compare/{base}...{head}","merges_url":"https://api.github.com/repos/akeneo/pim-community-dev/merges","archive_url":"https://api.github.com/repos/akeneo/pim-community-dev/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/akeneo/pim-community-dev/downloads","issues_url":"https://api.github.com/repos/akeneo/pim-community-dev/issues{/number}","pulls_url":"https://api.github.com/repos/akeneo/pim-community-dev/pulls{/number}","milestones_url":"https://api.github.com/repos/akeneo/pim-community-dev/milestones{/number}","notifications_url":"https://api.github.com/repos/akeneo/pim-community-dev/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/akeneo/pim-community-dev/labels{/name}","releases_url":"https://api.github.com/repos/akeneo/pim-community-dev/releases{/id}","deployments_url":"https://api.github.com/repos/akeneo/pim-community-dev/deployments","created_at":"2012-08-10T09:27:26Z","updated_at":"2016-03-04T08:19:20Z","pushed_at":"2016-03-10T15:32:47Z","git_url":"git://github.com/akeneo/pim-community-dev.git","ssh_url":"git@github.com:akeneo/pim-community-dev.git","clone_url":"https://github.com/akeneo/pim-community-dev.git","svn_url":"https://github.com/akeneo/pim-community-dev","homepage":"http://www.akeneo.com","size":137912,"stargazers_count":289,"watchers_count":289,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":151,"mirror_url":null,"open_issues_count":111,"forks":151,"open_issues":111,"watchers":289,"default_branch":"master"}},"base":{"label":"akeneo:master","ref":"master","sha":"1fd98c424a5430ac111470b406cc2b1ff1ee737d","user":{"login":"akeneo","id":2510186,"avatar_url":"https://avatars.githubusercontent.com/u/2510186?v=3","gravatar_id":"","url":"https://api.github.com/users/akeneo","html_url":"https://github.com/akeneo","followers_url":"https://api.github.com/users/akeneo/followers","following_url":"https://api.github.com/users/akeneo/following{/other_user}","gists_url":"https://api.github.com/users/akeneo/gists{/gist_id}","starred_url":"https://api.github.com/users/akeneo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akeneo/subscriptions","organizations_url":"https://api.github.com/users/akeneo/orgs","repos_url":"https://api.github.com/users/akeneo/repos","events_url":"https://api.github.com/users/akeneo/events{/privacy}","received_events_url":"https://api.github.com/users/akeneo/received_events","type":"Organization","site_admin":false},"repo":{"id":5367323,"name":"pim-community-dev","full_name":"akeneo/pim-community-dev","owner":{"login":"akeneo","id":2510186,"avatar_url":"https://avatars.githubusercontent.com/u/2510186?v=3","gravatar_id":"","url":"https://api.github.com/users/akeneo","html_url":"https://github.com/akeneo","followers_url":"https://api.github.com/users/akeneo/followers","following_url":"https://api.github.com/users/akeneo/following{/other_user}","gists_url":"https://api.github.com/users/akeneo/gists{/gist_id}","starred_url":"https://api.github.com/users/akeneo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akeneo/subscriptions","organizations_url":"https://api.github.com/users/akeneo/orgs","repos_url":"https://api.github.com/users/akeneo/repos","events_url":"https://api.github.com/users/akeneo/events{/privacy}","received_events_url":"https://api.github.com/users/akeneo/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/akeneo/pim-community-dev","description":"[Community Development Repository] The open source Product Information Management (PIM)","fork":false,"url":"https://api.github.com/repos/akeneo/pim-community-dev","forks_url":"https://api.github.com/repos/akeneo/pim-community-dev/forks","keys_url":"https://api.github.com/repos/akeneo/pim-community-dev/keys{/key_id}","collaborators_url":"https://api.github.com/repos/akeneo/pim-community-dev/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/akeneo/pim-community-dev/teams","hooks_url":"https://api.github.com/repos/akeneo/pim-community-dev/hooks","issue_events_url":"https://api.github.com/repos/akeneo/pim-community-dev/issues/events{/number}","events_url":"https://api.github.com/repos/akeneo/pim-community-dev/events","assignees_url":"https://api.github.com/repos/akeneo/pim-community-dev/assignees{/user}","branches_url":"https://api.github.com/repos/akeneo/pim-community-dev/branches{/branch}","tags_url":"https://api.github.com/repos/akeneo/pim-community-dev/tags","blobs_url":"https://api.github.com/repos/akeneo/pim-community-dev/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/akeneo/pim-community-dev/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/akeneo/pim-community-dev/git/refs{/sha}","trees_url":"https://api.github.com/repos/akeneo/pim-community-dev/git/trees{/sha}","statuses_url":"https://api.github.com/repos/akeneo/pim-community-dev/statuses/{sha}","languages_url":"https://api.github.com/repos/akeneo/pim-community-dev/languages","stargazers_url":"https://api.github.com/repos/akeneo/pim-community-dev/stargazers","contributors_url":"https://api.github.com/repos/akeneo/pim-community-dev/contributors","subscribers_url":"https://api.github.com/repos/akeneo/pim-community-dev/subscribers","subscription_url":"https://api.github.com/repos/akeneo/pim-community-dev/subscription","commits_url":"https://api.github.com/repos/akeneo/pim-community-dev/commits{/sha}","git_commits_url":"https://api.github.com/repos/akeneo/pim-community-dev/git/commits{/sha}","comments_url":"https://api.github.com/repos/akeneo/pim-community-dev/comments{/number}","issue_comment_url":"https://api.github.com/repos/akeneo/pim-community-dev/issues/comments{/number}","contents_url":"https://api.github.com/repos/akeneo/pim-community-dev/contents/{+path}","compare_url":"https://api.github.com/repos/akeneo/pim-community-dev/compare/{base}...{head}","merges_url":"https://api.github.com/repos/akeneo/pim-community-dev/merges","archive_url":"https://api.github.com/repos/akeneo/pim-community-dev/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/akeneo/pim-community-dev/downloads","issues_url":"https://api.github.com/repos/akeneo/pim-community-dev/issues{/number}","pulls_url":"https://api.github.com/repos/akeneo/pim-community-dev/pulls{/number}","milestones_url":"https://api.github.com/repos/akeneo/pim-community-dev/milestones{/number}","notifications_url":"https://api.github.com/repos/akeneo/pim-community-dev/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/akeneo/pim-community-dev/labels{/name}","releases_url":"https://api.github.com/repos/akeneo/pim-community-dev/releases{/id}","deployments_url":"https://api.github.com/repos/akeneo/pim-community-dev/deployments","created_at":"2012-08-10T09:27:26Z","updated_at":"2016-03-04T08:19:20Z","pushed_at":"2016-03-10T15:32:47Z","git_url":"git://github.com/akeneo/pim-community-dev.git","ssh_url":"git@github.com:akeneo/pim-community-dev.git","clone_url":"https://github.com/akeneo/pim-community-dev.git","svn_url":"https://github.com/akeneo/pim-community-dev","homepage":"http://www.akeneo.com","size":137912,"stargazers_count":289,"watchers_count":289,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":151,"mirror_url":null,"open_issues_count":111,"forks":151,"open_issues":111,"watchers":289,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/akeneo/pim-community-dev/pulls/4131"},"html":{"href":"https://github.com/akeneo/pim-community-dev/pull/4131"},"issue":{"href":"https://api.github.com/repos/akeneo/pim-community-dev/issues/4131"},"comments":{"href":"https://api.github.com/repos/akeneo/pim-community-dev/issues/4131/comments"},"review_comments":{"href":"https://api.github.com/repos/akeneo/pim-community-dev/pulls/4131/comments"},"review_comment":{"href":"https://api.github.com/repos/akeneo/pim-community-dev/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/akeneo/pim-community-dev/pulls/4131/commits"},"statuses":{"href":"https://api.github.com/repos/akeneo/pim-community-dev/statuses/78c66b99af78167225ce408d6abdb2fc89e91b2b"}}}}