Merge branch '3.8' into fix-latest-merge

Conflicts:
	CHANGELOG.md
	bower.json
	composer.json
	composer.lock
	lib/Alchemy/Phrasea/Controller/Api/V1.php
	lib/Alchemy/Phrasea/Controller/Prod/Push.php
	lib/Alchemy/Phrasea/Controller/Prod/Records.php
	lib/Alchemy/Phrasea/Core/Version.php
	lib/Alchemy/Phrasea/Media/Subdef/Image.php
	lib/conf.d/_GV_template.inc
	locale/de_DE/LC_MESSAGES/phraseanet.mo
	locale/de_DE/LC_MESSAGES/phraseanet.po
	locale/en_GB/LC_MESSAGES/phraseanet.mo
	locale/en_GB/LC_MESSAGES/phraseanet.po
	locale/fr_FR/LC_MESSAGES/phraseanet.mo
	locale/fr_FR/LC_MESSAGES/phraseanet.po
	locale/nl_NL/LC_MESSAGES/phraseanet.mo
	locale/nl_NL/LC_MESSAGES/phraseanet.po
	templates/web/prod/Story/Reorder.html.twig
	templates/web/prod/WorkZone/Macros.html.twig
	templates/web/prod/actions/Download/prepare.html.twig
	templates/web/prod/templates/push.html.twig
This commit is contained in:
Nicolas Le Goff
2014-07-11 17:19:39 +02:00
20 changed files with 300 additions and 237 deletions

View File

@@ -9,7 +9,67 @@
- Convert Ftp Export custom adapter to Doctrine entity.
- Session management is now part of Phraseanet configuration.
## 3.8.3 (2014-xx-xx)
## 3.8.5 (2014-07-08)
- BugFix : Fix Flickr connexion throught Bridge Application
- BugFix : Fix broken Report Application
- BugFix : Fix "force authentication" option for push validation
- BugFix : Fix display of "edit" button for a validation accordint to user rights
- BugFix : Fix highlight of record title in detailed view
- BugFix : Fix thumbnail generation for PDF with transparency
- BugFix : Fix reorder of stories & basket when record titles are too long
- BugFix : Fix display of separators for multivalued fields in caption
- Enhancement : Add the possibility to choose a document or a video as a representative image of a story
- Enhancement : Titles are truncated but still visible by hovering them
## 3.8.4 (2014-06-25)
- BC Break : Drop sphinx search engine highlight support
- BC Break : Notify user checkbox is now setted to false when publishing a new publication
- BugFix : Fix database mapping in report
- BugFix : Fix homepage feed url
- BugFix : Fix CSV user import
- BugFix : Fix status icon filename
- BugFix : Fix highlight in caption display
- BugFix : Fix bound in caption display
- BugFix : Fix thumbnail display in feed view
- BugFix : Fix thesaurus terms order
- BugFix : Fix metadata filename attibute
- BugFix : Fix https calls to googlechart API
- BugFix : Fix API feed pagination
- BugFix : Fix thumbnail etags generation
- BugFix : Fix therausus search in workzone
- BugFix : Fix context menu in main bar in account view
- BugFix : Fix CSV download for filename with accent
- BugFix : Fix CSV generation from report
- BugFix : Fix old password migration
- BugFix : Fix migration from 3.1 version
- BugFix : Fix status calculation from XML indexation card for stories
- BugFix : Fix homepage issue when a feed is deleted
- BugFix : Fix phraseanet bridge connexion to dailymotion
- BugFix : Fix unoconv and GPAC detection on debian system
- BugFix : Fix oauth developer application form submission
- BugFix : Fix anamorphosis problems for some videos
- Enhancement : Set password fields as password input
- Enhancement : Add extra information in user list popup in Push view
- Enhancement : Force the use of latest IE engine
- Enhancement : Add feed restriction when requesting aggregated feed in API
- Enhancement : Add feed title property in feed entry JSON schema
- Enhancement : Dashboard report is now lazy loaded
- Enhancement : Update flowplayer version
- Enhancement : Improve XsendFile command line tools
- Enhancement : Remove disk IO on media_subdef::get_size function
- Enhancement : User city is now setted through geonames server
- Enhancement : Enhancement of Oauth2 integration
- NewFeature : Add option to restrict Push visualization to Phraseanet users only
- NewFeature : Add API webhook
- NewFeature : Add CORS support for API
- NewFeature : Add /me route in API
- NewFeature : Add h264 pseudo stream configuration
- NewFeature : Add session idle & life time in configuration
- NewFeature : Add possibility to search “unknown” type document through API
## 3.8.3 (2014-02-24)
- BugFix : Fix record type editing.
- BugFix : Fix scheduler timeout.

