mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-08 12:12:48 +01:00
Upgraded to laravel 4.1 and working on app engine support
This commit is contained in:
parent
df95dc213d
commit
ac50e86eef
2
.gitignore
vendored
2
.gitignore
vendored
@ -9,3 +9,5 @@ composer.phar
|
||||
composer.lock
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
app.yaml
|
||||
database.sql
|
@ -1,19 +1,18 @@
|
||||
# Invoice Ninja
|
||||
## Simple, Intuitive Invoicing
|
||||
|
||||
### Live demo: [http://sketch-out.com/ninja/public/](http://sketch-out.com/ninja/public/)
|
||||
### Live demo: [http://invoice-ninja.appspot.com](http://invoice-ninja.appspot.com/)
|
||||
### Introduction
|
||||
|
||||
Most online invoicing sites are expensive. They shouldn't be. The aim of this project is to provide a free, open-source alternative. Additionally, the hope is this codebase will serve as a sample site for Laravel as well as other JavaScript technologies.
|
||||
|
||||
### Features
|
||||
* Core application built using Laravel 4
|
||||
* Core application built using Laravel 4.1
|
||||
* Invoice PDF generation directly in the browser
|
||||
* Integrates with many payment providers
|
||||
* Recurring invoices
|
||||
|
||||
### Remaining Work
|
||||
* Recurring invoices
|
||||
* Internationalization
|
||||
* Home dashboard
|
||||
* Reports
|
||||
|
||||
|
@ -113,6 +113,7 @@ return array(
|
||||
'Illuminate\Validation\ValidationServiceProvider',
|
||||
'Illuminate\View\ViewServiceProvider',
|
||||
'Illuminate\Workbench\WorkbenchServiceProvider',
|
||||
'Illuminate\Remote\RemoteServiceProvider',
|
||||
'Basset\BassetServiceProvider',
|
||||
'Bootstrapper\BootstrapperServiceProvider',
|
||||
'Zizaco\Confide\ConfideServiceProvider',
|
||||
@ -134,7 +135,7 @@ return array(
|
||||
|
|
||||
*/
|
||||
|
||||
'manifest' => storage_path().'/meta',
|
||||
'manifest' => storage_path() . '/meta',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@ -156,7 +157,7 @@ return array(
|
||||
'Cache' => 'Illuminate\Support\Facades\Cache',
|
||||
'ClassLoader' => 'Illuminate\Support\ClassLoader',
|
||||
'Config' => 'Illuminate\Support\Facades\Config',
|
||||
'Controller' => 'Illuminate\Routing\Controllers\Controller',
|
||||
'Controller' => 'Illuminate\Routing\Controller',
|
||||
'Cookie' => 'Illuminate\Support\Facades\Cookie',
|
||||
'Crypt' => 'Illuminate\Support\Facades\Crypt',
|
||||
'DB' => 'Illuminate\Support\Facades\DB',
|
||||
@ -185,6 +186,7 @@ return array(
|
||||
'URL' => 'Illuminate\Support\Facades\URL',
|
||||
'Validator' => 'Illuminate\Support\Facades\Validator',
|
||||
'View' => 'Illuminate\Support\Facades\View',
|
||||
'SSH' => 'Illuminate\Support\Facades\SSH',
|
||||
'Basset' => 'Basset\Facade',
|
||||
'Alert' => 'Bootstrapper\Alert',
|
||||
'Badge' => 'Bootstrapper\Badge',
|
||||
|
@ -62,7 +62,7 @@ return array(
|
||||
'collation' => 'utf8_unicode_ci',
|
||||
'prefix' => '',
|
||||
),
|
||||
|
||||
|
||||
'pgsql' => array(
|
||||
'driver' => 'pgsql',
|
||||
'host' => 'localhost',
|
||||
@ -111,7 +111,7 @@ return array(
|
||||
|
||||
'redis' => array(
|
||||
|
||||
'cluster' => true,
|
||||
'cluster' => false,
|
||||
|
||||
'default' => array(
|
||||
'host' => '127.0.0.1',
|
||||
|
18
app/config/gae-development/database.php
Normal file
18
app/config/gae-development/database.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'connections' => array(
|
||||
|
||||
'mysql' => array(
|
||||
'driver' => 'mysql',
|
||||
'host' => getenv('DEVELOPMENT_DB_HOST'),
|
||||
'database' => getenv('DEVELOPMENT_DB_NAME'),
|
||||
'username' => getenv('DEVELOPMENT_DB_USERNAME'),
|
||||
'password' => getenv('DEVELOPMENT_DB_PASSWORD'),
|
||||
'charset' => 'utf8',
|
||||
'collation' => 'utf8_unicode_ci',
|
||||
'prefix' => '',
|
||||
),
|
||||
),
|
||||
);
|
9
app/config/gae-production/app.php
Executable file
9
app/config/gae-production/app.php
Executable file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'debug' => true,
|
||||
|
||||
'manifest' => 'gs://invoice-ninja/meta',
|
||||
|
||||
);
|
7
app/config/gae-production/cache.php
Normal file
7
app/config/gae-production/cache.php
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'driver' => 'memcached',
|
||||
|
||||
);
|
19
app/config/gae-production/database.php
Normal file
19
app/config/gae-production/database.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'connections' => array(
|
||||
|
||||
'mysql' => array(
|
||||
'driver' => 'mysql',
|
||||
'unix_socket' => getenv('PRODUCTION_CLOUD_SQL_INSTANCE'),
|
||||
'host' => '',
|
||||
'database' => getenv('PRODUCTION_DB_NAME'),
|
||||
'username' => getenv('PRODUCTION_DB_USERNAME'),
|
||||
'password' => getenv('PRODUCTION_DB_PASSWORD'),
|
||||
'charset' => 'utf8',
|
||||
'collation' => 'utf8_unicode_ci',
|
||||
'prefix' => '',
|
||||
),
|
||||
),
|
||||
);
|
7
app/config/gae-production/session.php
Normal file
7
app/config/gae-production/session.php
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'driver' => 'memcached',
|
||||
|
||||
);
|
@ -57,4 +57,22 @@ return array(
|
||||
|
||||
),
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Failed Queue Jobs
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These options configure the behavior of failed queue job logging so you
|
||||
| can control which database and table are used to store the jobs that
|
||||
| have failed. You may change them to any database / table you wish.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => array(
|
||||
|
||||
'database' => 'mysql', 'table' => 'failed_jobs',
|
||||
|
||||
),
|
||||
|
||||
);
|
||||
|
59
app/config/remote.php
Executable file
59
app/config/remote.php
Executable file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Remote Connection Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the default connection that will be used for SSH
|
||||
| operations. This name should correspond to a connection name below
|
||||
| in the server list. Each connection will be manually accessible.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => 'production',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Remote Server Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These are the servers that will be accessible via the SSH task runner
|
||||
| facilities of Laravel. This feature radically simplifies executing
|
||||
| tasks on your servers, such as deploying out these applications.
|
||||
|
|
||||
*/
|
||||
|
||||
'connections' => array(
|
||||
|
||||
'production' => array(
|
||||
'host' => '',
|
||||
'username' => '',
|
||||
'password' => '',
|
||||
'key' => '',
|
||||
'keyphrase' => '',
|
||||
'root' => '/var/www',
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Remote Server Groups
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may list connections under a single group name, which allows
|
||||
| you to easily access all of the servers at once using a short name
|
||||
| that is extremely easy to remember, such as "web" or "database".
|
||||
|
|
||||
*/
|
||||
|
||||
'groups' => array(
|
||||
|
||||
'web' => array('production')
|
||||
|
||||
),
|
||||
|
||||
);
|
@ -31,6 +31,8 @@ return array(
|
||||
|
||||
'lifetime' => 120,
|
||||
|
||||
'expire_on_close' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session File Location
|
||||
@ -122,4 +124,18 @@ return array(
|
||||
|
||||
'domain' => null,
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| HTTPS Only Cookies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| By setting this option to true, session cookies will only be sent back
|
||||
| to the server if the browser has a HTTPS connection. This will keep
|
||||
| the cookie from being sent to you if it can not be done securely.
|
||||
|
|
||||
*/
|
||||
|
||||
'secure' => false,
|
||||
|
||||
);
|
||||
|
@ -26,6 +26,6 @@ return array(
|
||||
|
|
||||
*/
|
||||
|
||||
'pagination' => 'pagination::slider',
|
||||
'pagination' => 'pagination::bootstrap3',
|
||||
|
||||
);
|
||||
|
@ -498,7 +498,7 @@ class ConfideSetupUsersTable extends Migration {
|
||||
$t->decimal('adjustment', 13, 4);
|
||||
$t->decimal('balance', 13, 4);
|
||||
|
||||
$t->foreign('account_id')->references('id')->on('accounts');
|
||||
$t->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
$t->foreign('client_id')->references('id')->on('clients')->onDelete('cascade');
|
||||
$t->foreign('currency_id')->references('id')->on('currencies');
|
||||
});
|
||||
|
@ -13,10 +13,12 @@ return array(
|
||||
|
|
||||
*/
|
||||
|
||||
"password" => "Passwords must be six characters and match the confirmation.",
|
||||
"password" => "Passwords must be at least six characters and match the confirmation.",
|
||||
|
||||
"user" => "We can't find a user with that e-mail address.",
|
||||
"user" => "We can't find a user with that e-mail address.",
|
||||
|
||||
"token" => "This password reset token is invalid.",
|
||||
"token" => "This password reset token is invalid.",
|
||||
|
||||
"sent" => "Password reminder sent!",
|
||||
|
||||
);
|
@ -16,11 +16,9 @@
|
||||
//dd(new DateTime());
|
||||
//Event::fire('user.signup');
|
||||
//dd(App::environment());
|
||||
//dd(gethostname());
|
||||
|
||||
|
||||
include_once(app_path().'/libraries/utils.php'); // TODO_FIX
|
||||
include_once(app_path().'/handlers/UserEventHandler.php'); // TODO_FIX
|
||||
|
||||
// TODO_FIX replace with cron
|
||||
Route::get('/send_emails', function() {
|
||||
Artisan::call('ninja:send-invoices');
|
||||
|
@ -33,9 +33,12 @@ ClassLoader::addDirectories(array(
|
||||
|
|
||||
*/
|
||||
|
||||
$logFile = 'log-'.php_sapi_name().'.txt';
|
||||
//$logFile = 'log-'.php_sapi_name().'.txt';
|
||||
//Log::useDailyFiles(storage_path().'/logs/'.$logFile);
|
||||
|
||||
Log::useDailyFiles(storage_path().'/logs/'.$logFile);
|
||||
use Monolog\Logger;
|
||||
$monolog = Log::getMonolog();
|
||||
$monolog->pushHandler(new Monolog\Handler\SyslogHandler('intranet', 'user', Logger::DEBUG, false, LOG_PID));
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
4
artisan
4
artisan
@ -29,8 +29,6 @@ require __DIR__.'/bootstrap/autoload.php';
|
||||
|
||||
$app = require_once __DIR__.'/bootstrap/start.php';
|
||||
|
||||
$app->boot();
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Load The Artisan Console Application
|
||||
@ -43,6 +41,8 @@ $app->boot();
|
||||
|
|
||||
*/
|
||||
|
||||
$app->setRequestForConsoleEnvironment();
|
||||
|
||||
$artisan = Illuminate\Console\Application::start($app);
|
||||
|
||||
/*
|
||||
|
@ -52,6 +52,6 @@ return array(
|
||||
|
|
||||
*/
|
||||
|
||||
'storage' => __DIR__.'/../app/storage',
|
||||
'storage' => (isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Google App Engine') !== false) ? "gs://invoice-ninja/storage" : __DIR__.'/../app/storage',
|
||||
|
||||
);
|
||||
|
@ -1,5 +1,39 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
require_once 'google/appengine/api/app_identity/AppIdentityService.php';
|
||||
use \google\appengine\api\app_identity\AppIdentityService;
|
||||
|
||||
// Define the gethostname function if it does not exist
|
||||
if (!function_exists('gethostname')) {
|
||||
function gethostname() {
|
||||
return AppIdentityService::getApplicationId();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
$app->instance('path.storage','gs://invoice-ninja');
|
||||
$app->instance('path.manifest', 'gs://invoice-ninja/meta');
|
||||
|
||||
if(strlen(ini_get('google_app_engine.allow_include_gs_buckets'))) {
|
||||
$primary_bucket_name = explode(', ', ini_get('google_app_engine.allow_include_gs_buckets'))[0];
|
||||
dd($primary_bucket_name);
|
||||
$app->instance('path.storage','gs://'.$primary_bucket_name);
|
||||
$app->instance('path.manifest', storage_path().'/meta');
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
if (!function_exists('gethostname')) {
|
||||
function gethostname() {
|
||||
return php_uname('n');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Create The Application
|
||||
@ -13,7 +47,7 @@
|
||||
|
||||
$app = new Illuminate\Foundation\Application;
|
||||
|
||||
$app->redirectIfTrailingSlash();
|
||||
//$app->redirectIfTrailingSlash();
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@ -28,8 +62,9 @@ $app->redirectIfTrailingSlash();
|
||||
|
||||
$env = $app->detectEnvironment(array(
|
||||
|
||||
'development' => array('precise64', 'ubuntu-server-12042-x64-vbox4210'),
|
||||
'staging' => array('host107.hostmonster.com')
|
||||
'development' => ['precise64', 'ubuntu-server-12042-x64-vbox4210'],
|
||||
'gae-development' => ['HILLEL-PC','hillel-PC'],
|
||||
'gae-production' => ['GNU/Linux']
|
||||
));
|
||||
|
||||
/*
|
||||
|
@ -4,10 +4,10 @@
|
||||
"keywords": ["framework", "laravel"],
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"laravel/framework": "4.0.*",
|
||||
"laravel/framework": "4.1.*",
|
||||
"jasonlewis/basset": "dev-master",
|
||||
"patricktalmadge/bootstrapper": "dev-develop",
|
||||
"zizaco/confide": "2.0.x",
|
||||
"zizaco/confide": "3.1.x",
|
||||
"anahkiasen/former": "dev-master",
|
||||
"barryvdh/laravel-debugbar": "dev-master",
|
||||
"chumper/datatable": "dev-master",
|
||||
|
4
php.ini
Executable file
4
php.ini
Executable file
@ -0,0 +1,4 @@
|
||||
; enable function that are disabled by default in the App Engine PHP runtime
|
||||
google_app_engine.enable_functions = "php_sapi_name, php_uname, getmypid"
|
||||
google_app_engine.allow_include_gs_buckets = "invoice-ninja"
|
||||
allow_url_include=1
|
@ -42,21 +42,8 @@ $app = require_once __DIR__.'/../bootstrap/start.php';
|
||||
| Once we have the application, we can simply call the run method,
|
||||
| which will execute the request and send the response back to
|
||||
| the client's browser allowing them to enjoy the creative
|
||||
| and wonderful applications we have created for them.
|
||||
| and wonderful application we have whipped up for them.
|
||||
|
|
||||
*/
|
||||
|
||||
$app->run();
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Shutdown The Application
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Once the app has finished running, we will fire off the shutdown events
|
||||
| so that any final work may be done by the application before we shut
|
||||
| down the process. This is the last thing to happen to the request.
|
||||
|
|
||||
*/
|
||||
|
||||
$app->shutdown();
|
||||
$app->run();
|
Loading…
Reference in New Issue
Block a user