Add checks for archive building libraries

modifié:         core/lib/Thelia/Core/FileFormat/Archive/ArchiveBuilder/TarArchiveBuilder.php
	modifié:         core/lib/Thelia/Core/FileFormat/Archive/ArchiveBuilder/TarBz2ArchiveBuilder.php
	modifié:         core/lib/Thelia/Core/FileFormat/Archive/ArchiveBuilder/TarGzArchiveBuilder.php
	modifié:         core/lib/Thelia/Core/FileFormat/Archive/ArchiveBuilder/ZipArchiveBuilder.php
	modifié:         core/lib/Thelia/Core/FileFormat/Archive/ArchiveBuilderInterface.php
	modifié:         core/lib/Thelia/Core/FileFormat/Archive/ArchiveBuilderManager.php
	modifié:         templates/backOffice/default/ajax/export-modal.html
	modifié:         templates/backOffice/default/export-page.html
This commit is contained in:
Benjamin Perche
2014-08-05 15:10:19 +02:00
parent b5dbf08bb7
commit d1a07b883b
8 changed files with 137 additions and 130 deletions

View File

@@ -47,15 +47,6 @@ class TarArchiveBuilder extends AbstractArchiveBuilder
/** @var \Thelia\Log\Tlog */ /** @var \Thelia\Log\Tlog */
protected $logger; protected $logger;
public function __construct()
{
if (false !== (bool) ini_get("phar.readonly") || !class_exists("\\PharData")) {
return null;
}
parent::__construct();
}
public function __destruct() public function __destruct()
{ {
if ($this->tar instanceof \PharData) { if ($this->tar instanceof \PharData) {
@@ -512,4 +503,9 @@ class TarArchiveBuilder extends AbstractArchiveBuilder
{ {
return $this->compression; return $this->compression;
} }
public function isAvailable()
{
return false === (bool) ini_get("phar.readonly") && class_exists("\\PharData");
}
} }

View File

@@ -19,15 +19,6 @@ namespace Thelia\Core\FileFormat\Archive\ArchiveBuilder;
*/ */
class TarBz2ArchiveBuilder extends TarArchiveBuilder class TarBz2ArchiveBuilder extends TarArchiveBuilder
{ {
public function __construct()
{
if (!extension_loaded("bzip2")) {
return null;
}
parent::__construct();
}
public function getName() public function getName()
{ {
return "tar.bz2"; return "tar.bz2";
@@ -53,4 +44,9 @@ class TarBz2ArchiveBuilder extends TarArchiveBuilder
return $this; return $this;
} }
public function isAvailable()
{
return parent::isAvailable() && extension_loaded("bzip2");
}
} }

View File

@@ -19,15 +19,6 @@ namespace Thelia\Core\FileFormat\Archive\ArchiveBuilder;
*/ */
class TarGzArchiveBuilder extends TarArchiveBuilder class TarGzArchiveBuilder extends TarArchiveBuilder
{ {
public function __construct()
{
if (!extension_loaded("zlib")) {
return null;
}
parent::__construct();
}
public function getName() public function getName()
{ {
return "tar.gz"; return "tar.gz";
@@ -54,4 +45,8 @@ class TarGzArchiveBuilder extends TarArchiveBuilder
return $this; return $this;
} }
public function isAvailable()
{
return parent::isAvailable() && extension_loaded("zlib");
}
} }

View File

@@ -610,4 +610,14 @@ class ZipArchiveBuilder extends AbstractArchiveBuilder
{ {
return $this->zip; return $this->zip;
} }
/**
* @return bool
*
* Returns conditions for archive builder to be available ( loaded libraries )
*/
public function isAvailable()
{
return class_exists('\\ZipArchive');
}
} }

View File

@@ -112,4 +112,10 @@ interface ArchiveBuilderInterface
*/ */
public function hasDirectory($directory); public function hasDirectory($directory);
/**
* @return bool
*
* Returns conditions for archive builder to be available ( loaded libraries )
*/
public function isAvailable();
} }

View File