View File

@@ -6,6 +6,7 @@
"jquery": "~1.8.3",
"jquery.ui": "~1.10.0",
"jquery-mobile": "~1.3.0",
"underscore": "~1.4.4",
"font-awesome": "~3.0.2",
"modernizr": "~2.6.2",
"normalize-css": "~2.1.0",

View File

@@ -25,12 +25,16 @@
{
"type": "vcs",
"url": "https://github.com/nlegoff/Media-Alchemyst"
},
{
"type": "vcs",
"url": "https://github.com/nlegoff/Imagine"
}
],
"require": {
"php" : ">=5.4",
"alchemy/oauth2php" : "1.0.0",
"alchemy/phlickr" : "0.2.7",
"alchemy/phlickr" : "0.2.8",
"alchemy/task-manager" : "2.0.x-dev@dev",
"alchemy/zippy" : "0.2.x-dev@dev",
"cboden/ratchet" : "~0.3",
@@ -44,8 +48,8 @@
"alchemy/geonames-api-consumer" : "~0.1.0",
"goodby/csv" : "~1.0",
"guzzle/guzzle" : "~3.0",
"imagine/imagine" : "dev-flatten-layer as 0.6.1",
"igorw/get-in" : "~1.0",
"imagine/imagine" : "0.6.x-dev@dev",
"ircmaxell/random-lib" : "~1.0",
"jms/serializer" : "~0.10",
"jms/translation-bundle" : "~1.1",

42
composer.lock generated
View File

@@ -272,16 +272,16 @@
},
{
"name": "alchemy/phlickr",
"version": "0.2.7",
"version": "0.2.8",
"source": {
"type": "git",
"url": "https://github.com/alchemy-fr/Phlickr.git",
"reference": "9f228cabf924bdd5913fdb59514904d0d4c8e40a"
"reference": "26b7764fd45c15062cb1b21c9389aff919e8c2bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/alchemy-fr/Phlickr/zipball/9f228cabf924bdd5913fdb59514904d0d4c8e40a",
"reference": "9f228cabf924bdd5913fdb59514904d0d4c8e40a",
"url": "https://api.github.com/repos/alchemy-fr/Phlickr/zipball/26b7764fd45c15062cb1b21c9389aff919e8c2bd",
"reference": "26b7764fd45c15062cb1b21c9389aff919e8c2bd",
"shasum": ""
},
"type": "library",
@@ -291,7 +291,7 @@
}
},
"notification-url": "https://packagist.org/downloads/",
"time": "2013-07-01 09:47:54"
"time": "2014-07-07 14:01:51"
},
{
"name": "alchemy/task-manager",
@@ -1569,16 +1569,16 @@
},
{
"name": "imagine/imagine",
"version": "dev-develop",
"version": "dev-flatten-layer",
"source": {
"type": "git",
"url": "https://github.com/avalanche123/Imagine.git",
"reference": "5e013323dacbb7d6ab0c0d55692e6b75d1fb30d2"
"url": "https://github.com/nlegoff/Imagine.git",
"reference": "df2d9d8834d32943082fc52b89c5b11fde279b5a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/avalanche123/Imagine/zipball/5e013323dacbb7d6ab0c0d55692e6b75d1fb30d2",
"reference": "5e013323dacbb7d6ab0c0d55692e6b75d1fb30d2",
"url": "https://api.github.com/repos/nlegoff/Imagine/zipball/df2d9d8834d32943082fc52b89c5b11fde279b5a",
"reference": "df2d9d8834d32943082fc52b89c5b11fde279b5a",
"shasum": ""
},
"require": {
@@ -1595,7 +1595,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-develop": "0.6-dev"
"dev-develop": "0.7-dev"
}
},
"autoload": {
@@ -1603,7 +1603,6 @@
"Imagine": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
@@ -1622,7 +1621,10 @@
"image manipulation",
"image processing"
],
"time": "2013-12-23 10:54:18"
"support": {
"source": "https://github.com/nlegoff/Imagine/tree/flatten-layer"
},
"time": "2014-07-07 17:04:15"
},
{
"name": "ircmaxell/random-lib",
@@ -2023,12 +2025,12 @@
"source": {
"type": "git",
"url": "https://github.com/nlegoff/Media-Alchemyst.git",
"reference": "e812e631b74ebb0c7b3dd5f4e981d84a7b3c4029"
"reference": "be5c7cd4e207c469fb88d88397bd220c4db323d8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nlegoff/Media-Alchemyst/zipball/e812e631b74ebb0c7b3dd5f4e981d84a7b3c4029",
"reference": "e812e631b74ebb0c7b3dd5f4e981d84a7b3c4029",
"url": "https://api.github.com/repos/nlegoff/Media-Alchemyst/zipball/be5c7cd4e207c469fb88d88397bd220c4db323d8",
"reference": "be5c7cd4e207c469fb88d88397bd220c4db323d8",
"shasum": ""
},
"require": {
@@ -2090,7 +2092,7 @@
"support": {
"source": "https://github.com/nlegoff/Media-Alchemyst/tree/master"
},
"time": "2014-06-10 13:51:13"
"time": "2014-07-07 16:54:32"
},
{
"name": "mediavorus/mediavorus",
@@ -4906,6 +4908,12 @@
}
],
"aliases": [
{
"alias": "0.6.1",
"alias_normalized": "0.6.1.0",
"version": "dev-flatten-layer",
"package": "imagine/imagine"
},
{
"alias": "0.4.3",
"alias_normalized": "0.4.3.0",

View File

@@ -283,14 +283,14 @@ class Edit implements ControllerProviderInterface
$newsubdef_reg = new \record_adapter($app, $reg_record->get_sbas_id(), $request->request->get('newrepresent'));
if ($newsubdef_reg->get_type() !== 'image') {
throw new \Exception('A reg image must come from image data');
}
foreach ($newsubdef_reg->get_subdefs() as $name => $value) {
if (!in_array($name, ['thumbnail', 'preview'])) {
continue;
}
if ($value->get_type() !== \media_subdef::TYPE_IMAGE) {
continue;
}
$media = $app['mediavorus']->guess($value->get_pathfile());
$app['subdef.substituer']->substitute($reg_record, $name, $media);
$app['phraseanet.logger']($reg_record->get_databox())->log(

View File

@@ -412,10 +412,15 @@ class Push implements ControllerProviderInterface
$app['EM']->flush();
$url = $app->url('lightbox_validation', [
$arguments = array(
'basket' => $Basket->getId(),
'LOG' => $app['manipulator.token']->createBasketValidationToken($Basket, $participant_user),
]);
);
if (!$app['conf']->get(['registry', 'actions', 'force-authentication']) || !$request->get('force_authentication')) {
$arguments['LOG'] = $app['manipulator.token']->createBasketAccessToken($Basket, $participant_user);
}
$url = $app->url('lightbox_validation', $arguments);
$receipt = $request->get('recept') ? $app['authentication']->getUser()->getEmail() : '';

View File

@@ -135,7 +135,7 @@ class Records implements ControllerProviderInterface
'record' => $record
]),
"pos" => $record->get_number(),
"title" => $record->get_title($query, $searchEngine)
"title" => str_replace(array('[[em]]', '[[/em]]'), array('<em>', '</em>'), $record->get_title($query, $searchEngine))
]);
}

