Browse Source

Merge pull request #2 from laravel/master

merge
尘缘 11 years ago
parent
commit
122f3abd25

+ 3 - 3
application/language/en/validation.php

@@ -46,9 +46,9 @@ return array(
 	"ip"             => "The :attribute must be a valid IP address.",
 	"ip"             => "The :attribute must be a valid IP address.",
 	"match"          => "The :attribute format is invalid.",
 	"match"          => "The :attribute format is invalid.",
 	"max"            => array(
 	"max"            => array(
-		"numeric" => "The :attribute must be less than :max.",
-		"file"    => "The :attribute must be less than :max kilobytes.",
-		"string"  => "The :attribute must be less than :max characters.",
+		"numeric" => "The :attribute may not be greater than :max.",
+		"file"    => "The :attribute may not be greater than :max kilobytes.",
+		"string"  => "The :attribute may not be greater than :max characters.",
 	),
 	),
 	"mimes"          => "The :attribute must be a file of type: :values.",
 	"mimes"          => "The :attribute must be a file of type: :values.",
 	"min"            => array(
 	"min"            => array(

+ 2 - 0
application/language/nl/validation.php

@@ -27,6 +27,7 @@ return array(
 	"countbetween"   => ":attribute moet tussen :min en :max geselecteerde elementen bevatten.",
 	"countbetween"   => ":attribute moet tussen :min en :max geselecteerde elementen bevatten.",
 	"countmax"       => ":attribute moet minder dan :max geselecteerde elementen bevatten.",
 	"countmax"       => ":attribute moet minder dan :max geselecteerde elementen bevatten.",
 	"countmin"       => ":attribute moet minimaal :min geselecteerde elementen bevatten.",
 	"countmin"       => ":attribute moet minimaal :min geselecteerde elementen bevatten.",
+	"date_format"    => ":attribute moet een geldig datum formaat bevatten.",
 	"different"      => ":attribute en :other moeten verschillend zijn.",
 	"different"      => ":attribute en :other moeten verschillend zijn.",
 	"email"          => ":attribute is geen geldig e-mailadres.",
 	"email"          => ":attribute is geen geldig e-mailadres.",
 	"exists"         => ":attribute bestaat niet.",
 	"exists"         => ":attribute bestaat niet.",
@@ -49,6 +50,7 @@ return array(
 	"not_in"         => "Het formaat van :attribute is ongeldig.",
 	"not_in"         => "Het formaat van :attribute is ongeldig.",
 	"numeric"        => ":attribute moet een nummer zijn.",
 	"numeric"        => ":attribute moet een nummer zijn.",
 	"required"       => ":attribute is verplicht.",
 	"required"       => ":attribute is verplicht.",
+	"required_with"  => ":attribute is verplicht i.c.m. :field",
 	"same"           => ":attribute en :other moeten overeenkomen.",
 	"same"           => ":attribute en :other moeten overeenkomen.",
 	"size"           => array(
 	"size"           => array(
 		"numeric" => ":attribute moet :size zijn.",
 		"numeric" => ":attribute moet :size zijn.",

+ 5 - 5
application/language/ru/validation.php

@@ -38,16 +38,16 @@ return array(
 	"countmin"       => "The :attribute must have at least :min selected elements.",
 	"countmin"       => "The :attribute must have at least :min selected elements.",
 	"different"      => "Поля :attribute и :other должны различаться.",
 	"different"      => "Поля :attribute и :other должны различаться.",
 	"email"          => "Поле :attribute имеет неверный формат.",
 	"email"          => "Поле :attribute имеет неверный формат.",
-	"exists"         => "Выбранное значение для :attribute уже существует.",
+	"exists"         => "Выбранное значение для :attribute не верно.",
 	"image"          => "Поле :attribute должно быть картинкой.",
 	"image"          => "Поле :attribute должно быть картинкой.",
 	"in"             => "Выбранное значение для :attribute не верно.",
 	"in"             => "Выбранное значение для :attribute не верно.",
 	"integer"        => "Поле :attribute должно быть целым числом.",
 	"integer"        => "Поле :attribute должно быть целым числом.",
 	"ip"             => "Поле :attribute должно быть полным IP-адресом.",
 	"ip"             => "Поле :attribute должно быть полным IP-адресом.",
 	"match"          => "Поле :attribute имеет неверный формат.",
 	"match"          => "Поле :attribute имеет неверный формат.",
 	"max"            => array(
 	"max"            => array(
-		"numeric" => "Поле :attribute должно быть меньше :max.",
-		"file"    => "Поле :attribute должно быть меньше :max Килобайт.",
-		"string"  => "Поле :attribute должно быть короче :max символов.",
+		"numeric" => "Поле :attribute должно быть не больше :max.",
+		"file"    => "Поле :attribute должно быть не больше :max Килобайт.",
+		"string"  => "Поле :attribute должно быть не длиннее :max символов.",
 	),
 	),
 	"mimes"          => "Поле :attribute должно быть файлом одного из типов: :values.",
 	"mimes"          => "Поле :attribute должно быть файлом одного из типов: :values.",
 	"min"            => array(
 	"min"            => array(
@@ -101,4 +101,4 @@ return array(
 
 
 	'attributes' => array(),
 	'attributes' => array(),
 
 
-);
+);

+ 2 - 2
laravel/cli/tasks/migrate/migrator.php

@@ -200,7 +200,7 @@ class Migrator extends Task {
 			$table->primary(array('bundle', 'name'));
 			$table->primary(array('bundle', 'name'));
 		});
 		});
 
 
-		echo "Migration table created successfully.";
+		echo "Migration table created successfully.".PHP_EOL;
 	}
 	}
 
 
 	/**
 	/**
@@ -275,4 +275,4 @@ class Migrator extends Task {
 		return $migration['bundle'].'/'.$migration['name'];
 		return $migration['bundle'].'/'.$migration['name'];
 	}
 	}
 
 
-}
+}

+ 2 - 1
laravel/cli/tasks/test/runner.php

@@ -88,7 +88,8 @@ class Runner extends Task {
 		// strings with spaces inside should be wrapped in quotes.
 		// strings with spaces inside should be wrapped in quotes.
 		$esc_path = escapeshellarg($path);
 		$esc_path = escapeshellarg($path);
 
 
-		passthru('LARAVEL_ENV='.Request::env().' phpunit --configuration '.$esc_path, $status);
+		putenv('LARAVEL_ENV='.Request::env());
+		passthru('phpunit --configuration '.$esc_path, $status);
 
 
 		@unlink($path);
 		@unlink($path);
 
 

+ 4 - 0
laravel/core.php

@@ -154,8 +154,12 @@ if (magic_quotes())
 
 
 use Symfony\Component\HttpFoundation\LaravelRequest as RequestFoundation;
 use Symfony\Component\HttpFoundation\LaravelRequest as RequestFoundation;
 
 
+RequestFoundation::enableHttpMethodParameterOverride();
+
 Request::$foundation = RequestFoundation::createFromGlobals();
 Request::$foundation = RequestFoundation::createFromGlobals();
 
 
+
+
 /*
 /*
 |--------------------------------------------------------------------------
 |--------------------------------------------------------------------------
 | Determine The Application Environment
 | Determine The Application Environment

+ 3 - 15
laravel/crypter.php

@@ -116,7 +116,7 @@ class Crypter {
 	 */
 	 */
 	protected static function pad($value)
 	protected static function pad($value)
 	{
 	{
-		$pad = static::$block - (Str::length($value) % static::$block);
+		$pad = static::$block - (strlen($value) % static::$block);
 
 
 		return $value .= str_repeat(chr($pad), $pad);
 		return $value .= str_repeat(chr($pad), $pad);
 	}
 	}
@@ -129,14 +129,7 @@ class Crypter {
 	 */
 	 */
 	protected static function unpad($value)
 	protected static function unpad($value)
 	{
 	{
-		if (MB_STRING)
-		{
-			$pad = ord(mb_substr($value, -1, 1, Config::get('application.encoding')));
-		}
-		else
-		{
-			$pad = ord(substr($value, -1));
-		}
+		$pad = ord(substr($value, -1));
 
 
 		if ($pad and $pad <= static::$block)
 		if ($pad and $pad <= static::$block)
 		{
 		{
@@ -145,12 +138,7 @@ class Crypter {
 			// as the padding appears to have been changed.
 			// as the padding appears to have been changed.
 			if (preg_match('/'.chr($pad).'{'.$pad.'}$/', $value))
 			if (preg_match('/'.chr($pad).'{'.$pad.'}$/', $value))
 			{
 			{
-				if (MB_STRING)
-				{
-					return mb_substr($value, 0, Str::length($value) - $pad, Config::get('application.encoding'));
-				}
-
-				return substr($value, 0, Str::length($value) - $pad);
+				return substr($value, 0, strlen($value) - $pad);
 			}
 			}
 
 
 			// If the padding characters do not match the expected padding
 			// If the padding characters do not match the expected padding

+ 1 - 1
laravel/database/connection.php

@@ -197,7 +197,7 @@ class Connection {
 		// For insert statements that use the "returning" clause, which is allowed
 		// For insert statements that use the "returning" clause, which is allowed
 		// by database systems such as Postgres, we need to actually return the
 		// by database systems such as Postgres, we need to actually return the
 		// real query result so the consumer can get the ID.
 		// real query result so the consumer can get the ID.
-		elseif (stripos($sql, 'insert') === 0 and stripos($sql, 'returning') !== false)
+		elseif (stripos($sql, 'insert') === 0 and stripos($sql, ') returning') !== false)
 		{
 		{
 			return $this->fetch($statement, Config::get('database.fetch'));
 			return $this->fetch($statement, Config::get('database.fetch'));
 		}
 		}

+ 8 - 5
laravel/database/eloquent/model.php

@@ -335,7 +335,7 @@ abstract class Model {
 	 */
 	 */
 	public function push()
 	public function push()
 	{
 	{
-		$this->save();
+		if (!$this->save()) return false;
 
 
 		// To sync all of the relationships to the database, we will simply spin through
 		// To sync all of the relationships to the database, we will simply spin through
 		// the relationships, calling the "push" method on each of the models in that
 		// the relationships, calling the "push" method on each of the models in that
@@ -349,9 +349,11 @@ abstract class Model {
 
 
 			foreach ($models as $model)
 			foreach ($models as $model)
 			{
 			{
-				$model->push();
+				if (!$model->push()) return false;
 			}
 			}
 		}
 		}
+
+		return true;
 	}
 	}
 
 
 	/**
 	/**
@@ -441,7 +443,7 @@ abstract class Model {
 	}
 	}
 
 
 	/**
 	/**
-	 *Updates the timestamp on the model and immediately saves it.
+	 * Updates the timestamp on the model and immediately saves it.
 	 *
 	 *
 	 * @return void
 	 * @return void
 	 */
 	 */
@@ -562,11 +564,12 @@ abstract class Model {
 	 *
 	 *
 	 * @param  string  $key
 	 * @param  string  $key
 	 * @param  mixed   $value
 	 * @param  mixed   $value
-	 * @return void
+	 * @return Model
 	 */
 	 */
 	public function set_attribute($key, $value)
 	public function set_attribute($key, $value)
 	{
 	{
 		$this->attributes[$key] = $value;
 		$this->attributes[$key] = $value;
+		return $this;
 	}
 	}
 
 
 	/**
 	/**
@@ -769,7 +772,7 @@ abstract class Model {
 		}
 		}
 		elseif (starts_with($method, 'set_'))
 		elseif (starts_with($method, 'set_'))
 		{
 		{
-			$this->set_attribute(substr($method, 4), $parameters[0]);
+			return $this->set_attribute(substr($method, 4), $parameters[0]);
 		}
 		}
 
 
 		// Finally we will assume that the method is actually the beginning of a
 		// Finally we will assume that the method is actually the beginning of a

+ 2 - 2
laravel/database/eloquent/relationships/belongs_to.php

@@ -110,7 +110,7 @@ class Belongs_To extends Relationship {
 	 */
 	 */
 	public function foreign_value()
 	public function foreign_value()
 	{
 	{
-		return $this->base->get_attribute($this->foreign);
+		return $this->base->{$this->foreign};
 	}
 	}
 	
 	
 	/**
 	/**
@@ -126,4 +126,4 @@ class Belongs_To extends Relationship {
 		return $this->base;
 		return $this->base;
 	}
 	}
 
 
-}
+}

+ 2 - 0
laravel/input.php

@@ -160,6 +160,8 @@ class Input {
 	 */
 	 */
 	public static function had($key)
 	public static function had($key)
 	{
 	{
+		if (is_array(static::old($key))) return true;
+
 		return trim((string) static::old($key)) !== '';
 		return trim((string) static::old($key)) !== '';
 	}
 	}
 
 

+ 7 - 2
laravel/response.php

@@ -202,9 +202,14 @@ class Response {
 		// off to the HttpFoundation and let it create the header text.
 		// off to the HttpFoundation and let it create the header text.
 		$response = new static(File::get($path), 200, $headers);
 		$response = new static(File::get($path), 200, $headers);
 
 
-		$d = $response->disposition($name);
+		// If the Content-Disposition header has already been set by the
+		// merge above, then do not override it with out generated one.
+		if (!isset($headers['Content-Disposition'])) {
+			$d = $response->disposition($name);
+			$response = $response->header('Content-Disposition', $d);
+		}
 
 
-		return $response->header('Content-Disposition', $d);
+		return $response;
 	}
 	}
 
 
 	/**
 	/**

+ 14 - 1
laravel/tests/cases/eloquent.test.php

@@ -133,6 +133,19 @@ class EloquentTest extends PHPUnit_Framework_TestCase {
 		Model::$accessible = null;
 		Model::$accessible = null;
 	}
 	}
 
 
+	/**
+	 * Test the Model::__set method allows chaining.
+	 *
+	 * @group laravel
+	 */
+	public function testAttributeMagicSetterMethodAllowsChaining()
+	{
+		$model = new Model;
+		$this->assertInstanceOf('Model', $model->set_foo('foo'));
+		$model->set_bar('bar')->set_baz('baz');
+		$this->assertEquals(array('foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz'), $model->to_array());
+	}
+
 	/**
 	/**
 	 * Test the Model::__get method.
 	 * Test the Model::__get method.
 	 *
 	 *
@@ -288,4 +301,4 @@ class EloquentTest extends PHPUnit_Framework_TestCase {
 
 
 	}
 	}
 
 
-}
+}

+ 2 - 0
laravel/url.php

@@ -355,6 +355,8 @@ class URL {
 	 */
 	 */
 	public static function valid($url)
 	public static function valid($url)
 	{
 	{
+		if (starts_with($url, '//')) return true;
+
 		return filter_var($url, FILTER_VALIDATE_URL) !== false;
 		return filter_var($url, FILTER_VALIDATE_URL) !== false;
 	}
 	}
 
 

+ 3 - 3
public/.htaccess

@@ -1,9 +1,9 @@
 # Apache configuration file
 # Apache configuration file
-# http://httpd.apache.org/docs/2.2/mod/quickreference.html
+# http://httpd.apache.org/docs/current/mod/quickreference.html
 
 
 # Note: ".htaccess" files are an overhead for each request. This logic should
 # Note: ".htaccess" files are an overhead for each request. This logic should
 # be placed in your Apache config whenever possible.
 # be placed in your Apache config whenever possible.
-# http://httpd.apache.org/docs/2.2/howto/htaccess.html
+# http://httpd.apache.org/docs/current/howto/htaccess.html
 
 
 # Turning on the rewrite engine is necessary for the following rules and
 # Turning on the rewrite engine is necessary for the following rules and
 # features. "+FollowSymLinks" must be enabled for this to work symbolically.
 # features. "+FollowSymLinks" must be enabled for this to work symbolically.
@@ -20,4 +20,4 @@
 	RewriteCond %{REQUEST_FILENAME} !-f
 	RewriteCond %{REQUEST_FILENAME} !-f
 	RewriteCond %{REQUEST_FILENAME} !-d
 	RewriteCond %{REQUEST_FILENAME} !-d
 	RewriteRule ^(.*)$ index.php/$1 [L]
 	RewriteRule ^(.*)$ index.php/$1 [L]
-</IfModule>
+</IfModule>