예제 #1
0
파일: Upload.php 프로젝트: cargomedia/cm
 protected function _process()
 {
     $return = array();
     try {
         $fileInfo = reset($_FILES);
         if (empty($fileInfo)) {
             throw new CM_Exception('Invalid file upload');
         }
         if (isset($fileInfo['error']) && $fileInfo['error'] !== UPLOAD_ERR_OK) {
             throw new CM_Exception('File upload error: ' . self::$_uploadErrors[$fileInfo['error']]);
         }
         $fileTmp = new CM_File($fileInfo['tmp_name']);
         if ($fileTmp->getSize() > self::MAX_FILE_SIZE) {
             throw new CM_Exception_FormFieldValidation(new CM_I18n_Phrase('File too big'));
         }
         $file = CM_File_UserContent_Temp::create($fileInfo['name'], $fileTmp->read());
         $fileTmp->delete();
         $query = $this->_request->getQuery();
         $preview = null;
         if (isset($query['field'])) {
             $field = CM_FormField_File::factory($query['field'], ['name' => 'file']);
             $field->validateFile($file);
             $preview = $this->getRender()->fetchViewTemplate($field, 'preview', array('file' => $file));
         }
         $return['success'] = array('id' => $file->getUniqid(), 'preview' => $preview);
     } catch (CM_Exception_FormFieldValidation $ex) {
         $return['error'] = array('type' => get_class($ex), 'msg' => $ex->getMessagePublic($this->getRender()));
     }
     $this->_setContent(json_encode($return, JSON_HEX_TAG));
     // JSON decoding in IE-iframe needs JSON_HEX_TAG
 }
예제 #2
0
파일: PostTest.php 프로젝트: cargomedia/cm
 public function testSanitize()
 {
     $malformedString = pack("H*", 'c32e');
     $request = new CM_Http_Request_Post('http://foo.bar?baz=fooBar', null, null, '{ "foo" : "' . $malformedString . '" }');
     $query = $request->getQuery();
     $this->assertSame('fooBar', $query['baz']);
     $this->assertArrayHasKey('foo', $query);
 }
예제 #3
0
 public function testGetId()
 {
     $request = new CM_Http_Request_Post('/foo/null');
     $user = CMTest_TH::createUser();
     $fixtureRequestClient = new CM_Splittest_Fixture($request);
     $fixtureUser = new CM_Splittest_Fixture($user);
     $this->assertSame($request->getClientId(), $fixtureRequestClient->getId());
     $this->assertSame($user->getId(), $fixtureUser->getId());
 }
예제 #4
0
 public function testGetTimeZoneFromCookie()
 {
     $request = new CM_Http_Request_Get('/foo/bar/', ['cookie' => 'timezoneOffset=9000; clientId=7']);
     $timeZone = $request->getTimeZone();
     $this->assertInstanceOf('DateTimeZone', $timeZone);
     $this->assertSame('-02:30', $timeZone->getName());
     $request = new CM_Http_Request_Get('/foo/bar/', ['cookie' => 'timezoneOffset=-9000; clientId=7']);
     $timeZone = $request->getTimeZone();
     $this->assertInstanceOf('DateTimeZone', $timeZone);
     $this->assertSame('+02:30', $timeZone->getName());
     $request = new CM_Http_Request_Post('/foo/bar/', ['cookie' => 'timezoneOffset=3600']);
     $timeZone = $request->getTimeZone();
     $this->assertInstanceOf('DateTimeZone', $timeZone);
     $this->assertSame('-01:00', $timeZone->getName());
     $request = new CM_Http_Request_Post('/foo/bar/', ['cookie' => 'timezoneOffset=50400']);
     $timeZone = $request->getTimeZone();
     $this->assertNull($timeZone);
     $request = new CM_Http_Request_Post('/foo/bar/', ['cookie' => 'timezoneOffset=-62400']);
     $timeZone = $request->getTimeZone();
     $this->assertNull($timeZone);
     $request = new CM_Http_Request_Get('/foo/baz/');
     $timeZone = $request->getTimeZone();
     $this->assertNull($timeZone);
 }
예제 #5
0
 public function testGetClientIdSetCookie()
 {
     $request = new CM_Http_Request_Post('/foo/null/');
     $clientId = $request->getClientId();
     /** @var CM_Http_Response_Abstract $response */
     $response = $this->getMock('CM_Http_Response_Abstract', array('_process', 'setCookie'), array($request, $this->getServiceManager()));
     $response->expects($this->once())->method('setCookie')->with('clientId', (string) $clientId);
     $response->process();
 }