/** * CSS Minification * * @param string $file * @param array $arguments * @param array $cssOptions * * @return void */ public function doFilter($file, $arguments, $cssOptions) { if (!$arguments['minify']) { return; } $content = file_get_contents($file); if (Utils::isSerialized($content, $content)) { $content['compiled'] = $this->minify($content['compiled']); $content = serialize($content); } else { $content = $this->minify($content); } file_put_contents($file, $content); }
/** * Lets test all types of serialisation! */ public function testIsSerialized() { $notSerializedString = 'nope'; $this->assertFalse(Utils::isSerialized($notSerializedString)); $notString = 42; $this->assertFalse(Utils::isSerialized($notString)); $wrongQuotesSerial = "s:1:'foo';"; $this->assertFalse(Utils::isSerialized($wrongQuotesSerial)); $malformedStringSerial = 's:1:"foo";'; $this->assertFalse(Utils::isSerialized($malformedStringSerial)); $correctStringSerial = 's:3:"foo";'; $this->assertTrue(Utils::isSerialized($correctStringSerial)); $malformedArraySerial = 'a:1:{s:1:"foo";}'; $this->assertFalse(Utils::isSerialized($malformedArraySerial)); $correctArraySerial = 'a:1:{s:3:"foo";s:3:"bar";}'; $this->assertTrue(Utils::isSerialized($correctArraySerial)); $malformedObjectSerial = 'O8:"stdClass":0:{}'; $this->assertFalse(Utils::isSerialized($malformedObjectSerial)); $malformedObjectSerial = 'O:::"stdClass":0:{}'; $this->assertFalse(Utils::isSerialized($malformedObjectSerial)); $correctObjectSerial = 'O:8:"stdClass":0:{}'; $this->assertTrue(Utils::isSerialized($correctObjectSerial)); $malformedNullSerial = 'N:'; $this->assertFalse(Utils::isSerialized($malformedNullSerial)); $correctNullSerial = 'N;'; $this->assertTrue(Utils::isSerialized($correctNullSerial)); $isTrue = false; $serializedTrue = 'b:1;'; $this->assertTrue(Utils::isSerialized($serializedTrue, $isTrue)); $this->assertTrue($isTrue); $isFalse = false; $serializedFalse = 'b:0;'; $this->assertTrue(Utils::isSerialized($serializedFalse, $isFalse)); $this->assertFalse($isFalse); $checkArray = array('foo' => 'bar'); $testArray = array(); Utils::isSerialized('a:1:{s:3:"foo";s:3:"bar";}', $testArray); $this->assertSame($checkArray, $testArray); }
/** * Callback method called after the content is collected and/or cached * Check if the content is serialized. If it is, we have LESS cache * and we want to return whats in the `compiled` array key * * @param string $content * * @return string */ protected function afterGetFileContent($content) { if (Utils::isSerialized($content, $content)) { $content = $content['compiled']; } return $content; }