Skip to content

Commit 490c0eb

Browse files
committed
Strict standards improvement
1 parent 6b36354 commit 490c0eb

3 files changed

Lines changed: 21 additions & 19 deletions

File tree

src/XRobotsTagParser.php

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,12 @@ class XRobotsTagParser
3434
const DIRECTIVE_NO_TRANSLATE = 'notranslate';
3535
const DIRECTIVE_UNAVAILABLE_AFTER = 'unavailable_after';
3636

37-
// TODO: Shuld be RFC-850, but disabled due to an rule parsing bug
3837
const DATE_FORMAT_DEFAULT = 'd M Y H:i:s T';
3938

4039
private $supportedDateFormats = [
4140
self::DATE_FORMAT_DEFAULT,
42-
DATE_RFC1123,
43-
DATE_RFC850,
44-
'd M Y H:i:s T'
41+
DATE_RFC850, // from Google specification
42+
'd M Y H:i:s T' // from Google examples
4543
];
4644

4745
private $strict = false;
@@ -137,7 +135,7 @@ private function detectDirectives()
137135
}
138136
if (in_array($pair[0], $this->directiveArray())) {
139137
$this->currentDirective = $pair[0];
140-
$this->currentValue = isset($pair[1]) ? $pair[1] : null;
138+
$this->currentValue = isset($pair[1]) ? $pair[1] : '';
141139
$this->addRule();
142140
}
143141
}
@@ -173,6 +171,16 @@ protected function directiveArray()
173171
private function addRule()
174172
{
175173
switch ($this->currentDirective) {
174+
case self::DIRECTIVE_ALL:
175+
if (!$this->strict) break;
176+
$this->rules[$this->currentUserAgent][self::DIRECTIVE_ALL] = true;
177+
break;
178+
case self::DIRECTIVE_NONE:
179+
$this->rules[$this->currentUserAgent][self::DIRECTIVE_NONE] = true;
180+
if ($this->strict) break;
181+
$this->rules[$this->currentUserAgent][self::DIRECTIVE_NO_INDEX] = true;
182+
$this->rules[$this->currentUserAgent][self::DIRECTIVE_NO_FOLLOW] = true;
183+
break;
176184
case self::DIRECTIVE_NO_ARCHIVE:
177185
case self::DIRECTIVE_NO_FOLLOW:
178186
case self::DIRECTIVE_NO_IMAGE_INDEX:
@@ -182,18 +190,12 @@ private function addRule()
182190
case self::DIRECTIVE_NO_TRANSLATE:
183191
$this->rules[$this->currentUserAgent][$this->currentDirective] = true;
184192
break;
185-
case self::DIRECTIVE_NONE:
186-
$this->rules[$this->currentUserAgent][self::DIRECTIVE_NONE] = true;
187-
if ($this->strict) break;
188-
$this->rules[$this->currentUserAgent][self::DIRECTIVE_NO_INDEX] = true;
189-
$this->rules[$this->currentUserAgent][self::DIRECTIVE_NO_FOLLOW] = true;
190-
break;
191193
case self::DIRECTIVE_UNAVAILABLE_AFTER:
192194
if ($this->strict) $this->supportedDateFormats = [self::DATE_FORMAT_DEFAULT];
193195
foreach (array_unique($this->supportedDateFormats) as $format) {
194196
$dateTime = date_create_from_format($format, $this->currentValue);
195197
if ($dateTime === false) continue;
196-
$this->rules[$this->currentUserAgent][self::DIRECTIVE_UNAVAILABLE_AFTER] = $dateTime->format(self::DATE_FORMAT_DEFAULT);
198+
$this->rules[$this->currentUserAgent][self::DIRECTIVE_UNAVAILABLE_AFTER] = $dateTime->format(DATE_RFC850);
197199
if ($this->strict) break;
198200
if (time() >= $dateTime->getTimestamp()) {
199201
$this->rules[$this->currentUserAgent][self::DIRECTIVE_NO_INDEX] = true;
@@ -205,7 +207,7 @@ private function addRule()
205207
}
206208

207209
/**
208-
* CleanUp before next rule read
210+
* Cleanup before next rule is read
209211
*
210212
* @return void
211213
*/

test/cases/UnavailableAfterStrictTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ public function testUnavailableAfterStrict($url, $bot, $strict, $headers)
2222
$this->assertInstanceOf('vipnytt\XRobotsTagParser', $parser);
2323

2424
// TODO: Disabled due to an RFC-850 parsing bug
25-
//$this->assertEquals(['unavailable_after' => '01 Jul 2000 07:00:00 PST'], $parser->getRules());
26-
//$this->assertEquals(['unavailable_after' => '31 Dec 2050 23:00:00 PST'], $parser->export()['']);
27-
//$this->assertEquals(['unavailable_after' => '01 Jul 2000 07:00:00 PST'], $parser->export()['googlebot']);
25+
//$this->assertEquals(['unavailable_after' => 'Saturday, 01-Jul-00 07:00:00 PST'], $parser->getRules());
26+
//$this->assertEquals(['unavailable_after' => 'Saturday, 31-Dec-50 23:00:00 PST'], $parser->export()['']);
27+
//$this->assertEquals(['unavailable_after' => 'Saturday, 01-Jul-00 07:00:00 PST'], $parser->export()['googlebot']);
2828
//$this->assertArrayNotHasKey('unavailable_after', $parser->export()['bingbot']);
2929
}
3030

test/cases/UnavailableAfterTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ public function testUnavailableAfter($url, $bot, $strict, $headers)
2121
$parser = new XRobotsTagParser($url, $bot, $strict, $headers);
2222
$this->assertInstanceOf('vipnytt\XRobotsTagParser', $parser);
2323

24-
$this->assertEquals(['unavailable_after' => '01 Jul 2000 07:00:00 PST', 'noindex' => true], $parser->getRules());
25-
$this->assertEquals(['unavailable_after' => '31 Dec 2050 23:00:00 PST'], $parser->export()['']);
26-
$this->assertEquals(['unavailable_after' => '01 Jul 2000 07:00:00 PST', 'noindex' => true], $parser->export()['googlebot']);
24+
$this->assertEquals(['unavailable_after' => 'Saturday, 01-Jul-00 07:00:00 PST', 'noindex' => true], $parser->getRules());
25+
$this->assertEquals(['unavailable_after' => 'Saturday, 31-Dec-50 23:00:00 PST'], $parser->export()['']);
26+
$this->assertEquals(['unavailable_after' => 'Saturday, 01-Jul-00 07:00:00 PST', 'noindex' => true], $parser->export()['googlebot']);
2727
}
2828

2929
/**

0 commit comments

Comments
 (0)