View File

@@ -14,7 +14,7 @@ namespace Alchemy\Phrasea\Core;
class Version
{
protected static $number = '3.9.0-alpha.18';
protected static $name = 'Epanterias';
protected static $name = 'Gorgosaurus';
public static function getNumber()
{

View File

@@ -20,6 +20,7 @@ class Image extends Provider
const OPTION_RESOLUTION = 'resolution';
const OPTION_STRIP = 'strip';
const OPTION_QUALITY = 'quality';
const OPTION_FLATTEN = 'flatten';
protected $options = [];
@@ -30,6 +31,7 @@ class Image extends Provider
$this->registerOption(new OptionType\Range($this->translator->trans('Dimension'), self::OPTION_SIZE, 20, 3000, 800));
$this->registerOption(new OptionType\Range($this->translator->trans('Resolution'), self::OPTION_RESOLUTION, 50, 300, 72));
$this->registerOption(new OptionType\Boolean($this->translator->trans('Remove ICC Profile'), self::OPTION_STRIP, false));
$this->registerOption(new OptionType\Boolean($this->translator->trans('Flatten layers'), self::OPTION_FLATTEN, false));
$this->registerOption(new OptionType\Range($this->translator->trans('Quality'), self::OPTION_QUALITY, 0, 100, 75));
}
@@ -56,6 +58,7 @@ class Image extends Provider
$this->spec->setDimensions($size, $size);
$this->spec->setQuality($this->getOption(self::OPTION_QUALITY)->getValue());
$this->spec->setStrip($this->getOption(self::OPTION_STRIP)->getValue());
$this->spec->setFlatten($this->getOption(self::OPTION_FLATTEN)->getValue());
$this->spec->setResolution($resolution, $resolution);
return $this->spec;

View File

@@ -303,6 +303,9 @@ class databox_subdef
if ($sd->dpi) {
$image->setOptionValue(Image::OPTION_RESOLUTION, (int) $sd->dpi);
}
if ($sd->flatten) {
$image->setOptionValue(Image::OPTION_FLATTEN, p4field::isyes($sd->flatten));
}
return $image;
}

