Ciao a tutti, volevo sapere se qualcuno sa risolvermi questo piccolo problema che ho con il componente di Yootheme "Zoo"
Ho creato sul componente una nuova applicazione dove ho definito Textare, Immagini . . .
Tuttavia questo componente mi permette di inserire solo immagini hostate sul mio server perchè aggiunge di base la "path" del mio dominio, qualcuno ha idea di come io possa caricare immagini non hostate sul mio server?
Penso che ciò che gestisca questa funzione sia il file /media/zoo/elements/image/image.php
<?php
/**
* @package com_zoo
* @author YOOtheme http://www.yootheme.com
* @copyright Copyright (C) YOOtheme GmbH
* @license http://www.gnu.org/licenses/gpl.html GNU/GPL
*/
/*
Class: ElementImage
The image element class
*/
class ElementImage extends Element implements iSubmittable {
/*
Function: hasValue
Checks if the element's value is set.
Parameters:
$params - render parameter
Returns:
Boolean - true, on success
*/
public function hasValue($params = array()) {
$file = $this->get('file');
return !empty($file) && JFile::exists($this->get('file'));
}
/*
Function: getSearchData
Get elements search data.
Returns:
String - Search data
*/
public function getSearchData() {
return $this->get('title');
}
/*
Function: render
Renders the element.
Parameters:
$params - render parameter
Returns:
String - html
*/
public function render($params = array()) {
// init vars
$params = $this->app->data->create($params);
$title = $this->get('title');
$file = $this->app->zoo->resizeImage(JPATH_ROOT.'/'.$this->get('file'), $params->get('width', 0), $params->get('height', 0));
$link = JURI::root() . $this->app->path->relative($file);
$url = $target = $rel = '';
if ($params->get('link_to_item', false)) {
if ($this->getItem()->getState()) {
$url = $this->app->route->item($this->_item);
$title = empty($title) ? $this->_item->name : $title;
}
} else if ($this->get('link')) {
$url = $this->get('link');
$target = $this->get('target');
$rel = $this->get('rel');
}
// get alt
$alt = empty($title) ? $this->_item->name : $title;
// render layout
if ($file && $layout = $this->getLayout()) {
return $this->renderLayout($layout,
compact('file', 'title', 'alt', 'link', 'params', 'url', 'target', 'rel')
);
}
return null;
}
/*
Function: edit
Renders the edit form field.
Returns:
String - html
*/
public function edit() {
$this->app->document->addScript('assets:js/image.js');
if ($layout = $this->getLayout('edit.php')) {
return $this->renderLayout($layout);
}
}
/*
Function: renderSubmission
Renders the element in submission.
Parameters:
$params - AppData submission parameters
Returns:
String - html
*/
public function renderSubmission($params = array()) {
// load js
$this->app->document->addScript('elements:image/image.js');
// init vars
$image = $this->get('file');
// is uploaded file
$image = is_array($image) ? '' : $image;
// get params
$trusted_mode = $params->get('trusted_mode');
// build image select
$lists = array();
if ($trusted_mode) {
$options = array($this->app->html->_('select.option', '', '- '.JText::_('Select Image').' -'));
if (!empty($image) && !$this->_inUploadPath($image)) {
$options[] = $this->app->html->_('select.option', $image, '- '.JText::_('No Change').' -');
}
$img_ext = str_replace(',', '|', trim(JComponentHelper::getParams('com_media')->get('image_extensions'), ','));
foreach ($this->app->path->files('root:'.$this->_getUploadImagePath(), false, '/\.('.$img_ext.')$/i') as $file) {
$options[] = $this->app->html->_('select.option', $this->_getUploadImagePath().'/'.$file, $file);
}
$lists['image_select'] = $this->app->html->_('select.genericlist', $options, $this->getControlName('image'), 'class="image"', 'value', 'text', $image);
} else {
if (!empty($image)) {
$image = $this->app->zoo->resizeImage($this->app->path->path('root:' . $image), 0, 0);
$image = $this->app->path->relative($image);
}
}
if (!empty($image)) {
$image = $this->app->path->url('root:' . $image);
}
if ($layout = $this->getLayout('submission.php')) {
return $this->renderLayout($layout,
compact('lists', 'image', 'trusted_mode')
);
}
}
/*
Function: validateSubmission
Validates the submitted element
Parameters:
$value - AppData value
$params - AppData submission parameters
Returns:
Array - cleaned value
*/
public function validateSubmission($value, $params) {
// init vars
$trusted_mode = $params->get('trusted_mode');
// get old file value
$old_file = $this->get('file');
$file = '';
// get file from select list
if ($trusted_mode && $file = $value->get('image')) {
if (!$this->_inUploadPath($file) && $file != $old_file) {
throw new AppValidatorException(sprintf('This file is not located in the upload directory.'));
}
if (!JFile::exists($file)) {
throw new AppValidatorException(sprintf('This file does not exist.'));
}
// get file from upload
} else {
try {
// get the uploaded file information
$userfile = $value->get('userfile', null);
$max_upload_size = $this->config->get('max_upload_size', '512') * 1024;
$max_upload_size = empty($max_upload_size) ? null : $max_upload_size;
$file = $this->app->validator
->create('file', array('mime_type_group' => 'image', 'max_size' => $max_upload_size))
->addMessage('mime_type_group', 'Uploaded file is not an image.')
->clean($userfile);
} catch (AppValidatorException $e) {
if ($e->getCode() != UPLOAD_ERR_NO_FILE) {
throw $e;
}
if (!$trusted_mode && $old_file && $value->get('image')) {
$file = $old_file;
}
}
}
if ($params->get('required') && empty($file)) {
throw new AppValidatorException('Please select an image to upload.');
}
$result = compact('file');
if ($trusted_mode) {
$result['title'] = $this->app->validator->create('string', array('required' => false))->clean($value->get('title'));
$result['link'] = $this->app->validator->create('url', array('required' => false), array('required' => 'Please enter an URL.'))->clean($value->get('link'));
$result['target'] = $this->app->validator->create('', array('required' => false))->clean($value->get('target'));
$result['rel'] = $this->app->validator->create('string', array('required' => false))->clean($value->get('rel'));
}
// connect to submission beforesave event
$this->app->event->dispatcher->connect('submission:beforesave', array($this, 'submissionBeforeSave'));
return $result;
}
protected function _inUploadPath($image) {
return $this->_getUploadImagePath() == dirname($image);
}
protected function _getUploadImagePath() {
return trim(trim($this->config->get('upload_directory', '')), '\/');
}
/*
Function: submissionBeforeSave
Callback before item submission is saved
Returns:
void
*/
public function submissionBeforeSave() {
// get the uploaded file information
if (($userfile = $this->get('file')) && is_array($userfile)) {
// get file name
$ext = $this->app->filesystem->getExtension($userfile['name']);
$base_path = JPATH_ROOT . '/' . $this->_getUploadImagePath() . '/';
$file = $base_path . $userfile['name'];
$filename = basename($file, '.'.$ext);
$i = 1;
while (JFile::exists($file)) {
$file = $base_path . $filename . '-' . $i++ . '.' . $ext;
}
if (!JFile::upload($userfile['tmp_name'], $file)) {
throw new AppException('Unable to upload file.');
}
$this->app->zoo->putIndexFile(dirname($file));
$this->set('file', $this->app->path->relative($file));
}
}
/*
Function: bindData
Set data through data array.
Parameters:
$data - array
Returns:
Void
*/
public function bindData($data = array()) {
parent::bindData($data);
// add image width/height
$file = $this->get('file');
if ($file && $filepath = $this->app->path->path($file)) {
$size = getimagesize($filepath);
$this->set('width', ($size ? $size[0] : 0));
$this->set('height', ($size ? $size[1] : 0));
}
}
}