Beispiel #1
0
 /**
  * Uploads a XLS file with all attribute texts.
  *
  * @param \stdClass $params Object containing the properties
  */
 public function uploadFile(\stdClass $params)
 {
     $this->checkParams($params, array('site'));
     $this->setLocale($params->site);
     if (($fileinfo = reset($_FILES)) === false) {
         throw new \Aimeos\Controller\ExtJS\Exception('No file was uploaded');
     }
     $config = $this->getContext()->getConfig();
     /** controller/extjs/attribute/import/text/standard/enablecheck
      * Enables checking uploaded files if they are valid and not part of an attack
      *
      * This configuration option is for unit testing only! Please don't disable
      * the checks for uploaded files in production environments as this
      * would give attackers the possibility to infiltrate your installation!
      *
      * @param boolean True to enable, false to disable
      * @since 2014.03
      * @category Developer
      */
     if ($config->get('controller/extjs/attribute/import/text/standard/enablecheck', true)) {
         $this->checkFileUpload($fileinfo['tmp_name'], $fileinfo['error']);
     }
     $fileext = pathinfo($fileinfo['name'], PATHINFO_EXTENSION);
     $dest = md5($fileinfo['name'] . time() . getmypid()) . '.' . $fileext;
     $fs = $this->getContext()->getFilesystemManager()->get('fs-admin');
     $fs->writef($dest, $fileinfo['tmp_name']);
     $result = (object) array('site' => $params->site, 'items' => array((object) array('job.label' => 'Attribute text import: ' . $fileinfo['name'], 'job.method' => 'Attribute_Import_Text.importFile', 'job.parameter' => array('site' => $params->site, 'items' => $dest), 'job.status' => 1)));
     $jobController = \Aimeos\Controller\ExtJS\Admin\Job\Factory::createController($this->getContext());
     $jobController->saveItems($result);
     return array('items' => $dest, 'success' => true);
 }
Beispiel #2
0
 public function testInjectControllerReset()
 {
     $controller = \Aimeos\Controller\ExtJS\Admin\Job\Factory::createController($this->context, 'Standard');
     \Aimeos\Controller\ExtJS\Admin\Job\Factory::injectController('\\Aimeos\\Controller\\ExtJS\\Admin\\Job\\Standard', $controller);
     \Aimeos\Controller\ExtJS\Admin\Job\Factory::injectController('\\Aimeos\\Controller\\ExtJS\\Admin\\Job\\Standard', null);
     $new = \Aimeos\Controller\ExtJS\Admin\Job\Factory::createController($this->context, 'Standard');
     $this->assertNotSame($controller, $new);
 }
Beispiel #3
0
 /**
  * Creates a new job to export a file.
  *
  * @param \stdClass $params Object containing the properties, e.g. the list of catalog IDs
  */
 public function createJob(\stdClass $params)
 {
     $this->checkParams($params, array('site', 'items'));
     $this->setLocale($params->site);
     $context = $this->getContext();
     $items = (array) $params->items;
     $lang = property_exists($params, 'lang') ? (array) $params->lang : array();
     $languages = !empty($lang) ? implode($lang, '-') : 'all';
     $result = (object) array('site' => $params->site, 'items' => array((object) array('job.label' => 'Catalog text export: ' . $languages, 'job.method' => 'Catalog_Export_Text.exportFile', 'job.parameter' => array('site' => $params->site, 'items' => $items, 'lang' => $params->lang), 'job.status' => 1)));
     $jobController = \Aimeos\Controller\ExtJS\Admin\Job\Factory::createController($context);
     $jobController->saveItems($result);
     return array('items' => $items, 'success' => true);
 }
 public function testRun()
 {
     $context = \TestHelper::getContext();
     $aimeos = \TestHelper::getAimeos();
     $name = 'ControllerJobsAdminJobDefaultRun';
     $context->getConfig()->set('madmin/job/manager/name', $name);
     $context->getConfig()->set('controller/extjs/admin/job/name', $name);
     \Aimeos\MAdmin\Job\Manager\Factory::injectManager('\\Aimeos\\MAdmin\\Job\\Manager\\' . $name, $this->jobManagerStub);
     $adminJobCntlStub = $this->getMockBuilder('\\Aimeos\\Controller\\ExtJS\\Admin\\Job\\Standard')->setMethods(array('deleteItem'))->setConstructorArgs(array($context))->getMock();
     \Aimeos\Controller\ExtJS\Admin\Job\Factory::injectController('\\Aimeos\\Controller\\ExtJS\\Admin\\Job\\' . $name, $adminJobCntlStub);
     $adminJobCntlStub->expects($this->once())->method('deleteItem')->will($this->returnValue(array('number' => 42)));
     $this->jobManagerStub->expects($this->atLeastOnce())->method('searchItems')->will($this->onConsecutiveCalls(array($this->jobItemStub), array()));
     $this->jobManagerStub->expects($this->once())->method('saveItem');
     $this->jobItemStub->expects($this->atLeastOnce())->method('getMethod')->will($this->returnValue('Admin_Job.deleteItem'));
     $this->jobItemStub->expects($this->once())->method('setResult')->with($this->equalTo(array('number' => 42)));
     $this->jobItemStub->expects($this->once())->method('setStatus')->with($this->equalTo(-1));
     $object = new \Aimeos\Controller\Jobs\Admin\Job\Standard($context, $aimeos);
     $object->run();
 }