View File

@@ -142,8 +142,8 @@
{% else %}
<td class="w160px">
{% endif %}
<div class="diapo w160px" style="margin-bottom:0;border-bottom:none;">
<div class="title">{{ record.get_title() }}</div>
<div class="diapo w160px" style="margin-bottom:0;border-bottom:none;overflow:hidden;">
<div class="title" style="max-height:100%" title="{{ record.get_title() }}">{{ record.get_title() }}</div>
<div class="status">{{ record.get_status_icons()|raw }}</div>
<table cellpadding="0" cellspacing="0" style="margin: 0pt auto;">
<tr class="h160px">

View File

@@ -91,7 +91,7 @@
{% endif %}
{% set terms = [value]|merge(terms) %}
{% endfor %}
{{ terms|join(' ' ~ field.separator ~ ' ') }}
{{ terms|join(' ; ') }}
{% endautoescape %}
{% endmacro %}

View File

@@ -21,8 +21,9 @@
<div class="elements row-fluid">
{% for element in basket.getElements() %}
<div id="ORDER_{{ element.getId() }}" class="CHIM diapo" style="height:130px;overflow:hidden;">
<div class="title" title="{{ element.getRecord(app).get_title() }}" style="position:relative;z-index:1200;height:30px;overflow:visible;text-align:center;">
<span>{{ element.getRecord(app).get_title() }}</span>
<div class="title" title="{{ element.getRecord(app).get_title() }}" style="position:relative;z-index:1200;height:30px;overflow:hidden;text-align:center;text-overflow: ellipsis; line-height: 15px;">
{{ element.getRecord(app).get_title() }} {{ element.getRecord(app).get_title() }}{{ element.getRecord(app).get_title() }}
</div>
{{ thumbnail.format(element.getRecord(app).get_thumbnail(), 80, 80, '', false, false) }}
<form style="display:none;">
<input type="hidden" name="id" value="{{ element.getId() }}"/>
@@ -30,7 +31,6 @@
<input type="hidden" name="default" value="{{ element.getOrd() }}"/>
</form>
</div>
</div>
{% endfor %}
</div>
</div>

View File

