Added image action and loop
1
.gitignore
vendored
@@ -16,6 +16,7 @@ coverage
|
|||||||
.settings/
|
.settings/
|
||||||
local/cache/*
|
local/cache/*
|
||||||
web/assets/*
|
web/assets/*
|
||||||
|
web/cache/*
|
||||||
web/.htaccess
|
web/.htaccess
|
||||||
phpdoc*.log
|
phpdoc*.log
|
||||||
php-cs
|
php-cs
|
||||||
|
|||||||
417
core/lib/Thelia/Action/Image.php
Normal file
@@ -0,0 +1,417 @@
|
|||||||
|
<?php
|
||||||
|
/*************************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* Thelia */
|
||||||
|
/* */
|
||||||
|
/* Copyright (c) OpenStudio */
|
||||||
|
/* email : info@thelia.net */
|
||||||
|
/* web : http://www.thelia.net */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU General Public License as published by */
|
||||||
|
/* the Free Software Foundation; either version 3 of the License */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public License */
|
||||||
|
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
/* */
|
||||||
|
/*************************************************************************************/
|
||||||
|
|
||||||
|
namespace Thelia\Action;
|
||||||
|
|
||||||
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
|
|
||||||
|
use Thelia\Core\Event\ActionEvent;
|
||||||
|
use Thelia\Core\Event\ImageEvent;
|
||||||
|
use Thelia\Model\ConfigQuery;
|
||||||
|
use Thelia\Tools\URL;
|
||||||
|
|
||||||
|
use Imagine\Image\ImagineInterface;
|
||||||
|
use Imagine\Image\ImageInterface;
|
||||||
|
use Imagine\Image\Box;
|
||||||
|
use Imagine\Image\Color;
|
||||||
|
use Imagine\Image\Point;
|
||||||
|
use Thelia\Exception\ImageException;
|
||||||
|
use Thelia\Log\Tlog;
|
||||||
|
use Thelia\Core\Event\TheliaEvents;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Image management actions
|
||||||
|
*
|
||||||
|
* @package Thelia\Action
|
||||||
|
* @author Franck Allimant <franck@cqfdev.fr>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Image extends BaseAction implements EventSubscriberInterface
|
||||||
|
{
|
||||||
|
// Resize mode constants
|
||||||
|
const EXACT_RATIO_WITH_BORDERS = 1;
|
||||||
|
const EXACT_RATIO_WITH_CROP = 2;
|
||||||
|
const KEEP_IMAGE_RATIO = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process image and write the result in the image cache.
|
||||||
|
*
|
||||||
|
* If the image already exists in cache, the cache file is immediately returned, without any processing
|
||||||
|
* If the original (full resolution) image is required, create either a symbolic link with the
|
||||||
|
* original image in the cache dir, or copy it in the cache dir.
|
||||||
|
*
|
||||||
|
* This method updates the cache_file_path and file_url attributes of the event
|
||||||
|
*
|
||||||
|
* @param ImageEvent $event
|
||||||
|
* @throws \InvalidArgumentException, ImageException
|
||||||
|
*/
|
||||||
|
public function processImage(ImageEvent $event)
|
||||||
|
{
|
||||||
|
|
||||||
|
$subdir = $event->getCacheSubdirectory();
|
||||||
|
$source_file = $event->getSourceFilepath();
|
||||||
|
|
||||||
|
if (null == $subdir || null == $source_file) {
|
||||||
|
throw new \InvalidArgumentException("Cache sub-directory and source file path cannot be null");
|
||||||
|
}
|
||||||
|
|
||||||
|
// echo basename($source_file).": ";
|
||||||
|
|
||||||
|
// Find cached file path
|
||||||
|
$cacheFilePath = $this->getCacheFilePath($subdir, $source_file, $event);
|
||||||
|
|
||||||
|
if (! file_exists($cacheFilePath)) {
|
||||||
|
|
||||||
|
// If the original image is required, either create a copy of make a symbolic link,
|
||||||
|
// depending of the current configuration
|
||||||
|
if ($event->isOriginalImage()) {
|
||||||
|
|
||||||
|
$mode = ConfigQuery::read('original_image_delivery_mode', 'symlink');
|
||||||
|
|
||||||
|
if ($mode == 'symlink') {
|
||||||
|
if (false == @symlink($source_file, $cacheFilePath)) {
|
||||||
|
$error_message = sprintf("Failed to create symbolic link for %s in %s image cache directory", basename($source_file), $subdir);
|
||||||
|
Tlog::getInstance()->addError($error_message);
|
||||||
|
throw new ImageException($error_message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {// mode = 'copy'
|
||||||
|
if (false == @copy($source_file, $cacheFilePath)) {
|
||||||
|
$error_message = sprintf("Failed to copy %s in %s image cache directory", basename($source_file), $subdir);
|
||||||
|
Tlog::getInstance()->addError($error_message);
|
||||||
|
throw new ImageException($error_message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
// We have to process the image.
|
||||||
|
$imagine = $this->createImagineInstance();
|
||||||
|
|
||||||
|
$image = $imagine->open($source_file);
|
||||||
|
|
||||||
|
if ($image) {
|
||||||
|
|
||||||
|
$background_color = $event->getBackgroundColor();
|
||||||
|
|
||||||
|
if ($background_color != null) {
|
||||||
|
$bg_color = new Color($background_color);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$bg_color = null;
|
||||||
|
|
||||||
|
// Apply resize
|
||||||
|
$image = $this->applyResize($imagine, $image, $event->getWidth(), $event->getHeight(), $event->getResizeMode(), $bg_color);
|
||||||
|
|
||||||
|
// Rotate if required
|
||||||
|
$rotation = intval($event->getRotation());
|
||||||
|
|
||||||
|
if ($rotation != 0)
|
||||||
|
$image->rotate($rotation, $bg_color);
|
||||||
|
|
||||||
|
// Flip
|
||||||
|
// Process each effects
|
||||||
|
foreach ($event->getEffects() as $effect) {
|
||||||
|
|
||||||
|
$effect = trim(strtolower($effect));
|
||||||
|
|
||||||
|
$params = explode(':', $effect);
|
||||||
|
|
||||||
|
switch ($params[0]) {
|
||||||
|
|
||||||
|
case 'greyscale':
|
||||||
|
case 'grayscale':
|
||||||
|
$image->effects()->grayscale();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'negative':
|
||||||
|
$image->effects()->negative();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'horizontal_flip':
|
||||||
|
case 'hflip':
|
||||||
|
$image->flipHorizontally();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'vertical_flip':
|
||||||
|
case 'vflip':
|
||||||
|
$image-> flipVertically();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'gamma':
|
||||||
|
// Syntax: gamma:value. Exemple: gamma:0.7
|
||||||
|
if (isset($params[1])) {
|
||||||
|
$gamma = floatval($params[1]);
|
||||||
|
|
||||||
|
$image->effects()->gamma($gamma);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'colorize':
|
||||||
|
// Syntax: colorize:couleur. Exemple: colorize:#ff00cc
|
||||||
|
if (isset($params[1])) {
|
||||||
|
$the_color = new Color($params[1]);
|
||||||
|
|
||||||
|
$image->effects()->colorize($the_color);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$quality = $event->getQuality();
|
||||||
|
|
||||||
|
if (is_null($quality)) $quality = ConfigQuery::read('default_image_quality_percent', 75);
|
||||||
|
|
||||||
|
$image->save(
|
||||||
|
$cacheFilePath,
|
||||||
|
array('quality' => $quality)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new ImageException(sprintf("Source file %s cannot be opened.", basename($source_file)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compute the image URL
|
||||||
|
$image_url = $this->getCacheFileURL($subdir, basename($cacheFilePath));
|
||||||
|
|
||||||
|
// Update the event with file path and file URL
|
||||||
|
$event->setCacheFilepath($cacheFilePath);
|
||||||
|
|
||||||
|
$event->setFileUrl(URL::absoluteUrl($image_url));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process image resizing, with borders or cropping. If $dest_width and $dest_height
|
||||||
|
* are both null, no resize is performed.
|
||||||
|
*
|
||||||
|
* @param ImagineInterface $imagine the Imagine instance
|
||||||
|
* @param ImageInterface $image the image to process
|
||||||
|
* @param int $dest_width the required width
|
||||||
|
* @param int $dest_height the required height
|
||||||
|
* @param int $resize_mode the resize mode (crop / bands / keep image ratio)p
|
||||||
|
* @param string $bg_color the bg_color used for bands
|
||||||
|
* @return ImageInterface the resized image.
|
||||||
|
*/
|
||||||
|
protected function applyResize(ImagineInterface $imagine, ImageInterface $image, $dest_width, $dest_height, $resize_mode, $bg_color)
|
||||||
|
{
|
||||||
|
if (! (is_null($dest_width) && is_null($dest_height))) {
|
||||||
|
|
||||||
|
$width_orig = $image->getSize()->getWidth();
|
||||||
|
$height_orig = $image->getSize()->getHeight();
|
||||||
|
|
||||||
|
if (is_null($dest_width))
|
||||||
|
$dest_width = $width_orig;
|
||||||
|
|
||||||
|
if (is_null($dest_height))
|
||||||
|
$dest_height = $height_orig;
|
||||||
|
|
||||||
|
if (is_null($resize_mode))
|
||||||
|
$resize_mode = self::KEEP_IMAGE_RATIO;
|
||||||
|
|
||||||
|
$width_diff = $dest_width / $width_orig;
|
||||||
|
$height_diff = $dest_height / $height_orig;
|
||||||
|
|
||||||
|
$delta_x = $delta_y = $border_width = $border_height = 0;
|
||||||
|
|
||||||
|
if ($width_diff > 1 AND $height_diff > 1) {
|
||||||
|
|
||||||
|
$next_width = $width_orig;
|
||||||
|
$next_height = $height_orig;
|
||||||
|
|
||||||
|
$dest_width = ($resize_mode == self::EXACT_RATIO_WITH_BORDERS ? $dest_width : $next_width);
|
||||||
|
$dest_height = ($resize_mode == self::EXACT_RATIO_WITH_BORDERS ? $dest_height : $next_height);
|
||||||
|
}
|
||||||
|
else if ($width_diff > $height_diff) {
|
||||||
|
// Image height > image width
|
||||||
|
|
||||||
|
$next_height = $dest_height;
|
||||||
|
$next_width = intval(($width_orig * $next_height) / $height_orig);
|
||||||
|
|
||||||
|
if ($resize_mode == self::EXACT_RATIO_WITH_CROP) {
|
||||||
|
$next_width = $dest_width;
|
||||||
|
$next_height = intval($height_orig * $dest_width / $width_orig);
|
||||||
|
$delta_y = ($next_height - $dest_height) / 2;
|
||||||
|
}
|
||||||
|
else if ($resize_mode != self::EXACT_RATIO_WITH_BORDERS) {
|
||||||
|
$dest_width = $next_width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Image width > image height
|
||||||
|
$next_width = $dest_width;
|
||||||
|
$next_height = intval($height_orig * $dest_width / $width_orig);
|
||||||
|
|
||||||
|
if ($resize_mode == self::EXACT_RATIO_WITH_CROP) {
|
||||||
|
$next_height = $dest_height;
|
||||||
|
$next_width = intval(($width_orig * $next_height) / $height_orig);
|
||||||
|
$delta_x = ($next_width - $dest_width) / 2;
|
||||||
|
}
|
||||||
|
else if ($resize_mode != self::EXACT_RATIO_WITH_BORDERS) {
|
||||||
|
$dest_height = $next_height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$image->resize(new Box($next_width, $next_height));
|
||||||
|
|
||||||
|
// echo "w=$dest_width, h=$dest_height, nw=$next_width, nh=$next_height, dx=$delta_x, dy=$delta_y, bw=$border_width, bh=$border_height\n";
|
||||||
|
|
||||||
|
if ($resize_mode == self::EXACT_RATIO_WITH_BORDERS) {
|
||||||
|
|
||||||
|
$border_width = intval(($dest_width - $next_width) / 2);
|
||||||
|
$border_height = intval(($dest_height - $next_height) / 2);
|
||||||
|
|
||||||
|
$canvas = new Box($dest_width, $dest_height);
|
||||||
|
|
||||||
|
return $imagine->create($canvas, $bg_color)
|
||||||
|
->paste($image, new Point($border_width, $border_height));
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ($resize_mode == self::EXACT_RATIO_WITH_CROP) {
|
||||||
|
$image->crop(
|
||||||
|
new Point($delta_x, $delta_y),
|
||||||
|
new Box($dest_width, $dest_height)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $image;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the absolute URL to the cached image
|
||||||
|
*
|
||||||
|
* @param string $subdir the subdirectory related to cache base
|
||||||
|
* @param string $filename the safe filename, as returned by getCacheFilePath()
|
||||||
|
* @return string the absolute URL to the cached image
|
||||||
|
*/
|
||||||
|
protected function getCacheFileURL($subdir, $safe_filename)
|
||||||
|
{
|
||||||
|
$path = $this->getCachePathFromWebRoot($subdir);
|
||||||
|
|
||||||
|
return URL::absoluteUrl(sprintf("%s/%s", $path, $safe_filename));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the full path of the cached file
|
||||||
|
*
|
||||||
|
* @param string $subdir the subdirectory related to cache base
|
||||||
|
* @param string $filename the filename
|
||||||
|
* @return string the cache directory path relative to Web Root
|
||||||
|
*/
|
||||||
|
protected function getCacheFilePath($subdir, $filename, ImageEvent $event)
|
||||||
|
{
|
||||||
|
$path = $this->getCachePath($subdir);
|
||||||
|
|
||||||
|
$safe_filename = preg_replace("[^:alnum:\-\._]", "-", strtolower(basename($filename)));
|
||||||
|
|
||||||
|
// Keep original safe name if no tranformations are applied
|
||||||
|
if ($event->isOriginalImage())
|
||||||
|
return sprintf("%s/%s", $path, $safe_filename);
|
||||||
|
else
|
||||||
|
return sprintf("%s/%s-%s", $path, $event->getSignature(), $safe_filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the cache directory path relative to Web Root
|
||||||
|
*
|
||||||
|
* @param string $subdir the subdirectory related to cache base
|
||||||
|
* @return string the cache directory path relative to Web Root
|
||||||
|
*/
|
||||||
|
protected function getCachePathFromWebRoot($subdir)
|
||||||
|
{
|
||||||
|
$safe_subdir = basename($subdir);
|
||||||
|
|
||||||
|
$cache_dir_from_web_root = ConfigQuery::read('image_cache_dir_from_web_root', 'cache');
|
||||||
|
|
||||||
|
$path = sprintf("%s/%s", $cache_dir_from_web_root, $safe_subdir);
|
||||||
|
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the absolute cache directory path
|
||||||
|
*
|
||||||
|
* @param string $subdir the subdirectory related to cache base
|
||||||
|
* @throws \RuntimeException if cache directory cannot be created
|
||||||
|
* @return string the absolute cache directory path
|
||||||
|
*/
|
||||||
|
protected function getCachePath($subdir)
|
||||||
|
{
|
||||||
|
$cache_base = $this->getCachePathFromWebRoot($subdir);
|
||||||
|
|
||||||
|
$web_root = rtrim(THELIA_WEB_DIR, '/');
|
||||||
|
|
||||||
|
$path = sprintf("%s/%s", $web_root, $cache_base);
|
||||||
|
|
||||||
|
// Create directory (recursively) if it does not exists.
|
||||||
|
if (!is_dir($path)) {
|
||||||
|
if (!@mkdir($path, 0777, true)) {
|
||||||
|
$error_message = sprintf("Failed to create %s/%s image cache directory", $cache_base);
|
||||||
|
Tlog::getInstance()->addError($error_message);
|
||||||
|
|
||||||
|
throw new ImageException($error_message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new Imagine object using current driver configuration
|
||||||
|
*
|
||||||
|
* @return \Imagine\ImagineInterface
|
||||||
|
*/
|
||||||
|
protected function createImagineInstance()
|
||||||
|
{
|
||||||
|
$driver = ConfigQuery::read("imagine_driver", "gd");
|
||||||
|
|
||||||
|
switch ($driver) {
|
||||||
|
case 'imagik':
|
||||||
|
$image = new \Imagine\Imagick\Imagine();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'gmagick':
|
||||||
|
$image = new \Imagine\Gmagick\Imagine();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'gd':
|
||||||
|
default:
|
||||||
|
$image = new \Imagine\Gd\Imagine();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $image;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getSubscribedEvents()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
TheliaEvents::IMAGE_PROCESS => array(
|
||||||
|
"processImage", 128
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
237
core/lib/Thelia/Core/Event/ImageEvent.php
Normal file
@@ -0,0 +1,237 @@
|
|||||||
|
<?php
|
||||||
|
/*************************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* Thelia */
|
||||||
|
/* */
|
||||||
|
/* Copyright (c) OpenStudio */
|
||||||
|
/* email : info@thelia.net */
|
||||||
|
/* web : http://www.thelia.net */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU General Public License as published by */
|
||||||
|
/* the Free Software Foundation; either version 3 of the License */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public License */
|
||||||
|
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
/* */
|
||||||
|
/*************************************************************************************/
|
||||||
|
|
||||||
|
namespace Thelia\Core\Event;
|
||||||
|
use Thelia\Core\HttpFoundation\Request;
|
||||||
|
use Thelia\Model\Cart;
|
||||||
|
|
||||||
|
class ImageEvent extends ActionEvent
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string The complete file name (with path) of the source image
|
||||||
|
*/
|
||||||
|
protected $source_filepath = null;
|
||||||
|
/**
|
||||||
|
* @var string The target subdirectory in the image cache
|
||||||
|
*/
|
||||||
|
protected $cache_subdirectory = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string The absolute URL of the cached image (in the web space)
|
||||||
|
*/
|
||||||
|
protected $file_url = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string The absolute path of the cached image file
|
||||||
|
*/
|
||||||
|
protected $cache_filepath = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string The image category (i.e. the subdirectory in image cache)
|
||||||
|
*/
|
||||||
|
protected $category = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var integer the required image width
|
||||||
|
*/
|
||||||
|
protected $width = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int the required image height
|
||||||
|
*/
|
||||||
|
protected $height = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string the resize mode, either crop, bands, none
|
||||||
|
*/
|
||||||
|
protected $resize_mode = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string the background color in RGB format (eg. #ff8000)
|
||||||
|
*/
|
||||||
|
protected $background_color = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array a list of effects (grayscale, negative, mirror...), applied in the specified order.
|
||||||
|
*/
|
||||||
|
protected $effects = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int the rotation angle in degrees, none if zero or null
|
||||||
|
*/
|
||||||
|
protected $rotation = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int the quality of the result image, from 0 (!) to 100
|
||||||
|
*/
|
||||||
|
protected $quality = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return boolean true if the required image is the original image
|
||||||
|
*/
|
||||||
|
public function isOriginalImage() {
|
||||||
|
return
|
||||||
|
empty($this->width)
|
||||||
|
&& empty($this->height)
|
||||||
|
&& empty($this->resize_mode)
|
||||||
|
&& empty($this->background_color)
|
||||||
|
&& empty($this->effects)
|
||||||
|
&& empty($this->rotation)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string a hash identifiying the processing options
|
||||||
|
*/
|
||||||
|
public function getSignature() {
|
||||||
|
return md5(
|
||||||
|
$this->width
|
||||||
|
. $this->height
|
||||||
|
. $this->resize_mode
|
||||||
|
. $this->background_color
|
||||||
|
. implode(',', $this->effects)
|
||||||
|
. $this->rotation
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCategory()
|
||||||
|
{
|
||||||
|
return $this->category;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCategory($category)
|
||||||
|
{
|
||||||
|
$this->category = $category;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getWidth()
|
||||||
|
{
|
||||||
|
return $this->width;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setWidth($width)
|
||||||
|
{
|
||||||
|
$this->width = $width;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHeight()
|
||||||
|
{
|
||||||
|
return $this->height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setHeight($height)
|
||||||
|
{
|
||||||
|
$this->height = $height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getResizeMode()
|
||||||
|
{
|
||||||
|
return $this->resize_mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setResizeMode($resize_mode)
|
||||||
|
{
|
||||||
|
$this->resize_mode = $resize_mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBackgroundColor()
|
||||||
|
{
|
||||||
|
return $this->background_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBackgroundColor($background_color)
|
||||||
|
{
|
||||||
|
$this->background_color = $background_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getEffects()
|
||||||
|
{
|
||||||
|
return $this->effects;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setEffects(array $effects)
|
||||||
|
{
|
||||||
|
$this->effects = $effects;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRotation()
|
||||||
|
{
|
||||||
|
return $this->rotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setRotation($rotation)
|
||||||
|
{
|
||||||
|
$this->rotation = $rotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFileUrl()
|
||||||
|
{
|
||||||
|
return $this->file_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setFileUrl($file_url)
|
||||||
|
{
|
||||||
|
$this->file_url = $file_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCacheFilepath()
|
||||||
|
{
|
||||||
|
return $this->cache_filepath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCacheFilepath($cache_filepath)
|
||||||
|
{
|
||||||
|
$this->cache_filepath = $cache_filepath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSourceFilepath()
|
||||||
|
{
|
||||||
|
return $this->source_filepath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSourceFilepath($source_filepath)
|
||||||
|
{
|
||||||
|
$this->source_filepath = $source_filepath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCacheSubdirectory()
|
||||||
|
{
|
||||||
|
return $this->cache_subdirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCacheSubdirectory($cache_subdirectory)
|
||||||
|
{
|
||||||
|
$this->cache_subdirectory = $cache_subdirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getQuality()
|
||||||
|
{
|
||||||
|
return $this->quality;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setQuality($quality)
|
||||||
|
{
|
||||||
|
$this->quality = $quality;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
263
core/lib/Thelia/Core/Template/Loop/Image.php
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
<?php
|
||||||
|
/*************************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* Thelia */
|
||||||
|
/* */
|
||||||
|
/* Copyright (c) OpenStudio */
|
||||||
|
/* email : info@thelia.net */
|
||||||
|
/* web : http://www.thelia.net */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU General Public License as published by */
|
||||||
|
/* the Free Software Foundation; either version 3 of the License */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public License */
|
||||||
|
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
/* */
|
||||||
|
/*************************************************************************************/
|
||||||
|
|
||||||
|
namespace Thelia\Core\Template\Loop;
|
||||||
|
use Thelia\Core\Template\Element\BaseLoop;
|
||||||
|
use Thelia\Core\Template\Loop\Argument\Argument;
|
||||||
|
use Thelia\Core\Event\ImageEvent;
|
||||||
|
use Thelia\Model\CategoryImageQuery;
|
||||||
|
use Thelia\Model\ProductImageQuery;
|
||||||
|
use Thelia\Core\Event\TheliaEvents;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The image loop
|
||||||
|
*
|
||||||
|
* @author Franck Allimant <franck@cqfdev.fr>
|
||||||
|
*/
|
||||||
|
class Image extends BaseLoop
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array Possible image sources
|
||||||
|
*/
|
||||||
|
protected $possible_sources = array('category', 'product', 'folder', 'content');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dynamically create the search query, and set the proper filter and order
|
||||||
|
*
|
||||||
|
* @return ModelCriteria the propel Query object
|
||||||
|
*/
|
||||||
|
protected function getSearchQuery() {
|
||||||
|
|
||||||
|
$search = null;
|
||||||
|
|
||||||
|
foreach($this->possible_sources as $source) {
|
||||||
|
|
||||||
|
$argValue = intval($this->getArgValue($source));
|
||||||
|
|
||||||
|
if ($argValue > 0) {
|
||||||
|
|
||||||
|
$object = ucfirst($source);
|
||||||
|
|
||||||
|
$queryClass = sprintf("%sImageQuery", $object);
|
||||||
|
$filterMethod = sprintf("filterBy%s", $object);
|
||||||
|
$mapClass = sprintf("\Thelia\Model\Map\%sI18nTableMap", $object);
|
||||||
|
|
||||||
|
// xxxImageQuery::create()
|
||||||
|
$method = new \ReflectionMethod($queryClass, 'create');
|
||||||
|
$search = $reflectionMethod->invoke(null); // Static !
|
||||||
|
|
||||||
|
// $query->filterByXXX($id)
|
||||||
|
$method = new \ReflectionMethod($queryClass, $filterMethod);
|
||||||
|
$method->invoke($search, $argValue);
|
||||||
|
|
||||||
|
$map = new \ReflectionClass($mapClass);
|
||||||
|
$title_map = $map->getConstant('TITLE');
|
||||||
|
|
||||||
|
$orders = $this->getOrder();
|
||||||
|
|
||||||
|
// Results ordering
|
||||||
|
foreach ($orders as $order) {
|
||||||
|
switch ($order) {
|
||||||
|
case "alpha":
|
||||||
|
$search->addAscendingOrderByColumn($title_map);
|
||||||
|
break;
|
||||||
|
case "alpha-reverse":
|
||||||
|
$search->addDescendingOrderByColumn($title_map);
|
||||||
|
break;
|
||||||
|
case "manual-reverse":
|
||||||
|
$search->orderByPosition(Criteria::DESC);
|
||||||
|
break;
|
||||||
|
case "manual":
|
||||||
|
$search->orderByPosition(Criteria::ASC);
|
||||||
|
break;
|
||||||
|
case "random":
|
||||||
|
$search->clearOrderByColumns();
|
||||||
|
$search->addAscendingOrderByColumn('RAND()');
|
||||||
|
break(2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($search == null)
|
||||||
|
throw new \InvalidArgumentException(sprintf("Unable to find image source. Valid sources are %s", implode(',', $this->possible_sources)));
|
||||||
|
|
||||||
|
return $search;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param unknown $pagination
|
||||||
|
*/
|
||||||
|
public function exec($pagination)
|
||||||
|
{
|
||||||
|
// Select the proper query to use
|
||||||
|
$search = $this->getSearchQuery();
|
||||||
|
|
||||||
|
$id = $this->getId();
|
||||||
|
|
||||||
|
if (! is_null($id)) {
|
||||||
|
$search->filterById($id, Criteria::IN);
|
||||||
|
}
|
||||||
|
|
||||||
|
$exclude = $this->getExclude();
|
||||||
|
if (!is_null($exclude))
|
||||||
|
$search->filterById($exclude, Criteria::NOT_IN);
|
||||||
|
|
||||||
|
// Create image processing event
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
// Prepare tranformations
|
||||||
|
// Setup required transformations
|
||||||
|
$width = $this->getWidth();
|
||||||
|
$height = $this->getHeight();
|
||||||
|
$resize_mode = $this->getResizeMode();
|
||||||
|
$rotation = $this->getRotation();
|
||||||
|
$background_color = $this->getBackgroundColor();
|
||||||
|
$quality = $this->getQuality();
|
||||||
|
$effects = $this->getEffects();
|
||||||
|
$effects = $this->getEffects();
|
||||||
|
if (! is_null($effects)) {
|
||||||
|
$effects = explode(',', $effects);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \Criteria::INNER_JOIN in second parameter for joinWithI18n exclude query without translation.
|
||||||
|
*
|
||||||
|
* @todo : verify here if we want results for row without translations.
|
||||||
|
*/
|
||||||
|
|
||||||
|
$search->joinWithI18n(
|
||||||
|
$this->request->getSession()->getLocale(),
|
||||||
|
(ConfigQuery::read("default_lang_without_translation", 1)) ? Criteria::LEFT_JOIN : Criteria::INNER_JOIN
|
||||||
|
);
|
||||||
|
|
||||||
|
$results = $this->search($search, $pagination);
|
||||||
|
|
||||||
|
$loopResult = new LoopResult();
|
||||||
|
|
||||||
|
foreach ($results as $result) {
|
||||||
|
|
||||||
|
// Create image processing event
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
// Setup required transformations
|
||||||
|
if (! is_null($width)) $event->setWidth($width);
|
||||||
|
if (! is_null($height)) $event->setHeigth($height);
|
||||||
|
if (! is_null($resize_mode)) $event->setResizeMode($resize_mode);
|
||||||
|
if (! is_null($rotation)) $event->setRotation($rotation);
|
||||||
|
if (! is_null($background_color)) $event->setBackgroundColor($background_color);
|
||||||
|
if (! is_null($quality)) $event->setQuality($quality);
|
||||||
|
if (! is_null($effects)) $event->setEffects($effects);
|
||||||
|
|
||||||
|
// Dispatch image processing event
|
||||||
|
$this->dispatcher->dispatch(TheliaEvents::IMAGE_PROCESS, $event);
|
||||||
|
|
||||||
|
$loopResultRow = new LoopResultRow();
|
||||||
|
|
||||||
|
$loopResultRow
|
||||||
|
->set("ID", $result->getId())
|
||||||
|
->set("IMAGE_URL", $event->getFileUrl())
|
||||||
|
->set("FILE_URL", $event->
|
||||||
|
;
|
||||||
|
|
||||||
|
$loopResult->addRow($loopResultRow);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $loopResult;
|
||||||
|
/*
|
||||||
|
#PRODUIT : identifiant du produit associé (valué si le paramètre "produit" a été indiqué)
|
||||||
|
#PRODTITRE : titre du produit associé (valué si le paramètre "produit" a été indiqué)
|
||||||
|
#PRODREF : référence du produit associé (valué si le paramètre "produit" a été indiqué)
|
||||||
|
#RUBRIQUE : identifiant de la rubrique associée (valué si le paramètre "rubrique" a été indiqué)
|
||||||
|
#RUBTITRE : titre de la rubrique associée (valué si le paramètre "rubrique" a été indiqué)
|
||||||
|
#DOSSIER : identifiant du dossier associée (valué si le paramètre "dossier" a été indiqué)
|
||||||
|
#DOSTITRE : titre du dossier associée (valué si le paramètre "dossier" a été indiqué)
|
||||||
|
#CONTENU : identifiant du contenu associée (valué si le paramètre "contenu" a été indiqué)
|
||||||
|
#CONTTITRE : titre du contenu associée (valué si le paramètre "contenu" a été indiqué)
|
||||||
|
#IMAGE : URL de l'image transformée (redimensionnée, inversée, etc. suivant les paramètres d'entrée de la boucle).
|
||||||
|
#FICHIER : URL de l'image originale
|
||||||
|
#ID : identifiant de l'image
|
||||||
|
#TITRE : titre de l'image
|
||||||
|
#CHAPO : description courte de l'image
|
||||||
|
#DESCRIPTION : description longue de l'image
|
||||||
|
#COMPT : compteur débutant à 1. Utile pour l'utilisation de Javascript.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Thelia\Core\Template\Loop\Argument\ArgumentCollection
|
||||||
|
*/
|
||||||
|
protected function getArgDefinitions()
|
||||||
|
{
|
||||||
|
$collection = new ArgumentCollection(
|
||||||
|
|
||||||
|
Argument::createIntListTypeArgument('id'),
|
||||||
|
Argument::createIntListTypeArgument('exclude'),
|
||||||
|
new Argument(
|
||||||
|
'order',
|
||||||
|
new TypeCollection(
|
||||||
|
new Type\EnumListType(array('alpha', 'alpha-reverse', 'manual', 'manual-reverse', 'random'))
|
||||||
|
),
|
||||||
|
'manual'
|
||||||
|
),
|
||||||
|
|
||||||
|
Argument::createIntTypeArgument('width'),
|
||||||
|
Argument::createIntTypeArgument('height'),
|
||||||
|
Argument::createIntTypeArgument('rotation', 0),
|
||||||
|
Argument::createAnyTypeArgument('background_color'),
|
||||||
|
Argument::createIntTypeArgument('quality'),
|
||||||
|
new Argument(
|
||||||
|
'resize_mode',
|
||||||
|
new TypeCollection(
|
||||||
|
new Type\EnumListType(array('crop', 'borders', 'none'))
|
||||||
|
),
|
||||||
|
'none'
|
||||||
|
),
|
||||||
|
Argument::createAnyTypeArgument('effects'),
|
||||||
|
|
||||||
|
Argument::createIntTypeArgument('category'),
|
||||||
|
Argument::createIntTypeArgument('product'),
|
||||||
|
Argument::createIntTypeArgument('folder'),
|
||||||
|
Argument::createIntTypeArgument('content'),
|
||||||
|
|
||||||
|
new Argument(
|
||||||
|
'source',
|
||||||
|
new TypeCollection(
|
||||||
|
new Type\EnumListType($this->possible_sources)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
|
||||||
|
Argument::createIntListTypeArgument('lang')
|
||||||
|
);
|
||||||
|
|
||||||
|
// Add possible image sources
|
||||||
|
foreach($possible_sources as $source) {
|
||||||
|
$collection->addArgument(Argument::createIntTypeArgument($source))
|
||||||
|
}
|
||||||
|
|
||||||
|
return $collection;
|
||||||
|
}
|
||||||
|
}
|
||||||
28
core/lib/Thelia/Exception/ImageException.php
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
/*************************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* Thelia */
|
||||||
|
/* */
|
||||||
|
/* Copyright (c) OpenStudio */
|
||||||
|
/* email : info@thelia.net */
|
||||||
|
/* web : http://www.thelia.net */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU General Public License as published by */
|
||||||
|
/* the Free Software Foundation; either version 3 of the License */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public License */
|
||||||
|
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
/* */
|
||||||
|
/*************************************************************************************/
|
||||||
|
|
||||||
|
namespace Thelia\Exception;
|
||||||
|
|
||||||
|
class ImageException extends \RuntimeException
|
||||||
|
{
|
||||||
|
}
|
||||||
1990
core/lib/Thelia/Model/Base/ProductImage.php
Normal file
1439
core/lib/Thelia/Model/Base/ProductImageI18n.php
Normal file
607
core/lib/Thelia/Model/Base/ProductImageI18nQuery.php
Normal file
@@ -0,0 +1,607 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Thelia\Model\Base;
|
||||||
|
|
||||||
|
use \Exception;
|
||||||
|
use \PDO;
|
||||||
|
use Propel\Runtime\Propel;
|
||||||
|
use Propel\Runtime\ActiveQuery\Criteria;
|
||||||
|
use Propel\Runtime\ActiveQuery\ModelCriteria;
|
||||||
|
use Propel\Runtime\ActiveQuery\ModelJoin;
|
||||||
|
use Propel\Runtime\Collection\Collection;
|
||||||
|
use Propel\Runtime\Collection\ObjectCollection;
|
||||||
|
use Propel\Runtime\Connection\ConnectionInterface;
|
||||||
|
use Propel\Runtime\Exception\PropelException;
|
||||||
|
use Thelia\Model\ProductImageI18n as ChildProductImageI18n;
|
||||||
|
use Thelia\Model\ProductImageI18nQuery as ChildProductImageI18nQuery;
|
||||||
|
use Thelia\Model\Map\ProductImageI18nTableMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class that represents a query for the 'product_image_i18n' table.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @method ChildProductImageI18nQuery orderById($order = Criteria::ASC) Order by the id column
|
||||||
|
* @method ChildProductImageI18nQuery orderByLocale($order = Criteria::ASC) Order by the locale column
|
||||||
|
* @method ChildProductImageI18nQuery orderByTitle($order = Criteria::ASC) Order by the title column
|
||||||
|
* @method ChildProductImageI18nQuery orderByDescription($order = Criteria::ASC) Order by the description column
|
||||||
|
* @method ChildProductImageI18nQuery orderByChapo($order = Criteria::ASC) Order by the chapo column
|
||||||
|
* @method ChildProductImageI18nQuery orderByPostscriptum($order = Criteria::ASC) Order by the postscriptum column
|
||||||
|
*
|
||||||
|
* @method ChildProductImageI18nQuery groupById() Group by the id column
|
||||||
|
* @method ChildProductImageI18nQuery groupByLocale() Group by the locale column
|
||||||
|
* @method ChildProductImageI18nQuery groupByTitle() Group by the title column
|
||||||
|
* @method ChildProductImageI18nQuery groupByDescription() Group by the description column
|
||||||
|
* @method ChildProductImageI18nQuery groupByChapo() Group by the chapo column
|
||||||
|
* @method ChildProductImageI18nQuery groupByPostscriptum() Group by the postscriptum column
|
||||||
|
*
|
||||||
|
* @method ChildProductImageI18nQuery leftJoin($relation) Adds a LEFT JOIN clause to the query
|
||||||
|
* @method ChildProductImageI18nQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query
|
||||||
|
* @method ChildProductImageI18nQuery innerJoin($relation) Adds a INNER JOIN clause to the query
|
||||||
|
*
|
||||||
|
* @method ChildProductImageI18nQuery leftJoinProductImage($relationAlias = null) Adds a LEFT JOIN clause to the query using the ProductImage relation
|
||||||
|
* @method ChildProductImageI18nQuery rightJoinProductImage($relationAlias = null) Adds a RIGHT JOIN clause to the query using the ProductImage relation
|
||||||
|
* @method ChildProductImageI18nQuery innerJoinProductImage($relationAlias = null) Adds a INNER JOIN clause to the query using the ProductImage relation
|
||||||
|
*
|
||||||
|
* @method ChildProductImageI18n findOne(ConnectionInterface $con = null) Return the first ChildProductImageI18n matching the query
|
||||||
|
* @method ChildProductImageI18n findOneOrCreate(ConnectionInterface $con = null) Return the first ChildProductImageI18n matching the query, or a new ChildProductImageI18n object populated from the query conditions when no match is found
|
||||||
|
*
|
||||||
|
* @method ChildProductImageI18n findOneById(int $id) Return the first ChildProductImageI18n filtered by the id column
|
||||||
|
* @method ChildProductImageI18n findOneByLocale(string $locale) Return the first ChildProductImageI18n filtered by the locale column
|
||||||
|
* @method ChildProductImageI18n findOneByTitle(string $title) Return the first ChildProductImageI18n filtered by the title column
|
||||||
|
* @method ChildProductImageI18n findOneByDescription(string $description) Return the first ChildProductImageI18n filtered by the description column
|
||||||
|
* @method ChildProductImageI18n findOneByChapo(string $chapo) Return the first ChildProductImageI18n filtered by the chapo column
|
||||||
|
* @method ChildProductImageI18n findOneByPostscriptum(string $postscriptum) Return the first ChildProductImageI18n filtered by the postscriptum column
|
||||||
|
*
|
||||||
|
* @method array findById(int $id) Return ChildProductImageI18n objects filtered by the id column
|
||||||
|
* @method array findByLocale(string $locale) Return ChildProductImageI18n objects filtered by the locale column
|
||||||
|
* @method array findByTitle(string $title) Return ChildProductImageI18n objects filtered by the title column
|
||||||
|
* @method array findByDescription(string $description) Return ChildProductImageI18n objects filtered by the description column
|
||||||
|
* @method array findByChapo(string $chapo) Return ChildProductImageI18n objects filtered by the chapo column
|
||||||
|
* @method array findByPostscriptum(string $postscriptum) Return ChildProductImageI18n objects filtered by the postscriptum column
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract class ProductImageI18nQuery extends ModelCriteria
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes internal state of \Thelia\Model\Base\ProductImageI18nQuery object.
|
||||||
|
*
|
||||||
|
* @param string $dbName The database name
|
||||||
|
* @param string $modelName The phpName of a model, e.g. 'Book'
|
||||||
|
* @param string $modelAlias The alias for the model in this query, e.g. 'b'
|
||||||
|
*/
|
||||||
|
public function __construct($dbName = 'thelia', $modelName = '\\Thelia\\Model\\ProductImageI18n', $modelAlias = null)
|
||||||
|
{
|
||||||
|
parent::__construct($dbName, $modelName, $modelAlias);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a new ChildProductImageI18nQuery object.
|
||||||
|
*
|
||||||
|
* @param string $modelAlias The alias of a model in the query
|
||||||
|
* @param Criteria $criteria Optional Criteria to build the query from
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery
|
||||||
|
*/
|
||||||
|
public static function create($modelAlias = null, $criteria = null)
|
||||||
|
{
|
||||||
|
if ($criteria instanceof \Thelia\Model\ProductImageI18nQuery) {
|
||||||
|
return $criteria;
|
||||||
|
}
|
||||||
|
$query = new \Thelia\Model\ProductImageI18nQuery();
|
||||||
|
if (null !== $modelAlias) {
|
||||||
|
$query->setModelAlias($modelAlias);
|
||||||
|
}
|
||||||
|
if ($criteria instanceof Criteria) {
|
||||||
|
$query->mergeWith($criteria);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find object by primary key.
|
||||||
|
* Propel uses the instance pool to skip the database if the object exists.
|
||||||
|
* Go fast if the query is untouched.
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* $obj = $c->findPk(array(12, 34), $con);
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param array[$id, $locale] $key Primary key to use for the query
|
||||||
|
* @param ConnectionInterface $con an optional connection object
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18n|array|mixed the result, formatted by the current formatter
|
||||||
|
*/
|
||||||
|
public function findPk($key, $con = null)
|
||||||
|
{
|
||||||
|
if ($key === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ((null !== ($obj = ProductImageI18nTableMap::getInstanceFromPool(serialize(array((string) $key[0], (string) $key[1]))))) && !$this->formatter) {
|
||||||
|
// the object is already in the instance pool
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
if ($con === null) {
|
||||||
|
$con = Propel::getServiceContainer()->getReadConnection(ProductImageI18nTableMap::DATABASE_NAME);
|
||||||
|
}
|
||||||
|
$this->basePreSelect($con);
|
||||||
|
if ($this->formatter || $this->modelAlias || $this->with || $this->select
|
||||||
|
|| $this->selectColumns || $this->asColumns || $this->selectModifiers
|
||||||
|
|| $this->map || $this->having || $this->joins) {
|
||||||
|
return $this->findPkComplex($key, $con);
|
||||||
|
} else {
|
||||||
|
return $this->findPkSimple($key, $con);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find object by primary key using raw SQL to go fast.
|
||||||
|
* Bypass doSelect() and the object formatter by using generated code.
|
||||||
|
*
|
||||||
|
* @param mixed $key Primary key to use for the query
|
||||||
|
* @param ConnectionInterface $con A connection object
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18n A model object, or null if the key is not found
|
||||||
|
*/
|
||||||
|
protected function findPkSimple($key, $con)
|
||||||
|
{
|
||||||
|
$sql = 'SELECT ID, LOCALE, TITLE, DESCRIPTION, CHAPO, POSTSCRIPTUM FROM product_image_i18n WHERE ID = :p0 AND LOCALE = :p1';
|
||||||
|
try {
|
||||||
|
$stmt = $con->prepare($sql);
|
||||||
|
$stmt->bindValue(':p0', $key[0], PDO::PARAM_INT);
|
||||||
|
$stmt->bindValue(':p1', $key[1], PDO::PARAM_STR);
|
||||||
|
$stmt->execute();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
Propel::log($e->getMessage(), Propel::LOG_ERR);
|
||||||
|
throw new PropelException(sprintf('Unable to execute SELECT statement [%s]', $sql), 0, $e);
|
||||||
|
}
|
||||||
|
$obj = null;
|
||||||
|
if ($row = $stmt->fetch(\PDO::FETCH_NUM)) {
|
||||||
|
$obj = new ChildProductImageI18n();
|
||||||
|
$obj->hydrate($row);
|
||||||
|
ProductImageI18nTableMap::addInstanceToPool($obj, serialize(array((string) $key[0], (string) $key[1])));
|
||||||
|
}
|
||||||
|
$stmt->closeCursor();
|
||||||
|
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find object by primary key.
|
||||||
|
*
|
||||||
|
* @param mixed $key Primary key to use for the query
|
||||||
|
* @param ConnectionInterface $con A connection object
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18n|array|mixed the result, formatted by the current formatter
|
||||||
|
*/
|
||||||
|
protected function findPkComplex($key, $con)
|
||||||
|
{
|
||||||
|
// As the query uses a PK condition, no limit(1) is necessary.
|
||||||
|
$criteria = $this->isKeepQuery() ? clone $this : $this;
|
||||||
|
$dataFetcher = $criteria
|
||||||
|
->filterByPrimaryKey($key)
|
||||||
|
->doSelect($con);
|
||||||
|
|
||||||
|
return $criteria->getFormatter()->init($criteria)->formatOne($dataFetcher);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find objects by primary key
|
||||||
|
* <code>
|
||||||
|
* $objs = $c->findPks(array(array(12, 56), array(832, 123), array(123, 456)), $con);
|
||||||
|
* </code>
|
||||||
|
* @param array $keys Primary keys to use for the query
|
||||||
|
* @param ConnectionInterface $con an optional connection object
|
||||||
|
*
|
||||||
|
* @return ObjectCollection|array|mixed the list of results, formatted by the current formatter
|
||||||
|
*/
|
||||||
|
public function findPks($keys, $con = null)
|
||||||
|
{
|
||||||
|
if (null === $con) {
|
||||||
|
$con = Propel::getServiceContainer()->getReadConnection($this->getDbName());
|
||||||
|
}
|
||||||
|
$this->basePreSelect($con);
|
||||||
|
$criteria = $this->isKeepQuery() ? clone $this : $this;
|
||||||
|
$dataFetcher = $criteria
|
||||||
|
->filterByPrimaryKeys($keys)
|
||||||
|
->doSelect($con);
|
||||||
|
|
||||||
|
return $criteria->getFormatter()->init($criteria)->format($dataFetcher);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query by primary key
|
||||||
|
*
|
||||||
|
* @param mixed $key Primary key to use for the query
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByPrimaryKey($key)
|
||||||
|
{
|
||||||
|
$this->addUsingAlias(ProductImageI18nTableMap::ID, $key[0], Criteria::EQUAL);
|
||||||
|
$this->addUsingAlias(ProductImageI18nTableMap::LOCALE, $key[1], Criteria::EQUAL);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query by a list of primary keys
|
||||||
|
*
|
||||||
|
* @param array $keys The list of primary key to use for the query
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByPrimaryKeys($keys)
|
||||||
|
{
|
||||||
|
if (empty($keys)) {
|
||||||
|
return $this->add(null, '1<>1', Criteria::CUSTOM);
|
||||||
|
}
|
||||||
|
foreach ($keys as $key) {
|
||||||
|
$cton0 = $this->getNewCriterion(ProductImageI18nTableMap::ID, $key[0], Criteria::EQUAL);
|
||||||
|
$cton1 = $this->getNewCriterion(ProductImageI18nTableMap::LOCALE, $key[1], Criteria::EQUAL);
|
||||||
|
$cton0->addAnd($cton1);
|
||||||
|
$this->addOr($cton0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query on the id column
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* <code>
|
||||||
|
* $query->filterById(1234); // WHERE id = 1234
|
||||||
|
* $query->filterById(array(12, 34)); // WHERE id IN (12, 34)
|
||||||
|
* $query->filterById(array('min' => 12)); // WHERE id > 12
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @see filterByProductImage()
|
||||||
|
*
|
||||||
|
* @param mixed $id The value to use as filter.
|
||||||
|
* Use scalar values for equality.
|
||||||
|
* Use array values for in_array() equivalent.
|
||||||
|
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterById($id = null, $comparison = null)
|
||||||
|
{
|
||||||
|
if (is_array($id)) {
|
||||||
|
$useMinMax = false;
|
||||||
|
if (isset($id['min'])) {
|
||||||
|
$this->addUsingAlias(ProductImageI18nTableMap::ID, $id['min'], Criteria::GREATER_EQUAL);
|
||||||
|
$useMinMax = true;
|
||||||
|
}
|
||||||
|
if (isset($id['max'])) {
|
||||||
|
$this->addUsingAlias(ProductImageI18nTableMap::ID, $id['max'], Criteria::LESS_EQUAL);
|
||||||
|
$useMinMax = true;
|
||||||
|
}
|
||||||
|
if ($useMinMax) {
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
if (null === $comparison) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageI18nTableMap::ID, $id, $comparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query on the locale column
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* <code>
|
||||||
|
* $query->filterByLocale('fooValue'); // WHERE locale = 'fooValue'
|
||||||
|
* $query->filterByLocale('%fooValue%'); // WHERE locale LIKE '%fooValue%'
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param string $locale The value to use as filter.
|
||||||
|
* Accepts wildcards (* and % trigger a LIKE)
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByLocale($locale = null, $comparison = null)
|
||||||
|
{
|
||||||
|
if (null === $comparison) {
|
||||||
|
if (is_array($locale)) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
} elseif (preg_match('/[\%\*]/', $locale)) {
|
||||||
|
$locale = str_replace('*', '%', $locale);
|
||||||
|
$comparison = Criteria::LIKE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageI18nTableMap::LOCALE, $locale, $comparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query on the title column
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* <code>
|
||||||
|
* $query->filterByTitle('fooValue'); // WHERE title = 'fooValue'
|
||||||
|
* $query->filterByTitle('%fooValue%'); // WHERE title LIKE '%fooValue%'
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param string $title The value to use as filter.
|
||||||
|
* Accepts wildcards (* and % trigger a LIKE)
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByTitle($title = null, $comparison = null)
|
||||||
|
{
|
||||||
|
if (null === $comparison) {
|
||||||
|
if (is_array($title)) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
} elseif (preg_match('/[\%\*]/', $title)) {
|
||||||
|
$title = str_replace('*', '%', $title);
|
||||||
|
$comparison = Criteria::LIKE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageI18nTableMap::TITLE, $title, $comparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query on the description column
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* <code>
|
||||||
|
* $query->filterByDescription('fooValue'); // WHERE description = 'fooValue'
|
||||||
|
* $query->filterByDescription('%fooValue%'); // WHERE description LIKE '%fooValue%'
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param string $description The value to use as filter.
|
||||||
|
* Accepts wildcards (* and % trigger a LIKE)
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByDescription($description = null, $comparison = null)
|
||||||
|
{
|
||||||
|
if (null === $comparison) {
|
||||||
|
if (is_array($description)) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
} elseif (preg_match('/[\%\*]/', $description)) {
|
||||||
|
$description = str_replace('*', '%', $description);
|
||||||
|
$comparison = Criteria::LIKE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageI18nTableMap::DESCRIPTION, $description, $comparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query on the chapo column
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* <code>
|
||||||
|
* $query->filterByChapo('fooValue'); // WHERE chapo = 'fooValue'
|
||||||
|
* $query->filterByChapo('%fooValue%'); // WHERE chapo LIKE '%fooValue%'
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param string $chapo The value to use as filter.
|
||||||
|
* Accepts wildcards (* and % trigger a LIKE)
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByChapo($chapo = null, $comparison = null)
|
||||||
|
{
|
||||||
|
if (null === $comparison) {
|
||||||
|
if (is_array($chapo)) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
} elseif (preg_match('/[\%\*]/', $chapo)) {
|
||||||
|
$chapo = str_replace('*', '%', $chapo);
|
||||||
|
$comparison = Criteria::LIKE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageI18nTableMap::CHAPO, $chapo, $comparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query on the postscriptum column
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* <code>
|
||||||
|
* $query->filterByPostscriptum('fooValue'); // WHERE postscriptum = 'fooValue'
|
||||||
|
* $query->filterByPostscriptum('%fooValue%'); // WHERE postscriptum LIKE '%fooValue%'
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param string $postscriptum The value to use as filter.
|
||||||
|
* Accepts wildcards (* and % trigger a LIKE)
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByPostscriptum($postscriptum = null, $comparison = null)
|
||||||
|
{
|
||||||
|
if (null === $comparison) {
|
||||||
|
if (is_array($postscriptum)) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
} elseif (preg_match('/[\%\*]/', $postscriptum)) {
|
||||||
|
$postscriptum = str_replace('*', '%', $postscriptum);
|
||||||
|
$comparison = Criteria::LIKE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageI18nTableMap::POSTSCRIPTUM, $postscriptum, $comparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query by a related \Thelia\Model\ProductImage object
|
||||||
|
*
|
||||||
|
* @param \Thelia\Model\ProductImage|ObjectCollection $productImage The related object(s) to use as filter
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByProductImage($productImage, $comparison = null)
|
||||||
|
{
|
||||||
|
if ($productImage instanceof \Thelia\Model\ProductImage) {
|
||||||
|
return $this
|
||||||
|
->addUsingAlias(ProductImageI18nTableMap::ID, $productImage->getId(), $comparison);
|
||||||
|
} elseif ($productImage instanceof ObjectCollection) {
|
||||||
|
if (null === $comparison) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this
|
||||||
|
->addUsingAlias(ProductImageI18nTableMap::ID, $productImage->toKeyValue('PrimaryKey', 'Id'), $comparison);
|
||||||
|
} else {
|
||||||
|
throw new PropelException('filterByProductImage() only accepts arguments of type \Thelia\Model\ProductImage or Collection');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a JOIN clause to the query using the ProductImage relation
|
||||||
|
*
|
||||||
|
* @param string $relationAlias optional alias for the relation
|
||||||
|
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function joinProductImage($relationAlias = null, $joinType = 'LEFT JOIN')
|
||||||
|
{
|
||||||
|
$tableMap = $this->getTableMap();
|
||||||
|
$relationMap = $tableMap->getRelation('ProductImage');
|
||||||
|
|
||||||
|
// create a ModelJoin object for this join
|
||||||
|
$join = new ModelJoin();
|
||||||
|
$join->setJoinType($joinType);
|
||||||
|
$join->setRelationMap($relationMap, $this->useAliasInSQL ? $this->getModelAlias() : null, $relationAlias);
|
||||||
|
if ($previousJoin = $this->getPreviousJoin()) {
|
||||||
|
$join->setPreviousJoin($previousJoin);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add the ModelJoin to the current object
|
||||||
|
if ($relationAlias) {
|
||||||
|
$this->addAlias($relationAlias, $relationMap->getRightTable()->getName());
|
||||||
|
$this->addJoinObject($join, $relationAlias);
|
||||||
|
} else {
|
||||||
|
$this->addJoinObject($join, 'ProductImage');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use the ProductImage relation ProductImage object
|
||||||
|
*
|
||||||
|
* @see useQuery()
|
||||||
|
*
|
||||||
|
* @param string $relationAlias optional alias for the relation,
|
||||||
|
* to be used as main alias in the secondary query
|
||||||
|
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'
|
||||||
|
*
|
||||||
|
* @return \Thelia\Model\ProductImageQuery A secondary query class using the current class as primary query
|
||||||
|
*/
|
||||||
|
public function useProductImageQuery($relationAlias = null, $joinType = 'LEFT JOIN')
|
||||||
|
{
|
||||||
|
return $this
|
||||||
|
->joinProductImage($relationAlias, $joinType)
|
||||||
|
->useQuery($relationAlias ? $relationAlias : 'ProductImage', '\Thelia\Model\ProductImageQuery');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exclude object from result
|
||||||
|
*
|
||||||
|
* @param ChildProductImageI18n $productImageI18n Object to remove from the list of results
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function prune($productImageI18n = null)
|
||||||
|
{
|
||||||
|
if ($productImageI18n) {
|
||||||
|
$this->addCond('pruneCond0', $this->getAliasedColName(ProductImageI18nTableMap::ID), $productImageI18n->getId(), Criteria::NOT_EQUAL);
|
||||||
|
$this->addCond('pruneCond1', $this->getAliasedColName(ProductImageI18nTableMap::LOCALE), $productImageI18n->getLocale(), Criteria::NOT_EQUAL);
|
||||||
|
$this->combine(array('pruneCond0', 'pruneCond1'), Criteria::LOGICAL_OR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes all rows from the product_image_i18n table.
|
||||||
|
*
|
||||||
|
* @param ConnectionInterface $con the connection to use
|
||||||
|
* @return int The number of affected rows (if supported by underlying database driver).
|
||||||
|
*/
|
||||||
|
public function doDeleteAll(ConnectionInterface $con = null)
|
||||||
|
{
|
||||||
|
if (null === $con) {
|
||||||
|
$con = Propel::getServiceContainer()->getWriteConnection(ProductImageI18nTableMap::DATABASE_NAME);
|
||||||
|
}
|
||||||
|
$affectedRows = 0; // initialize var to track total num of affected rows
|
||||||
|
try {
|
||||||
|
// use transaction because $criteria could contain info
|
||||||
|
// for more than one table or we could emulating ON DELETE CASCADE, etc.
|
||||||
|
$con->beginTransaction();
|
||||||
|
$affectedRows += parent::doDeleteAll($con);
|
||||||
|
// Because this db requires some delete cascade/set null emulation, we have to
|
||||||
|
// clear the cached instance *after* the emulation has happened (since
|
||||||
|
// instances get re-added by the select statement contained therein).
|
||||||
|
ProductImageI18nTableMap::clearInstancePool();
|
||||||
|
ProductImageI18nTableMap::clearRelatedInstancePool();
|
||||||
|
|
||||||
|
$con->commit();
|
||||||
|
} catch (PropelException $e) {
|
||||||
|
$con->rollBack();
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $affectedRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a DELETE on the database, given a ChildProductImageI18n or Criteria object OR a primary key value.
|
||||||
|
*
|
||||||
|
* @param mixed $values Criteria or ChildProductImageI18n object or primary key or array of primary keys
|
||||||
|
* which is used to create the DELETE statement
|
||||||
|
* @param ConnectionInterface $con the connection to use
|
||||||
|
* @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows
|
||||||
|
* if supported by native driver or if emulated using Propel.
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
*/
|
||||||
|
public function delete(ConnectionInterface $con = null)
|
||||||
|
{
|
||||||
|
if (null === $con) {
|
||||||
|
$con = Propel::getServiceContainer()->getWriteConnection(ProductImageI18nTableMap::DATABASE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
$criteria = $this;
|
||||||
|
|
||||||
|
// Set the correct dbName
|
||||||
|
$criteria->setDbName(ProductImageI18nTableMap::DATABASE_NAME);
|
||||||
|
|
||||||
|
$affectedRows = 0; // initialize var to track total num of affected rows
|
||||||
|
|
||||||
|
try {
|
||||||
|
// use transaction because $criteria could contain info
|
||||||
|
// for more than one table or we could emulating ON DELETE CASCADE, etc.
|
||||||
|
$con->beginTransaction();
|
||||||
|
|
||||||
|
|
||||||
|
ProductImageI18nTableMap::removeInstanceFromPool($criteria);
|
||||||
|
|
||||||
|
$affectedRows += ModelCriteria::delete($con);
|
||||||
|
ProductImageI18nTableMap::clearRelatedInstancePool();
|
||||||
|
$con->commit();
|
||||||
|
|
||||||
|
return $affectedRows;
|
||||||
|
} catch (PropelException $e) {
|
||||||
|
$con->rollBack();
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // ProductImageI18nQuery
|
||||||
846
core/lib/Thelia/Model/Base/ProductImageQuery.php
Normal file
@@ -0,0 +1,846 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Thelia\Model\Base;
|
||||||
|
|
||||||
|
use \Exception;
|
||||||
|
use \PDO;
|
||||||
|
use Propel\Runtime\Propel;
|
||||||
|
use Propel\Runtime\ActiveQuery\Criteria;
|
||||||
|
use Propel\Runtime\ActiveQuery\ModelCriteria;
|
||||||
|
use Propel\Runtime\ActiveQuery\ModelJoin;
|
||||||
|
use Propel\Runtime\Collection\Collection;
|
||||||
|
use Propel\Runtime\Collection\ObjectCollection;
|
||||||
|
use Propel\Runtime\Connection\ConnectionInterface;
|
||||||
|
use Propel\Runtime\Exception\PropelException;
|
||||||
|
use Thelia\Model\ProductImage as ChildProductImage;
|
||||||
|
use Thelia\Model\ProductImageI18nQuery as ChildProductImageI18nQuery;
|
||||||
|
use Thelia\Model\ProductImageQuery as ChildProductImageQuery;
|
||||||
|
use Thelia\Model\Map\ProductImageTableMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class that represents a query for the 'product_image' table.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @method ChildProductImageQuery orderById($order = Criteria::ASC) Order by the id column
|
||||||
|
* @method ChildProductImageQuery orderByProductId($order = Criteria::ASC) Order by the product_id column
|
||||||
|
* @method ChildProductImageQuery orderByFile($order = Criteria::ASC) Order by the file column
|
||||||
|
* @method ChildProductImageQuery orderByPosition($order = Criteria::ASC) Order by the position column
|
||||||
|
* @method ChildProductImageQuery orderByCreatedAt($order = Criteria::ASC) Order by the created_at column
|
||||||
|
* @method ChildProductImageQuery orderByUpdatedAt($order = Criteria::ASC) Order by the updated_at column
|
||||||
|
*
|
||||||
|
* @method ChildProductImageQuery groupById() Group by the id column
|
||||||
|
* @method ChildProductImageQuery groupByProductId() Group by the product_id column
|
||||||
|
* @method ChildProductImageQuery groupByFile() Group by the file column
|
||||||
|
* @method ChildProductImageQuery groupByPosition() Group by the position column
|
||||||
|
* @method ChildProductImageQuery groupByCreatedAt() Group by the created_at column
|
||||||
|
* @method ChildProductImageQuery groupByUpdatedAt() Group by the updated_at column
|
||||||
|
*
|
||||||
|
* @method ChildProductImageQuery leftJoin($relation) Adds a LEFT JOIN clause to the query
|
||||||
|
* @method ChildProductImageQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query
|
||||||
|
* @method ChildProductImageQuery innerJoin($relation) Adds a INNER JOIN clause to the query
|
||||||
|
*
|
||||||
|
* @method ChildProductImageQuery leftJoinProduct($relationAlias = null) Adds a LEFT JOIN clause to the query using the Product relation
|
||||||
|
* @method ChildProductImageQuery rightJoinProduct($relationAlias = null) Adds a RIGHT JOIN clause to the query using the Product relation
|
||||||
|
* @method ChildProductImageQuery innerJoinProduct($relationAlias = null) Adds a INNER JOIN clause to the query using the Product relation
|
||||||
|
*
|
||||||
|
* @method ChildProductImageQuery leftJoinProductImageI18n($relationAlias = null) Adds a LEFT JOIN clause to the query using the ProductImageI18n relation
|
||||||
|
* @method ChildProductImageQuery rightJoinProductImageI18n($relationAlias = null) Adds a RIGHT JOIN clause to the query using the ProductImageI18n relation
|
||||||
|
* @method ChildProductImageQuery innerJoinProductImageI18n($relationAlias = null) Adds a INNER JOIN clause to the query using the ProductImageI18n relation
|
||||||
|
*
|
||||||
|
* @method ChildProductImage findOne(ConnectionInterface $con = null) Return the first ChildProductImage matching the query
|
||||||
|
* @method ChildProductImage findOneOrCreate(ConnectionInterface $con = null) Return the first ChildProductImage matching the query, or a new ChildProductImage object populated from the query conditions when no match is found
|
||||||
|
*
|
||||||
|
* @method ChildProductImage findOneById(int $id) Return the first ChildProductImage filtered by the id column
|
||||||
|
* @method ChildProductImage findOneByProductId(int $product_id) Return the first ChildProductImage filtered by the product_id column
|
||||||
|
* @method ChildProductImage findOneByFile(string $file) Return the first ChildProductImage filtered by the file column
|
||||||
|
* @method ChildProductImage findOneByPosition(int $position) Return the first ChildProductImage filtered by the position column
|
||||||
|
* @method ChildProductImage findOneByCreatedAt(string $created_at) Return the first ChildProductImage filtered by the created_at column
|
||||||
|
* @method ChildProductImage findOneByUpdatedAt(string $updated_at) Return the first ChildProductImage filtered by the updated_at column
|
||||||
|
*
|
||||||
|
* @method array findById(int $id) Return ChildProductImage objects filtered by the id column
|
||||||
|
* @method array findByProductId(int $product_id) Return ChildProductImage objects filtered by the product_id column
|
||||||
|
* @method array findByFile(string $file) Return ChildProductImage objects filtered by the file column
|
||||||
|
* @method array findByPosition(int $position) Return ChildProductImage objects filtered by the position column
|
||||||
|
* @method array findByCreatedAt(string $created_at) Return ChildProductImage objects filtered by the created_at column
|
||||||
|
* @method array findByUpdatedAt(string $updated_at) Return ChildProductImage objects filtered by the updated_at column
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
abstract class ProductImageQuery extends ModelCriteria
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes internal state of \Thelia\Model\Base\ProductImageQuery object.
|
||||||
|
*
|
||||||
|
* @param string $dbName The database name
|
||||||
|
* @param string $modelName The phpName of a model, e.g. 'Book'
|
||||||
|
* @param string $modelAlias The alias for the model in this query, e.g. 'b'
|
||||||
|
*/
|
||||||
|
public function __construct($dbName = 'thelia', $modelName = '\\Thelia\\Model\\ProductImage', $modelAlias = null)
|
||||||
|
{
|
||||||
|
parent::__construct($dbName, $modelName, $modelAlias);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a new ChildProductImageQuery object.
|
||||||
|
*
|
||||||
|
* @param string $modelAlias The alias of a model in the query
|
||||||
|
* @param Criteria $criteria Optional Criteria to build the query from
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery
|
||||||
|
*/
|
||||||
|
public static function create($modelAlias = null, $criteria = null)
|
||||||
|
{
|
||||||
|
if ($criteria instanceof \Thelia\Model\ProductImageQuery) {
|
||||||
|
return $criteria;
|
||||||
|
}
|
||||||
|
$query = new \Thelia\Model\ProductImageQuery();
|
||||||
|
if (null !== $modelAlias) {
|
||||||
|
$query->setModelAlias($modelAlias);
|
||||||
|
}
|
||||||
|
if ($criteria instanceof Criteria) {
|
||||||
|
$query->mergeWith($criteria);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find object by primary key.
|
||||||
|
* Propel uses the instance pool to skip the database if the object exists.
|
||||||
|
* Go fast if the query is untouched.
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* $obj = $c->findPk(12, $con);
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param mixed $key Primary key to use for the query
|
||||||
|
* @param ConnectionInterface $con an optional connection object
|
||||||
|
*
|
||||||
|
* @return ChildProductImage|array|mixed the result, formatted by the current formatter
|
||||||
|
*/
|
||||||
|
public function findPk($key, $con = null)
|
||||||
|
{
|
||||||
|
if ($key === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ((null !== ($obj = ProductImageTableMap::getInstanceFromPool((string) $key))) && !$this->formatter) {
|
||||||
|
// the object is already in the instance pool
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
if ($con === null) {
|
||||||
|
$con = Propel::getServiceContainer()->getReadConnection(ProductImageTableMap::DATABASE_NAME);
|
||||||
|
}
|
||||||
|
$this->basePreSelect($con);
|
||||||
|
if ($this->formatter || $this->modelAlias || $this->with || $this->select
|
||||||
|
|| $this->selectColumns || $this->asColumns || $this->selectModifiers
|
||||||
|
|| $this->map || $this->having || $this->joins) {
|
||||||
|
return $this->findPkComplex($key, $con);
|
||||||
|
} else {
|
||||||
|
return $this->findPkSimple($key, $con);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find object by primary key using raw SQL to go fast.
|
||||||
|
* Bypass doSelect() and the object formatter by using generated code.
|
||||||
|
*
|
||||||
|
* @param mixed $key Primary key to use for the query
|
||||||
|
* @param ConnectionInterface $con A connection object
|
||||||
|
*
|
||||||
|
* @return ChildProductImage A model object, or null if the key is not found
|
||||||
|
*/
|
||||||
|
protected function findPkSimple($key, $con)
|
||||||
|
{
|
||||||
|
$sql = 'SELECT ID, PRODUCT_ID, FILE, POSITION, CREATED_AT, UPDATED_AT FROM product_image WHERE ID = :p0';
|
||||||
|
try {
|
||||||
|
$stmt = $con->prepare($sql);
|
||||||
|
$stmt->bindValue(':p0', $key, PDO::PARAM_INT);
|
||||||
|
$stmt->execute();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
Propel::log($e->getMessage(), Propel::LOG_ERR);
|
||||||
|
throw new PropelException(sprintf('Unable to execute SELECT statement [%s]', $sql), 0, $e);
|
||||||
|
}
|
||||||
|
$obj = null;
|
||||||
|
if ($row = $stmt->fetch(\PDO::FETCH_NUM)) {
|
||||||
|
$obj = new ChildProductImage();
|
||||||
|
$obj->hydrate($row);
|
||||||
|
ProductImageTableMap::addInstanceToPool($obj, (string) $key);
|
||||||
|
}
|
||||||
|
$stmt->closeCursor();
|
||||||
|
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find object by primary key.
|
||||||
|
*
|
||||||
|
* @param mixed $key Primary key to use for the query
|
||||||
|
* @param ConnectionInterface $con A connection object
|
||||||
|
*
|
||||||
|
* @return ChildProductImage|array|mixed the result, formatted by the current formatter
|
||||||
|
*/
|
||||||
|
protected function findPkComplex($key, $con)
|
||||||
|
{
|
||||||
|
// As the query uses a PK condition, no limit(1) is necessary.
|
||||||
|
$criteria = $this->isKeepQuery() ? clone $this : $this;
|
||||||
|
$dataFetcher = $criteria
|
||||||
|
->filterByPrimaryKey($key)
|
||||||
|
->doSelect($con);
|
||||||
|
|
||||||
|
return $criteria->getFormatter()->init($criteria)->formatOne($dataFetcher);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find objects by primary key
|
||||||
|
* <code>
|
||||||
|
* $objs = $c->findPks(array(12, 56, 832), $con);
|
||||||
|
* </code>
|
||||||
|
* @param array $keys Primary keys to use for the query
|
||||||
|
* @param ConnectionInterface $con an optional connection object
|
||||||
|
*
|
||||||
|
* @return ObjectCollection|array|mixed the list of results, formatted by the current formatter
|
||||||
|
*/
|
||||||
|
public function findPks($keys, $con = null)
|
||||||
|
{
|
||||||
|
if (null === $con) {
|
||||||
|
$con = Propel::getServiceContainer()->getReadConnection($this->getDbName());
|
||||||
|
}
|
||||||
|
$this->basePreSelect($con);
|
||||||
|
$criteria = $this->isKeepQuery() ? clone $this : $this;
|
||||||
|
$dataFetcher = $criteria
|
||||||
|
->filterByPrimaryKeys($keys)
|
||||||
|
->doSelect($con);
|
||||||
|
|
||||||
|
return $criteria->getFormatter()->init($criteria)->format($dataFetcher);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query by primary key
|
||||||
|
*
|
||||||
|
* @param mixed $key Primary key to use for the query
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByPrimaryKey($key)
|
||||||
|
{
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageTableMap::ID, $key, Criteria::EQUAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query by a list of primary keys
|
||||||
|
*
|
||||||
|
* @param array $keys The list of primary key to use for the query
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByPrimaryKeys($keys)
|
||||||
|
{
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageTableMap::ID, $keys, Criteria::IN);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query on the id column
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* <code>
|
||||||
|
* $query->filterById(1234); // WHERE id = 1234
|
||||||
|
* $query->filterById(array(12, 34)); // WHERE id IN (12, 34)
|
||||||
|
* $query->filterById(array('min' => 12)); // WHERE id > 12
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param mixed $id The value to use as filter.
|
||||||
|
* Use scalar values for equality.
|
||||||
|
* Use array values for in_array() equivalent.
|
||||||
|
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterById($id = null, $comparison = null)
|
||||||
|
{
|
||||||
|
if (is_array($id)) {
|
||||||
|
$useMinMax = false;
|
||||||
|
if (isset($id['min'])) {
|
||||||
|
$this->addUsingAlias(ProductImageTableMap::ID, $id['min'], Criteria::GREATER_EQUAL);
|
||||||
|
$useMinMax = true;
|
||||||
|
}
|
||||||
|
if (isset($id['max'])) {
|
||||||
|
$this->addUsingAlias(ProductImageTableMap::ID, $id['max'], Criteria::LESS_EQUAL);
|
||||||
|
$useMinMax = true;
|
||||||
|
}
|
||||||
|
if ($useMinMax) {
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
if (null === $comparison) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageTableMap::ID, $id, $comparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query on the product_id column
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* <code>
|
||||||
|
* $query->filterByProductId(1234); // WHERE product_id = 1234
|
||||||
|
* $query->filterByProductId(array(12, 34)); // WHERE product_id IN (12, 34)
|
||||||
|
* $query->filterByProductId(array('min' => 12)); // WHERE product_id > 12
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @see filterByProduct()
|
||||||
|
*
|
||||||
|
* @param mixed $productId The value to use as filter.
|
||||||
|
* Use scalar values for equality.
|
||||||
|
* Use array values for in_array() equivalent.
|
||||||
|
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByProductId($productId = null, $comparison = null)
|
||||||
|
{
|
||||||
|
if (is_array($productId)) {
|
||||||
|
$useMinMax = false;
|
||||||
|
if (isset($productId['min'])) {
|
||||||
|
$this->addUsingAlias(ProductImageTableMap::PRODUCT_ID, $productId['min'], Criteria::GREATER_EQUAL);
|
||||||
|
$useMinMax = true;
|
||||||
|
}
|
||||||
|
if (isset($productId['max'])) {
|
||||||
|
$this->addUsingAlias(ProductImageTableMap::PRODUCT_ID, $productId['max'], Criteria::LESS_EQUAL);
|
||||||
|
$useMinMax = true;
|
||||||
|
}
|
||||||
|
if ($useMinMax) {
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
if (null === $comparison) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageTableMap::PRODUCT_ID, $productId, $comparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query on the file column
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* <code>
|
||||||
|
* $query->filterByFile('fooValue'); // WHERE file = 'fooValue'
|
||||||
|
* $query->filterByFile('%fooValue%'); // WHERE file LIKE '%fooValue%'
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param string $file The value to use as filter.
|
||||||
|
* Accepts wildcards (* and % trigger a LIKE)
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByFile($file = null, $comparison = null)
|
||||||
|
{
|
||||||
|
if (null === $comparison) {
|
||||||
|
if (is_array($file)) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
} elseif (preg_match('/[\%\*]/', $file)) {
|
||||||
|
$file = str_replace('*', '%', $file);
|
||||||
|
$comparison = Criteria::LIKE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageTableMap::FILE, $file, $comparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query on the position column
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* <code>
|
||||||
|
* $query->filterByPosition(1234); // WHERE position = 1234
|
||||||
|
* $query->filterByPosition(array(12, 34)); // WHERE position IN (12, 34)
|
||||||
|
* $query->filterByPosition(array('min' => 12)); // WHERE position > 12
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param mixed $position The value to use as filter.
|
||||||
|
* Use scalar values for equality.
|
||||||
|
* Use array values for in_array() equivalent.
|
||||||
|
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByPosition($position = null, $comparison = null)
|
||||||
|
{
|
||||||
|
if (is_array($position)) {
|
||||||
|
$useMinMax = false;
|
||||||
|
if (isset($position['min'])) {
|
||||||
|
$this->addUsingAlias(ProductImageTableMap::POSITION, $position['min'], Criteria::GREATER_EQUAL);
|
||||||
|
$useMinMax = true;
|
||||||
|
}
|
||||||
|
if (isset($position['max'])) {
|
||||||
|
$this->addUsingAlias(ProductImageTableMap::POSITION, $position['max'], Criteria::LESS_EQUAL);
|
||||||
|
$useMinMax = true;
|
||||||
|
}
|
||||||
|
if ($useMinMax) {
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
if (null === $comparison) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageTableMap::POSITION, $position, $comparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query on the created_at column
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* <code>
|
||||||
|
* $query->filterByCreatedAt('2011-03-14'); // WHERE created_at = '2011-03-14'
|
||||||
|
* $query->filterByCreatedAt('now'); // WHERE created_at = '2011-03-14'
|
||||||
|
* $query->filterByCreatedAt(array('max' => 'yesterday')); // WHERE created_at > '2011-03-13'
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param mixed $createdAt The value to use as filter.
|
||||||
|
* Values can be integers (unix timestamps), DateTime objects, or strings.
|
||||||
|
* Empty strings are treated as NULL.
|
||||||
|
* Use scalar values for equality.
|
||||||
|
* Use array values for in_array() equivalent.
|
||||||
|
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByCreatedAt($createdAt = null, $comparison = null)
|
||||||
|
{
|
||||||
|
if (is_array($createdAt)) {
|
||||||
|
$useMinMax = false;
|
||||||
|
if (isset($createdAt['min'])) {
|
||||||
|
$this->addUsingAlias(ProductImageTableMap::CREATED_AT, $createdAt['min'], Criteria::GREATER_EQUAL);
|
||||||
|
$useMinMax = true;
|
||||||
|
}
|
||||||
|
if (isset($createdAt['max'])) {
|
||||||
|
$this->addUsingAlias(ProductImageTableMap::CREATED_AT, $createdAt['max'], Criteria::LESS_EQUAL);
|
||||||
|
$useMinMax = true;
|
||||||
|
}
|
||||||
|
if ($useMinMax) {
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
if (null === $comparison) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageTableMap::CREATED_AT, $createdAt, $comparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query on the updated_at column
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* <code>
|
||||||
|
* $query->filterByUpdatedAt('2011-03-14'); // WHERE updated_at = '2011-03-14'
|
||||||
|
* $query->filterByUpdatedAt('now'); // WHERE updated_at = '2011-03-14'
|
||||||
|
* $query->filterByUpdatedAt(array('max' => 'yesterday')); // WHERE updated_at > '2011-03-13'
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param mixed $updatedAt The value to use as filter.
|
||||||
|
* Values can be integers (unix timestamps), DateTime objects, or strings.
|
||||||
|
* Empty strings are treated as NULL.
|
||||||
|
* Use scalar values for equality.
|
||||||
|
* Use array values for in_array() equivalent.
|
||||||
|
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByUpdatedAt($updatedAt = null, $comparison = null)
|
||||||
|
{
|
||||||
|
if (is_array($updatedAt)) {
|
||||||
|
$useMinMax = false;
|
||||||
|
if (isset($updatedAt['min'])) {
|
||||||
|
$this->addUsingAlias(ProductImageTableMap::UPDATED_AT, $updatedAt['min'], Criteria::GREATER_EQUAL);
|
||||||
|
$useMinMax = true;
|
||||||
|
}
|
||||||
|
if (isset($updatedAt['max'])) {
|
||||||
|
$this->addUsingAlias(ProductImageTableMap::UPDATED_AT, $updatedAt['max'], Criteria::LESS_EQUAL);
|
||||||
|
$useMinMax = true;
|
||||||
|
}
|
||||||
|
if ($useMinMax) {
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
if (null === $comparison) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->addUsingAlias(ProductImageTableMap::UPDATED_AT, $updatedAt, $comparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query by a related \Thelia\Model\Product object
|
||||||
|
*
|
||||||
|
* @param \Thelia\Model\Product|ObjectCollection $product The related object(s) to use as filter
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByProduct($product, $comparison = null)
|
||||||
|
{
|
||||||
|
if ($product instanceof \Thelia\Model\Product) {
|
||||||
|
return $this
|
||||||
|
->addUsingAlias(ProductImageTableMap::PRODUCT_ID, $product->getId(), $comparison);
|
||||||
|
} elseif ($product instanceof ObjectCollection) {
|
||||||
|
if (null === $comparison) {
|
||||||
|
$comparison = Criteria::IN;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this
|
||||||
|
->addUsingAlias(ProductImageTableMap::PRODUCT_ID, $product->toKeyValue('PrimaryKey', 'Id'), $comparison);
|
||||||
|
} else {
|
||||||
|
throw new PropelException('filterByProduct() only accepts arguments of type \Thelia\Model\Product or Collection');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a JOIN clause to the query using the Product relation
|
||||||
|
*
|
||||||
|
* @param string $relationAlias optional alias for the relation
|
||||||
|
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function joinProduct($relationAlias = null, $joinType = Criteria::INNER_JOIN)
|
||||||
|
{
|
||||||
|
$tableMap = $this->getTableMap();
|
||||||
|
$relationMap = $tableMap->getRelation('Product');
|
||||||
|
|
||||||
|
// create a ModelJoin object for this join
|
||||||
|
$join = new ModelJoin();
|
||||||
|
$join->setJoinType($joinType);
|
||||||
|
$join->setRelationMap($relationMap, $this->useAliasInSQL ? $this->getModelAlias() : null, $relationAlias);
|
||||||
|
if ($previousJoin = $this->getPreviousJoin()) {
|
||||||
|
$join->setPreviousJoin($previousJoin);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add the ModelJoin to the current object
|
||||||
|
if ($relationAlias) {
|
||||||
|
$this->addAlias($relationAlias, $relationMap->getRightTable()->getName());
|
||||||
|
$this->addJoinObject($join, $relationAlias);
|
||||||
|
} else {
|
||||||
|
$this->addJoinObject($join, 'Product');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use the Product relation Product object
|
||||||
|
*
|
||||||
|
* @see useQuery()
|
||||||
|
*
|
||||||
|
* @param string $relationAlias optional alias for the relation,
|
||||||
|
* to be used as main alias in the secondary query
|
||||||
|
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'
|
||||||
|
*
|
||||||
|
* @return \Thelia\Model\ProductQuery A secondary query class using the current class as primary query
|
||||||
|
*/
|
||||||
|
public function useProductQuery($relationAlias = null, $joinType = Criteria::INNER_JOIN)
|
||||||
|
{
|
||||||
|
return $this
|
||||||
|
->joinProduct($relationAlias, $joinType)
|
||||||
|
->useQuery($relationAlias ? $relationAlias : 'Product', '\Thelia\Model\ProductQuery');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter the query by a related \Thelia\Model\ProductImageI18n object
|
||||||
|
*
|
||||||
|
* @param \Thelia\Model\ProductImageI18n|ObjectCollection $productImageI18n the related object to use as filter
|
||||||
|
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function filterByProductImageI18n($productImageI18n, $comparison = null)
|
||||||
|
{
|
||||||
|
if ($productImageI18n instanceof \Thelia\Model\ProductImageI18n) {
|
||||||
|
return $this
|
||||||
|
->addUsingAlias(ProductImageTableMap::ID, $productImageI18n->getId(), $comparison);
|
||||||
|
} elseif ($productImageI18n instanceof ObjectCollection) {
|
||||||
|
return $this
|
||||||
|
->useProductImageI18nQuery()
|
||||||
|
->filterByPrimaryKeys($productImageI18n->getPrimaryKeys())
|
||||||
|
->endUse();
|
||||||
|
} else {
|
||||||
|
throw new PropelException('filterByProductImageI18n() only accepts arguments of type \Thelia\Model\ProductImageI18n or Collection');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a JOIN clause to the query using the ProductImageI18n relation
|
||||||
|
*
|
||||||
|
* @param string $relationAlias optional alias for the relation
|
||||||
|
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function joinProductImageI18n($relationAlias = null, $joinType = 'LEFT JOIN')
|
||||||
|
{
|
||||||
|
$tableMap = $this->getTableMap();
|
||||||
|
$relationMap = $tableMap->getRelation('ProductImageI18n');
|
||||||
|
|
||||||
|
// create a ModelJoin object for this join
|
||||||
|
$join = new ModelJoin();
|
||||||
|
$join->setJoinType($joinType);
|
||||||
|
$join->setRelationMap($relationMap, $this->useAliasInSQL ? $this->getModelAlias() : null, $relationAlias);
|
||||||
|
if ($previousJoin = $this->getPreviousJoin()) {
|
||||||
|
$join->setPreviousJoin($previousJoin);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add the ModelJoin to the current object
|
||||||
|
if ($relationAlias) {
|
||||||
|
$this->addAlias($relationAlias, $relationMap->getRightTable()->getName());
|
||||||
|
$this->addJoinObject($join, $relationAlias);
|
||||||
|
} else {
|
||||||
|
$this->addJoinObject($join, 'ProductImageI18n');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use the ProductImageI18n relation ProductImageI18n object
|
||||||
|
*
|
||||||
|
* @see useQuery()
|
||||||
|
*
|
||||||
|
* @param string $relationAlias optional alias for the relation,
|
||||||
|
* to be used as main alias in the secondary query
|
||||||
|
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'
|
||||||
|
*
|
||||||
|
* @return \Thelia\Model\ProductImageI18nQuery A secondary query class using the current class as primary query
|
||||||
|
*/
|
||||||
|
public function useProductImageI18nQuery($relationAlias = null, $joinType = 'LEFT JOIN')
|
||||||
|
{
|
||||||
|
return $this
|
||||||
|
->joinProductImageI18n($relationAlias, $joinType)
|
||||||
|
->useQuery($relationAlias ? $relationAlias : 'ProductImageI18n', '\Thelia\Model\ProductImageI18nQuery');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exclude object from result
|
||||||
|
*
|
||||||
|
* @param ChildProductImage $productImage Object to remove from the list of results
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function prune($productImage = null)
|
||||||
|
{
|
||||||
|
if ($productImage) {
|
||||||
|
$this->addUsingAlias(ProductImageTableMap::ID, $productImage->getId(), Criteria::NOT_EQUAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes all rows from the product_image table.
|
||||||
|
*
|
||||||
|
* @param ConnectionInterface $con the connection to use
|
||||||
|
* @return int The number of affected rows (if supported by underlying database driver).
|
||||||
|
*/
|
||||||
|
public function doDeleteAll(ConnectionInterface $con = null)
|
||||||
|
{
|
||||||
|
if (null === $con) {
|
||||||
|
$con = Propel::getServiceContainer()->getWriteConnection(ProductImageTableMap::DATABASE_NAME);
|
||||||
|
}
|
||||||
|
$affectedRows = 0; // initialize var to track total num of affected rows
|
||||||
|
try {
|
||||||
|
// use transaction because $criteria could contain info
|
||||||
|
// for more than one table or we could emulating ON DELETE CASCADE, etc.
|
||||||
|
$con->beginTransaction();
|
||||||
|
$affectedRows += parent::doDeleteAll($con);
|
||||||
|
// Because this db requires some delete cascade/set null emulation, we have to
|
||||||
|
// clear the cached instance *after* the emulation has happened (since
|
||||||
|
// instances get re-added by the select statement contained therein).
|
||||||
|
ProductImageTableMap::clearInstancePool();
|
||||||
|
ProductImageTableMap::clearRelatedInstancePool();
|
||||||
|
|
||||||
|
$con->commit();
|
||||||
|
} catch (PropelException $e) {
|
||||||
|
$con->rollBack();
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $affectedRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a DELETE on the database, given a ChildProductImage or Criteria object OR a primary key value.
|
||||||
|
*
|
||||||
|
* @param mixed $values Criteria or ChildProductImage object or primary key or array of primary keys
|
||||||
|
* which is used to create the DELETE statement
|
||||||
|
* @param ConnectionInterface $con the connection to use
|
||||||
|
* @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows
|
||||||
|
* if supported by native driver or if emulated using Propel.
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
*/
|
||||||
|
public function delete(ConnectionInterface $con = null)
|
||||||
|
{
|
||||||
|
if (null === $con) {
|
||||||
|
$con = Propel::getServiceContainer()->getWriteConnection(ProductImageTableMap::DATABASE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
$criteria = $this;
|
||||||
|
|
||||||
|
// Set the correct dbName
|
||||||
|
$criteria->setDbName(ProductImageTableMap::DATABASE_NAME);
|
||||||
|
|
||||||
|
$affectedRows = 0; // initialize var to track total num of affected rows
|
||||||
|
|
||||||
|
try {
|
||||||
|
// use transaction because $criteria could contain info
|
||||||
|
// for more than one table or we could emulating ON DELETE CASCADE, etc.
|
||||||
|
$con->beginTransaction();
|
||||||
|
|
||||||
|
|
||||||
|
ProductImageTableMap::removeInstanceFromPool($criteria);
|
||||||
|
|
||||||
|
$affectedRows += ModelCriteria::delete($con);
|
||||||
|
ProductImageTableMap::clearRelatedInstancePool();
|
||||||
|
$con->commit();
|
||||||
|
|
||||||
|
return $affectedRows;
|
||||||
|
} catch (PropelException $e) {
|
||||||
|
$con->rollBack();
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// timestampable behavior
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter by the latest updated
|
||||||
|
*
|
||||||
|
* @param int $nbDays Maximum age of the latest update in days
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function recentlyUpdated($nbDays = 7)
|
||||||
|
{
|
||||||
|
return $this->addUsingAlias(ProductImageTableMap::UPDATED_AT, time() - $nbDays * 24 * 60 * 60, Criteria::GREATER_EQUAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter by the latest created
|
||||||
|
*
|
||||||
|
* @param int $nbDays Maximum age of in days
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function recentlyCreated($nbDays = 7)
|
||||||
|
{
|
||||||
|
return $this->addUsingAlias(ProductImageTableMap::CREATED_AT, time() - $nbDays * 24 * 60 * 60, Criteria::GREATER_EQUAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Order by update date desc
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function lastUpdatedFirst()
|
||||||
|
{
|
||||||
|
return $this->addDescendingOrderByColumn(ProductImageTableMap::UPDATED_AT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Order by update date asc
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function firstUpdatedFirst()
|
||||||
|
{
|
||||||
|
return $this->addAscendingOrderByColumn(ProductImageTableMap::UPDATED_AT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Order by create date desc
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function lastCreatedFirst()
|
||||||
|
{
|
||||||
|
return $this->addDescendingOrderByColumn(ProductImageTableMap::CREATED_AT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Order by create date asc
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function firstCreatedFirst()
|
||||||
|
{
|
||||||
|
return $this->addAscendingOrderByColumn(ProductImageTableMap::CREATED_AT);
|
||||||
|
}
|
||||||
|
|
||||||
|
// i18n behavior
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a JOIN clause to the query using the i18n relation
|
||||||
|
*
|
||||||
|
* @param string $locale Locale to use for the join condition, e.g. 'fr_FR'
|
||||||
|
* @param string $relationAlias optional alias for the relation
|
||||||
|
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'. Defaults to left join.
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function joinI18n($locale = 'en_US', $relationAlias = null, $joinType = Criteria::LEFT_JOIN)
|
||||||
|
{
|
||||||
|
$relationName = $relationAlias ? $relationAlias : 'ProductImageI18n';
|
||||||
|
|
||||||
|
return $this
|
||||||
|
->joinProductImageI18n($relationAlias, $joinType)
|
||||||
|
->addJoinCondition($relationName, $relationName . '.Locale = ?', $locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a JOIN clause to the query and hydrates the related I18n object.
|
||||||
|
* Shortcut for $c->joinI18n($locale)->with()
|
||||||
|
*
|
||||||
|
* @param string $locale Locale to use for the join condition, e.g. 'fr_FR'
|
||||||
|
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'. Defaults to left join.
|
||||||
|
*
|
||||||
|
* @return ChildProductImageQuery The current query, for fluid interface
|
||||||
|
*/
|
||||||
|
public function joinWithI18n($locale = 'en_US', $joinType = Criteria::LEFT_JOIN)
|
||||||
|
{
|
||||||
|
$this
|
||||||
|
->joinI18n($locale, null, $joinType)
|
||||||
|
->with('ProductImageI18n');
|
||||||
|
$this->with['ProductImageI18n']->setIsWithOneToMany(false);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use the I18n relation query object
|
||||||
|
*
|
||||||
|
* @see useQuery()
|
||||||
|
*
|
||||||
|
* @param string $locale Locale to use for the join condition, e.g. 'fr_FR'
|
||||||
|
* @param string $relationAlias optional alias for the relation
|
||||||
|
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'. Defaults to left join.
|
||||||
|
*
|
||||||
|
* @return ChildProductImageI18nQuery A secondary query class using the current class as primary query
|
||||||
|
*/
|
||||||
|
public function useI18nQuery($locale = 'en_US', $relationAlias = null, $joinType = Criteria::LEFT_JOIN)
|
||||||
|
{
|
||||||
|
return $this
|
||||||
|
->joinI18n($locale, $relationAlias, $joinType)
|
||||||
|
->useQuery($relationAlias ? $relationAlias : 'ProductImageI18n', '\Thelia\Model\ProductImageI18nQuery');
|
||||||
|
}
|
||||||
|
|
||||||
|
} // ProductImageQuery
|
||||||
497
core/lib/Thelia/Model/Map/ProductImageI18nTableMap.php
Normal file
@@ -0,0 +1,497 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Thelia\Model\Map;
|
||||||
|
|
||||||
|
use Propel\Runtime\Propel;
|
||||||
|
use Propel\Runtime\ActiveQuery\Criteria;
|
||||||
|
use Propel\Runtime\ActiveQuery\InstancePoolTrait;
|
||||||
|
use Propel\Runtime\Connection\ConnectionInterface;
|
||||||
|
use Propel\Runtime\Exception\PropelException;
|
||||||
|
use Propel\Runtime\Map\RelationMap;
|
||||||
|
use Propel\Runtime\Map\TableMap;
|
||||||
|
use Propel\Runtime\Map\TableMapTrait;
|
||||||
|
use Thelia\Model\ProductImageI18n;
|
||||||
|
use Thelia\Model\ProductImageI18nQuery;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class defines the structure of the 'product_image_i18n' table.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This map class is used by Propel to do runtime db structure discovery.
|
||||||
|
* For example, the createSelectSql() method checks the type of a given column used in an
|
||||||
|
* ORDER BY clause to know whether it needs to apply SQL to make the ORDER BY case-insensitive
|
||||||
|
* (i.e. if it's a text column type).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class ProductImageI18nTableMap extends TableMap
|
||||||
|
{
|
||||||
|
use InstancePoolTrait;
|
||||||
|
use TableMapTrait;
|
||||||
|
/**
|
||||||
|
* The (dot-path) name of this class
|
||||||
|
*/
|
||||||
|
const CLASS_NAME = 'Thelia.Model.Map.ProductImageI18nTableMap';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default database name for this class
|
||||||
|
*/
|
||||||
|
const DATABASE_NAME = 'thelia';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The table name for this class
|
||||||
|
*/
|
||||||
|
const TABLE_NAME = 'product_image_i18n';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The related Propel class for this table
|
||||||
|
*/
|
||||||
|
const OM_CLASS = '\\Thelia\\Model\\ProductImageI18n';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class that can be returned by this tableMap
|
||||||
|
*/
|
||||||
|
const CLASS_DEFAULT = 'Thelia.Model.ProductImageI18n';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The total number of columns
|
||||||
|
*/
|
||||||
|
const NUM_COLUMNS = 6;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of lazy-loaded columns
|
||||||
|
*/
|
||||||
|
const NUM_LAZY_LOAD_COLUMNS = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of columns to hydrate (NUM_COLUMNS - NUM_LAZY_LOAD_COLUMNS)
|
||||||
|
*/
|
||||||
|
const NUM_HYDRATE_COLUMNS = 6;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the column name for the ID field
|
||||||
|
*/
|
||||||
|
const ID = 'product_image_i18n.ID';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the column name for the LOCALE field
|
||||||
|
*/
|
||||||
|
const LOCALE = 'product_image_i18n.LOCALE';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the column name for the TITLE field
|
||||||
|
*/
|
||||||
|
const TITLE = 'product_image_i18n.TITLE';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the column name for the DESCRIPTION field
|
||||||
|
*/
|
||||||
|
const DESCRIPTION = 'product_image_i18n.DESCRIPTION';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the column name for the CHAPO field
|
||||||
|
*/
|
||||||
|
const CHAPO = 'product_image_i18n.CHAPO';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the column name for the POSTSCRIPTUM field
|
||||||
|
*/
|
||||||
|
const POSTSCRIPTUM = 'product_image_i18n.POSTSCRIPTUM';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default string format for model objects of the related table
|
||||||
|
*/
|
||||||
|
const DEFAULT_STRING_FORMAT = 'YAML';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* holds an array of fieldnames
|
||||||
|
*
|
||||||
|
* first dimension keys are the type constants
|
||||||
|
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
|
||||||
|
*/
|
||||||
|
protected static $fieldNames = array (
|
||||||
|
self::TYPE_PHPNAME => array('Id', 'Locale', 'Title', 'Description', 'Chapo', 'Postscriptum', ),
|
||||||
|
self::TYPE_STUDLYPHPNAME => array('id', 'locale', 'title', 'description', 'chapo', 'postscriptum', ),
|
||||||
|
self::TYPE_COLNAME => array(ProductImageI18nTableMap::ID, ProductImageI18nTableMap::LOCALE, ProductImageI18nTableMap::TITLE, ProductImageI18nTableMap::DESCRIPTION, ProductImageI18nTableMap::CHAPO, ProductImageI18nTableMap::POSTSCRIPTUM, ),
|
||||||
|
self::TYPE_RAW_COLNAME => array('ID', 'LOCALE', 'TITLE', 'DESCRIPTION', 'CHAPO', 'POSTSCRIPTUM', ),
|
||||||
|
self::TYPE_FIELDNAME => array('id', 'locale', 'title', 'description', 'chapo', 'postscriptum', ),
|
||||||
|
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, )
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* holds an array of keys for quick access to the fieldnames array
|
||||||
|
*
|
||||||
|
* first dimension keys are the type constants
|
||||||
|
* e.g. self::$fieldKeys[self::TYPE_PHPNAME]['Id'] = 0
|
||||||
|
*/
|
||||||
|
protected static $fieldKeys = array (
|
||||||
|
self::TYPE_PHPNAME => array('Id' => 0, 'Locale' => 1, 'Title' => 2, 'Description' => 3, 'Chapo' => 4, 'Postscriptum' => 5, ),
|
||||||
|
self::TYPE_STUDLYPHPNAME => array('id' => 0, 'locale' => 1, 'title' => 2, 'description' => 3, 'chapo' => 4, 'postscriptum' => 5, ),
|
||||||
|
self::TYPE_COLNAME => array(ProductImageI18nTableMap::ID => 0, ProductImageI18nTableMap::LOCALE => 1, ProductImageI18nTableMap::TITLE => 2, ProductImageI18nTableMap::DESCRIPTION => 3, ProductImageI18nTableMap::CHAPO => 4, ProductImageI18nTableMap::POSTSCRIPTUM => 5, ),
|
||||||
|
self::TYPE_RAW_COLNAME => array('ID' => 0, 'LOCALE' => 1, 'TITLE' => 2, 'DESCRIPTION' => 3, 'CHAPO' => 4, 'POSTSCRIPTUM' => 5, ),
|
||||||
|
self::TYPE_FIELDNAME => array('id' => 0, 'locale' => 1, 'title' => 2, 'description' => 3, 'chapo' => 4, 'postscriptum' => 5, ),
|
||||||
|
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, )
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the table attributes and columns
|
||||||
|
* Relations are not initialized by this method since they are lazy loaded
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws PropelException
|
||||||
|
*/
|
||||||
|
public function initialize()
|
||||||
|
{
|
||||||
|
// attributes
|
||||||
|
$this->setName('product_image_i18n');
|
||||||
|
$this->setPhpName('ProductImageI18n');
|
||||||
|
$this->setClassName('\\Thelia\\Model\\ProductImageI18n');
|
||||||
|
$this->setPackage('Thelia.Model');
|
||||||
|
$this->setUseIdGenerator(false);
|
||||||
|
// columns
|
||||||
|
$this->addForeignPrimaryKey('ID', 'Id', 'INTEGER' , 'product_image', 'ID', true, null, null);
|
||||||
|
$this->addPrimaryKey('LOCALE', 'Locale', 'VARCHAR', true, 5, 'en_US');
|
||||||
|
$this->addColumn('TITLE', 'Title', 'VARCHAR', false, 255, null);
|
||||||
|
$this->addColumn('DESCRIPTION', 'Description', 'CLOB', false, null, null);
|
||||||
|
$this->addColumn('CHAPO', 'Chapo', 'LONGVARCHAR', false, null, null);
|
||||||
|
$this->addColumn('POSTSCRIPTUM', 'Postscriptum', 'LONGVARCHAR', false, null, null);
|
||||||
|
} // initialize()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the RelationMap objects for this table relationships
|
||||||
|
*/
|
||||||
|
public function buildRelations()
|
||||||
|
{
|
||||||
|
$this->addRelation('ProductImage', '\\Thelia\\Model\\ProductImage', RelationMap::MANY_TO_ONE, array('id' => 'id', ), 'CASCADE', null);
|
||||||
|
} // buildRelations()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds an object to the instance pool.
|
||||||
|
*
|
||||||
|
* Propel keeps cached copies of objects in an instance pool when they are retrieved
|
||||||
|
* from the database. In some cases you may need to explicitly add objects
|
||||||
|
* to the cache in order to ensure that the same objects are always returned by find*()
|
||||||
|
* and findPk*() calls.
|
||||||
|
*
|
||||||
|
* @param \Thelia\Model\ProductImageI18n $obj A \Thelia\Model\ProductImageI18n object.
|
||||||
|
* @param string $key (optional) key to use for instance map (for performance boost if key was already calculated externally).
|
||||||
|
*/
|
||||||
|
public static function addInstanceToPool($obj, $key = null)
|
||||||
|
{
|
||||||
|
if (Propel::isInstancePoolingEnabled()) {
|
||||||
|
if (null === $key) {
|
||||||
|
$key = serialize(array((string) $obj->getId(), (string) $obj->getLocale()));
|
||||||
|
} // if key === null
|
||||||
|
self::$instances[$key] = $obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes an object from the instance pool.
|
||||||
|
*
|
||||||
|
* Propel keeps cached copies of objects in an instance pool when they are retrieved
|
||||||
|
* from the database. In some cases -- especially when you override doDelete
|
||||||
|
* methods in your stub classes -- you may need to explicitly remove objects
|
||||||
|
* from the cache in order to prevent returning objects that no longer exist.
|
||||||
|
*
|
||||||
|
* @param mixed $value A \Thelia\Model\ProductImageI18n object or a primary key value.
|
||||||
|
*/
|
||||||
|
public static function removeInstanceFromPool($value)
|
||||||
|
{
|
||||||
|
if (Propel::isInstancePoolingEnabled() && null !== $value) {
|
||||||
|
if (is_object($value) && $value instanceof \Thelia\Model\ProductImageI18n) {
|
||||||
|
$key = serialize(array((string) $value->getId(), (string) $value->getLocale()));
|
||||||
|
|
||||||
|
} elseif (is_array($value) && count($value) === 2) {
|
||||||
|
// assume we've been passed a primary key";
|
||||||
|
$key = serialize(array((string) $value[0], (string) $value[1]));
|
||||||
|
} elseif ($value instanceof Criteria) {
|
||||||
|
self::$instances = [];
|
||||||
|
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
$e = new PropelException("Invalid value passed to removeInstanceFromPool(). Expected primary key or \Thelia\Model\ProductImageI18n object; got " . (is_object($value) ? get_class($value) . ' object.' : var_export($value, true)));
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
unset(self::$instances[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a string version of the primary key from the DB resultset row that can be used to uniquely identify a row in this table.
|
||||||
|
*
|
||||||
|
* For tables with a single-column primary key, that simple pkey value will be returned. For tables with
|
||||||
|
* a multi-column primary key, a serialize()d version of the primary key will be returned.
|
||||||
|
*
|
||||||
|
* @param array $row resultset row.
|
||||||
|
* @param int $offset The 0-based offset for reading from the resultset row.
|
||||||
|
* @param string $indexType One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME
|
||||||
|
* TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM
|
||||||
|
*/
|
||||||
|
public static function getPrimaryKeyHashFromRow($row, $offset = 0, $indexType = TableMap::TYPE_NUM)
|
||||||
|
{
|
||||||
|
// If the PK cannot be derived from the row, return NULL.
|
||||||
|
if ($row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType)] === null && $row[TableMap::TYPE_NUM == $indexType ? 1 + $offset : static::translateFieldName('Locale', TableMap::TYPE_PHPNAME, $indexType)] === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return serialize(array((string) $row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType)], (string) $row[TableMap::TYPE_NUM == $indexType ? 1 + $offset : static::translateFieldName('Locale', TableMap::TYPE_PHPNAME, $indexType)]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the primary key from the DB resultset row
|
||||||
|
* For tables with a single-column primary key, that simple pkey value will be returned. For tables with
|
||||||
|
* a multi-column primary key, an array of the primary key columns will be returned.
|
||||||
|
*
|
||||||
|
* @param array $row resultset row.
|
||||||
|
* @param int $offset The 0-based offset for reading from the resultset row.
|
||||||
|
* @param string $indexType One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME
|
||||||
|
* TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM
|
||||||
|
*
|
||||||
|
* @return mixed The primary key of the row
|
||||||
|
*/
|
||||||
|
public static function getPrimaryKeyFromRow($row, $offset = 0, $indexType = TableMap::TYPE_NUM)
|
||||||
|
{
|
||||||
|
|
||||||
|
return $pks;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The class that the tableMap will make instances of.
|
||||||
|
*
|
||||||
|
* If $withPrefix is true, the returned path
|
||||||
|
* uses a dot-path notation which is translated into a path
|
||||||
|
* relative to a location on the PHP include_path.
|
||||||
|
* (e.g. path.to.MyClass -> 'path/to/MyClass.php')
|
||||||
|
*
|
||||||
|
* @param boolean $withPrefix Whether or not to return the path with the class name
|
||||||
|
* @return string path.to.ClassName
|
||||||
|
*/
|
||||||
|
public static function getOMClass($withPrefix = true)
|
||||||
|
{
|
||||||
|
return $withPrefix ? ProductImageI18nTableMap::CLASS_DEFAULT : ProductImageI18nTableMap::OM_CLASS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populates an object of the default type or an object that inherit from the default.
|
||||||
|
*
|
||||||
|
* @param array $row row returned by DataFetcher->fetch().
|
||||||
|
* @param int $offset The 0-based offset for reading from the resultset row.
|
||||||
|
* @param string $indexType The index type of $row. Mostly DataFetcher->getIndexType().
|
||||||
|
One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME
|
||||||
|
* TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
|
||||||
|
*
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
* @return array (ProductImageI18n object, last column rank)
|
||||||
|
*/
|
||||||
|
public static function populateObject($row, $offset = 0, $indexType = TableMap::TYPE_NUM)
|
||||||
|
{
|
||||||
|
$key = ProductImageI18nTableMap::getPrimaryKeyHashFromRow($row, $offset, $indexType);
|
||||||
|
if (null !== ($obj = ProductImageI18nTableMap::getInstanceFromPool($key))) {
|
||||||
|
// We no longer rehydrate the object, since this can cause data loss.
|
||||||
|
// See http://www.propelorm.org/ticket/509
|
||||||
|
// $obj->hydrate($row, $offset, true); // rehydrate
|
||||||
|
$col = $offset + ProductImageI18nTableMap::NUM_HYDRATE_COLUMNS;
|
||||||
|
} else {
|
||||||
|
$cls = ProductImageI18nTableMap::OM_CLASS;
|
||||||
|
$obj = new $cls();
|
||||||
|
$col = $obj->hydrate($row, $offset, false, $indexType);
|
||||||
|
ProductImageI18nTableMap::addInstanceToPool($obj, $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return array($obj, $col);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The returned array will contain objects of the default type or
|
||||||
|
* objects that inherit from the default.
|
||||||
|
*
|
||||||
|
* @param DataFetcherInterface $dataFetcher
|
||||||
|
* @return array
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
*/
|
||||||
|
public static function populateObjects(DataFetcherInterface $dataFetcher)
|
||||||
|
{
|
||||||
|
$results = array();
|
||||||
|
|
||||||
|
// set the class once to avoid overhead in the loop
|
||||||
|
$cls = static::getOMClass(false);
|
||||||
|
// populate the object(s)
|
||||||
|
while ($row = $dataFetcher->fetch()) {
|
||||||
|
$key = ProductImageI18nTableMap::getPrimaryKeyHashFromRow($row, 0, $dataFetcher->getIndexType());
|
||||||
|
if (null !== ($obj = ProductImageI18nTableMap::getInstanceFromPool($key))) {
|
||||||
|
// We no longer rehydrate the object, since this can cause data loss.
|
||||||
|
// See http://www.propelorm.org/ticket/509
|
||||||
|
// $obj->hydrate($row, 0, true); // rehydrate
|
||||||
|
$results[] = $obj;
|
||||||
|
} else {
|
||||||
|
$obj = new $cls();
|
||||||
|
$obj->hydrate($row);
|
||||||
|
$results[] = $obj;
|
||||||
|
ProductImageI18nTableMap::addInstanceToPool($obj, $key);
|
||||||
|
} // if key exists
|
||||||
|
}
|
||||||
|
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Add all the columns needed to create a new object.
|
||||||
|
*
|
||||||
|
* Note: any columns that were marked with lazyLoad="true" in the
|
||||||
|
* XML schema will not be added to the select list and only loaded
|
||||||
|
* on demand.
|
||||||
|
*
|
||||||
|
* @param Criteria $criteria object containing the columns to add.
|
||||||
|
* @param string $alias optional table alias
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
*/
|
||||||
|
public static function addSelectColumns(Criteria $criteria, $alias = null)
|
||||||
|
{
|
||||||
|
if (null === $alias) {
|
||||||
|
$criteria->addSelectColumn(ProductImageI18nTableMap::ID);
|
||||||
|
$criteria->addSelectColumn(ProductImageI18nTableMap::LOCALE);
|
||||||
|
$criteria->addSelectColumn(ProductImageI18nTableMap::TITLE);
|
||||||
|
$criteria->addSelectColumn(ProductImageI18nTableMap::DESCRIPTION);
|
||||||
|
$criteria->addSelectColumn(ProductImageI18nTableMap::CHAPO);
|
||||||
|
$criteria->addSelectColumn(ProductImageI18nTableMap::POSTSCRIPTUM);
|
||||||
|
} else {
|
||||||
|
$criteria->addSelectColumn($alias . '.ID');
|
||||||
|
$criteria->addSelectColumn($alias . '.LOCALE');
|
||||||
|
$criteria->addSelectColumn($alias . '.TITLE');
|
||||||
|
$criteria->addSelectColumn($alias . '.DESCRIPTION');
|
||||||
|
$criteria->addSelectColumn($alias . '.CHAPO');
|
||||||
|
$criteria->addSelectColumn($alias . '.POSTSCRIPTUM');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the TableMap related to this object.
|
||||||
|
* This method is not needed for general use but a specific application could have a need.
|
||||||
|
* @return TableMap
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
*/
|
||||||
|
public static function getTableMap()
|
||||||
|
{
|
||||||
|
return Propel::getServiceContainer()->getDatabaseMap(ProductImageI18nTableMap::DATABASE_NAME)->getTable(ProductImageI18nTableMap::TABLE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a TableMap instance to the database for this tableMap class.
|
||||||
|
*/
|
||||||
|
public static function buildTableMap()
|
||||||
|
{
|
||||||
|
$dbMap = Propel::getServiceContainer()->getDatabaseMap(ProductImageI18nTableMap::DATABASE_NAME);
|
||||||
|
if (!$dbMap->hasTable(ProductImageI18nTableMap::TABLE_NAME)) {
|
||||||
|
$dbMap->addTableObject(new ProductImageI18nTableMap());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a DELETE on the database, given a ProductImageI18n or Criteria object OR a primary key value.
|
||||||
|
*
|
||||||
|
* @param mixed $values Criteria or ProductImageI18n object or primary key or array of primary keys
|
||||||
|
* which is used to create the DELETE statement
|
||||||
|
* @param ConnectionInterface $con the connection to use
|
||||||
|
* @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows
|
||||||
|
* if supported by native driver or if emulated using Propel.
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
*/
|
||||||
|
public static function doDelete($values, ConnectionInterface $con = null)
|
||||||
|
{
|
||||||
|
if (null === $con) {
|
||||||
|
$con = Propel::getServiceContainer()->getWriteConnection(ProductImageI18nTableMap::DATABASE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($values instanceof Criteria) {
|
||||||
|
// rename for clarity
|
||||||
|
$criteria = $values;
|
||||||
|
} elseif ($values instanceof \Thelia\Model\ProductImageI18n) { // it's a model object
|
||||||
|
// create criteria based on pk values
|
||||||
|
$criteria = $values->buildPkeyCriteria();
|
||||||
|
} else { // it's a primary key, or an array of pks
|
||||||
|
$criteria = new Criteria(ProductImageI18nTableMap::DATABASE_NAME);
|
||||||
|
// primary key is composite; we therefore, expect
|
||||||
|
// the primary key passed to be an array of pkey values
|
||||||
|
if (count($values) == count($values, COUNT_RECURSIVE)) {
|
||||||
|
// array is not multi-dimensional
|
||||||
|
$values = array($values);
|
||||||
|
}
|
||||||
|
foreach ($values as $value) {
|
||||||
|
$criterion = $criteria->getNewCriterion(ProductImageI18nTableMap::ID, $value[0]);
|
||||||
|
$criterion->addAnd($criteria->getNewCriterion(ProductImageI18nTableMap::LOCALE, $value[1]));
|
||||||
|
$criteria->addOr($criterion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = ProductImageI18nQuery::create()->mergeWith($criteria);
|
||||||
|
|
||||||
|
if ($values instanceof Criteria) { ProductImageI18nTableMap::clearInstancePool();
|
||||||
|
} elseif (!is_object($values)) { // it's a primary key, or an array of pks
|
||||||
|
foreach ((array) $values as $singleval) { ProductImageI18nTableMap::removeInstanceFromPool($singleval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $query->delete($con);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes all rows from the product_image_i18n table.
|
||||||
|
*
|
||||||
|
* @param ConnectionInterface $con the connection to use
|
||||||
|
* @return int The number of affected rows (if supported by underlying database driver).
|
||||||
|
*/
|
||||||
|
public static function doDeleteAll(ConnectionInterface $con = null)
|
||||||
|
{
|
||||||
|
return ProductImageI18nQuery::create()->doDeleteAll($con);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs an INSERT on the database, given a ProductImageI18n or Criteria object.
|
||||||
|
*
|
||||||
|
* @param mixed $criteria Criteria or ProductImageI18n object containing data that is used to create the INSERT statement.
|
||||||
|
* @param ConnectionInterface $con the ConnectionInterface connection to use
|
||||||
|
* @return mixed The new primary key.
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
*/
|
||||||
|
public static function doInsert($criteria, ConnectionInterface $con = null)
|
||||||
|
{
|
||||||
|
if (null === $con) {
|
||||||
|
$con = Propel::getServiceContainer()->getWriteConnection(ProductImageI18nTableMap::DATABASE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($criteria instanceof Criteria) {
|
||||||
|
$criteria = clone $criteria; // rename for clarity
|
||||||
|
} else {
|
||||||
|
$criteria = $criteria->buildCriteria(); // build Criteria from ProductImageI18n object
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Set the correct dbName
|
||||||
|
$query = ProductImageI18nQuery::create()->mergeWith($criteria);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// use transaction because $criteria could contain info
|
||||||
|
// for more than one table (I guess, conceivably)
|
||||||
|
$con->beginTransaction();
|
||||||
|
$pk = $query->doInsert($con);
|
||||||
|
$con->commit();
|
||||||
|
} catch (PropelException $e) {
|
||||||
|
$con->rollBack();
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $pk;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // ProductImageI18nTableMap
|
||||||
|
// This is the static code needed to register the TableMap for this table with the main Propel class.
|
||||||
|
//
|
||||||
|
ProductImageI18nTableMap::buildTableMap();
|
||||||
475
core/lib/Thelia/Model/Map/ProductImageTableMap.php
Normal file
@@ -0,0 +1,475 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Thelia\Model\Map;
|
||||||
|
|
||||||
|
use Propel\Runtime\Propel;
|
||||||
|
use Propel\Runtime\ActiveQuery\Criteria;
|
||||||
|
use Propel\Runtime\ActiveQuery\InstancePoolTrait;
|
||||||
|
use Propel\Runtime\Connection\ConnectionInterface;
|
||||||
|
use Propel\Runtime\Exception\PropelException;
|
||||||
|
use Propel\Runtime\Map\RelationMap;
|
||||||
|
use Propel\Runtime\Map\TableMap;
|
||||||
|
use Propel\Runtime\Map\TableMapTrait;
|
||||||
|
use Thelia\Model\ProductImage;
|
||||||
|
use Thelia\Model\ProductImageQuery;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class defines the structure of the 'product_image' table.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This map class is used by Propel to do runtime db structure discovery.
|
||||||
|
* For example, the createSelectSql() method checks the type of a given column used in an
|
||||||
|
* ORDER BY clause to know whether it needs to apply SQL to make the ORDER BY case-insensitive
|
||||||
|
* (i.e. if it's a text column type).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class ProductImageTableMap extends TableMap
|
||||||
|
{
|
||||||
|
use InstancePoolTrait;
|
||||||
|
use TableMapTrait;
|
||||||
|
/**
|
||||||
|
* The (dot-path) name of this class
|
||||||
|
*/
|
||||||
|
const CLASS_NAME = 'Thelia.Model.Map.ProductImageTableMap';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default database name for this class
|
||||||
|
*/
|
||||||
|
const DATABASE_NAME = 'thelia';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The table name for this class
|
||||||
|
*/
|
||||||
|
const TABLE_NAME = 'product_image';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The related Propel class for this table
|
||||||
|
*/
|
||||||
|
const OM_CLASS = '\\Thelia\\Model\\ProductImage';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class that can be returned by this tableMap
|
||||||
|
*/
|
||||||
|
const CLASS_DEFAULT = 'Thelia.Model.ProductImage';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The total number of columns
|
||||||
|
*/
|
||||||
|
const NUM_COLUMNS = 6;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of lazy-loaded columns
|
||||||
|
*/
|
||||||
|
const NUM_LAZY_LOAD_COLUMNS = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of columns to hydrate (NUM_COLUMNS - NUM_LAZY_LOAD_COLUMNS)
|
||||||
|
*/
|
||||||
|
const NUM_HYDRATE_COLUMNS = 6;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the column name for the ID field
|
||||||
|
*/
|
||||||
|
const ID = 'product_image.ID';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the column name for the PRODUCT_ID field
|
||||||
|
*/
|
||||||
|
const PRODUCT_ID = 'product_image.PRODUCT_ID';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the column name for the FILE field
|
||||||
|
*/
|
||||||
|
const FILE = 'product_image.FILE';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the column name for the POSITION field
|
||||||
|
*/
|
||||||
|
const POSITION = 'product_image.POSITION';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the column name for the CREATED_AT field
|
||||||
|
*/
|
||||||
|
const CREATED_AT = 'product_image.CREATED_AT';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the column name for the UPDATED_AT field
|
||||||
|
*/
|
||||||
|
const UPDATED_AT = 'product_image.UPDATED_AT';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default string format for model objects of the related table
|
||||||
|
*/
|
||||||
|
const DEFAULT_STRING_FORMAT = 'YAML';
|
||||||
|
|
||||||
|
// i18n behavior
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default locale to use for translations.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
const DEFAULT_LOCALE = 'en_US';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* holds an array of fieldnames
|
||||||
|
*
|
||||||
|
* first dimension keys are the type constants
|
||||||
|
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
|
||||||
|
*/
|
||||||
|
protected static $fieldNames = array (
|
||||||
|
self::TYPE_PHPNAME => array('Id', 'ProductId', 'File', 'Position', 'CreatedAt', 'UpdatedAt', ),
|
||||||
|
self::TYPE_STUDLYPHPNAME => array('id', 'productId', 'file', 'position', 'createdAt', 'updatedAt', ),
|
||||||
|
self::TYPE_COLNAME => array(ProductImageTableMap::ID, ProductImageTableMap::PRODUCT_ID, ProductImageTableMap::FILE, ProductImageTableMap::POSITION, ProductImageTableMap::CREATED_AT, ProductImageTableMap::UPDATED_AT, ),
|
||||||
|
self::TYPE_RAW_COLNAME => array('ID', 'PRODUCT_ID', 'FILE', 'POSITION', 'CREATED_AT', 'UPDATED_AT', ),
|
||||||
|
self::TYPE_FIELDNAME => array('id', 'product_id', 'file', 'position', 'created_at', 'updated_at', ),
|
||||||
|
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, )
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* holds an array of keys for quick access to the fieldnames array
|
||||||
|
*
|
||||||
|
* first dimension keys are the type constants
|
||||||
|
* e.g. self::$fieldKeys[self::TYPE_PHPNAME]['Id'] = 0
|
||||||
|
*/
|
||||||
|
protected static $fieldKeys = array (
|
||||||
|
self::TYPE_PHPNAME => array('Id' => 0, 'ProductId' => 1, 'File' => 2, 'Position' => 3, 'CreatedAt' => 4, 'UpdatedAt' => 5, ),
|
||||||
|
self::TYPE_STUDLYPHPNAME => array('id' => 0, 'productId' => 1, 'file' => 2, 'position' => 3, 'createdAt' => 4, 'updatedAt' => 5, ),
|
||||||
|
self::TYPE_COLNAME => array(ProductImageTableMap::ID => 0, ProductImageTableMap::PRODUCT_ID => 1, ProductImageTableMap::FILE => 2, ProductImageTableMap::POSITION => 3, ProductImageTableMap::CREATED_AT => 4, ProductImageTableMap::UPDATED_AT => 5, ),
|
||||||
|
self::TYPE_RAW_COLNAME => array('ID' => 0, 'PRODUCT_ID' => 1, 'FILE' => 2, 'POSITION' => 3, 'CREATED_AT' => 4, 'UPDATED_AT' => 5, ),
|
||||||
|
self::TYPE_FIELDNAME => array('id' => 0, 'product_id' => 1, 'file' => 2, 'position' => 3, 'created_at' => 4, 'updated_at' => 5, ),
|
||||||
|
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, )
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the table attributes and columns
|
||||||
|
* Relations are not initialized by this method since they are lazy loaded
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws PropelException
|
||||||
|
*/
|
||||||
|
public function initialize()
|
||||||
|
{
|
||||||
|
// attributes
|
||||||
|
$this->setName('product_image');
|
||||||
|
$this->setPhpName('ProductImage');
|
||||||
|
$this->setClassName('\\Thelia\\Model\\ProductImage');
|
||||||
|
$this->setPackage('Thelia.Model');
|
||||||
|
$this->setUseIdGenerator(true);
|
||||||
|
// columns
|
||||||
|
$this->addPrimaryKey('ID', 'Id', 'INTEGER', true, null, null);
|
||||||
|
$this->addForeignKey('PRODUCT_ID', 'ProductId', 'INTEGER', 'product', 'ID', true, null, null);
|
||||||
|
$this->addColumn('FILE', 'File', 'VARCHAR', true, 255, null);
|
||||||
|
$this->addColumn('POSITION', 'Position', 'INTEGER', false, null, null);
|
||||||
|
$this->addColumn('CREATED_AT', 'CreatedAt', 'TIMESTAMP', false, null, null);
|
||||||
|
$this->addColumn('UPDATED_AT', 'UpdatedAt', 'TIMESTAMP', false, null, null);
|
||||||
|
} // initialize()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the RelationMap objects for this table relationships
|
||||||
|
*/
|
||||||
|
public function buildRelations()
|
||||||
|
{
|
||||||
|
$this->addRelation('Product', '\\Thelia\\Model\\Product', RelationMap::MANY_TO_ONE, array('product_id' => 'id', ), 'CASCADE', 'RESTRICT');
|
||||||
|
$this->addRelation('ProductImageI18n', '\\Thelia\\Model\\ProductImageI18n', RelationMap::ONE_TO_MANY, array('id' => 'id', ), 'CASCADE', null, 'ProductImageI18ns');
|
||||||
|
} // buildRelations()
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Gets the list of behaviors registered for this table
|
||||||
|
*
|
||||||
|
* @return array Associative array (name => parameters) of behaviors
|
||||||
|
*/
|
||||||
|
public function getBehaviors()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'timestampable' => array('create_column' => 'created_at', 'update_column' => 'updated_at', ),
|
||||||
|
'i18n' => array('i18n_table' => '%TABLE%_i18n', 'i18n_phpname' => '%PHPNAME%I18n', 'i18n_columns' => 'title, description, chapo, postscriptum', 'locale_column' => 'locale', 'locale_length' => '5', 'default_locale' => '', 'locale_alias' => '', ),
|
||||||
|
);
|
||||||
|
} // getBehaviors()
|
||||||
|
/**
|
||||||
|
* Method to invalidate the instance pool of all tables related to product_image * by a foreign key with ON DELETE CASCADE
|
||||||
|
*/
|
||||||
|
public static function clearRelatedInstancePool()
|
||||||
|
{
|
||||||
|
// Invalidate objects in ".$this->getClassNameFromBuilder($joinedTableTableMapBuilder)." instance pool,
|
||||||
|
// since one or more of them may be deleted by ON DELETE CASCADE/SETNULL rule.
|
||||||
|
ProductImageI18nTableMap::clearInstancePool();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a string version of the primary key from the DB resultset row that can be used to uniquely identify a row in this table.
|
||||||
|
*
|
||||||
|
* For tables with a single-column primary key, that simple pkey value will be returned. For tables with
|
||||||
|
* a multi-column primary key, a serialize()d version of the primary key will be returned.
|
||||||
|
*
|
||||||
|
* @param array $row resultset row.
|
||||||
|
* @param int $offset The 0-based offset for reading from the resultset row.
|
||||||
|
* @param string $indexType One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME
|
||||||
|
* TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM
|
||||||
|
*/
|
||||||
|
public static function getPrimaryKeyHashFromRow($row, $offset = 0, $indexType = TableMap::TYPE_NUM)
|
||||||
|
{
|
||||||
|
// If the PK cannot be derived from the row, return NULL.
|
||||||
|
if ($row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType)] === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (string) $row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType)];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the primary key from the DB resultset row
|
||||||
|
* For tables with a single-column primary key, that simple pkey value will be returned. For tables with
|
||||||
|
* a multi-column primary key, an array of the primary key columns will be returned.
|
||||||
|
*
|
||||||
|
* @param array $row resultset row.
|
||||||
|
* @param int $offset The 0-based offset for reading from the resultset row.
|
||||||
|
* @param string $indexType One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME
|
||||||
|
* TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM
|
||||||
|
*
|
||||||
|
* @return mixed The primary key of the row
|
||||||
|
*/
|
||||||
|
public static function getPrimaryKeyFromRow($row, $offset = 0, $indexType = TableMap::TYPE_NUM)
|
||||||
|
{
|
||||||
|
|
||||||
|
return (int) $row[
|
||||||
|
$indexType == TableMap::TYPE_NUM
|
||||||
|
? 0 + $offset
|
||||||
|
: self::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The class that the tableMap will make instances of.
|
||||||
|
*
|
||||||
|
* If $withPrefix is true, the returned path
|
||||||
|
* uses a dot-path notation which is translated into a path
|
||||||
|
* relative to a location on the PHP include_path.
|
||||||
|
* (e.g. path.to.MyClass -> 'path/to/MyClass.php')
|
||||||
|
*
|
||||||
|
* @param boolean $withPrefix Whether or not to return the path with the class name
|
||||||
|
* @return string path.to.ClassName
|
||||||
|
*/
|
||||||
|
public static function getOMClass($withPrefix = true)
|
||||||
|
{
|
||||||
|
return $withPrefix ? ProductImageTableMap::CLASS_DEFAULT : ProductImageTableMap::OM_CLASS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populates an object of the default type or an object that inherit from the default.
|
||||||
|
*
|
||||||
|
* @param array $row row returned by DataFetcher->fetch().
|
||||||
|
* @param int $offset The 0-based offset for reading from the resultset row.
|
||||||
|
* @param string $indexType The index type of $row. Mostly DataFetcher->getIndexType().
|
||||||
|
One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME
|
||||||
|
* TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
|
||||||
|
*
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
* @return array (ProductImage object, last column rank)
|
||||||
|
*/
|
||||||
|
public static function populateObject($row, $offset = 0, $indexType = TableMap::TYPE_NUM)
|
||||||
|
{
|
||||||
|
$key = ProductImageTableMap::getPrimaryKeyHashFromRow($row, $offset, $indexType);
|
||||||
|
if (null !== ($obj = ProductImageTableMap::getInstanceFromPool($key))) {
|
||||||
|
// We no longer rehydrate the object, since this can cause data loss.
|
||||||
|
// See http://www.propelorm.org/ticket/509
|
||||||
|
// $obj->hydrate($row, $offset, true); // rehydrate
|
||||||
|
$col = $offset + ProductImageTableMap::NUM_HYDRATE_COLUMNS;
|
||||||
|
} else {
|
||||||
|
$cls = ProductImageTableMap::OM_CLASS;
|
||||||
|
$obj = new $cls();
|
||||||
|
$col = $obj->hydrate($row, $offset, false, $indexType);
|
||||||
|
ProductImageTableMap::addInstanceToPool($obj, $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return array($obj, $col);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The returned array will contain objects of the default type or
|
||||||
|
* objects that inherit from the default.
|
||||||
|
*
|
||||||
|
* @param DataFetcherInterface $dataFetcher
|
||||||
|
* @return array
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
*/
|
||||||
|
public static function populateObjects(DataFetcherInterface $dataFetcher)
|
||||||
|
{
|
||||||
|
$results = array();
|
||||||
|
|
||||||
|
// set the class once to avoid overhead in the loop
|
||||||
|
$cls = static::getOMClass(false);
|
||||||
|
// populate the object(s)
|
||||||
|
while ($row = $dataFetcher->fetch()) {
|
||||||
|
$key = ProductImageTableMap::getPrimaryKeyHashFromRow($row, 0, $dataFetcher->getIndexType());
|
||||||
|
if (null !== ($obj = ProductImageTableMap::getInstanceFromPool($key))) {
|
||||||
|
// We no longer rehydrate the object, since this can cause data loss.
|
||||||
|
// See http://www.propelorm.org/ticket/509
|
||||||
|
// $obj->hydrate($row, 0, true); // rehydrate
|
||||||
|
$results[] = $obj;
|
||||||
|
} else {
|
||||||
|
$obj = new $cls();
|
||||||
|
$obj->hydrate($row);
|
||||||
|
$results[] = $obj;
|
||||||
|
ProductImageTableMap::addInstanceToPool($obj, $key);
|
||||||
|
} // if key exists
|
||||||
|
}
|
||||||
|
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Add all the columns needed to create a new object.
|
||||||
|
*
|
||||||
|
* Note: any columns that were marked with lazyLoad="true" in the
|
||||||
|
* XML schema will not be added to the select list and only loaded
|
||||||
|
* on demand.
|
||||||
|
*
|
||||||
|
* @param Criteria $criteria object containing the columns to add.
|
||||||
|
* @param string $alias optional table alias
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
*/
|
||||||
|
public static function addSelectColumns(Criteria $criteria, $alias = null)
|
||||||
|
{
|
||||||
|
if (null === $alias) {
|
||||||
|
$criteria->addSelectColumn(ProductImageTableMap::ID);
|
||||||
|
$criteria->addSelectColumn(ProductImageTableMap::PRODUCT_ID);
|
||||||
|
$criteria->addSelectColumn(ProductImageTableMap::FILE);
|
||||||
|
$criteria->addSelectColumn(ProductImageTableMap::POSITION);
|
||||||
|
$criteria->addSelectColumn(ProductImageTableMap::CREATED_AT);
|
||||||
|
$criteria->addSelectColumn(ProductImageTableMap::UPDATED_AT);
|
||||||
|
} else {
|
||||||
|
$criteria->addSelectColumn($alias . '.ID');
|
||||||
|
$criteria->addSelectColumn($alias . '.PRODUCT_ID');
|
||||||
|
$criteria->addSelectColumn($alias . '.FILE');
|
||||||
|
$criteria->addSelectColumn($alias . '.POSITION');
|
||||||
|
$criteria->addSelectColumn($alias . '.CREATED_AT');
|
||||||
|
$criteria->addSelectColumn($alias . '.UPDATED_AT');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the TableMap related to this object.
|
||||||
|
* This method is not needed for general use but a specific application could have a need.
|
||||||
|
* @return TableMap
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
*/
|
||||||
|
public static function getTableMap()
|
||||||
|
{
|
||||||
|
return Propel::getServiceContainer()->getDatabaseMap(ProductImageTableMap::DATABASE_NAME)->getTable(ProductImageTableMap::TABLE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a TableMap instance to the database for this tableMap class.
|
||||||
|
*/
|
||||||
|
public static function buildTableMap()
|
||||||
|
{
|
||||||
|
$dbMap = Propel::getServiceContainer()->getDatabaseMap(ProductImageTableMap::DATABASE_NAME);
|
||||||
|
if (!$dbMap->hasTable(ProductImageTableMap::TABLE_NAME)) {
|
||||||
|
$dbMap->addTableObject(new ProductImageTableMap());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a DELETE on the database, given a ProductImage or Criteria object OR a primary key value.
|
||||||
|
*
|
||||||
|
* @param mixed $values Criteria or ProductImage object or primary key or array of primary keys
|
||||||
|
* which is used to create the DELETE statement
|
||||||
|
* @param ConnectionInterface $con the connection to use
|
||||||
|
* @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows
|
||||||
|
* if supported by native driver or if emulated using Propel.
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
*/
|
||||||
|
public static function doDelete($values, ConnectionInterface $con = null)
|
||||||
|
{
|
||||||
|
if (null === $con) {
|
||||||
|
$con = Propel::getServiceContainer()->getWriteConnection(ProductImageTableMap::DATABASE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($values instanceof Criteria) {
|
||||||
|
// rename for clarity
|
||||||
|
$criteria = $values;
|
||||||
|
} elseif ($values instanceof \Thelia\Model\ProductImage) { // it's a model object
|
||||||
|
// create criteria based on pk values
|
||||||
|
$criteria = $values->buildPkeyCriteria();
|
||||||
|
} else { // it's a primary key, or an array of pks
|
||||||
|
$criteria = new Criteria(ProductImageTableMap::DATABASE_NAME);
|
||||||
|
$criteria->add(ProductImageTableMap::ID, (array) $values, Criteria::IN);
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = ProductImageQuery::create()->mergeWith($criteria);
|
||||||
|
|
||||||
|
if ($values instanceof Criteria) { ProductImageTableMap::clearInstancePool();
|
||||||
|
} elseif (!is_object($values)) { // it's a primary key, or an array of pks
|
||||||
|
foreach ((array) $values as $singleval) { ProductImageTableMap::removeInstanceFromPool($singleval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $query->delete($con);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes all rows from the product_image table.
|
||||||
|
*
|
||||||
|
* @param ConnectionInterface $con the connection to use
|
||||||
|
* @return int The number of affected rows (if supported by underlying database driver).
|
||||||
|
*/
|
||||||
|
public static function doDeleteAll(ConnectionInterface $con = null)
|
||||||
|
{
|
||||||
|
return ProductImageQuery::create()->doDeleteAll($con);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs an INSERT on the database, given a ProductImage or Criteria object.
|
||||||
|
*
|
||||||
|
* @param mixed $criteria Criteria or ProductImage object containing data that is used to create the INSERT statement.
|
||||||
|
* @param ConnectionInterface $con the ConnectionInterface connection to use
|
||||||
|
* @return mixed The new primary key.
|
||||||
|
* @throws PropelException Any exceptions caught during processing will be
|
||||||
|
* rethrown wrapped into a PropelException.
|
||||||
|
*/
|
||||||
|
public static function doInsert($criteria, ConnectionInterface $con = null)
|
||||||
|
{
|
||||||
|
if (null === $con) {
|
||||||
|
$con = Propel::getServiceContainer()->getWriteConnection(ProductImageTableMap::DATABASE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($criteria instanceof Criteria) {
|
||||||
|
$criteria = clone $criteria; // rename for clarity
|
||||||
|
} else {
|
||||||
|
$criteria = $criteria->buildCriteria(); // build Criteria from ProductImage object
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($criteria->containsKey(ProductImageTableMap::ID) && $criteria->keyContainsValue(ProductImageTableMap::ID) ) {
|
||||||
|
throw new PropelException('Cannot insert a value for auto-increment primary key ('.ProductImageTableMap::ID.')');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Set the correct dbName
|
||||||
|
$query = ProductImageQuery::create()->mergeWith($criteria);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// use transaction because $criteria could contain info
|
||||||
|
// for more than one table (I guess, conceivably)
|
||||||
|
$con->beginTransaction();
|
||||||
|
$pk = $query->doInsert($con);
|
||||||
|
$con->commit();
|
||||||
|
} catch (PropelException $e) {
|
||||||
|
$con->rollBack();
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $pk;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // ProductImageTableMap
|
||||||
|
// This is the static code needed to register the TableMap for this table with the main Propel class.
|
||||||
|
//
|
||||||
|
ProductImageTableMap::buildTableMap();
|
||||||
10
core/lib/Thelia/Model/ProductImage.php
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Thelia\Model;
|
||||||
|
|
||||||
|
use Thelia\Model\Base\ProductImage as BaseProductImage;
|
||||||
|
|
||||||
|
class ProductImage extends BaseProductImage
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
10
core/lib/Thelia/Model/ProductImageI18n.php
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Thelia\Model;
|
||||||
|
|
||||||
|
use Thelia\Model\Base\ProductImageI18n as BaseProductImageI18n;
|
||||||
|
|
||||||
|
class ProductImageI18n extends BaseProductImageI18n
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
21
core/lib/Thelia/Model/ProductImageI18nQuery.php
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Thelia\Model;
|
||||||
|
|
||||||
|
use Thelia\Model\Base\ProductImageI18nQuery as BaseProductImageI18nQuery;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Skeleton subclass for performing query and update operations on the 'product_image_i18n' table.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* You should add additional methods to this class to meet the
|
||||||
|
* application requirements. This class will only be generated as
|
||||||
|
* long as it does not already exist in the output directory.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class ProductImageI18nQuery extends BaseProductImageI18nQuery
|
||||||
|
{
|
||||||
|
|
||||||
|
} // ProductImageI18nQuery
|
||||||
21
core/lib/Thelia/Model/ProductImageQuery.php
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Thelia\Model;
|
||||||
|
|
||||||
|
use Thelia\Model\Base\ProductImageQuery as BaseProductImageQuery;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Skeleton subclass for performing query and update operations on the 'product_image' table.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* You should add additional methods to this class to meet the
|
||||||
|
* application requirements. This class will only be generated as
|
||||||
|
* long as it does not already exist in the output directory.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class ProductImageQuery extends BaseProductImageQuery
|
||||||
|
{
|
||||||
|
|
||||||
|
} // ProductImageQuery
|
||||||
318
core/lib/Thelia/Tests/Action/ImageTest.php
Normal file
@@ -0,0 +1,318 @@
|
|||||||
|
<?php
|
||||||
|
use Thelia\Core\Event\ImageEvent;
|
||||||
|
use Thelia\Action\Image;
|
||||||
|
/*************************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* Thelia */
|
||||||
|
/* */
|
||||||
|
/* Copyright (c) OpenStudio */
|
||||||
|
/* email : info@thelia.net */
|
||||||
|
/* web : http://www.thelia.net */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU General Public License as published by */
|
||||||
|
/* the Free Software Foundation; either version 3 of the License */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public License */
|
||||||
|
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
/* */
|
||||||
|
/*************************************************************************************/
|
||||||
|
|
||||||
|
namespace Thelia\Tests\Action\ImageTest;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;
|
||||||
|
use Thelia\Core\HttpFoundation\Request;
|
||||||
|
use Thelia\Core\HttpFoundation\Session\Session;
|
||||||
|
|
||||||
|
use Thelia\Action\Image;
|
||||||
|
use Thelia\Core\Event\ImageEvent;
|
||||||
|
use Thelia\Model\ConfigQuery;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ImageTest
|
||||||
|
*
|
||||||
|
* @package Thelia\Tests\Action\ImageTest
|
||||||
|
*/
|
||||||
|
class ImageTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
protected $request;
|
||||||
|
|
||||||
|
protected $session;
|
||||||
|
|
||||||
|
public function getContainer()
|
||||||
|
{
|
||||||
|
$container = new \Symfony\Component\DependencyInjection\ContainerBuilder();
|
||||||
|
|
||||||
|
$dispatcher = $this->getMock("Symfony\Component\EventDispatcher\EventDispatcherInterface");
|
||||||
|
|
||||||
|
$container->set("event_dispatcher", $dispatcher);
|
||||||
|
|
||||||
|
return $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
$this->session = new Session(new MockArraySessionStorage());
|
||||||
|
$this->request = new Request();
|
||||||
|
|
||||||
|
$this->request->setSession($this->session);
|
||||||
|
|
||||||
|
// mock cache configuration.
|
||||||
|
$config = ConfigQuery::create()->filterByName('image_cache_dir_from_web_root')->findOne();
|
||||||
|
|
||||||
|
if ($config != null) {
|
||||||
|
$this->cache_dir_from_web_root = $config->getValue();
|
||||||
|
|
||||||
|
$config->setValue(__DIR__."/assets/images/cache");
|
||||||
|
|
||||||
|
$config->setValue($this->cache_dir_from_web_root)->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function setUpBeforeClass() {
|
||||||
|
$dir = THELIA_WEB_DIR."/cache/tests";
|
||||||
|
if ($dh = opendir($dir)) {
|
||||||
|
while ($file = readdir($dh)) {
|
||||||
|
if ($file == '.' || $file == '..') continue;
|
||||||
|
|
||||||
|
unlink(sprintf("%s/%s", $dir, $file));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function tearDown() {
|
||||||
|
// restore cache configuration.
|
||||||
|
$config = ConfigQuery::create()->filterByName('image_cache_dir_from_web_root')->findOne();
|
||||||
|
|
||||||
|
if ($config != null) {
|
||||||
|
$config->setValue($this->cache_dir_from_web_root)->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Imageevent is empty, mandatory parameters not specified.
|
||||||
|
*
|
||||||
|
* @expectedException \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function testProcessEmptyImageEvent()
|
||||||
|
{
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
$image = new Image($this->getContainer());
|
||||||
|
|
||||||
|
$image->processImage($event);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Tru to process a non-existent file
|
||||||
|
*
|
||||||
|
* @expectedException \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function testProcessNonExistentImage()
|
||||||
|
{
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
$image = new Image($this->getContainer());
|
||||||
|
|
||||||
|
$event->setCacheFilepath("blablabla.png");
|
||||||
|
$event->setCacheSubdirectory("tests");
|
||||||
|
|
||||||
|
$image->processImage($event);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No operation done on source file -> copie !
|
||||||
|
*/
|
||||||
|
public function testProcessImageWithoutAnyTransformationsCopy()
|
||||||
|
{
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
$event->setSourceFilepath(__DIR__."/assets/images/sources/test-image-1.png");
|
||||||
|
$event->setCacheSubdirectory("tests");
|
||||||
|
|
||||||
|
$image = new Image($this->getContainer());
|
||||||
|
|
||||||
|
// mock cache configuration.
|
||||||
|
$config = ConfigQuery::create()->filterByName('original_image_delivery_mode')->findOne();
|
||||||
|
|
||||||
|
if ($config != null) {
|
||||||
|
$oldval = $config->getValue();
|
||||||
|
$config->setValue('copy')->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
$image->processImage($event);
|
||||||
|
|
||||||
|
if ($config != null) $config->setValue($oldval)->save();
|
||||||
|
|
||||||
|
$this->assertFileExists(THELIA_WEB_DIR."/cache/tests/test-image-1.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No operation done on source file -> copie !
|
||||||
|
*/
|
||||||
|
public function testProcessImageWithoutAnyTransformationsSymlink()
|
||||||
|
{
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
$event->setSourceFilepath(__DIR__."/assets/images/sources/test-image-9.png");
|
||||||
|
$event->setCacheSubdirectory("tests");
|
||||||
|
|
||||||
|
$image = new Image($this->getContainer());
|
||||||
|
|
||||||
|
// mock cache configuration.
|
||||||
|
$config = ConfigQuery::create()->filterByName('original_image_delivery_mode')->findOne();
|
||||||
|
|
||||||
|
if ($config != null) {
|
||||||
|
$oldval = $config->getValue();
|
||||||
|
$config->setValue('symlink')->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
$image->processImage($event);
|
||||||
|
|
||||||
|
if ($config != null) $config->setValue($oldval)->save();
|
||||||
|
|
||||||
|
$this->assertFileExists(THELIA_WEB_DIR."/cache/tests/test-image-9.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resize image with bands width > height
|
||||||
|
*/
|
||||||
|
public function testProcessImageResizeHorizWithBands()
|
||||||
|
{
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
$event->setSourceFilepath(__DIR__."/assets/images/sources/test-image-2.png");
|
||||||
|
$event->setCacheSubdirectory("tests");
|
||||||
|
|
||||||
|
$event->setBackgroundColor('#ff0000');
|
||||||
|
$event->setWidth(100);
|
||||||
|
$event->setHeight(100);
|
||||||
|
$event->setResizeMode(Image::EXACT_RATIO_WITH_BORDERS);
|
||||||
|
|
||||||
|
$image = new Image($this->getContainer());
|
||||||
|
|
||||||
|
$image->processImage($event);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resize image with bands height > width
|
||||||
|
*/
|
||||||
|
public function testProcessImageResizeVertWithBands()
|
||||||
|
{
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
$event->setSourceFilepath(__DIR__."/assets/images/sources/test-image-3.png");
|
||||||
|
$event->setCacheSubdirectory("tests");
|
||||||
|
|
||||||
|
$event->setBackgroundColor('#ff0000');
|
||||||
|
$event->setWidth(100);
|
||||||
|
$event->setHeight(100);
|
||||||
|
$event->setResizeMode(Image::EXACT_RATIO_WITH_BORDERS);
|
||||||
|
|
||||||
|
$image = new Image($this->getContainer());
|
||||||
|
|
||||||
|
$image->processImage($event);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply all transformations
|
||||||
|
*/
|
||||||
|
public function testProcessImageWithTransformations()
|
||||||
|
{
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
$event->setSourceFilepath(__DIR__."/assets/images/sources/test-image-4.png");
|
||||||
|
$event->setCacheSubdirectory("tests");
|
||||||
|
|
||||||
|
$event->setEffects(array("grayscale", "vertical_flip", "horizontal_flip", 'colorize:#00ff00', 'gamma: 0.2'));
|
||||||
|
|
||||||
|
$image = new Image($this->getContainer());
|
||||||
|
|
||||||
|
$image->processImage($event);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resize image with crop width > height
|
||||||
|
*/
|
||||||
|
public function testProcessImageResizeHorizWithCrop()
|
||||||
|
{
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
$event->setSourceFilepath(__DIR__."/assets/images/sources/test-image-5.png");
|
||||||
|
$event->setCacheSubdirectory("tests");
|
||||||
|
|
||||||
|
$event->setBackgroundColor('#ff0000');
|
||||||
|
$event->setWidth(180);
|
||||||
|
$event->setHeight(100);
|
||||||
|
$event->setResizeMode(Image::EXACT_RATIO_WITH_CROP);
|
||||||
|
|
||||||
|
$image = new Image($this->getContainer());
|
||||||
|
|
||||||
|
$image->processImage($event);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resize image with crop height > width
|
||||||
|
*/
|
||||||
|
public function testProcessImageResizeVertWithCrop()
|
||||||
|
{
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
$event->setSourceFilepath(__DIR__."/assets/images/sources/test-image-6.png");
|
||||||
|
$event->setCacheSubdirectory("tests");
|
||||||
|
|
||||||
|
$event->setBackgroundColor('#ff0000');
|
||||||
|
$event->setWidth(100);
|
||||||
|
$event->setHeight(150);
|
||||||
|
$event->setResizeMode(Image::EXACT_RATIO_WITH_CROP);
|
||||||
|
|
||||||
|
$image = new Image($this->getContainer());
|
||||||
|
|
||||||
|
$image->processImage($event);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resize image keeping image ration
|
||||||
|
*/
|
||||||
|
public function testProcessImageResizeHorizKeepRatio()
|
||||||
|
{
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
$event->setSourceFilepath(__DIR__."/assets/images/sources/test-image-7.png");
|
||||||
|
$event->setCacheSubdirectory("tests");
|
||||||
|
|
||||||
|
$event->setWidth(100);
|
||||||
|
$event->setHeight(100);
|
||||||
|
|
||||||
|
$image = new Image($this->getContainer());
|
||||||
|
|
||||||
|
$image->processImage($event);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resize image with crop height > width
|
||||||
|
*/
|
||||||
|
public function testProcessImageResizeVertKeepRatio()
|
||||||
|
{
|
||||||
|
$event = new ImageEvent($this->request);
|
||||||
|
|
||||||
|
$event->setSourceFilepath(__DIR__."/assets/images/sources/test-image-8.png");
|
||||||
|
$event->setCacheSubdirectory("tests");
|
||||||
|
|
||||||
|
$event->setWidth(100);
|
||||||
|
$event->setHeight(100);
|
||||||
|
|
||||||
|
$image = new Image($this->getContainer());
|
||||||
|
|
||||||
|
$image->processImage($event);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |