store serialized data in binary fields
This commit is contained in:
parent
9dddd13d5f
commit
805b7f4bc1
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,7 +1,6 @@
|
|||||||
.idea
|
.idea
|
||||||
|
.env
|
||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
composer.phar
|
|
||||||
vendor/
|
vendor/
|
||||||
_bak/
|
|
||||||
TestController.php
|
TestController.php
|
||||||
|
@ -13,7 +13,8 @@
|
|||||||
"kartik-v/yii2-widgets": "^3.4",
|
"kartik-v/yii2-widgets": "^3.4",
|
||||||
"cebe/markdown": "~1.0.1",
|
"cebe/markdown": "~1.0.1",
|
||||||
"bigpaulie/yii2-fancybox": "^1.0",
|
"bigpaulie/yii2-fancybox": "^1.0",
|
||||||
"knplabs/github-api": "^1.4"
|
"knplabs/github-api": "^1.4",
|
||||||
|
"vlucas/phpdotenv": "^2.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"yiisoft/yii2-debug": "*",
|
"yiisoft/yii2-debug": "*",
|
||||||
|
48
composer.lock
generated
48
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"hash": "965938d21f9aeba1f8b806a2097de818",
|
"hash": "e417d5aeb8ba7262be04e24edd001b90",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "bigpaulie/yii2-fancybox",
|
"name": "bigpaulie/yii2-fancybox",
|
||||||
@ -1768,6 +1768,52 @@
|
|||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2015-06-18 19:21:56"
|
"time": "2015-06-18 19:21:56"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "vlucas/phpdotenv",
|
||||||
|
"version": "v2.0.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/vlucas/phpdotenv.git",
|
||||||
|
"reference": "91064290f5b53a09bdff1b939d7f69fb0e7531b5"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/91064290f5b53a09bdff1b939d7f69fb0e7531b5",
|
||||||
|
"reference": "91064290f5b53a09bdff1b939d7f69fb0e7531b5",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.2"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "~4.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Dotenv\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"BSD"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Vance Lucas",
|
||||||
|
"email": "vance@vancelucas.com",
|
||||||
|
"homepage": "http://www.vancelucas.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
|
||||||
|
"homepage": "http://github.com/vlucas/phpdotenv",
|
||||||
|
"keywords": [
|
||||||
|
"dotenv",
|
||||||
|
"env",
|
||||||
|
"environment"
|
||||||
|
],
|
||||||
|
"time": "2015-05-30 16:15:01"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "yiisoft/yii2",
|
"name": "yiisoft/yii2",
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
|
@ -23,110 +23,6 @@ class PackageController extends Controller
|
|||||||
|
|
||||||
public function actionImportMtpm()
|
public function actionImportMtpm()
|
||||||
{
|
{
|
||||||
$ignore = [
|
|
||||||
'lulzpack',
|
|
||||||
'lift',
|
|
||||||
'Animalsmod',
|
|
||||||
'admin_tools',
|
|
||||||
'extrachests',
|
|
||||||
'bettercoal',
|
|
||||||
'slabrealm',
|
|
||||||
'mccarpet',
|
|
||||||
'clock',
|
|
||||||
'helicopter',
|
|
||||||
'mudslide',
|
|
||||||
'beacon',
|
|
||||||
'books_plus',
|
|
||||||
'nyancats_plus',
|
|
||||||
'realclocks',
|
|
||||||
'Marble_Blocks',
|
|
||||||
'chests_0gb_us',
|
|
||||||
'kerova',
|
|
||||||
'chatlog',
|
|
||||||
'airship',
|
|
||||||
'treasurer',
|
|
||||||
'alphabet',
|
|
||||||
'DOM-modpack-all',
|
|
||||||
'whereis',
|
|
||||||
'fireworks',
|
|
||||||
'components',
|
|
||||||
'senderman',
|
|
||||||
'glowcrystals',
|
|
||||||
'magic_latern',
|
|
||||||
'mod3',
|
|
||||||
'greenscreens',
|
|
||||||
'creative',
|
|
||||||
'digicode',
|
|
||||||
'armor',
|
|
||||||
'xray',
|
|
||||||
'octublock',
|
|
||||||
'mudslide',
|
|
||||||
'secret',
|
|
||||||
'no_guests',
|
|
||||||
'papyrus_door',
|
|
||||||
'terror',
|
|
||||||
'mblocks',
|
|
||||||
'uranium',
|
|
||||||
'fishing',
|
|
||||||
'bigchests',
|
|
||||||
'signs',
|
|
||||||
'future_ban',
|
|
||||||
'candles',
|
|
||||||
'birthstones',
|
|
||||||
'camomod',
|
|
||||||
'chains',
|
|
||||||
'docfarming',
|
|
||||||
'drippingwater',
|
|
||||||
'oneclick',
|
|
||||||
'my_mobs',
|
|
||||||
'mint',
|
|
||||||
'cgmr',
|
|
||||||
'watch',
|
|
||||||
'workbench',
|
|
||||||
'noncubic',
|
|
||||||
'nuke',
|
|
||||||
'weblock',
|
|
||||||
'sea',
|
|
||||||
'bedrock',
|
|
||||||
'bones',
|
|
||||||
'gauges',
|
|
||||||
'hovers',
|
|
||||||
'itemframes',
|
|
||||||
'item_drop',
|
|
||||||
'names_per_ip',
|
|
||||||
'paintings',
|
|
||||||
'snow',
|
|
||||||
'flint',
|
|
||||||
'camouflage',
|
|
||||||
'glowstone',
|
|
||||||
'diamond_fist',
|
|
||||||
'mines',
|
|
||||||
'mailbox',
|
|
||||||
'jukebox',
|
|
||||||
'altertrunks',
|
|
||||||
'thaumtest',
|
|
||||||
'blox',
|
|
||||||
'bone',
|
|
||||||
'crafting',
|
|
||||||
'dplus',
|
|
||||||
'fences',
|
|
||||||
'compass',
|
|
||||||
'sethome',
|
|
||||||
'xfences',
|
|
||||||
'camo_modpack',
|
|
||||||
'painting',
|
|
||||||
'tbm',
|
|
||||||
'brillantblocks',
|
|
||||||
'flags',
|
|
||||||
'gems',
|
|
||||||
'infinitytools',
|
|
||||||
'lavacooling',
|
|
||||||
'chat_channel',
|
|
||||||
|
|
||||||
// gitorious
|
|
||||||
'building_blocks',
|
|
||||||
'desert_uses',
|
|
||||||
];
|
|
||||||
$nameTranslate = [
|
$nameTranslate = [
|
||||||
'Crops' => 'crops',
|
'Crops' => 'crops',
|
||||||
];
|
];
|
||||||
@ -148,9 +44,6 @@ class PackageController extends Controller
|
|||||||
if (in_array($name, array_keys($nameTranslate))) {
|
if (in_array($name, array_keys($nameTranslate))) {
|
||||||
$name = $nameTranslate[$name];
|
$name = $nameTranslate[$name];
|
||||||
}
|
}
|
||||||
if (in_array($name, $ignore)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$url = trim(trim($row['2'], '/')) . '.git';
|
$url = trim(trim($row['2'], '/')) . '.git';
|
||||||
$url = strtr($url, $urlTranslate);
|
$url = strtr($url, $urlTranslate);
|
||||||
$package = Package::find()->where(['name' => $name])->one();
|
$package = Package::find()->where(['name' => $name])->one();
|
||||||
@ -160,16 +53,13 @@ class PackageController extends Controller
|
|||||||
} else {
|
} else {
|
||||||
$package->checkUrl = false;
|
$package->checkUrl = false;
|
||||||
}
|
}
|
||||||
$package->url = $url;
|
if (!$package->url)
|
||||||
$package->homepage = trim($row['4']);
|
$package->url = $url;
|
||||||
$package->authors = [trim($row['0'])];
|
if (!$package->homepage)
|
||||||
|
$package->homepage = trim($row['4']);
|
||||||
//$package->checkUrl = false;
|
if (!$package->authors)
|
||||||
if (!$package->save()) {
|
$package->authors = [trim($row['0'])];
|
||||||
print_r($package->errors);
|
$package->save();
|
||||||
print_r($package->attributes);
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
71
src/components/Serialize.php
Normal file
71
src/components/Serialize.php
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\components;
|
||||||
|
|
||||||
|
use yii\base\Object;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serialize
|
||||||
|
*/
|
||||||
|
class Serialize extends Object
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Convert the given value into a gzip compressed blob so it can be stored in the database
|
||||||
|
* @param mixed $data
|
||||||
|
* @return string binary blob of data
|
||||||
|
*/
|
||||||
|
public static function serialize($data)
|
||||||
|
{
|
||||||
|
return self::compress(serialize($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Re-inflates and unserializes a blob of compressed data
|
||||||
|
* @param string $data
|
||||||
|
* @return mixed false if an error occurred
|
||||||
|
*/
|
||||||
|
public static function unserialize($data)
|
||||||
|
{
|
||||||
|
if (is_resource($data)) {
|
||||||
|
// For some databases (like Postgres) binary columns return as a resource, fetch the content first
|
||||||
|
$data = stream_get_contents($data, -1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$originalData = $data;
|
||||||
|
$data = self::uncompress($data);
|
||||||
|
|
||||||
|
if ($data === false) {
|
||||||
|
$data = $originalData;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = @unserialize($data);
|
||||||
|
if ($data === false) {
|
||||||
|
$data = $originalData;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compress
|
||||||
|
* @param mixed $data
|
||||||
|
* @return string binary blob of data
|
||||||
|
*/
|
||||||
|
public static function compress($data)
|
||||||
|
{
|
||||||
|
return gzcompress($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compress
|
||||||
|
* @param mixed $data
|
||||||
|
* @return string binary blob of data
|
||||||
|
*/
|
||||||
|
public static function uncompress($data)
|
||||||
|
{
|
||||||
|
$originalData = $data;
|
||||||
|
$data = @gzuncompress($data);
|
||||||
|
return $data ?: $originalData;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,3 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
require(__DIR__ . '/../../vendor/autoload.php');
|
||||||
|
(new \Dotenv\Dotenv(__DIR__ . '/../..'))->load();
|
||||||
|
|
||||||
defined('YII_DEBUG') or define('YII_DEBUG', getenv('YII_DEBUG') ? (getenv('YII_DEBUG') == 'false' ? false : getenv('YII_DEBUG')) : true);
|
defined('YII_DEBUG') or define('YII_DEBUG', getenv('YII_DEBUG') ? (getenv('YII_DEBUG') == 'false' ? false : getenv('YII_DEBUG')) : true);
|
||||||
defined('YII_ENV') or define('YII_ENV', getenv('YII_ENV') ? getenv('YII_ENV') : 'dev');
|
defined('YII_ENV') or define('YII_ENV', getenv('YII_ENV') ? getenv('YII_ENV') : 'dev');
|
37
src/migrations/m150810_000003_update_package.php
Normal file
37
src/migrations/m150810_000003_update_package.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use yii\db\Migration;
|
||||||
|
use yii\db\Schema;
|
||||||
|
|
||||||
|
class m150810_000003_update_package extends Migration
|
||||||
|
{
|
||||||
|
const TABLE = '{{%package}}';
|
||||||
|
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
$this->dropColumn(self::TABLE, 'bower');
|
||||||
|
$this->dropColumn(self::TABLE, 'readme');
|
||||||
|
$this->dropColumn(self::TABLE, 'screenshots');
|
||||||
|
$this->dropColumn(self::TABLE, 'authors');
|
||||||
|
$this->dropColumn(self::TABLE, 'license');
|
||||||
|
$this->addColumn(self::TABLE, 'bower', Schema::TYPE_BINARY);
|
||||||
|
$this->addColumn(self::TABLE, 'readme', Schema::TYPE_BINARY);
|
||||||
|
$this->addColumn(self::TABLE, 'screenshots', Schema::TYPE_BINARY);
|
||||||
|
$this->addColumn(self::TABLE, 'authors', Schema::TYPE_BINARY);
|
||||||
|
$this->addColumn(self::TABLE, 'license', Schema::TYPE_BINARY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
$this->dropColumn(self::TABLE, 'bower');
|
||||||
|
$this->dropColumn(self::TABLE, 'readme');
|
||||||
|
$this->dropColumn(self::TABLE, 'screenshots');
|
||||||
|
$this->dropColumn(self::TABLE, 'authors');
|
||||||
|
$this->dropColumn(self::TABLE, 'license');
|
||||||
|
$this->addColumn(self::TABLE, 'bower', Schema::TYPE_TEXT);
|
||||||
|
$this->addColumn(self::TABLE, 'readme', Schema::TYPE_TEXT);
|
||||||
|
$this->addColumn(self::TABLE, 'screenshots', Schema::TYPE_TEXT);
|
||||||
|
$this->addColumn(self::TABLE, 'authors', Schema::TYPE_TEXT);
|
||||||
|
$this->addColumn(self::TABLE, 'license', Schema::TYPE_TEXT);
|
||||||
|
}
|
||||||
|
}
|
@ -3,6 +3,7 @@
|
|||||||
namespace app\models;
|
namespace app\models;
|
||||||
|
|
||||||
use app\components\Git;
|
use app\components\Git;
|
||||||
|
use app\components\Serialize;
|
||||||
use app\models\query\PackageQuery;
|
use app\models\query\PackageQuery;
|
||||||
use bigpaulie\fancybox\FancyBox;
|
use bigpaulie\fancybox\FancyBox;
|
||||||
use cebe\markdown\GithubMarkdown;
|
use cebe\markdown\GithubMarkdown;
|
||||||
@ -70,8 +71,8 @@ class Package extends ActiveRecord
|
|||||||
[['name', 'url'], 'trim'],
|
[['name', 'url'], 'trim'],
|
||||||
[['name'], 'match', 'pattern' => '/^[-a-z0-9_]+$/', 'message' => '{attribute} can only contain lowercase letters, numbers, "_" and "-"'],
|
[['name'], 'match', 'pattern' => '/^[-a-z0-9_]+$/', 'message' => '{attribute} can only contain lowercase letters, numbers, "_" and "-"'],
|
||||||
[['url'], 'match', 'pattern' => '%(git|http(s)?)(:(//)?)([\w./\-~]+)(\.git)%', 'message' => '{attribute} must be a valid git endpoint.'],
|
[['url'], 'match', 'pattern' => '%(git|http(s)?)(:(//)?)([\w./\-~]+)(\.git)%', 'message' => '{attribute} must be a valid git endpoint.'],
|
||||||
[['url'], function ($attribute, $params) {
|
[['url'], function ($attribute) {
|
||||||
if ($this->checkUrl && Git::getFile($this->$attribute, '') === false) {
|
if ($this->checkUrl && Git::getFile($this->$attribute) === false) {
|
||||||
$this->addError($attribute, 'Could not fetch remote repository.');
|
$this->addError($attribute, 'Could not fetch remote repository.');
|
||||||
}
|
}
|
||||||
}],
|
}],
|
||||||
@ -172,7 +173,7 @@ class Package extends ActiveRecord
|
|||||||
if (!$this->serialized) {
|
if (!$this->serialized) {
|
||||||
foreach ($this->serializeAttributes as $attribute) {
|
foreach ($this->serializeAttributes as $attribute) {
|
||||||
if ($this->$attribute) {
|
if ($this->$attribute) {
|
||||||
$this->$attribute = json_encode($this->$attribute);
|
$this->$attribute = [Serialize::serialize($this->$attribute), \PDO::PARAM_LOB];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->serialized = true;
|
$this->serialized = true;
|
||||||
@ -187,7 +188,7 @@ class Package extends ActiveRecord
|
|||||||
if ($this->serialized) {
|
if ($this->serialized) {
|
||||||
foreach ($this->serializeAttributes as $attribute) {
|
foreach ($this->serializeAttributes as $attribute) {
|
||||||
if ($this->$attribute) {
|
if ($this->$attribute) {
|
||||||
$this->$attribute = json_decode($this->$attribute, true);
|
$this->$attribute = Serialize::unserialize($this->$attribute);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->serialized = false;
|
$this->serialized = false;
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require(__DIR__ . '/../src/config/init.php');
|
require(__DIR__ . '/../src/config/init.php');
|
||||||
require(__DIR__ . '/../vendor/autoload.php');
|
|
||||||
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
|
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
|
||||||
require(__DIR__ . '/../src/config/bootstrap.php');
|
require(__DIR__ . '/../src/config/bootstrap.php');
|
||||||
$config = require(__DIR__ . '/../src/config/main.php');
|
$config = require(__DIR__ . '/../src/config/main.php');
|
||||||
|
1
yii
1
yii
@ -1,7 +1,6 @@
|
|||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
require(__DIR__ . '/src/config/init.php');
|
require(__DIR__ . '/src/config/init.php');
|
||||||
require(__DIR__ . '/vendor/autoload.php');
|
|
||||||
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
|
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
|
||||||
require(__DIR__ . '/src/config/bootstrap.php');
|
require(__DIR__ . '/src/config/bootstrap.php');
|
||||||
$config = require(__DIR__ . '/src/config/main.php');
|
$config = require(__DIR__ . '/src/config/main.php');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user