diff --git a/app/AlbumSources/OpenStackSource.php b/app/AlbumSources/OpenStackSource.php
index 630f360..d3b99ee 100644
--- a/app/AlbumSources/OpenStackSource.php
+++ b/app/AlbumSources/OpenStackSource.php
@@ -140,12 +140,12 @@ class OpenStackSource extends AlbumSourceBase implements IAlbumSource
);
}
- private function getOriginalsFolder()
+ protected function getOriginalsFolder()
{
return '_originals';
}
- private function getPathToPhoto(Photo $photo, $thumbnail = null)
+ protected function getPathToPhoto(Photo $photo, $thumbnail = null)
{
return sprintf(
'%s/%s/%s',
diff --git a/app/AlbumSources/RackspaceSource.php b/app/AlbumSources/RackspaceSource.php
new file mode 100644
index 0000000..bcb42ee
--- /dev/null
+++ b/app/AlbumSources/RackspaceSource.php
@@ -0,0 +1,63 @@
+configuration->service_region == 'LON')
+ {
+ $endpoint = Rackspace::UK_IDENTITY_ENDPOINT;
+ }
+
+ return new Rackspace($endpoint, [
+ 'username' => $this->configuration->username,
+ 'apiKey' => decrypt($this->configuration->password)
+ ]);
+ }
+
+ /**
+ * Gets the name of this album source.
+ * @return string
+ */
+ public function getName()
+ {
+ return 'global.album_sources.rackspace';
+ }
+
+ /**
+ * Gets the absolute URL to the given photo file.
+ * @param Photo $photo Photo to get the URL to.
+ * @param string $thumbnail Thumbnail to get the image to.
+ * @return string
+ */
+ public function getUrlToPhoto(Photo $photo, $thumbnail = null)
+ {
+ $isCdnEnabled = false;
+ $cdnService = $this->getStorageService()->getCdnService();
+ $thisCdnContainer = null;
+
+ foreach ($cdnService->listContainers() as $cdnContainer)
+ {
+ if ($cdnContainer->name == $this->configuration->container_name)
+ {
+ $isCdnEnabled = true;
+ $thisCdnContainer = $cdnContainer;
+ }
+ }
+
+ if ($isCdnEnabled)
+ {
+ return sprintf('%s/%s', $thisCdnContainer->getCdnSslUri(), $this->getPathToPhoto($photo, $thumbnail));
+ }
+
+ return parent::getPathToPhoto($photo, $thumbnail);
+ }
+}
\ No newline at end of file
diff --git a/app/Helpers/ConfigHelper.php b/app/Helpers/ConfigHelper.php
index c9ebc50..b03d06a 100644
--- a/app/Helpers/ConfigHelper.php
+++ b/app/Helpers/ConfigHelper.php
@@ -8,6 +8,7 @@ use App\AlbumSources\IAlbumSource;
use App\AlbumSources\LocalFilesystemSource;
use App\AlbumSources\OpenStackSource;
use App\AlbumSources\OpenStackV1Source;
+use App\AlbumSources\RackspaceSource;
use App\Configuration;
class ConfigHelper
@@ -34,7 +35,8 @@ class ConfigHelper
$classes = [
LocalFilesystemSource::class,
AmazonS3Source::class,
- OpenStackSource::class
+ OpenStackSource::class,
+ RackspaceSource::class
];
foreach ($classes as $class)
{
diff --git a/app/Http/Requests/StoreStorageRequest.php b/app/Http/Requests/StoreStorageRequest.php
index 7320fda..8c445b9 100644
--- a/app/Http/Requests/StoreStorageRequest.php
+++ b/app/Http/Requests/StoreStorageRequest.php
@@ -36,6 +36,14 @@ class StoreStorageRequest extends FormRequest
switch ($this->get('source'))
{
+ case 'AmazonS3Source':
+ $result['auth_url'] = 'sometimes|url';
+ $result['access_key'] = 'sometimes|required';
+ $result['secret_key'] = 'sometimes|required';
+ $result['service_region'] = 'sometimes|required';
+ $result['container_name'] = 'sometimes|required';
+ break;
+
case 'LocalFilesystemSource':
$result['location'] = 'sometimes|required|is_dir|dir_empty|is_writeable';
break;
@@ -50,6 +58,13 @@ class StoreStorageRequest extends FormRequest
$result['container_name'] = 'sometimes|required';
$result['cdn_url'] = 'sometimes|url';
break;
+
+ case 'RackspaceSource':
+ $result['username'] = 'sometimes|required';
+ $result['password'] = 'sometimes|required';
+ $result['service_region'] = 'sometimes|required';
+ $result['container_name'] = 'sometimes|required';
+ break;
}
break;
@@ -63,6 +78,14 @@ class StoreStorageRequest extends FormRequest
switch ($storage->source)
{
+ case 'AmazonS3Source':
+ $result['auth_url'] = 'sometimes|url';
+ $result['access_key'] = 'sometimes|required';
+ $result['secret_key'] = 'sometimes|required';
+ $result['service_region'] = 'sometimes|required';
+ $result['container_name'] = 'sometimes|required';
+ break;
+
case 'OpenStackSource':
$result['auth_url'] = 'sometimes|required';
$result['tenant_name'] = 'sometimes|required';
@@ -73,6 +96,13 @@ class StoreStorageRequest extends FormRequest
$result['container_name'] = 'sometimes|required';
$result['cdn_url'] = 'sometimes|url';
break;
+
+ case 'RackspaceSource':
+ $result['username'] = 'sometimes|required';
+ $result['password'] = 'sometimes|required';
+ $result['service_region'] = 'sometimes|required';
+ $result['container_name'] = 'sometimes|required';
+ break;
}
break;
}
diff --git a/resources/lang/en/forms.php b/resources/lang/en/forms.php
index 5b35dfa..ec308d6 100644
--- a/resources/lang/en/forms.php
+++ b/resources/lang/en/forms.php
@@ -31,6 +31,7 @@ return [
'settings_restrict_originals_download_help' => 'With this option enabled, only the photo\'s owner can download the original high-resolution images.',
'storage_access_key_label' => 'Access key:',
'storage_active_label' => 'Location is active. Uncheck to prevent creating new albums in this location.',
+ 'storage_api_key_label' => 'API key:',
'storage_auth_url_label' => 'Authentication URL:',
'storage_bucket_name_label' => 'Bucket name:',
'storage_cdn_url_label' => 'Public CDN URL (if supported and enabled):',
diff --git a/resources/lang/en/global.php b/resources/lang/en/global.php
index 4905226..c33926c 100644
--- a/resources/lang/en/global.php
+++ b/resources/lang/en/global.php
@@ -3,7 +3,8 @@ return [
'album_sources' => [
'amazon_s3' => 'Amazon S3 (or S3-compatible)',
'filesystem' => 'Local filesystem',
- 'openstack' => 'OpenStack cloud storage'
+ 'openstack' => 'OpenStack cloud storage',
+ 'rackspace' => 'Rackspace cloud storage'
],
'app_name' => 'Blue Twilight',
'copyright' => '© :years :link_startAndy Heathershaw:link_end',
diff --git a/resources/views/themes/base/admin/create_storage.blade.php b/resources/views/themes/base/admin/create_storage.blade.php
index 2cf7ac4..561a68f 100644
--- a/resources/views/themes/base/admin/create_storage.blade.php
+++ b/resources/views/themes/base/admin/create_storage.blade.php
@@ -159,113 +159,16 @@
-
-
-
- {!! Form::label('auth_url', trans('forms.storage_auth_url_label'), ['class' => 'control-label']) !!}
- {!! Form::text('auth_url', old('auth_url'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('auth_url'))
-
- {{ $errors->first('auth_url') }}
-
- @endif
-
-
-
-
- {!! Form::label('tenant_name', trans('forms.storage_tenant_name_label'), ['class' => 'control-label']) !!}
- {!! Form::text('tenant_name', old('tenant_name'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('tenant_name'))
-
- {{ $errors->first('tenant_name') }}
-
- @endif
-
-
-
-
-
-
-
- {!! Form::label('username', trans('forms.username_label'), ['class' => 'control-label']) !!}
- {!! Form::text('username', old('username'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('username'))
-
- {{ $errors->first('username') }}
-
- @endif
-
-
-
-
- {!! Form::label('password', trans('forms.password_label'), ['class' => 'control-label']) !!}
- {!! Form::text('password', old('password'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('password'))
-
- {{ $errors->first('password') }}
-
- @endif
-
-
-
-
-
-
-
- {!! Form::label('service_name', trans('forms.storage_service_name_label'), ['class' => 'control-label']) !!}
- {!! Form::text('service_name', old('service_name'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('service_name'))
-
- {{ $errors->first('service_name') }}
-
- @endif
-
-
-
-
- {!! Form::label('service_region', trans('forms.storage_service_region_label'), ['class' => 'control-label']) !!}
- {!! Form::text('service_region', old('service_region'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('service_region'))
-
- {{ $errors->first('service_region') }}
-
- @endif
-
-
-
-
-
- {!! Form::label('container_name', trans('forms.storage_container_name_label'), ['class' => 'control-label']) !!}
- {!! Form::text('container_name', old('container_name'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('container_name'))
-
- {{ $errors->first('container_name') }}
-
- @endif
-
-
-
- {!! Form::label('cdn_url', trans('forms.storage_cdn_url_label'), ['class' => 'control-label']) !!}
- {!! Form::text('cdn_url', old('cdn_url'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('cdn_url'))
-
- {{ $errors->first('cdn_url') }}
-
- @endif
-
+ @include(Theme::viewName('partials.admin_storages_openstack_options'))
@include(Theme::viewName('partials.admin_storages_amazon_s3_options'))
+
+
+ @include(Theme::viewName('partials.admin_storages_rackspace_options'))
+
diff --git a/resources/views/themes/base/admin/edit_storage.blade.php b/resources/views/themes/base/admin/edit_storage.blade.php
index 34c7b88..51912b4 100644
--- a/resources/views/themes/base/admin/edit_storage.blade.php
+++ b/resources/views/themes/base/admin/edit_storage.blade.php
@@ -50,114 +50,19 @@
@if ($storage->source == 'OpenStackSource')
-
-
-
- {!! Form::label('auth_url', trans('forms.storage_auth_url_label'), ['class' => 'control-label']) !!}
- {!! Form::text('auth_url', old('auth_url'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('auth_url'))
-
- {{ $errors->first('auth_url') }}
-
- @endif
-
-
-
-
- {!! Form::label('tenant_name', trans('forms.storage_tenant_name_label'), ['class' => 'control-label']) !!}
- {!! Form::text('tenant_name', old('tenant_name'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('tenant_name'))
-
- {{ $errors->first('tenant_name') }}
-
- @endif
-
-
-
-
-
-
-
- {!! Form::label('username', trans('forms.username_label'), ['class' => 'control-label']) !!}
- {!! Form::text('username', old('username'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('username'))
-
- {{ $errors->first('username') }}
-
- @endif
-
-
-
-
- {!! Form::label('password', trans('forms.password_label'), ['class' => 'control-label']) !!}
- {!! Form::text('password', old('password'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('password'))
-
- {{ $errors->first('password') }}
-
- @endif
-
-
-
-
-
-
-
- {!! Form::label('service_name', trans('forms.storage_service_name_label'), ['class' => 'control-label']) !!}
- {!! Form::text('service_name', old('service_name'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('service_name'))
-
- {{ $errors->first('service_name') }}
-
- @endif
-
-
-
-
- {!! Form::label('service_region', trans('forms.storage_service_region_label'), ['class' => 'control-label']) !!}
- {!! Form::text('service_region', old('service_region'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('service_region'))
-
- {{ $errors->first('service_region') }}
-
- @endif
-
-
-
-
-
- {!! Form::label('container_name', trans('forms.storage_container_name_label'), ['class' => 'control-label']) !!}
- {!! Form::text('container_name', old('container_name'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('container_name'))
-
- {{ $errors->first('container_name') }}
-
- @endif
-
-
-
- {!! Form::label('cdn_url', trans('forms.storage_cdn_url_label'), ['class' => 'control-label']) !!}
- {!! Form::text('cdn_url', old('cdn_url'), ['class' => 'form-control']) !!}
-
- @if ($errors->has('cdn_url'))
-
- {{ $errors->first('cdn_url') }}
-
- @endif
-
+ @include(Theme::viewName('partials.admin_storages_openstack_options'))
@endif
@if ($storage->source == 'AmazonS3Source')
+
@include(Theme::viewName('partials.admin_storages_amazon_s3_options'))
@endif
+ @if ($storage->source == 'RackspaceSource')
+
+ @include(Theme::viewName('partials.admin_storages_rackspace_options'))
+ @endif
+
@lang('forms.cancel_action')
{!! Form::submit(trans('forms.save_action'), ['class' => 'btn btn-success']) !!}
diff --git a/resources/views/themes/base/admin/list_storage.blade.php b/resources/views/themes/base/admin/list_storage.blade.php
index 2cc177d..02889c9 100644
--- a/resources/views/themes/base/admin/list_storage.blade.php
+++ b/resources/views/themes/base/admin/list_storage.blade.php
@@ -41,6 +41,7 @@
@if ($storage->source == 'LocalFilesystemSource'){{ $storage->location }}@endif
@if ($storage->source == 'OpenStackSource'){{ $storage->container_name }} - {{ $storage->service_name }}, {{ $storage->service_region }}@endif
@if ($storage->source == 'AmazonS3Source'){{ $storage->container_name }} - {{ $storage->service_region }}@endif
+ @if ($storage->source == 'RackspaceSource'){{ $storage->container_name }} - {{ $storage->service_region }}@endif
diff --git a/resources/views/themes/base/partials/admin_storages_openstack_options.blade.php b/resources/views/themes/base/partials/admin_storages_openstack_options.blade.php
new file mode 100644
index 0000000..19ae431
--- /dev/null
+++ b/resources/views/themes/base/partials/admin_storages_openstack_options.blade.php
@@ -0,0 +1,102 @@
+
+
+
+ {!! Form::label('auth_url', trans('forms.storage_auth_url_label'), ['class' => 'control-label']) !!}
+ {!! Form::text('auth_url', old('auth_url'), ['class' => 'form-control']) !!}
+
+ @if ($errors->has('auth_url'))
+
+ {{ $errors->first('auth_url') }}
+
+ @endif
+
+
+
+
+ {!! Form::label('tenant_name', trans('forms.storage_tenant_name_label'), ['class' => 'control-label']) !!}
+ {!! Form::text('tenant_name', old('tenant_name'), ['class' => 'form-control']) !!}
+
+ @if ($errors->has('tenant_name'))
+
+ {{ $errors->first('tenant_name') }}
+
+ @endif
+
+
+
+
+
+
+
+ {!! Form::label('username', trans('forms.username_label'), ['class' => 'control-label']) !!}
+ {!! Form::text('username', old('username'), ['class' => 'form-control']) !!}
+
+ @if ($errors->has('username'))
+
+ {{ $errors->first('username') }}
+
+ @endif
+
+
+
+
+ {!! Form::label('password', trans('forms.password_label'), ['class' => 'control-label']) !!}
+ {!! Form::text('password', old('password'), ['class' => 'form-control']) !!}
+
+ @if ($errors->has('password'))
+
+ {{ $errors->first('password') }}
+
+ @endif
+
+
+
+
+
+
+
+ {!! Form::label('service_name', trans('forms.storage_service_name_label'), ['class' => 'control-label']) !!}
+ {!! Form::text('service_name', old('service_name'), ['class' => 'form-control']) !!}
+
+ @if ($errors->has('service_name'))
+
+ {{ $errors->first('service_name') }}
+
+ @endif
+
+
+
+
+ {!! Form::label('service_region', trans('forms.storage_service_region_label'), ['class' => 'control-label']) !!}
+ {!! Form::text('service_region', old('service_region'), ['class' => 'form-control']) !!}
+
+ @if ($errors->has('service_region'))
+
+ {{ $errors->first('service_region') }}
+
+ @endif
+
+
+
+
+
+ {!! Form::label('container_name', trans('forms.storage_container_name_label'), ['class' => 'control-label']) !!}
+ {!! Form::text('container_name', old('container_name'), ['class' => 'form-control']) !!}
+
+ @if ($errors->has('container_name'))
+
+ {{ $errors->first('container_name') }}
+
+ @endif
+
+
+
+ {!! Form::label('cdn_url', trans('forms.storage_cdn_url_label'), ['class' => 'control-label']) !!}
+ {!! Form::text('cdn_url', old('cdn_url'), ['class' => 'form-control']) !!}
+
+ @if ($errors->has('cdn_url'))
+
+ {{ $errors->first('cdn_url') }}
+
+ @endif
+
\ No newline at end of file
diff --git a/resources/views/themes/base/partials/admin_storages_rackspace_options.blade.php b/resources/views/themes/base/partials/admin_storages_rackspace_options.blade.php
new file mode 100644
index 0000000..e315059
--- /dev/null
+++ b/resources/views/themes/base/partials/admin_storages_rackspace_options.blade.php
@@ -0,0 +1,53 @@
+
+
+
+ {!! Form::label('username', trans('forms.username_label'), ['class' => 'control-label']) !!}
+ {!! Form::text('username', old('username'), ['class' => 'form-control']) !!}
+
+ @if ($errors->has('username'))
+
+ {{ $errors->first('username') }}
+
+ @endif
+
+
+
+
+ {!! Form::label('password', trans('forms.storage_api_key_label'), ['class' => 'control-label']) !!}
+ {!! Form::text('password', old('password'), ['class' => 'form-control']) !!}
+
+ @if ($errors->has('password'))
+
+ {{ $errors->first('password') }}
+
+ @endif
+
+
+
+
+
+
+
+ {!! Form::label('service_region', trans('forms.storage_service_region_label'), ['class' => 'control-label']) !!}
+ {!! Form::text('service_region', old('service_region'), ['class' => 'form-control']) !!}
+
+ @if ($errors->has('service_region'))
+
+ {{ $errors->first('service_region') }}
+
+ @endif
+
+
+
+
+ {!! Form::label('container_name', trans('forms.storage_container_name_label'), ['class' => 'control-label']) !!}
+ {!! Form::text('container_name', old('container_name'), ['class' => 'form-control']) !!}
+
+ @if ($errors->has('container_name'))
+
+ {{ $errors->first('container_name') }}
+
+ @endif
+
+
+
|