@@ -1,5 +1,6 @@
{% import 'common/thumbnail.html.twig' as thumbnail %}
<div id="reorder_options" class="PNB" style="height:30px;bottom:auto;">
<form id="reorder_options" class="form-inline" style="display:inline-block;">
<span>{{ 'Reordonner automatiquement' | trans }}</span>
<select id="auto_order">
<option value="">{{ 'Choisir' | trans }}</option>
@@ -8,13 +9,21 @@
</select>
<button type="button" class="autoorder">{{ 'Re-ordonner' | trans }}</button>
<button type="button" class="reverseorder">{{ 'Inverser' | trans }}</button>
</form>
<form style="display:inline-block;" class="form-inline" name="reorder" method="POST" action="{{ path('prod_stories_story_reorder', { 'sbas_id' : story.get_sbas_id(), 'record_id' : story.get_record_id() }) }}">
{% for element in story.get_children() %}
<input type="hidden" name="element[{{ element.get_record_id() }}]" value="{{ element.get_number() }}"/>
{% endfor %}
<button>{{ 'boutton::valider' | trans }}</button>
</form>
</div>
<div style="top:30px;overflow:auto;" id="reorder_box" class="PNB">
<div style="top:45px;overflow:auto;" id="reorder_box" class="PNB">
<div class="elements">
{% for element in story.get_children() %}
<div id="ORDER_{{ element.get_record_id() }}" class="CHIM diapo" style="height:130px;overflow:hidden;">
<div class="title" title="{{ element.get_title() }}" style="position:relative;z-index:1200;height:30px;overflow:visible;text-align:center;">
<span>{{ element.get_title() }}</span>
<div class="title" title="{{ element.get_title() }}" style="position:relative;z-index:1200;height:30px;overflow:hidden;text-align:center;text-overflow: ellipsis; line-height: 15px;">
{{ element.get_title() }} {{ element.get_title() }} {{ element.get_title() }}
</div>
{{ thumbnail.format(element.get_thumbnail(), 80, 80, '', false, false) }}
<form style="display:none;">
<input type="hidden" name="id" value="{{ element.get_record_id() }}"/>
@@ -22,23 +31,14 @@
<input type="hidden" name="default" value="{{ element.get_number() }}"/>
</form>
</div>
</div>
{% endfor %}
</div>
<form name="reorder" method="POST" action="{{ path('prod_stories_story_reorder', { 'sbas_id' : story.get_sbas_id(), 'record_id' : story.get_record_id() }) }}">
{% for element in story.get_children() %}
<input type="hidden" name="element[{{ element.get_record_id() }}]" value="{{ element.get_number() }}"/>
{% endfor %}
<button>{{ 'boutton::valider' | trans }}</button>
</form>
</div>
<script type="text/javascript">
<script type="text/javascript">
$(document).ready(function(){
var container = $('#reorder_box');//p4.Dialog.get(1).getDomElement();
$('button.autoorder', container).bind('click', function(){
autoorder();
@@ -188,16 +188,11 @@
});
$('form[name="reorder"]', container).bind('submit', function(event){
//$this.SetLoader(true);
var $form = $(this);
$('form[name="reorder"] button').bind('click', function(event){
var $form = $(this).closest("form");
$('.elements form', container).each(function(i, el){
var id = $('input[name="id"]', $(el)).val();
$('input[name="element[' + id + ']"]', $form).val(i+1);
});
@@ -210,8 +205,7 @@
},
success: function(data){
if(!data.success)
{
if(!data.success) {
alert(data.message);
}
p4.WorkZone.refresh('current', null, false, 'story');
@@ -230,4 +224,4 @@
return false;
});
});
</script>
</script>

View File

@@ -7,10 +7,7 @@
<div class="bloc">
<div class="insidebloc">
{% set content = WorkZone.getContent(srt) %}
{% for basket in content.get(constant('\\Alchemy\\Phrasea\\Helper\\WorkZone::VALIDATIONS')) %}
<div tooltipsrc="{{ path('prod_tooltip_basket', { 'basket' : basket.getId() }) }}"
id="SSTT_{{basket.getId()}}"
class="basketTips ui-accordion-header ui-state-default
@@ -48,11 +45,13 @@
onclick="downloadThis('ssel={{basket.getId()}}');">{{ 'action::exporter' | trans }}
</div>
</div>
{% if app['acl'].get(app['authentication'].getUser()).has_right('modifyrecord') %}
<div title="" class="context-menu-item menu3-custom-item">
<div onclick="editThis('SSTT','{{basket.getId()}}');" style=""
class="context-menu-item-inner">{{ 'action::editer' | trans }}
class="context-menu-item-inner">{% trans 'action::editer' %}
</div>
</div>
{% endif %}
<div title="" class="context-menu-item">
<div class="context-menu-item-inner">
<a href="{{ path('lightbox_compare', { 'basket' : basket.getId() }) }}" target="_blank">Lightbox</a>
@@ -75,17 +74,10 @@
</table>
</div>
</div>
<div id="SSTT_content_{{basket.getId()}}" class="content basket" style="overflow:hidden;">
</div>
<div id="SSTT_content_{{basket.getId()}}" class="content basket" style="overflow:hidden;"></div>
{% endfor %}
{% for basket in content.get(constant('\\Alchemy\\Phrasea\\Helper\\WorkZone::BASKETS')) %}
<div tooltipsrc="{{ path('prod_tooltip_basket', { 'basket' : basket.getId() }) }}"
id="SSTT_{{basket.getId()}}"
class="basketTips ui-accordion-header ui-state-default
@@ -189,17 +181,12 @@
</table>
</div>
</div>
<div id="SSTT_content_{{basket.getId()}}" class="content basket" style="overflow:hidden;">
</div>
<div id="SSTT_content_{{basket.getId()}}" class="content basket" style="overflow:hidden;"> </div>
{% endfor %}
{% for story in content.get(constant('\\Alchemy\\Phrasea\\Helper\\WorkZone::STORIES')) %}
<div tooltipsrc="{{ path('prod_tooltip_story', { 'sbas_id' : story.getRecord(app).get_sbas_id(), 'record_id' : story.getRecord(app).get_record_id() }) }}"
id="SSWZ_{{story.getId()}}" sbas="{{story.getSbasId()}}"
class="STORY_{{ story.getRecord(app).get_serialize_key() }} basketTips ui-accordion-header ui-state-default
@@ -232,12 +219,13 @@
onclick="downloadThis('lst={{story.getRecord(app).get_serialize_key()}}');">{{ 'action::exporter' | trans }}
</div>
</div>
{% if app['authentication'].getUser().ACL().has_right('modifyrecord') %}
<div title="" class="context-menu-item menu3-custom-item">
<div onclick="editThis('IMGT','{{story.getRecord(app).get_serialize_key()}}');" style=""
class="context-menu-item-inner">{{ 'action::editer' | trans }}
</div>
</div>
{% endif %}
<div title="" class="context-menu-item menu3-custom-item">
<div class="context-menu-item-inner">
<a class="story_unfix" href="{{ path('prod_workzone_detach_story', { 'sbas_id' : story.getRecord(app).get_sbas_id(), 'record_id' : story.getRecord(app).get_record_id()}) }}">
@@ -260,15 +248,8 @@
</table>
</div>
</div>
<div sbas="{{story.getSbasId()}}" id="SSTT_content_{{story.getId()}}" class="content grouping" style="overflow:hidden;">
</div>
<div sbas="{{story.getSbasId()}}" id="SSTT_content_{{story.getId()}}" class="content grouping" style="overflow:hidden;"></div>
{% endfor %}
</div>
</div>
{% endmacro %}

View File

@@ -91,7 +91,7 @@
</div>
<div style="display:none">
<form name="download" action="{{ path('document_download', {'token': token.getValue(), 'type': type, 'anonymous': anonymous}) }}" method="post" target="file_frame">
<form name="download" action="{{ path('document_download', {'token': token, 'type': type, 'anonymous': anonymous}) }}" method="post" target="file_frame">
{% if anonymous %}
<input type="hidden" name="anonymous" value="1" />
{% endif%}

View File

@@ -21,9 +21,9 @@
onDblClick="openPreview('RESULT',{{record.get_number}});">
{% endif %}
<div style="padding: 4px;">
<div style="height:40px; position: relative; z-index: 95;">
<div class="title">
{{record.get_title}}
<div style="height:40px; position: relative; z-index: 95;margin-bottom:0;border-bottom:none;overflow:hidden;">
<div class="title" style="max-height:100%" title="{{ record.get_title() }}">
{{ record.get_title() }}
</div>
<div class="status">
{{record.get_status_icons|raw}}

View File

@@ -154,10 +154,11 @@
{% trans %}Accuse de reception{% endtrans %}
</label>
</div>
{% if app['conf'].get(['registry', 'actions', 'force-authentication']) %}
{% if app['conf'].get(['registry', 'actions', 'enable-push-authentication']) %}
{% set force = app['conf'].get(['registry', 'actions', 'force-push-authentication']) %}
<div class="control-group">
<label for="PushForceAuthentication" class="checkbox">
<input id="PushForceAuthentication" type="checkbox" checked="checked" name="force_authentication" value="1"/>
<label for="PushForceAuthentication" class="checkbox" {% if force %}style="color:#8a8a8a"{% endif %}>
<input {% if force %}disabled="disabled"{% endif %} id="PushForceAuthentication" type="checkbox" checked="checked" name="force_authentication" value="1"/>
{% trans %}Force authentication{% endtrans %}
</label>
</div>

View File

@@ -414,7 +414,10 @@
}
if (resizeImgTips) {
var factor = Math.max(Math.min((width - 45) / width, (height - 75) / height), 1);
var factor = Math.min((width - 45) / width, (height - 75) / height);
if (factor > 1) {
factor = 1;
}
var imgWidth = Math.round(width * factor);
var imgHeight = Math.round(height * factor);

View File

@@ -184,7 +184,7 @@ function submiterAction(domSubmiter) {
request = $.ajax({
type: "POST",
url: "/index_dev.php/report/init",
url: "/report/init",
data: data,
beforeSend: function () {
container.find('.content').empty();