@@ -33,9 +33,9 @@ class ArchiveBuilderManager
* @param AbstractArchiveBuilder $archiveBuilder * @param AbstractArchiveBuilder $archiveBuilder
* @return $this * @return $this
*/ */
public function add(AbstractArchiveBuilder $archiveBuilder = null) public function add(AbstractArchiveBuilder $archiveBuilder)
{ {
if (null !== $archiveBuilder) { if ($archiveBuilder->isAvailable()) {
$archiveBuilder->setEnvironment($this->environment); $archiveBuilder->setEnvironment($this->environment);
$this->archiveBuilders[$archiveBuilder->getName()] = $archiveBuilder; $this->archiveBuilders[$archiveBuilder->getName()] = $archiveBuilder;

View File

@@ -48,59 +48,61 @@
</select> </select>
{/form_field} {/form_field}
</div> </div>
<div class="col-md-1"></div> {ifloop rel="export-archive-builder"}
<div class="col-md-4"> <div class="col-md-1"></div>
{form_field form=$form field="do_compress"} <div class="col-md-4">
<label for="{$label_attr.for}"> {form_field form=$form field="do_compress"}
{$label} <label for="{$label_attr.for}">
</label> {$label}
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small" id="export-compression-switch"> </label>
<input type="checkbox" name="{$name}" id="{$label_attr.for}"/> <div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small" id="export-compression-switch">
<input type="checkbox" name="{$name}" id="{$label_attr.for}"/>
</div>
{/form_field}
</div> </div>
{/form_field}
</div> </div>
</div> <div class="row export-compression-selection-row">
<div class="row export-compression-selection-row"> <div class="col-md-4">
<div class="col-md-4"> {form_field form=$form field="archive_builder"}
{form_field form=$form field="archive_builder"} <label for="{$label_attr.for}">
<label for="{$label_attr.for}"> {$label}
{$label} </label>
</label> <select name="{$name}" id="{$label_attr.for}">
<select name="{$name}" id="{$label_attr.for}"> {loop name="export-archive-builder" type="archive-builder"}
{loop name="export-archive-builder" type="archive-builder"} <option value="{$NAME}" {if $value == $NAME}selected{/if}>
<option value="{$NAME}" {if $value == $NAME}selected{/if}> {$NAME} (.{$EXTENSION})
{$NAME} (.{$EXTENSION}) </option>
</option> {/loop}
{/loop} </select>
</select> {/form_field}
{/form_field} </div>
</div> {if $HAS_IMAGES}
{if $HAS_IMAGES} <div class="col-md-4">
<div class="col-md-4"> {form_field form=$form field="images"}
{form_field form=$form field="images"} <label for="{$label_attr.for}">
<label for="{$label_attr.for}"> {$label}
{$label} </label>
</label>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small"> <div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small">
<input type="checkbox" name="{$name}" id="{$label_attr.for}" /> <input type="checkbox" name="{$name}" id="{$label_attr.for}" />
</div> </div>
{/form_field} {/form_field}
</div> </div>
{/if} {/if}
{if $HAS_DOCUMENTS} {if $HAS_DOCUMENTS}
<div class="col-md-4"> <div class="col-md-4">
{form_field form=$form field="documents"} {form_field form=$form field="documents"}
<label for="{$label_attr.for}"> <label for="{$label_attr.for}">
{$label} {$label}
</label> </label>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small"> <div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small">
<input type="checkbox" name="{$name}" id="{$label_attr.for}" /> <input type="checkbox" name="{$name}" id="{$label_attr.for}" />
</div> </div>
{/form_field} {/form_field}
</div> </div>
{/if} {/if}
{/ifloop}
</div> </div>
{/ifloop} {/ifloop}
{elseloop rel="export-formatters"} {elseloop rel="export-formatters"}

View File

@@ -86,64 +86,66 @@
</select> </select>
{/form_field} {/form_field}
</div> </div>
<div class="col-md-4"> {ifloop rel="export-archive-builder"}
{form_field form=$form field="do_compress"} <div class="col-md-4">
<label for="{$label_attr.for}"> {form_field form=$form field="do_compress"}
{$label}
</label>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small" id="export-compression-switch">
<input type="checkbox" name="{$name}" id="{$label_attr.for}"/>
</div>
{/form_field}
</div>
</div>
<div class="row export-compression-selection-row">
<div class="col-md-4">
{form_field form=$form field="archive_builder"}
<div class="form-group {if $error}has-error{/if}">
<label for="{$label_attr.for}"> <label for="{$label_attr.for}">
{$label} {$label}
</label> </label>
<select name="{$name}" id="{$label_attr.for}"> <div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small" id="export-compression-switch">
{loop name="export-archive-builder" type="archive-builder"} <input type="checkbox" name="{$name}" id="{$label_attr.for}"/>
<option value="{$NAME}" {if $value == $NAME}selected{/if}> </div>
{$NAME} (.{$EXTENSION}) {/form_field}
</option> </div>
{/loop}
</select>
{if $error}
<div class="error-field">{$message}</div>
{/if}
</div>
{/form_field}
</div> </div>
{if $HAS_IMAGES} <div class="row export-compression-selection-row">
<div class="col-md-4"> <div class="col-md-4">
{form_field form=$form field="images"} {form_field form=$form field="archive_builder"}
<label for="{$label_attr.for}"> <div class="form-group {if $error}has-error{/if}">
{$label} <label for="{$label_attr.for}">
</label> {$label}
</label>
<select name="{$name}" id="{$label_attr.for}">
{loop name="export-archive-builder" type="archive-builder"}
<option value="{$NAME}" {if $value == $NAME}selected{/if}>
{$NAME} (.{$EXTENSION})
</option>
{/loop}
</select>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small"> {if $error}
<input type="checkbox" name="{$name}" id="{$label_attr.for}" /> <div class="error-field">{$message}</div>
</div> {/if}
{/form_field} </div>
</div> {/form_field}
{/if} </div>
{if $HAS_DOCUMENTS} {if $HAS_IMAGES}
<div class="col-md-4"> <div class="col-md-4">
{form_field form=$form field="documents"} {form_field form=$form field="images"}
<label for="{$label_attr.for}"> <label for="{$label_attr.for}">
{$label} {$label}
</label> </label>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small"> <div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small">
<input type="checkbox" name="{$name}" id="{$label_attr.for}" /> <input type="checkbox" name="{$name}" id="{$label_attr.for}" />
</div> </div>
{/form_field} {/form_field}
</div> </div>
{/if} {/if}
{if $HAS_DOCUMENTS}
<div class="col-md-4">
{form_field form=$form field="documents"}
<label for="{$label_attr.for}">
{$label}
</label>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small">
<input type="checkbox" name="{$name}" id="{$label_attr.for}" />
</div>
{/form_field}
</div>
{/if}
{/ifloop}
</div> </div>
{/ifloop} {/ifloop}
{elseloop rel="export-formatters"} {elseloop rel="export-formatters"}