Beispiel #5
0
 public function testUploadFile()
 {
     $config = $this->context->getConfig();
     $config->set('controller/extjs/coupon/code/standard/uploaddir', './tmp');
     $config->set('controller/extjs/coupon/code/standard/enablecheck', false);
     $cntlMock = $this->getMockBuilder('\\Aimeos\\Controller\\ExtJS\\Admin\\Job\\Standard')->setMethods(array('saveItems'))->setConstructorArgs(array($this->context))->getMock();
     $cntlMock->expects($this->once())->method('saveItems');
     $name = 'ControllerExtJSCouponCodeDefaultRun';
     $this->context->getConfig()->set('controller/extjs/admin/job/name', $name);
     \Aimeos\Controller\ExtJS\Admin\Job\Factory::injectController('\\Aimeos\\Controller\\ExtJS\\Admin\\Job\\' . $name, $cntlMock);
     $testfiledir = __DIR__ . DIRECTORY_SEPARATOR . 'testfiles' . DIRECTORY_SEPARATOR;
     exec(sprintf('cp -r %1$s %2$s', escapeshellarg($testfiledir) . '*', escapeshellarg($this->testdir)));
     $_FILES['unittest'] = array('name' => 'coupon.zip', 'tmp_name' => $this->testdir . DIRECTORY_SEPARATOR . 'coupon.zip', 'error' => UPLOAD_ERR_OK);
     $params = new \stdClass();
     $params->items = $this->testdir . DIRECTORY_SEPARATOR . 'coupon.zip';
     $params->site = $this->context->getLocale()->getSite()->getCode();
     $params->parentid = '-1';
     $result = $this->object->uploadFile($params);
     $this->assertTrue(file_exists($result['items']));
     unlink($result['items']);
 }
Beispiel #6
0
 public function testUploadFile()
 {
     $jobController = \Aimeos\Controller\ExtJS\Admin\Job\Factory::createController($this->context);
     $testfiledir = __DIR__ . DIRECTORY_SEPARATOR . 'testfiles' . DIRECTORY_SEPARATOR;
     exec(sprintf('cp -r %1$s %2$s', escapeshellarg($testfiledir) . '*', escapeshellarg($this->testdir)));
     $_FILES['unittest'] = array('name' => 'file.txt', 'tmp_name' => $this->testdir . DIRECTORY_SEPARATOR . 'file.txt', 'error' => UPLOAD_ERR_OK);
     $params = new \stdClass();
     $params->items = 'file.txt';
     $params->site = $this->context->getLocale()->getSite()->getCode();
     $result = $this->object->uploadFile($params);
     $this->assertTrue(file_exists($this->testdir . DIRECTORY_SEPARATOR . $result['items']));
     unlink($result['items']);
     $params = (object) array('site' => 'unittest', 'condition' => (object) array('&&' => array(0 => (object) array('~=' => (object) array('job.label' => 'file.txt')))));
     $result = $jobController->searchItems($params);
     $this->assertEquals(1, count($result['items']));
     $deleteParams = (object) array('site' => 'unittest', 'items' => $result['items'][0]->{'job.id'});
     $jobController->deleteItems($deleteParams);
     $result = $jobController->searchItems($params);
     $this->assertEquals(0, count($result['items']));
 }
