"source": {
"type": "git",
"url": "https://github.com/icewind1991/SMB.git",
- "reference": "ededbfbaa3d7124ce8d4b6c119cd225fa342916d"
+ "reference": "ef4b128143b7272e97665b84862d77faabf7d36d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ededbfbaa3d7124ce8d4b6c119cd225fa342916d",
- "reference": "ededbfbaa3d7124ce8d4b6c119cd225fa342916d",
+ "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ef4b128143b7272e97665b84862d77faabf7d36d",
+ "reference": "ef4b128143b7272e97665b84862d77faabf7d36d",
"shasum": ""
},
"require": {
}
],
"description": "php wrapper for smbclient and libsmbclient-php",
- "time": "2015-02-10 16:37:37"
+ "time": "2015-03-13 12:17:14"
},
{
"name": "icewind/streams",
"source": {
"type": "git",
"url": "https://github.com/icewind1991/SMB.git",
- "reference": "ededbfbaa3d7124ce8d4b6c119cd225fa342916d"
+ "reference": "ef4b128143b7272e97665b84862d77faabf7d36d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ededbfbaa3d7124ce8d4b6c119cd225fa342916d",
- "reference": "ededbfbaa3d7124ce8d4b6c119cd225fa342916d",
+ "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ef4b128143b7272e97665b84862d77faabf7d36d",
+ "reference": "ef4b128143b7272e97665b84862d77faabf7d36d",
"shasum": ""
},
"require": {
"require-dev": {
"satooshi/php-coveralls": "dev-master"
},
- "time": "2015-02-10 16:37:37",
+ "time": "2015-03-13 12:17:14",
"type": "library",
"installation-source": "source",
"autoload": {
.idea
vendor
+composer.lock
class Parser {
/**
- * @var string
+ * @var \Icewind\SMB\TimeZoneProvider
*/
- protected $timeZone;
+ protected $timeZoneProvider;
/**
- * @param string $timeZone
+ * @param \Icewind\SMB\TimeZoneProvider $timeZoneProvider
*/
- public function __construct($timeZone) {
- $this->timeZone = $timeZone;
+ public function __construct(TimeZoneProvider $timeZoneProvider) {
+ $this->timeZoneProvider = $timeZoneProvider;
}
public function checkForError($output, $path) {
list(, $name, $mode, $size, $time) = $matches;
if ($name !== '.' and $name !== '..') {
$mode = $this->parseMode($mode);
- $time = strtotime($time . ' ' . $this->timeZone);
+ $time = strtotime($time . ' ' . $this->timeZoneProvider->get());
$content[] = new FileInfo($basePath . '/' . $name, $name, $size, $time, $mode);
}
}
*/
protected $parser;
- private $serverTimezone;
-
/**
* @param Server $server
* @param string $name
public function __construct($server, $name) {
$this->server = $server;
$this->name = $name;
- $this->parser = new Parser($this->server->getTimeZone());
+ $this->parser = new Parser(new TimeZoneProvider($this->server->getHost()));
}
/**
* @return string
*/
protected function escapePath($path) {
+ if ($path === '/') {
+ $path = '';
+ }
$path = str_replace('/', '\\', $path);
$path = str_replace('"', '^"', $path);
return '"' . $path . '"';
--- /dev/null
+<?php
+/**
+ * Copyright (c) 2015 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Licensed under the MIT license:
+ * http://opensource.org/licenses/MIT
+ */
+
+namespace Icewind\SMB;
+
+class TimeZoneProvider {
+ /**
+ * @var string
+ */
+ private $host;
+
+ /**
+ * @var string
+ */
+ private $timeZone;
+
+ /**
+ * @param string $host
+ */
+ function __construct($host) {
+ $this->host = $host;
+ }
+
+ public function get() {
+ if (!$this->timeZone) {
+ $command = 'net time zone -S ' . escapeshellarg($this->host);
+ $this->timeZone = exec($command);
+ }
+ return $this->timeZone;
+ }
+}
$this->share->put($this->getTextFile(), $this->root . '/foo.txt');
$dir = $this->share->dir($this->root);
$mtime = $dir[0]->getMTime();
- $this->assertTrue(abs($now - $mtime) <= 1, 'Modified time differs by ' . abs($now - $mtime) . ' seconds');
+ $this->assertTrue(abs($now - $mtime) <= 2, 'Modified time differs by ' . abs($now - $mtime) . ' seconds');
$this->share->del($this->root . '/foo.txt');
}
$this->assertCount(1, $content);
$this->assertEquals($name, $content[0]->getName());
}
+
+ public function testStatRoot() {
+ $info = $this->share->stat('/');
+ $this->assertInstanceOf('\Icewind\SMB\IFileInfo', $info);
+ }
}
);
}
+ /**
+ * @param string $timeZone
+ * @return \Icewind\SMB\TimeZoneProvider
+ */
+ private function getTimeZoneProvider($timeZone) {
+ $mock = $this->getMockBuilder('\Icewind\SMB\TimeZoneProvider')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $mock->expects($this->any())
+ ->method('get')
+ ->will($this->returnValue($timeZone));
+ return $mock;
+ }
+
/**
* @dataProvider modeProvider
*/
public function testParseMode($string, $mode) {
- $parser = new \Icewind\SMB\Parser('UTC');
+ $parser = new \Icewind\SMB\Parser($this->getTimeZoneProvider('UTC'));
$this->assertEquals($mode, $parser->parseMode($string), 'Failed parsing ' . $string);
}
'mtime' => strtotime('12 Oct 2013 19:05:58 CEST'),
'mode' => FileInfo::MODE_NORMAL,
'size' => 29634
- ))
+ )
+ )
);
}
* @dataProvider statProvider
*/
public function testStat($output, $stat) {
- $parser = new \Icewind\SMB\Parser('UTC');
+ $parser = new \Icewind\SMB\Parser($this->getTimeZoneProvider('UTC'));
$this->assertEquals($stat, $parser->parseStat($output));
}
' 62536 blocks of size 8388608. 57113 blocks available'
),
array(
- new FileInfo('/c.pdf', 'c.pdf', 29634, strtotime('12 Oct 2013 19:05:58 CEST'), FileInfo::MODE_NORMAL)
+ new FileInfo('/c.pdf', 'c.pdf', 29634, strtotime('12 Oct 2013 19:05:58 CEST'),
+ FileInfo::MODE_NORMAL)
)
)
);
* @dataProvider dirProvider
*/
public function testDir($output, $dir) {
- $parser = new \Icewind\SMB\Parser('CEST');
+ $parser = new \Icewind\SMB\Parser($this->getTimeZoneProvider('CEST'));
$this->assertEquals($dir, $parser->parseDir($output, ''));
}
}