mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-08 18:44:30 +00:00

Conflicts: lib/Alchemy/Phrasea/Controller/Prod/Lazaret.php lib/classes/API/OAuth2/Adapter.php lib/classes/API/V1/adapter.php lib/classes/Feed/Adapter.php lib/classes/Feed/Collection.php lib/classes/Feed/Entry/Adapter.php lib/classes/Feed/Entry/Item.php lib/classes/Feed/Publisher/Adapter.php lib/classes/User/Adapter.php lib/classes/base.php lib/classes/connection.php lib/classes/databox/cgu.php lib/classes/eventsmanager/notify/autoregister.php lib/classes/eventsmanager/notify/bridgeuploadfail.php lib/classes/eventsmanager/notify/order.php lib/classes/eventsmanager/notify/orderdeliver.php lib/classes/eventsmanager/notify/ordernotdelivered.php lib/classes/eventsmanager/notify/push.php lib/classes/eventsmanager/notify/register.php lib/classes/eventsmanager/notify/validate.php lib/classes/eventsmanager/notify/validationdone.php lib/classes/eventsmanager/notify/validationreminder.php lib/classes/module/console/taskState.php lib/classes/module/console/taskrun.php lib/classes/record/adapter.php lib/classes/registry.php lib/classes/set/order.php lib/classes/task/abstract.php lib/classes/task/appboxAbstract.php lib/classes/task/databoxAbstract.php lib/classes/task/manager.php lib/classes/task/period/RecordMover.php lib/classes/task/period/apibridge.php lib/classes/task/period/archive.php lib/classes/task/period/ftp.php lib/classes/task/period/ftpPull.php templates/web/prod/upload/lazaret.html.twig
484 lines
11 KiB
PHP
484 lines
11 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of Phraseanet
|
|
*
|
|
* (c) 2005-2014 Alchemy
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
use Alchemy\Phrasea\Application;
|
|
|
|
class Bridge_Element
|
|
{
|
|
/**
|
|
*
|
|
* @var appbox
|
|
*/
|
|
protected $app;
|
|
|
|
/**
|
|
*
|
|
* @var account
|
|
*/
|
|
protected $account;
|
|
|
|
/**
|
|
*
|
|
* @var int
|
|
*/
|
|
protected $id;
|
|
|
|
/**
|
|
*
|
|
* @var record_adapter
|
|
*/
|
|
protected $record;
|
|
|
|
/**
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $dist_id;
|
|
|
|
/**
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $status;
|
|
|
|
/**
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $connector_status;
|
|
|
|
/**
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $title;
|
|
|
|
/**
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $type;
|
|
|
|
/**
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $datas;
|
|
|
|
/**
|
|
*
|
|
* @var DateTime
|
|
*/
|
|
protected $created_on;
|
|
|
|
/**
|
|
*
|
|
* @var DateTime
|
|
*/
|
|
protected $uploaded_on;
|
|
|
|
/**
|
|
*
|
|
* @var DateTime
|
|
*/
|
|
protected $updated_on;
|
|
|
|
/**
|
|
*
|
|
* @var Bridge_Api_ElementInterface
|
|
*/
|
|
protected $connector_element;
|
|
|
|
const STATUS_DONE = 'done';
|
|
const STATUS_PROCESSING_SERVER = 'processing_server';
|
|
const STATUS_PROCESSING = 'processing';
|
|
const STATUS_PENDING = 'pending';
|
|
const STATUS_ERROR = 'error';
|
|
|
|
public function __construct(Application $app, Bridge_Account $account, $id)
|
|
{
|
|
$this->app = $app;
|
|
$this->account = $account;
|
|
$this->id = (int) $id;
|
|
|
|
$sql = 'SELECT sbas_id, record_id, dist_id, status, connector_status, type
|
|
, title, serialized_datas, created_on, updated_on, uploaded_on
|
|
FROM bridge_elements WHERE id = :id';
|
|
$stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql);
|
|
$stmt->execute([':id' => $this->id]);
|
|
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
$stmt->closeCursor();
|
|
|
|
if ( ! $row)
|
|
throw new Bridge_Exception_ElementNotFound('Element Not Found');
|
|
|
|
$this->record = new record_adapter($app, $row['sbas_id'], $row['record_id']);
|
|
$this->dist_id = $row['dist_id'];
|
|
$this->status = $row['status'];
|
|
$this->connector_status = $row['connector_status'];
|
|
|
|
$this->title = $row['title'];
|
|
$this->type = $row['type'];
|
|
$this->datas = unserialize($row['serialized_datas']);
|
|
$this->updated_on = new DateTime($row['updated_on']);
|
|
$this->created_on = new DateTime($row['created_on']);
|
|
$this->uploaded_on = $row['uploaded_on'] ? new DateTime($row['uploaded_on']) : null;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return Bridge_Account
|
|
*/
|
|
public function get_account()
|
|
{
|
|
return $this->account;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return int
|
|
*/
|
|
public function get_id()
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return record_adapter
|
|
*/
|
|
public function get_record()
|
|
{
|
|
return $this->record;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_dist_id()
|
|
{
|
|
return $this->dist_id;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param string $dist_id
|
|
* @return Bridge_Element
|
|
*/
|
|
public function set_dist_id($dist_id)
|
|
{
|
|
$this->dist_id = $dist_id;
|
|
$this->updated_on = new DateTime();
|
|
|
|
$sql = 'UPDATE bridge_elements
|
|
SET dist_id = :dist_id, updated_on = :update WHERE id = :id';
|
|
|
|
$params = [
|
|
':dist_id' => $this->dist_id
|
|
, ':id' => $this->id
|
|
, ':update' => $this->updated_on->format(DATE_ISO8601)
|
|
];
|
|
|
|
$stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql);
|
|
$stmt->execute($params);
|
|
$stmt->closeCursor();
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_status()
|
|
{
|
|
return $this->status;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param string $status
|
|
* @return Bridge_Element
|
|
*/
|
|
public function set_status($status)
|
|
{
|
|
$this->status = $status;
|
|
$this->updated_on = new DateTime();
|
|
|
|
$sql = 'UPDATE bridge_elements
|
|
SET status = :status, updated_on = :update WHERE id = :id';
|
|
|
|
$params = [
|
|
':status' => $this->status
|
|
, ':id' => $this->id
|
|
, ':update' => $this->updated_on->format(DATE_ISO8601)
|
|
];
|
|
|
|
$stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql);
|
|
$stmt->execute($params);
|
|
$stmt->closeCursor();
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_connector_status()
|
|
{
|
|
return $this->connector_status;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param string $status
|
|
* @return Bridge_Element
|
|
*/
|
|
public function set_connector_status($status)
|
|
{
|
|
$this->connector_status = $status;
|
|
$this->updated_on = new DateTime();
|
|
|
|
$sql = 'UPDATE bridge_elements
|
|
SET connector_status = :connector_status, updated_on = :update
|
|
WHERE id = :id';
|
|
|
|
$params = [
|
|
':connector_status' => $this->connector_status
|
|
, ':id' => $this->id
|
|
, ':update' => $this->updated_on->format(DATE_ISO8601)
|
|
];
|
|
|
|
$stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql);
|
|
$stmt->execute($params);
|
|
$stmt->closeCursor();
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_title()
|
|
{
|
|
return $this->title;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_type()
|
|
{
|
|
return $this->type;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return Bridge_Api_ElementInterface
|
|
*/
|
|
public function build_connector_element()
|
|
{
|
|
if (! $this->connector_element) {
|
|
try {
|
|
$this->connector_element = $this->account->get_api()->get_element_from_id($this->dist_id, $this->type);
|
|
} catch (\Exception $e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
return $this->connector_element;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param string $title
|
|
* @return Bridge_Element
|
|
*/
|
|
public function set_title($title)
|
|
{
|
|
$this->title = $title;
|
|
$this->updated_on = new DateTime();
|
|
|
|
$sql = 'UPDATE bridge_elements
|
|
SET title = :title, updated_on = :update WHERE id = :id';
|
|
|
|
$params = [
|
|
':title' => $this->title
|
|
, ':id' => $this->id
|
|
, ':update' => $this->updated_on->format(DATE_ISO8601)
|
|
];
|
|
|
|
$stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql);
|
|
$stmt->execute($params);
|
|
$stmt->closeCursor();
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_datas()
|
|
{
|
|
return $this->datas;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param array $datas
|
|
* @return Bridge_Element
|
|
*/
|
|
public function set_datas(Array $datas)
|
|
{
|
|
$this->datas = $datas;
|
|
$this->updated_on = new DateTime();
|
|
|
|
$sql = 'UPDATE bridge_elements
|
|
SET serialized_datas = :datas, updated_on = :update WHERE id = :id';
|
|
|
|
$params = [
|
|
':datas' => serialize($this->datas)
|
|
, ':id' => $this->id
|
|
, ':update' => $this->updated_on->format(DATE_ISO8601)
|
|
];
|
|
|
|
$stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql);
|
|
$stmt->execute($params);
|
|
$stmt->closeCursor();
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return DateTime
|
|
*/
|
|
public function get_created_on()
|
|
{
|
|
return $this->created_on;
|
|
}
|
|
|
|
/**
|
|
* @todo write tests
|
|
*
|
|
* @return DateTime
|
|
*/
|
|
public function get_uploaded_on()
|
|
{
|
|
return $this->uploaded_on;
|
|
}
|
|
|
|
/**
|
|
* @todo write tests
|
|
*
|
|
* @return DateTime
|
|
*/
|
|
public function set_uploaded_on(DateTime $date = null)
|
|
{
|
|
$this->uploaded_on = $date;
|
|
$this->updated_on = new DateTime();
|
|
|
|
$sql = 'UPDATE bridge_elements
|
|
SET uploaded_on = :uploaded_on, updated_on = :update WHERE id = :id';
|
|
|
|
$params = [
|
|
':uploaded_on' => $this->uploaded_on ? $this->uploaded_on->format(DATE_ISO8601) : null
|
|
, ':id' => $this->id
|
|
, ':update' => $this->updated_on->format(DATE_ISO8601)
|
|
];
|
|
|
|
$stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql);
|
|
$stmt->execute($params);
|
|
$stmt->closeCursor();
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return DateTime
|
|
*/
|
|
public function get_updated_on()
|
|
{
|
|
return $this->updated_on;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return Void
|
|
*/
|
|
public function delete()
|
|
{
|
|
$sql = 'DELETE FROM bridge_elements WHERE id = :id';
|
|
|
|
$stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql);
|
|
$stmt->execute([':id' => $this->id]);
|
|
$stmt->closeCursor();
|
|
|
|
return;
|
|
}
|
|
|
|
public static function get_elements_by_account(Application $app, Bridge_Account $account, $offset_start = 0, $quantity = 50)
|
|
{
|
|
$sql = 'SELECT id FROM bridge_elements WHERE account_id = :account_id
|
|
ORDER BY id DESC
|
|
LIMIT ' . (int) $offset_start . ',' . (int) $quantity;
|
|
|
|
$stmt = $app['phraseanet.appbox']->get_connection()->prepare($sql);
|
|
$stmt->execute([':account_id' => $account->get_id()]);
|
|
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
$stmt->closeCursor();
|
|
|
|
$results = [];
|
|
|
|
foreach ($rs as $row) {
|
|
$results[] = new Bridge_Element($app, $account, $row['id']);
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
public static function create(Application $app, Bridge_Account $account, record_adapter $record, $title, $status, $type, Array $datas = [])
|
|
{
|
|
$sql = 'INSERT INTO bridge_elements
|
|
(id, account_id, sbas_id, record_id, dist_id, title, `type`
|
|
, serialized_datas, status, created_on, updated_on)
|
|
VALUES
|
|
(null, :account_id, :sbas_id, :record_id, null, :title, :type
|
|
,:datas , :status, NOW(), NOW())';
|
|
|
|
$params = [
|
|
':account_id' => $account->get_id()
|
|
, ':sbas_id' => $record->get_sbas_id()
|
|
, ':record_id' => $record->get_record_id()
|
|
, ':status' => $status
|
|
, ':title' => $title
|
|
, ':type' => $type
|
|
, ':datas' => serialize($datas)
|
|
];
|
|
|
|
$stmt = $app['phraseanet.appbox']->get_connection()->prepare($sql);
|
|
$stmt->execute($params);
|
|
$stmt->closeCursor();
|
|
|
|
$element_id = $app['phraseanet.appbox']->get_connection()->lastInsertId();
|
|
|
|
return new self($app, $account, $element_id);
|
|
}
|
|
}
|