fix #728 check if thumbExtractor is supported

remove fileReader its not needed

fix unit tests

fix typo

remove unecessary message
This commit is contained in:
Nicolas Le Goff
2012-06-18 16:11:28 +02:00
parent 44c34b2b75
commit 4edb26c6c6
8 changed files with 318 additions and 298 deletions

View File

@@ -17,6 +17,8 @@ use Doctrine\ORM\EntityManager;
use Entities\LazaretAttribute;
use Entities\LazaretFile;
use Entities\LazaretSession;
use MediaAlchemyst\Exception\Exception as MediaAlchemystException;
use MediaAlchemyst\Specification\Image as ImageSpec;
use Monolog\Logger;
use PHPExiftool\Driver\Metadata\Metadata;
use PHPExiftool\Driver\Value\Mono as MonoValue;
@@ -398,9 +400,9 @@ class Manager
$this->filesystem->copy($file->getFile()->getRealPath(), $lazaretPathname, true);
$spec = new \MediaAlchemyst\Specification\Image();
$spec = new ImageSpec();
$spec->setResizeMode(\MediaAlchemyst\Specification\Image::RESIZE_MODE_INBOUND_FIXEDRATIO);
$spec->setResizeMode(ImageSpec::RESIZE_MODE_INBOUND_FIXEDRATIO);
$spec->setDimensions(375, 275);
$core = \bootstrap::getCore();
@@ -410,8 +412,8 @@ class Manager
->open($file->getFile()->getPathname())
->turnInto($lazaretPathname, $spec)
->close();
} catch (\MediaAlchemyst\Exception\Exception $e) {
} catch (MediaAlchemystException $e) {
}
$lazaretFile = new LazaretFile();

View File

@@ -98,6 +98,7 @@ class Language implements ControllerProviderInterface
$out['errorAjaxRequest'] = _('An error occured, please retry');
$out['fileBeingDownloaded'] = _('Some files are being downloaded');
$out['warning'] = _('Attention');
$out['browserFeatureSupport'] = _('This feature is not supported by your browser');
$Serializer = $app['Core']['Serializer'];

View File