Beispiel #7
0
 /**
  * Uploads a file with coupon codes and meta information.
  *
  * @param \stdClass $params Object containing the properties
  */
 public function uploadFile(\stdClass $params)
 {
     $this->checkParams($params, array('site', 'couponid'));
     $this->setLocale($params->site);
     if (($fileinfo = reset($_FILES)) === false) {
         throw new \Aimeos\Controller\ExtJS\Exception('No file was uploaded');
     }
     $config = $this->getContext()->getConfig();
     /** controller/extjs/coupon/code/standard/uploaddir
      * Upload directory for text files that should be imported
      *
      * The upload directory must be an absolute path. Avoid a trailing slash
      * at the end of the upload directory string!
      *
      * @param string Absolute path including a leading slash
      * @since 2014.09
      * @category Developer
      */
     $dir = $config->get('controller/extjs/coupon/code/standard/uploaddir', 'uploads');
     /** controller/extjs/coupon/code/standard/enablecheck
      * Enables checking uploaded files if they are valid and not part of an attack
      *
      * This configuration option is for unit testing only! Please don't disable
      * the checks for uploaded files in production environments as this
      * would give attackers the possibility to infiltrate your installation!
      *
      * @param boolean True to enable, false to disable
      * @since 2014.09
      * @category Developer
      */
     if ($config->get('controller/extjs/coupon/code/standard/enablecheck', true)) {
         $this->checkFileUpload($fileinfo['tmp_name'], $fileinfo['error']);
     }
     $fileext = pathinfo($fileinfo['name'], PATHINFO_EXTENSION);
     $dest = $dir . DIRECTORY_SEPARATOR . md5($fileinfo['name'] . time() . getmypid()) . '.' . $fileext;
     if (rename($fileinfo['tmp_name'], $dest) !== true) {
         $msg = sprintf('Uploaded file could not be moved to upload directory "%1$s"', $dir);
         throw new \Aimeos\Controller\ExtJS\Exception($msg);
     }
     /** controller/extjs/coupon/code/standard/fileperms
      * File permissions used when storing uploaded files
      *
      * The representation of the permissions is in octal notation (using 0-7)
      * with a leading zero. The first number after the leading zero are the
      * permissions for the web server creating the directory, the second is
      * for the primary group of the web server and the last number represents
      * the permissions for everyone else.
      *
      * You should use 0660 or 0600 for the permissions as the web server needs
      * to manage the files. The group permissions are important if you plan
      * to upload files directly via FTP or by other means because then the
      * web server needs to be able to read and manage those files. In this
      * case use 0660 as permissions, otherwise you can limit them to 0600.
      *
      * A more detailed description of the meaning of the Unix file permission
      * bits can be found in the Wikipedia article about
      * {@link https://en.wikipedia.org/wiki/File_system_permissions#Numeric_notation file system permissions}
      *
      * @param integer Octal Unix permission representation
      * @since 2014.09
      * @category Developer
      */
     $perms = $config->get('controller/extjs/coupon/code/standard/fileperms', 0660);
     if (chmod($dest, $perms) !== true) {
         $msg = sprintf('Could not set permissions "%1$s" for file "%2$s"', $perms, $dest);
         throw new \Aimeos\Controller\ExtJS\Exception($msg);
     }
     $result = (object) array('site' => $params->site, 'items' => array((object) array('job.label' => 'Coupon code import: ' . $fileinfo['name'], 'job.method' => 'Coupon_Code.importFile', 'job.parameter' => array('site' => $params->site, 'couponid' => $params->couponid, 'items' => $dest), 'job.status' => 1)));
     $jobController = \Aimeos\Controller\ExtJS\Admin\Job\Factory::createController($this->getContext());
     $jobController->saveItems($result);
     return array('items' => $dest, 'success' => true);
 }
 public function testUploadFile()
 {
     $helper = $this->getMockBuilder('\\Aimeos\\MW\\View\\Helper\\Request\\Standard')->setMethods(array('getUploadedFiles'))->disableOriginalConstructor()->getMock();
     $view = new \Aimeos\MW\View\Standard();
     $view->addHelper('request', $helper);
     $this->context->setView($view);
     $object = $this->getMockBuilder('\\Aimeos\\Controller\\ExtJS\\Product\\Import\\Text\\Standard')->setConstructorArgs(array($this->context))->setMethods(array('storeFile'))->getMock();
     $object->expects($this->once())->method('storeFile')->will($this->returnValue('file.txt'));
     $params = new \stdClass();
     $params->items = 'file.txt';
     $params->site = $this->context->getLocale()->getSite()->getCode();
     $object->uploadFile($params);
     $jobController = \Aimeos\Controller\ExtJS\Admin\Job\Factory::createController($this->context);
     $params = (object) array('site' => 'unittest', 'condition' => (object) array('&&' => array(0 => (object) array('~=' => (object) array('job.parameter' => 'file.txt')))));
     $result = $jobController->searchItems($params);
     $this->assertEquals(1, count($result['items']));
     $deleteParams = (object) array('site' => 'unittest', 'items' => $result['items'][0]->{'job.id'});
     $jobController->deleteItems($deleteParams);
     $result = $jobController->searchItems($params);
     $this->assertEquals(0, count($result['items']));
 }
 public function testFactoryExceptionWrongInterface()
 {
     $this->setExpectedException('\\Aimeos\\Controller\\ExtJS\\Exception');
     \Aimeos\Controller\ExtJS\Admin\Job\Factory::createController(\TestHelper::getContext(), 'Factory');
 }
Beispiel #10
0
 protected function setUp()
 {
     $context = \TestHelperExtjs::getContext();
     $controller = \Aimeos\Controller\ExtJS\Admin\Job\Factory::createController($context);
     $this->object = new \Aimeos\Controller\ExtJS\Common\Decorator\Example($controller, $context);
 }