This commit is contained in:
Dennis Eichhorn 2015-11-29 21:57:18 +01:00
commit b68fc816ee
32 changed files with 2167 additions and 0 deletions

View File

@ -0,0 +1,38 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media\Admin\Install;
/**
* Navigation class.
*
* @category Modules
* @package Modules\Admin
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class Navigation
{
public static function install($dbPool)
{
$navData = json_decode(file_get_contents(__DIR__ . '/nav.install.json'), true);
$class = '\\Modules\\Navigation\\Admin\\Installer';
$class::installExternal($dbPool, $navData);
}
}

View File

@ -0,0 +1,78 @@
[
{
"id": 1000401001,
"pid": "754a08ddf8bcb1cf22f310f09206dd783d42f7dd",
"type": 2,
"subtype": 1,
"name": "Media",
"uri": "/{/lang}/backend/media/list",
"target": "self",
"icon": null,
"order": 20,
"from": "Media",
"permission": null,
"parent": 1000201001,
"children": [
{
"id": 1000402001,
"pid": "1ba288c868cacf14e56f8205efef31d697301d02",
"type": 3,
"subtype": 1,
"name": "List",
"uri": "/{/lang}/backend/media/list",
"target": "self",
"icon": null,
"order": 1,
"from": "Media",
"permission": null,
"parent": 1000401001,
"children": []
},
{
"id": 1000403001,
"pid": "1ba288c868cacf14e56f8205efef31d697301d02",
"type": 3,
"subtype": 5,
"name": "Create",
"uri": "/{/lang}/backend/media/create",
"target": "self",
"icon": null,
"order": 5,
"from": "Media",
"permission": null,
"parent": 1000401001,
"children": []
}
]
},
{
"id": 1000410001,
"pid": "722846d6c55f46fd3d372bba7311a150acd1f23c",
"type": 2,
"subtype": 2,
"name": "Media",
"uri": "/{/lang}/backend/profile/single/media",
"target": "self",
"icon": null,
"order": 3,
"from": "Media",
"permission": null,
"parent": 1000301001,
"children": []
},
{
"id": 1000410002,
"pid": "f277f11a122129a52d36f788f42e5c09766cf4ae",
"type": 3,
"subtype": 1,
"name": "Media",
"uri": "/{/lang}/backend/admin/account/single/media",
"target": "self",
"icon": null,
"order": 3,
"from": "Media",
"permission": null,
"parent": 1000104001,
"children": []
}
]

102
Admin/Installer.php Normal file
View File

@ -0,0 +1,102 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media\Admin;
use phpOMS\DataStorage\Database\DatabaseType;
use phpOMS\DataStorage\Database\Pool;
use phpOMS\Module\InstallerAbstract;
/**
* Media install class.
*
* @category Modules
* @package Modules\Media
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class Installer extends InstallerAbstract
{
/**
* {@inheritdoc}
*/
public static function install(Pool $dbPool, array $info)
{
parent::install($dbPool, $info);
switch ($dbPool->get('core')->getType()) {
case DatabaseType::MYSQL:
$dbPool->get('core')->con->prepare(
'CREATE TABLE if NOT EXISTS `' . $dbPool->get('core')->prefix . 'media` (
`media_id` int(11) NOT NULL AUTO_INCREMENT,
`media_name` varchar(100) NOT NULL,
`media_versioned` tinyint(1) NOT NULL,
`media_file` varchar(255) NOT NULL,
`media_extension` varchar(10) NULL,
`media_collection` tinyint(1) NULL,
`media_size` int(11) NULL,
`media_created_by` int(11) DEFAULT NULL,
`media_created_at` datetime DEFAULT NULL,
PRIMARY KEY (`media_id`),
KEY `media_created_by` (`media_created_by`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;'
)->execute();
$dbPool->get('core')->con->prepare(
'ALTER TABLE `' . $dbPool->get('core')->prefix . 'media`
ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'media_ibfk_1` FOREIGN KEY (`media_created_by`) REFERENCES `' . $dbPool->get('core')->prefix . 'account` (`account_id`);'
)->execute();
$dbPool->get('core')->con->prepare(
'CREATE TABLE if NOT EXISTS `' . $dbPool->get('core')->prefix . 'media_relation` (
`media_relation_id` int(11) NOT NULL AUTO_INCREMENT,
`media_relation_src` int(11) NULL,
`media_relation_dst` int(11) NULL,
PRIMARY KEY (`media_relation_id`),
KEY `media_relation_src` (`media_relation_src`),
KEY `media_relation_dst` (`media_relation_dst`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;'
)->execute();
$dbPool->get('core')->con->prepare(
'ALTER TABLE `' . $dbPool->get('core')->prefix . 'media_relation`
ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'media_relation_ibfk_1` FOREIGN KEY (`media_relation_src`) REFERENCES `' . $dbPool->get('core')->prefix . 'media` (`media_id`),
ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'media_relation_ibfk_2` FOREIGN KEY (`media_relation_dst`) REFERENCES `' . $dbPool->get('core')->prefix . 'media` (`media_id`);'
)->execute();
$dbPool->get('core')->con->prepare(
'CREATE TABLE if NOT EXISTS `' . $dbPool->get('core')->prefix . 'media_permission` (
`media_permission_id` int(11) NOT NULL AUTO_INCREMENT,
`media_permission_type` tinyint(1) NOT NULL,
`media_permission_reference` int(11) NOT NULL,
`media_permission_permission` tinyint(2) NOT NULL,
`media_permission_media` int(11) NOT NULL,
PRIMARY KEY (`media_permission_id`),
KEY `media_permission_media` (`media_permission_media`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;'
)->execute();
$dbPool->get('core')->con->prepare(
'ALTER TABLE `' . $dbPool->get('core')->prefix . 'media_permission`
ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'media_permission_ibfk_1` FOREIGN KEY (`media_permission_media`) REFERENCES `' . $dbPool->get('core')->prefix . 'media` (`media_id`);'
)->execute();
break;
}
}
}

41
Controller.js Normal file
View File

@ -0,0 +1,41 @@
(function (jsOMS, undefined) {
jsOMS.Modules.Media = function (app) {
this.app = app;
};
jsOMS.Modules.Media.prototype.bind = function () {
var forms = document.getElementsByTagName('form');
/* Handle media forms */
for (var c = 0; c < forms.length; c++) {
var self = this;
this.app.uiManager.getFormManager().injectSubmit(forms[c].id, function (e) {
var fileFields = e.querySelectorAll('input[type=file]'),
uploader = new jsOMS.Modules.Models.Media.Upload(self.app.responseManager);
uploader.setSuccess(e.id, function (type, response) {
e.querySelector('input[type=file]+input[type=hidden]').value = JSON.stringify(response.uploads);
var data = self.app.uiManager.getFormManager().getData(e);
self.app.uiManager.getFormManager().submit(e, data);
});
uploader.setUri('http://127.0.0.1/en/api/media.php');
for (var i = 0; i < fileFields.length; i++) {
for (var j = 0; j < fileFields[i].files.length; j++) {
uploader.addFile(fileFields[i].files[j]);
}
}
uploader.upload(e.id);
});
}
}
}(window.jsOMS = window.jsOMS || {}));
jsOMS.ready(function () {
window.omsApp.moduleManager.initModule('Media');
window.omsApp.moduleManager.get('Media').bind();
});

217
Controller.php Normal file
View File

@ -0,0 +1,217 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media;
use Modules\Media\Models\Media;
use Modules\Media\Models\MediaMapper;
use Modules\Media\Models\UploadFile;
use Modules\Media\Models\UploadStatus;
use Modules\Navigation\Models\Navigation;
use Modules\Navigation\Views\NavigationView;
use phpOMS\Contract\RenderableInterface;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\RequestDestination;
use phpOMS\Message\ResponseAbstract;
use phpOMS\Module\ModuleAbstract;
use phpOMS\Module\WebInterface;
use phpOMS\Views\View;
use phpOMS\Views\ViewLayout;
/**
* Media class.
*
* @category Modules
* @package Modules\Media
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class Controller extends ModuleAbstract implements WebInterface
{
/**
* Module name.
*
* @var \string
* @since 1.0.0
*/
protected static $module = 'Media';
/**
* Localization files.
*
* @var \string
* @since 1.0.0
*/
protected static $localization = [
RequestDestination::BACKEND => ['backend'],
];
/**
* Providing.
*
* @var \string
* @since 1.0.0
*/
protected static $providing = [
'Content',
];
/**
* Dependencies.
*
* @var \string
* @since 1.0.0
*/
protected static $dependencies = [];
/**
* Routing elements.
*
* @var array
* @since 1.0.0
*/
protected static $routes = [
'^.*/backend/media/list.*$' => [['dest' => '\Modules\Media\Controller:viewMediaList', 'method' => 'GET', 'type' => ViewLayout::MAIN],],
'^.*/backend/media/create.*$' => [['dest' => '\Modules\Media\Controller:viewMediaCreate', 'method' => 'GET', 'type' => ViewLayout::MAIN],],
'^.*/api/media/file/create.*$' => [['dest' => '\Modules\Media\Controller:apiFileCreate', 'method' => 'POST', 'type' => ViewLayout::MAIN],],
'^.*/api/media/collection/create.*$' => [['dest' => '\Modules\Media\Controller:apiCollectionCreate', 'method' => 'POST', 'type' => ViewLayout::MAIN],],
'^.*/api/media/upload.*$' => [['dest' => '\Modules\Media\Controller:apiMediaUpload', 'method' => 'POST', 'type' => ViewLayout::NULL],],
];
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return RenderableInterface
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function viewMediaList(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
{
$view = new View($this->app, $request, $response);
$view->setTemplate('/Modules/Media/Theme/backend/media-list');
$view->addData('nav', $this->createNavigation(1000401001, $request, $response));
return $view;
}
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return RenderableInterface
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function viewMediaCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
{
$view = new View($this->app, $request, $response);
$view->setTemplate('/Modules/Media/Theme/backend/media-create');
$view->addData('nav', $this->createNavigation(1000401001, $request, $response));
return $view;
}
/**
* Shows api content.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function apiMediaUpload(RequestAbstract $request, ResponseAbstract $response, $data = null)
{
$uploads = $this->uploadFiles($_FILES, $request->getAccount());
$response->set($request->__toString(), [['uploads' => $uploads, 'type' => 'UI']]);
}
/**
* @param array $files Files
* @param int $account Uploader
*
* @return array
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function uploadFiles(array $files, \int $account) : array
{
$mediaCreated = [];
if (isset($files)) {
$upload = new UploadFile();
$rndPath = str_pad(dechex(rand(0, 65535)), 4, '0', STR_PAD_LEFT);
$path = '/Modules/Media/Files/' . $rndPath[0] . $rndPath[1] . '/' . $rndPath[2] . $rndPath[3];
$upload->setOutputDir($path);
$upload->setFileName(false);
$status = $upload->upload($files);
$mediaMapper = new MediaMapper($this->app->dbPool->get());
foreach ($status as $uFile) {
if ($uFile['status'] === UploadStatus::OK) {
$media = new Media();
$media->setPath($uFile['path'] . '/' . $uFile['filename']);
$media->setName($uFile['filename']);
$media->setSize($uFile['size']);
$media->setCreatedBy($account);
$media->setCreatedAt(new \DateTime('NOW'));
$media->setExtension($uFile['extension']);
$mediaCreated[] = $mediaMapper->create($media);
}
}
}
return $mediaCreated;
}
/**
* @param int $pageId Page/parent Id for navigation
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
*
* @return RenderableInterface
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
private function createNavigation(\int $pageId, RequestAbstract $request, ResponseAbstract $response)
{
$nav = Navigation::getInstance($request, $this->app->dbPool);
$navView = new NavigationView($this->app, $request, $response);
$navView->setTemplate('/Modules/Navigation/Theme/backend/mid');
$navView->setNav($nav->getNav());
$navView->setLanguage($request->getL11n()->language);
$navView->setParent($pageId);
return $navView;
}
}

94
Models/Collection.php Normal file
View File

@ -0,0 +1,94 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media\Models;
/**
* Media class.
*
* @category Modules
* @package Modules\Media
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class Collection extends Media
{
/**
* Resource id.
*
* @var \int[]
* @since 1.0.0
*/
private $sources = [];
/**
* Constructor.
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function __construct()
{
}
/**
* Set sources.
*
* @param array $sources Source array
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setSources(array $sources)
{
$this->sources = $sources;
}
/**
* Set sources.
*
* @param \int $source Source
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function addSource(\int $source)
{
$this->sources[] = $source;
}
/**
* Get sources.
*
* @return array
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getSources() : array
{
return $this->sources;
}
}

View File

@ -0,0 +1,68 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media\Models;
use phpOMS\DataStorage\Database\Query\Builder;
use phpOMS\DataStorage\Database\Query\Column;
class CollectionMapper extends MediaMapper
{
protected static $hasMany = [
'source' => [
'mapper' => null,
'table' => 'media_relation',
'dst' => 'media_relation_dst',
'src' => 'media_relation_src'
]
];
/**
* Primary table.
*
* @var \string
* @since 1.0.0
*/
protected static $table = 'media';
protected static $createdAt = 'media_created_at';
/**
* Primary field name.
*
* @var \string
* @since 1.0.0
*/
protected static $primaryField = 'media_id';
/**
* Find.
*
* @param array $columns Columns to select
*
* @return Builder
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function find(...$columns) : Builder
{
return parent::find(...$columns)->from('account_permission')
->where('account_permission.account_permission_for', '=', 'news')
->where('account_permission.account_permission_id1', '=', 1)
->where('news.news_id', '=', new Column('account_permission.account_permission_id2'))
->where('account_permission.account_permission_r', '=', 1);
}
}

View File

@ -0,0 +1,15 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/ // TODO: implement file storage interface

View File

@ -0,0 +1,49 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media\Models;
use phpOMS\Asset\AssetType;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
/**
* Options trait.
*
* @category Framework
* @package phpOMS\Config
* @since 1.0.0
*/
trait FileUploaderTrait
{
/**
* Setup file uploader.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Misc. data
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setUpFileUploader(RequestAbstract $request, ResponseAbstract $response, $data = null)
{
$head = $response->getHead();
$head->addAsset(AssetType::JS, $request->getUri()->getBase() . 'Modules/Media/ModuleMedia.js');
}
}

15
Models/FtpFileStorage.php Normal file
View File

@ -0,0 +1,15 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/ // TODO: implement filestorage on remote ftp server

View File

@ -0,0 +1,15 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/ // TODO: implement local file storage

346
Models/Media.php Normal file
View File

@ -0,0 +1,346 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media\Models;
/**
* Media class.
*
* @category Modules
* @package Modules\Media
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class Media
{
/**
* ID.
*
* @var \int
* @since 1.0.0
*/
protected $id = 0;
/**
* Name.
*
* @var \string
* @since 1.0.0
*/
protected $name = '';
/**
* Extension.
*
* @var \string
* @since 1.0.0
*/
protected $extension = '';
/**
* File size in bytes.
*
* @var \int
* @since 1.0.0
*/
protected $size = 0;
/**
* Author.
*
* @var \int
* @since 1.0.0
*/
protected $createdBy = 0;
/**
* Uploaded.
*
* @var \DateTime
* @since 1.0.0
*/
protected $createdAt = null;
/**
* Resource path.
*
* @var \string
* @since 1.0.0
*/
protected $path = '';
/**
* Is versioned.
*
* @var \bool
* @since 1.0.0
*/
protected $versioned = false;
/**
* Media Description.
*
* @var \string
* @since 1.0.0
*/
protected $description = '';
/**
* Permissions.
*
* @var array
* @since 1.0.0
*/
protected $permissions = [
'r' => ['groups' => [],
'users' => [],],
'w' => ['groups' => [],
'users' => [],],
'p' => ['groups' => [],
'users' => [],],
'd' => ['groups' => [],
'users' => [],],
];
/**
* Constructor.
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function __construct()
{
}
/**
* @return \int
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getId() : \int
{
return $this->id;
}
/**
* @param \int $id Id
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setId(\int $id)
{
$this->id = $id;
}
/**
* @return \int
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getCreatedBy() : \int
{
return $this->createdBy;
}
/**
* @return \DateTime
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getCreatedAt() : \DateTime
{
return $this->createdAt;
}
/**
* @return \string
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getExtension() : \string
{
return $this->extension;
}
/**
* @return \string
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getPath() : \string
{
return $this->path;
}
/**
* @return \string
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getName() : \string
{
return $this->name;
}
/**
* @return \string
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getDescription() : \string
{
return $this->description;
}
/**
* @return \int
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getSize() : \int
{
return $this->size;
}
/**
* @param \int $createdBy Creator
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setCreatedBy(\int $createdBy)
{
$this->createdBy = $createdBy;
}
/**
* @param \DateTime $createdAt Creation date
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setCreatedAt(\DateTime $createdAt)
{
$this->createdAt = $createdAt;
}
/**
* @param \string $extension Extension
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setExtension(\string $extension)
{
$this->extension = $extension;
}
/**
* @param \string $path $filepath
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setPath(\string $path)
{
$this->path = $path;
}
/**
* @param \string $name Media name (not file name)
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setName(\string $name)
{
$this->name = $name;
}
/**
* @param \string $description Media description
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setDescription(\string $description)
{
$this->description = $description;
}
/**
* @param \int $size Filesize
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setSize(\int $size)
{
$this->size = $size;
}
/**
* @param \bool $versioned File is version controlled
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setVersioned(\bool $versioned)
{
$this->versioned = $versioned;
}
/**
* @return \bool
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getVersioned() : \bool
{
return $this->versioned;
}
}

120
Models/MediaMapper.php Normal file
View File

@ -0,0 +1,120 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media\Models;
use phpOMS\DataStorage\Database\DataMapperAbstract;
use phpOMS\DataStorage\Database\Query\Builder;
use phpOMS\DataStorage\Database\Query\Column;
class MediaMapper extends DataMapperAbstract
{
/**
* Columns.
*
* @var array<string, array>
* @since 1.0.0
*/
protected static $columns = [
'media_id' => ['name' => 'media_id', 'type' => 'int', 'internal' => 'id'],
'media_name' => ['name' => 'media_name', 'type' => 'string', 'internal' => 'name'],
'media_versioned' => ['name' => 'media_versioned', 'type' => 'bool', 'internal' => 'versioned'],
'media_file' => ['name' => 'media_file', 'type' => 'string', 'internal' => 'path'],
'media_extension' => ['name' => 'media_extension', 'type' => 'string', 'internal' => 'extension'],
'media_collection' => ['name' => 'media_collection', 'type' => 'int', 'internal' => 'collection'],
'media_size' => ['name' => 'media_size', 'type' => 'int', 'internal' => 'size'],
'media_created_by' => ['name' => 'media_created_by', 'type' => 'int', 'internal' => 'createdBy'],
'media_created_at' => ['name' => 'media_created_at', 'type' => 'DateTime', 'internal' => 'createdAt'],
];
/**
* Primary table.
*
* @var \string
* @since 1.0.0
*/
protected static $table = 'media';
protected static $createdAt = 'media_created_at';
/**
* Primary field name.
*
* @var \string
* @since 1.0.0
*/
protected static $primaryField = 'media_id';
/**
* Create media.
*
* @param Media $obj Media
*
* @return \bool
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function create(&$obj)
{
try {
$objId = parent::create($obj);
$query = new Builder($this->db);
$query->prefix($this->db->getPrefix())
->insert(
'account_permission_account',
'account_permission_from',
'account_permission_for',
'account_permission_id1',
'account_permission_id2',
'account_permission_r',
'account_permission_w',
'account_permission_m',
'account_permission_d',
'account_permission_p'
)
->into('account_permission')
->values($obj->getCreatedBy(), 'media', 'media', 1, $objId, 1, 1, 1, 1, 1);
$this->db->con->prepare($query->toSql())->execute();
} catch (\Exception $e) {
var_dump($e);
return false;
}
return $objId;
}
/**
* Find.
*
* @param array $columns Columns to select
*
* @return Builder
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function find(...$columns) : Builder
{
return parent::find(...$columns)->from('account_permission')
->where('account_permission.account_permission_for', '=', 'media')
->where('account_permission.account_permission_id1', '=', 1)
->where('media.media_id', '=', new Column('account_permission.account_permission_id2'))
->where('account_permission.account_permission_r', '=', 1);
}
}

31
Models/NullCollection.php Normal file
View File

@ -0,0 +1,31 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media\Models;
/**
* Media class.
*
* @category Modules
* @package Modules\Media
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class NullCollection extends Collection
{
}

31
Models/NullMedia.php Normal file
View File

@ -0,0 +1,31 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media\Models;
/**
* Media class.
*
* @category Modules
* @package Modules\Media
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class NullMedia extends Media
{
}

75
Models/Upload.js Normal file
View File

@ -0,0 +1,75 @@
(function (jsOMS, undefined) {
jsOMS.Modules.Models.Media = typeof jsOMS.Modules.Models.Media == 'undefined' ? {} : jsOMS.Modules.Models.Media;
jsOMS.Modules.Models.Media.Upload = function (responseManager) {
this.responseManager = responseManager;
this.success = [];
this.uri = '';
this.allowedTypes = [];
this.maxFileSize = 0;
this.files = [];
};
jsOMS.Modules.Models.Media.Upload.prototype.setSuccess = function (id, callback) {
this.success[id] = callback;
};
jsOMS.Modules.Models.Media.Upload.prototype.setUri = function (uri) {
this.uri = uri;
};
jsOMS.Modules.Models.Media.Upload.prototype.setAllowedTypes = function (allowed) {
this.allowedTypes = allowed;
};
jsOMS.Modules.Models.Media.Upload.prototype.addAllowedType = function (allowed) {
this.allowedTypes.push(allowed);
};
jsOMS.Modules.Models.Media.Upload.prototype.setMaxFileSize = function (size) {
this.maxFileSize = size;
};
jsOMS.Modules.Models.Media.Upload.prototype.addFile = function (file) {
this.files.push(file);
};
jsOMS.Modules.Models.Media.Upload.prototype.upload = function (formId) {
// TODO: validate file type + file size
var request = new jsOMS.Request(),
formData = new FormData(),
self = this;
this.files.forEach(function (element, index) {
formData.append('file' + index, element);
});
request.setData(formData);
request.setType('raw');
request.setUri(this.uri);
request.setMethod('POST');
request.setRequestHeader('HTTP_X_REQUESTED_WITH', 'XMLHttpRequest');
request.setSuccess(function (xhr) {
console.log(xhr); // TODO: remove this is for error checking
var o = JSON.parse(xhr.response),
response = Object.keys(o).map(function (k) {
return o[k];
});
console.log(response);
for (var k = 0; k < response.length; k++) {
if (response[k] !== null) {
if (!self.success[formId]) {
self.responseManager.execute(response[k].type, response[k]);
} else {
self.success[formId](response[k].type, response[k]);
}
}
}
});
request.send();
};
}(window.jsOMS = window.jsOMS || {}));

317
Models/UploadFile.php Normal file
View File

@ -0,0 +1,317 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media\Models;
/**
* Upload.
*
* @category Modules
* @package Modules\Media
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class UploadFile
{
/**
* Upload max size.
*
* @var \int
* @since 1.0.0
*/
private $maxSize = 50000000;
/**
* Allowed mime types.
*
* @var array
* @since 1.0.0
*/
private $allowedTypes = [];
/**
* Output directory.
*
* @var \string
* @since 1.0.0
*/
private $outputDir = '/Modules/Media/Files';
/**
* Output file name.
*
* @var \string
* @since 1.0.0
*/
private $fileName = '';
/**
* Output file name.
*
* @var \bool
* @since 1.0.0
*/
private $preserveFileName = true;
/**
* Upload file to server.
*
* @param array $files File data ($_FILE)
*
* @return array
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function upload(array $files) : array
{
$result = [];
if (count($files) == count($files, COUNT_RECURSIVE)) {
$files = [$files];
}
if (count($files) > 1) {
do {
$rndPath = str_pad(dechex(rand(0, 65535)), 4, '0', STR_PAD_LEFT);
} while (file_exists($this->outputDir . '/' . $rndPath));
$this->outputDir = $this->outputDir . '/' . $rndPath;
}
$rpath = $this->outputDir;
foreach ($files as $key => $f) {
$result[$key] = [];
if (!isset($f['error'])) {
// TODO: handle wrong parameters
$result[$key]['status'] = UploadStatus::WRONG_PARAMETERS;
return $result;
}
switch ($f['error']) {
case UPLOAD_ERR_OK:
break;
case UPLOAD_ERR_NO_FILE:
// TODO: no file sent
$result[$key]['status'] = UploadStatus::NOTHING_UPLOADED;
return $result;
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
// too large
$result[$key]['status'] = UploadStatus::UPLOAD_SIZE;
return $result;
default:
$result[$key]['status'] = UploadStatus::UNKNOWN_ERROR;
return $result;
}
$result[$key]['size'] = $f['size'];
if ($f['size'] > $this->maxSize) {
// too large2
$result[$key]['status'] = UploadStatus::CONFIG_SIZE;
return $result;
}
// TODO: do I need pecl fileinfo?
if (!empty($this->allowedTypes) && false === $ext = array_search($f['type'], $this->allowedTypes, true)) {
// wrong file format
$result[$key]['status'] = UploadStatus::WRONG_EXTENSION;
return $result;
}
$path = __DIR__ . '/../../..' . $this->outputDir;
if ($this->preserveFileName) {
$this->fileName = $f['name'];
}
$split = explode('.', $f['name']);
$extension = count($split) > 1 ? $split[count($split) - 1] : '';
$result[$key]['extension'] = $extension;
if (!$this->fileName || empty($this->fileName) || file_exists($path . '/' . $this->fileName)) {
$rnd = '';
do {
$sha = sha1_file($f['tmp_name'] . $rnd);
$sha .= '.' . $extension;
if ($sha === false) {
$result[$key]['status'] = UploadStatus::FAILED_HASHING;
return $result;
}
$this->fileName = $sha;
$rnd = rand();
} while (file_exists($path . '/' . $this->fileName));
}
$result[$key]['filename'] = $this->fileName;
if (!is_dir($path)) {
\mkdir($path, '0655', true);
}
if (!move_uploaded_file($f['tmp_name'], $path . '/' . $this->fileName)) {
// couldn't move
$result[$key]['status'] = UploadStatus::NOT_MOVABLE;
return $result;
}
$result[$key]['path'] = $rpath;
$result[$key]['status'] = UploadStatus::OK;
}
return $result;
}
/**
* @return \int
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getMaxSize() : \int
{
return $this->maxSize;
}
/**
* @param \int $maxSize
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setMaxSize(\int $maxSize)
{
$this->maxSize = $maxSize;
}
/**
* @return array
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getAllowedTypes() : array
{
return $this->allowedTypes;
}
/**
* @param array $allowedTypes
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setAllowedTypes(array $allowedTypes)
{
$this->allowedTypes = $allowedTypes;
}
/**
* @param array $allowedTypes
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function addAllowedTypes($allowedTypes)
{
$this->allowedTypes[] = $allowedTypes;
}
/**
* @return \string
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getOutputDir() : \string
{
return $this->outputDir;
}
/**
* @param \string $outputDir
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setOutputDir(\string $outputDir)
{
$this->outputDir = $outputDir;
}
/**
* @return \string
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function getFileName() : \string
{
return $this->fileName;
}
/**
* @param \string $fileName
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setFileName(\string $fileName)
{
$this->fileName = $fileName;
}
/**
* @param \bool $preserveFileName
*
* @return void
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function setPreserveFileName(\bool $preserveFileName)
{
$this->preserveFileName = $preserveFileName;
}
}

42
Models/UploadStatus.php Normal file
View File

@ -0,0 +1,42 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media\Models;
use phpOMS\Datatypes\Enum;
/**
* Upload status.
*
* @category Framework
* @package phpOMS\DataStorage\Database
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
abstract class UploadStatus extends Enum
{
const OK = 0;
const WRONG_PARAMETERS = -1;
const NOTHING_UPLOADED = -2;
const UPLOAD_SIZE = -3;
const UNKNOWN_ERROR = -4;
const CONFIG_SIZE = -5;
const WRONG_EXTENSION = -6;
const NOT_MOVABLE = -7;
const FAILED_HASHING = -8;
}

115
ModuleMedia.js Normal file
View File

@ -0,0 +1,115 @@
(function (jsOMS, undefined) {
jsOMS.Modules.Models.Media = typeof jsOMS.Modules.Models.Media == 'undefined' ? {} : jsOMS.Modules.Models.Media;
jsOMS.Modules.Models.Media.Upload = function (responseManager) {
this.responseManager = responseManager;
this.success = [];
this.uri = '';
this.allowedTypes = [];
this.maxFileSize = 0;
this.files = [];
};
jsOMS.Modules.Models.Media.Upload.prototype.setSuccess = function (id, callback) {
this.success[id] = callback;
};
jsOMS.Modules.Models.Media.Upload.prototype.setUri = function (uri) {
this.uri = uri;
};
jsOMS.Modules.Models.Media.Upload.prototype.setAllowedTypes = function (allowed) {
this.allowedTypes = allowed;
};
jsOMS.Modules.Models.Media.Upload.prototype.addAllowedType = function (allowed) {
this.allowedTypes.push(allowed);
};
jsOMS.Modules.Models.Media.Upload.prototype.setMaxFileSize = function (size) {
this.maxFileSize = size;
};
jsOMS.Modules.Models.Media.Upload.prototype.addFile = function (file) {
this.files.push(file);
};
jsOMS.Modules.Models.Media.Upload.prototype.upload = function (formId) {
// TODO: validate file type + file size
var request = new jsOMS.Request(),
formData = new FormData(),
self = this;
this.files.forEach(function (element, index) {
formData.append('file' + index, element);
});
request.setData(formData);
request.setType('raw');
request.setUri(this.uri);
request.setMethod('POST');
request.setRequestHeader('HTTP_X_REQUESTED_WITH', 'XMLHttpRequest');
request.setSuccess(function (xhr) {
console.log(xhr); // TODO: remove this is for error checking
var o = JSON.parse(xhr.response),
response = Object.keys(o).map(function (k) {
return o[k];
});
console.log(response);
for (var k = 0; k < response.length; k++) {
if (response[k] !== null) {
if (!self.success[formId]) {
self.responseManager.execute(response[k].type, response[k]);
} else {
self.success[formId](response[k].type, response[k]);
}
}
}
});
request.send();
};
}(window.jsOMS = window.jsOMS || {}));
(function (jsOMS, undefined) {
jsOMS.Modules.Media = function (app) {
this.app = app;
};
jsOMS.Modules.Media.prototype.bind = function () {
var forms = document.getElementsByTagName('form');
/* Handle media forms */
for (var c = 0; c < forms.length; c++) {
var self = this;
this.app.uiManager.getFormManager().injectSubmit(forms[c].id, function (e) {
var fileFields = e.querySelectorAll('input[type=file]'),
uploader = new jsOMS.Modules.Models.Media.Upload(self.app.responseManager);
uploader.setSuccess(e.id, function (type, response) {
e.querySelector('input[type=file]+input[type=hidden]').value = JSON.stringify(response.uploads);
var data = self.app.uiManager.getFormManager().getData(e);
self.app.uiManager.getFormManager().submit(e, data);
});
uploader.setUri('http://127.0.0.1/en/api/media.php');
for (var i = 0; i < fileFields.length; i++) {
for (var j = 0; j < fileFields[i].files.length; j++) {
uploader.addFile(fileFields[i].files[j]);
}
}
uploader.upload(e.id);
});
}
}
}(window.jsOMS = window.jsOMS || {}));
jsOMS.ready(function () {
window.omsApp.moduleManager.get('Media').bind();
});

1
README.md Normal file
View File

@ -0,0 +1 @@
# Media #

View File

@ -0,0 +1 @@
<span id="media-upload"></span>

View File

@ -0,0 +1,34 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
/**
* @var \phpOMS\Views\View $this
*/
echo $this->getData('nav')->render(); ?>
<section class="box w-50">
<h1><?= $this->l11n->lang['Media']['Upload']; ?></h1>
<div class="inner">
<form>
<table class="layout wf-100">
<tr><td><label for="iName"><?= $this->l11n->lang['Media']['Name']; ?></label>
<tr><td><input type="text" id="iName" name="name" placeholder="&#xf040;">
<tr><td><label for="iFiles"><?= $this->l11n->lang['Media']['Files']; ?></label>
<tr><td><input type="file" id="iFiles" name="files" multiple>
<tr><td><input type="submit" value="<?= $this->l11n->lang[0]['Create']; ?>">
</table>
</form>
</div>
</section>

View File

@ -0,0 +1,47 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
/**
* @var \phpOMS\Views\View $this
*/
$footerView = new \Web\Views\Lists\PaginationView($this->app, $this->request, $this->response);
$footerView->setTemplate('/Web/Templates/Lists/Footer/PaginationBig');
$footerView->setPages(20);
$footerView->setPage(1);
echo $this->getData('nav')->render(); ?>
<section class="box">
<table class="table">
<caption><?= $this->l11n->lang['Media']['Media']; ?></caption>
<thead>
<tr>
<td class="wf-100"><?= $this->l11n->lang['Media']['Name']; ?>
<td><?= $this->l11n->lang['Media']['Type']; ?>
<td><?= $this->l11n->lang['Media']['Size']; ?>
<td><?= $this->l11n->lang['Media']['Creator']; ?>
<td><?= $this->l11n->lang['Media']['Created']; ?>
<tfoot>
<tr>
<td colspan="3"><?= $footerView->render(); ?>
<tbody>
<?php $count = 0; foreach([] as $key => $value) : $count++; ?>
<?php endforeach; ?>
<?php if($count === 0) : ?>
<tr><td colspan="5" class="empty"><?= $this->l11n->lang[0]['Empty']; ?>
<?php endif; ?>
</table>
</section>

View File

@ -0,0 +1,88 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
/** @noinspection PhpUndefinedMethodInspection */
\phpOMS\Module\ModuleFactory::$loaded['Navigation']->call([\Modules\Navigation\Models\NavigationType::CONTENT,
1000401001,]);
?>
<div class="b b-3 c4-2 c4" id="i4-2-1">
<h1>
<?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang['Media']['Preview']; ?>
<i class="fa fa-minus min"></i>
<i class="fa fa-plus max vh"></i>
</h1>
<div class="bc-1">
</div>
</div>
<div class="b b-1 c4-2 c4" id="i4-2-2">
<h1>
<?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang['Media']['Data']; ?>
<i class="fa fa-minus min"></i>
<i class="fa fa-plus max vh"></i>
</h1>
<div class="bc-1">
<!-- @formatter:off -->
<table class="tc-1">
<tr>
<th><label><?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang['Media']['Name']; ?></label>
<td><?= $media->getName(); ?>
<tr>
<th><label><?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang['Media']['Extension']; ?></label>
<td><?= $media->getExtension(); ?>
<tr>
<th><label><?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang['Media']['Size']; ?></label>
<td><?= \phpOMS\Utils\Converter\File::byteSizeToString($media->getSize()); ?>
<tr>
<th><label><?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang['Media']['Author']; ?></label>
<td><?= $media->getAuthor(); ?>
<tr>
<th><label><?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang['Media']['Created']; ?></label>
<td><?= $media->getCreated()->format('Y-m-d H:i:s'); ?>
<tr>
<th><label><?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang['Media']['Changed']; ?></label>
<td>asldkf
<tr>
<th><label><?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang['Media']['Changedby']; ?></label>
<td>asldkf
</table>
<!-- @formatter:on -->
</div>
</div>
<div class="b b-1 c4-2 c4" id="i4-2-2">
<h1>
<?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang['Media']['Settings']; ?>
<i class="fa fa-minus min"></i>
<i class="fa fa-plus max vh"></i>
</h1>
<div class="bc-1">
<ul class="l-1">
<li>
<label><?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang['Media']['Visibility']; ?></label>
<li><input type="text">
<button><?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang[0]['Add']; ?></button>
<li>
<label><?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang['Media']['Editability']; ?></label>
<li><input type="text">
<button><?= $this->app->accountManager->get($request->getAccount())->getL11n()->lang[0]['Add']; ?>
</ul>
</div>
</div>

View File

@ -0,0 +1,18 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
$MODLANG[1] = [
'i:ModuleInstalled' => 'Installation of the module {$1} was successful.',
];

View File

@ -0,0 +1,36 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
$MODLANG['Media'] = [
'Account' => 'Account',
'Author' => 'Author',
'Changed' => 'Changed',
'Changedby' => 'Changed by',
'Created' => 'Created',
'Creator' => 'Creator',
'Data' => 'Data',
'Editability' => 'Editability',
'Extension' => 'Extension',
'Files' => 'Files',
'Media' => 'Media',
'Name' => 'Name',
'Permission' => 'Permission',
'Preview' => 'Preview',
'Settings' => 'Settings',
'Size' => 'Size',
'Type' => 'Type',
'Upload' => 'Upload',
'Visibility' => 'Visibility',
];

View File

@ -0,0 +1,20 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
$MODLANG['Navigation'] = [
'Create' => 'Create',
'List' => 'List',
'Media' => 'Media',
];

33
Views/MediaCreateView.php Normal file
View File

@ -0,0 +1,33 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Media\Views;
use phpOMS\Views\View;
/**
* Media list view.
*
* @category Modules
* @package Modules\Media
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class MediaCreateView extends View
{
}

BIN
img/module_teaser_small.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

80
info.json Normal file
View File

@ -0,0 +1,80 @@
{
"name": {
"id": 1000400000,
"internal": "Media",
"external": "OMS Media"
},
"version": "1.0.0",
"requirements": {
"phpOMS": "1.0.0",
"phpOMS-db": "1.0.0"
},
"creator": {
"name": "Orange Management",
"website": "www.spl1nes.com"
},
"description": "The profile module.",
"directory": "Media",
"dependencies": {},
"providing": {
"Navigation": "*"
},
"load": [
{
"pid": [
"1ba288c868cacf14e56f8205efef31d697301d02"
],
"type": 4,
"for": "Content",
"file": "Media",
"from": "Media"
},
{
"pid": [
"15b5e54cc7b2f8bdb84ed667d9931d758c6bc108"
],
"type": 4,
"for": "CostUnitAccounting",
"file": "Media",
"from": "Media"
},
{
"pid": [
"e56f238d391b804975e0f47f26d20b6d2d675200"
],
"type": 4,
"for": "Admin",
"file": "Media",
"from": "Media"
},
{
"pid": [
"1ba288c868cacf14e56f8205efef31d697301d02",
"e269b5109994852366c276ad5f6bb4ef89f45d2e",
"e56f238d391b804975e0f47f26d20b6d2d675200"
],
"type": 5,
"for": "Content",
"file": "backend",
"from": "Media"
},
{
"pid": [
"15b5e54cc7b2f8bdb84ed667d9931d758c6bc108"
],
"type": 5,
"for": "CostUnitAccounting",
"file": "api",
"from": "Media"
},
{
"pid": [
"754a08ddf8bcb1cf22f310f09206dd783d42f7dd"
],
"type": 5,
"from": "Media",
"for": "Navigation",
"file": "nav.backend"
}
]
}