@@ -438,7 +438,7 @@ class media_subdef extends media_abstract implements cache_cacheableInterface
*/
public function get_size()
{
return @filesize($this->get_pathfile());
return (int) @filesize($this->get_pathfile());
}
/**

View File

@@ -374,22 +374,23 @@
</div>
<script type="text/javascript">
$(document).ready(function(){
$(document).ready(function(){
var scope = $("#prod-tool-box");
var width = 0;
$("#tool-tabs", scope).tabs();
$(".iframe_submiter", scope).bind("click", function(){
var form = $(this).closest("form");
form.submit();
form.find('.load').empty().html(language.loading + ' ...');
$("#uploadHdsub").contents().find(".content").empty();
$("#uploadHdsub").load(function(){
form.find('.load').empty();
var iframeContent = $("#uploadHdsub").contents().find(".content").html();
form.closest('div').find('.resultAction').empty().append(iframeContent);
});
var form = $(this).closest("form");
form.submit();
form.find('.load').empty().html(language.loading + ' ...');
$("#uploadHdsub").contents().find(".content").empty();
$("#uploadHdsub").load(function(){
form.find('.load').empty();
var iframeContent = $("#uploadHdsub").contents().find(".content").html();
form.closest('div').find('.resultAction').empty().append(iframeContent);
});
});
$(".action_submiter", scope).bind("click", function(){
@@ -419,276 +420,281 @@
});
$(".action_cancel", scope).bind("click", function(){
var dialog = p4.Dialog.get(1);
dialog.Close();
var dialog = p4.Dialog.get(1);
dialog.Close();
});
//thumbExtractor
$("#slider-brightness", scope).slider({
slide: function() {
$("#value-brightness").val(Math.round($("#slider-brightness").slider("value") / 100 * 300) - 150);
}
}).slider( "option", "value", 50);
$("#slider-contrast").slider({
slide: function() {
$("#value-contrast").val(
(
(
$("#slider-contrast").slider("value") / 100 * 4
)
-1
).toFixed(1));
}
}).slider( "option", "value", 1/3*100);
var sliderWrapper = $("#thumb_wrapper", scope);
var ThumbEditor = new this.THUMB_EDITOR("thumb_video", "thumb_canvas");
$("#thumb_reset_button",scope).bind("click", function(){
var curImg = sliderWrapper.find(".selected");
var id = curImg.attr("id").split("_").pop();
var originalScreenShot = ThumbEditor.store.get(id);
var newImg = $("<img />");
if(ThumbEditor.isSupported()) {
$("#slider-brightness", scope).slider({
slide: function() {
$("#value-brightness").val(Math.round($("#slider-brightness").slider("value") / 100 * 300) - 150);
}
}).slider( "option", "value", 50);
curImg.after(newImg).remove();
$("#slider-contrast").slider({
slide: function() {
$("#value-contrast").val(
(
(
$("#slider-contrast").slider("value") / 100 * 4
)
-1
).toFixed(1));
}
}).slider( "option", "value", 1/3*100);
newImg
.attr("id", "#working_"+ id)
.attr("src", originalScreenShot.getDataURI())
.trigger("click");
});
var sliderWrapper = $("#thumb_wrapper", scope);
$("#thumb_delete_button", scope).bind("click", function(){
var img = sliderWrapper.find(".selected");
var id = img.attr("id").split("_").pop();
var previous = img.prev();
var next = img.next();
$("#thumb_reset_button",scope).bind("click", function(){
var curImg = sliderWrapper.find(".selected");
var id = curImg.attr("id").split("_").pop();
var originalScreenShot = ThumbEditor.store.get(id);
var newImg = $("<img />");
if(previous.length > 0)
{
previous.trigger("click");
}
else if(next.length > 0)
{
next.trigger("click");
}
else
{
$(this).hide();
$("#thumb_reset_button",scope).hide();
$("#thumb_info", scope).show();
ThumbEditor.resetCanva();
}
curImg.after(newImg).remove();
img.remove();
ThumbEditor.store.remove(id);
});
newImg
.attr("id", "#working_"+ id)
.attr("src", originalScreenShot.getDataURI())
.trigger("click");
});
$(".close_action_frame", scope).bind("click", function(){
$(this).closest(".action_frame").hide();
});
$("#thumb_delete_button", scope).bind("click", function(){
var img = sliderWrapper.find(".selected");
var id = img.attr("id").split("_").pop();
var previous = img.prev();
var next = img.next();
$("#flipV", scope).bind("click", function(){
Pixastic.process($("#thumb_canvas").get(0),
"flipv",
null,
function(canvas){$("#thumb_canvas").trigger("tool_event");}
);
});
$("#flipH", scope).bind("click", function(){
Pixastic.process($("#thumb_canvas").get(0),
"fliph",
null, function(canvas){$("#thumb_canvas").trigger("tool_event");}
);
});
$("#brightness", scope).bind("click", function(){
$("#action_frame_brightness", scope).show();
$("#action_frame_contrast", scope).hide();
});
$("#contrast", scope).bind("click", function(){
$("#action_frame_brightness", scope).hide();
$("#action_frame_contrast", scope).show();
});
$(".apply-brightness", scope).bind("click", function(){
Pixastic.process($("#thumb_canvas").get(0), "brightness", {
brightness: $("#value-brightness").val(),
contrast: $("#value-contrast").val(),
legacy: false
}, null, function(canvas){$("#thumb_canvas").trigger("tool_event");});
});
$(".apply-contrast").bind("click", function(){
Pixastic.process($("#thumb_canvas").get(0), "brightness", {
brightness: $("#value-brightness").val(),
contrast: $("#value-contrast").val(),
legacy: false
}, null, function(canvas){$("#thumb_canvas").trigger("tool_event");});
});
$("img", sliderWrapper).live("click", function(){
$('.selected', sliderWrapper).removeClass('selected');
$(this).addClass('selected');
ThumbEditor.copy($(this).get(0));
});
$("#thumb_camera_button", scope).bind("click", function(){
$("#thumb_info", scope).hide();
$("#thumb_delete_button", scope).show();
$("#thumb_reset_button",scope).show();
var screenshot = ThumbEditor.screenshot();
var img = $("<img />");
$('.selected', sliderWrapper).removeClass('selected');
img.addClass('selected')
.attr('id', 'working_'+ screenshot.getId())
.attr('src', screenshot.getDataURI())
.attr("alt", screenshot.getVideoTime())
.appendTo(sliderWrapper);
});
$("#thumb_canvas").live('tool_event', function(){
var thumbnail = $('.selected', sliderWrapper);
if(thumbnail.length === 0)
{
console.error('No image selected');
return;
}
thumbnail.attr('src', ThumbEditor.getCanvaImage());
});
$("#thumb_validate_button", scope).bind("click", function(){
var thumbnail = $('.selected', sliderWrapper);
if(thumbnail.length === 0)
{
var dialog = p4.Dialog.Create({
size:'Alert',
title: '{% trans "alert" %}',
closeOnEscape:true
}, 3);
var content = $("<div />").css({
'text-align':'center',
'width': '100%',
'font-size':'14px'
}).append('{% trans "no image selected" %}');
dialog.setContent(content);
return;
}
var buttons = {};
var record_id = $("input[name=record_id]").val();
var sbas_id = $("input[name=sbas_id]").val();
function disableConfirmButton(dialog){
dialog.getDomElement().closest('.ui-dialog').find(".ui-dialog-buttonpane button").filter(function() {
return $(this).text() == language.valider;
}).addClass("ui-state-disabled").attr("disabled", true);
}
function enableConfirmButton(dialog){
dialog.getDomElement().closest('.ui-dialog').find(".ui-dialog-buttonpane button").filter(function() {
return $(this).text() == language.valider;
}).removeClass("ui-state-disabled").attr("disabled", false);
}
buttons[language.valider] = function(){
var dialog = p4.Dialog.get(2);
var buttonPanel = dialog.getDomElement().closest('.ui-dialog').find(".ui-dialog-buttonpane");
var loadingDiv = buttonPanel.find('.info-div');
if(loadingDiv.length == 0)
{
loadingDiv = $("<div />").css({
'width' : '120px',
'height' : '40px',
'float':'left',
'line-height' : '40px',
'padding-left' : '40px',
'text-align' : 'left',
'background-position' : 'left center'
}).attr('class', 'info-div').prependTo(buttonPanel);
}
$.ajax({
type: "POST",
url: "/prod/tools/thumb-extractor/apply/",
data: {
image: $("#thumb_confirm img.selected").attr('src'),
record_id : record_id,
sbas_id: sbas_id
},
beforeSend: function(){
disableConfirmButton(dialog);
loadingDiv.empty().addClass('loading').append('{% trans "processing" %}');
},
success: function(data){
loadingDiv.empty().removeClass('loading');
if(data.success)
if(previous.length > 0)
{
dialog.Close();
p4.Dialog.get(1).Close();
previous.trigger("click");
}
else if(next.length > 0)
{
next.trigger("click");
}
else
{
var content = $("<div />").css({'color':'#a00'}).append("{% trans "an error occured" %} " + data.message);
loadingDiv.append(content);
enableConfirmButton(dialog);
$(this).hide();
$("#thumb_reset_button",scope).hide();
$("#thumb_info", scope).show();
ThumbEditor.resetCanva();
}
}
img.remove();
ThumbEditor.store.remove(id);
});
};
//show confirm box, content is loaded here /prod/tools/thumb-extractor/confirm-box/
var dialog = p4.Dialog.Create({
size:'Small',
title:"{% trans 'thumbnail validation' %}",
cancelButton:true,
buttons: buttons
}, 2);
$(".close_action_frame", scope).bind("click", function(){
$(this).closest(".action_frame").hide();
});
var datas = {
image: $('.selected', sliderWrapper).attr("src"),
sbas_id: sbas_id,
record_id: record_id
};
$("#flipV", scope).bind("click", function(){
Pixastic.process($("#thumb_canvas").get(0),
"flipv",
null,
function(canvas){$("#thumb_canvas").trigger("tool_event");}
);
});
$.ajax({
type: "POST",
url: "/prod/tools/thumb-extractor/confirm-box/",
data: datas,
success: function(data){
$("#flipH", scope).bind("click", function(){
Pixastic.process($("#thumb_canvas").get(0),
"fliph",
null, function(canvas){$("#thumb_canvas").trigger("tool_event");}
);
});
if(data.error)
{
var content = $("<div />").css({'font-size':'16px', 'text-align':'center'}).append(data.datas);
dialog.setContent(content);
disableConfirmButton(dialog);
}
else
{
dialog.setContent(data.datas);
}
}
});
});
});
$("#brightness", scope).bind("click", function(){
$("#action_frame_brightness", scope).show();
$("#action_frame_contrast", scope).hide();
});
$("#contrast", scope).bind("click", function(){
$("#action_frame_brightness", scope).hide();
$("#action_frame_contrast", scope).show();
});
$(".apply-brightness", scope).bind("click", function(){
Pixastic.process($("#thumb_canvas").get(0), "brightness", {
brightness: $("#value-brightness").val(),
contrast: $("#value-contrast").val(),
legacy: false
}, null, function(canvas){$("#thumb_canvas").trigger("tool_event");});
});
$(".apply-contrast").bind("click", function(){
Pixastic.process($("#thumb_canvas").get(0), "brightness", {
brightness: $("#value-brightness").val(),
contrast: $("#value-contrast").val(),
legacy: false
}, null, function(canvas){$("#thumb_canvas").trigger("tool_event");});
});
$("img", sliderWrapper).live("click", function(){
$('.selected', sliderWrapper).removeClass('selected');
$(this).addClass('selected');
ThumbEditor.copy($(this).get(0));
});
$("#thumb_camera_button", scope).bind("click", function(){
$("#thumb_info", scope).hide();
$("#thumb_delete_button", scope).show();
$("#thumb_reset_button",scope).show();
var screenshot = ThumbEditor.screenshot();
var img = $("<img />");
$('.selected', sliderWrapper).removeClass('selected');
img.addClass('selected')
.attr('id', 'working_'+ screenshot.getId())
.attr('src', screenshot.getDataURI())
.attr("alt", screenshot.getVideoTime())
.appendTo(sliderWrapper);
});
$("#thumb_canvas").live('tool_event', function(){
var thumbnail = $('.selected', sliderWrapper);
if(thumbnail.length === 0)
{
console.error('No image selected');
return;
}
thumbnail.attr('src', ThumbEditor.getCanvaImage());
});
$("#thumb_validate_button", scope).bind("click", function(){
var thumbnail = $('.selected', sliderWrapper);
if(thumbnail.length === 0)
{
var dialog = p4.Dialog.Create({
size:'Alert',
title: '{% trans "alert" %}',
closeOnEscape:true
}, 3);
var content = $("<div />").css({
'text-align':'center',
'width': '100%',
'font-size':'14px'
}).append('{% trans "no image selected" %}');
dialog.setContent(content);
return;
}
var buttons = {};
var record_id = $("input[name=record_id]").val();
var sbas_id = $("input[name=sbas_id]").val();
function disableConfirmButton(dialog){
dialog.getDomElement().closest('.ui-dialog').find(".ui-dialog-buttonpane button").filter(function() {
return $(this).text() == language.valider;
}).addClass("ui-state-disabled").attr("disabled", true);
}
function enableConfirmButton(dialog){
dialog.getDomElement().closest('.ui-dialog').find(".ui-dialog-buttonpane button").filter(function() {
return $(this).text() == language.valider;
}).removeClass("ui-state-disabled").attr("disabled", false);
}
buttons[language.valider] = function(){
var dialog = p4.Dialog.get(2);
var buttonPanel = dialog.getDomElement().closest('.ui-dialog').find(".ui-dialog-buttonpane");
var loadingDiv = buttonPanel.find('.info-div');
if(loadingDiv.length == 0)
{
loadingDiv = $("<div />").css({
'width' : '120px',
'height' : '40px',
'float':'left',
'line-height' : '40px',
'padding-left' : '40px',
'text-align' : 'left',
'background-position' : 'left center'
}).attr('class', 'info-div').prependTo(buttonPanel);
}
$.ajax({
type: "POST",
url: "/prod/tools/thumb-extractor/apply/",
data: {
image: $("#thumb_confirm img.selected").attr('src'),
record_id : record_id,
sbas_id: sbas_id
},
beforeSend: function(){
disableConfirmButton(dialog);
loadingDiv.empty().addClass('loading').append('{% trans "processing" %}');
},
success: function(data){
loadingDiv.empty().removeClass('loading');
if(data.success)
{
dialog.Close();
p4.Dialog.get(1).Close();
}
else
{
//var content = $("<div />").css({'color':'#a00'}).append("{% trans "an error occured" %} " + data.message);
loadingDiv.append(content);
enableConfirmButton(dialog);
}
}
});
};
//show confirm box, content is loaded here /prod/tools/thumb-extractor/confirm-box/
var dialog = p4.Dialog.Create({
size:'Small',
title:"{% trans 'thumbnail validation' %}",
cancelButton:true,
buttons: buttons
}, 2);
var datas = {
image: $('.selected', sliderWrapper).attr("src"),
sbas_id: sbas_id,
record_id: record_id
};
$.ajax({
type: "POST",
url: "/prod/tools/thumb-extractor/confirm-box/",
data: datas,
success: function(data){
if(data.error)
{
var content = $("<div />").css({'font-size':'16px', 'text-align':'center'}).append(data.datas);
dialog.setContent(content);
disableConfirmButton(dialog);
}
else
{
dialog.setContent(data.datas);
}
}
});
});
} else {
//not supported
$("#thumbExtractor").empty().append(language.browserFeatureSupport);
}
});
</script>

View File

@@ -18,10 +18,10 @@ class ControllerBasketTest extends PhraseanetWebTestCaseAuthenticatedAbstract
public function createApplication()
{
$app = require __DIR__ . '/../../../../../lib/Alchemy/Phrasea/Application/Prod.php';
$app['debug'] = true;
unset($app['exception_handler']);
return $app;
}

View File

@@ -24,10 +24,12 @@ class LazaretTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
public function createApplication()
{
$app = require __DIR__ . '/../../../../../lib/Alchemy/Phrasea/Application/Prod.php';
$app['debug'] = true;
unset($app['exception_handler']);
$app['Core']['file-system'] = $this->getMock('Symfony\Component\Filesystem\Filesystem', array('remove'));
return $app;
}

View File

@@ -276,6 +276,10 @@ class API_V1_adapterTest extends PhraseanetPHPUnitAuthenticatedAbstract
break;
}
if(null === $statusbit) {
$this->markTestSkipped('No status bit defined in databox');
}
$request = new Request(array("salut" => "salut c'est la fete"), array(), array(), array(), array(), array('HTTP_Accept' => 'application/json'));
$result = $stub->set_record_status($request, static::$records['record_1']->get_sbas_id(), static::$records['record_1']->get_record_id());
$this->assertEquals(400, $result->get_http_code());

View File

@@ -1,30 +1,30 @@
;
(function(document){
/*****************
* Canva Object
*****************/
var Canva = function(domCanva){
this.domCanva = domCanva;
}
Canva.prototype = {
resize : function(elementDomNode){
var h = elementDomNode.getHeight();
var w = elementDomNode.getWidth();
this.domCanva.setAttribute("width", w);
this.domCanva.setAttribute("height", h);
return this;
},
getContext2d : function(){
if (this.domCanva.getContext == undefined)
if (this.domCanva.getContext == undefined)
{
return G_vmlCanvasManager
.initElement(this.domCanva)
.getContext("2d");
.getContext("2d");
}
return this.domCanva.getContext('2d');
@@ -36,17 +36,17 @@
var context = this.getContext2d();
var w = this.getWidth();
var h = this.getHeight();
context.save();
context.setTransform(1, 0, 0, 1, 0, 0);
context.clearRect(0, 0, w, h);
context.restore();
return this;
},
copy : function(elementDomNode){
var context = this.getContext2d();
context.drawImage(
elementDomNode.getDomElement()
, 0
@@ -54,7 +54,7 @@
, this.getWidth()
, this.getHeight()
);
return this;
},
getDomElement : function(){
@@ -67,15 +67,15 @@
return this.domCanva.offsetWidth;
}
};
/******************
* Image Object
******************/
var Image = function(domElement){
this.domElement = domElement;
};
Image.prototype = {
getDomElement : function(){
return this.domElement;
@@ -87,28 +87,28 @@
return this.domElement.offsetWidth;
}
};
/******************
* Video Object inherits from Image object
******************/
var Video = function(domElement){
Image.call(this, domElement);
};
Video.prototype = new Image();
Video.prototype.constructor = Video;
Video.prototype.getCurrentTime = function(){
return Math.floor(this.domElement.currentTime);
};
/******************
* Cache Object
******************/
var Store = function(){
this.datas = {};
};
Store.prototype = {
set : function(id, item){
this.datas[id] = item;
@@ -133,23 +133,23 @@
return count;
}
};
/******************
* Screenshot Object
******************/
var ScreenShot = function(id, canva, video){
var date = new Date();
canva.resize(video);
canva.copy(video);
this.id = id;
this.timestamp = date.getTime();
this.dataURI = canva.extractImage();
this.videoTime = video.getCurrentTime();
}
ScreenShot.prototype = {
getId:function(){
return this.id;
@@ -164,29 +164,34 @@
return this.videoTime;
}
};
/**
* THUMB EDITOR
*/
var ThumbEditor = function(videoId, canvaId){
var editorVideo = new Video(document.getElementById(videoId));
var store = new Store();
function getCanva(){
return document.getElementById(canvaId);
}
return {
isSupported : function () {
var elem = document.createElement('canvas');
return !! elem.getContext && !! elem.getContext('2d');
},
screenshot : function(){
var screenshot = new ScreenShot(
store.getLength() + 1,
new Canva(getCanva()),
editorVideo
);
store.set(screenshot.getId(), screenshot);
return screenshot;
},
store : store,
@@ -213,6 +218,6 @@
};
document.THUMB_EDITOR = ThumbEditor;
})(document);