123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- <?php
- /**
- *
- * PHP Pro Bid $Id$ J+WpUccI8EfmMR4qFBWatlZ2WpQN1bJZzHI61BMnZZ0=
- *
- * @link http://www.phpprobid.com
- * @copyright Copyright (c) 2015 Online Ventures Software & CodeCube SRL
- * @license http://www.phpprobid.com/license Commercial License
- *
- * @version 7.4
- */
- /**
- * listings media table service class
- */
- namespace Ppb\Service;
- use Ppb\Db\Table\ListingsMedia as ListingsMediaTable,
- Cube\Db\Expr;
- class ListingsMedia extends AbstractService
- {
- /**
- * media types
- */
- const TYPE_IMAGE = 'image';
- const TYPE_VIDEO = 'video';
- const TYPE_DOWNLOAD = 'download';
- const TYPE_CSV = 'csv';
- /**
- *
- * available media types array
- *
- * @var array
- */
- protected static $_types = array(
- self::TYPE_IMAGE => 'Image',
- self::TYPE_VIDEO => 'Video',
- self::TYPE_DOWNLOAD => 'Download',
- self::TYPE_CSV => 'CSV',
- );
- /**
- *
- * class constructor
- */
- public function __construct()
- {
- parent::__construct();
- $this->setTable(
- new ListingsMediaTable());
- }
- /**
- *
- * get listings media types
- *
- * @return array
- */
- public static function getTypes()
- {
- return self::$_types;
- }
- /**
- *
- * the input array will save the data from any of the array keys matching the types array
- *
- * @param int $listingId
- * @param array $post
- *
- * @return $this
- */
- public function save($listingId, $post)
- {
- $ids = array(0);
- foreach (self::getTypes() as $type => $desc) {
- if (!empty($post[$type])) {
- $data = (is_array($post[$type])) ? $post[$type] : (array)\Ppb\Utility::unserialize($post[$type]);
- $ids = array_merge($ids, $this->_saveByType($listingId, $data, $type));
- }
- }
- // if (count($ids) > 0) {
- // delete all media that was removed by the edit process
- $this->fetchAll(
- $this->getTable()->select()
- ->where('listing_id = ?', $listingId)
- ->where('id NOT IN (?)', $ids))->delete();
- // }
- return $this;
- }
- /**
- *
- * save data in listings_media table
- *
- * @param int $listingId the id of the listing
- * @param array $data array data
- * @param string $type image, video, download
- *
- * @return array ids resulted from the insert/update queries
- */
- protected function _saveByType($listingId, array $data, $type = 'image')
- {
- $orderId = 0;
- $ids = array();
- $table = $this->getTable();
- // save media
- foreach ((array)$data as $value) {
- if (!empty($value)) {
- $row = $table->fetchRow(
- $table->select()
- ->where("listing_id = ?", $listingId)
- ->where("value = ?", $value)
- ->where('type = ?', $type));
- if (count($row) > 0) {
- $table->update(
- array('order_id' => $orderId++), "id = '{$row['id']}'");
- $ids[] = $row['id'];
- }
- else {
- $table->insert(array(
- 'value' => $value,
- 'listing_id' => $listingId,
- 'type' => $type,
- 'order_id' => $orderId++,
- 'created_at' => new Expr('now()'),
- ));
- $ids[] = $table->lastInsertId();
- }
- }
- }
- return $ids;
- }
- /**
- *
- * prepare custom field data for when saving to the table
- *
- * @param array $data
- *
- * @return array
- */
- protected function _prepareSaveData($data = array())
- {
- $data = parent::_prepareSaveData($data);
- return $data;
- }
- }
|