Skip to content

Commit

Permalink
implement import/export and fix some UI issues
Browse files Browse the repository at this point in the history
  • Loading branch information
dpfaffenbauer committed Oct 26, 2017
1 parent 2ad0b9b commit 15fb9d6
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 43 deletions.
102 changes: 86 additions & 16 deletions src/ImportDefinitionsBundle/Controller/DefinitionController.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,14 @@
namespace ImportDefinitionsBundle\Controller;

use CoreShop\Bundle\ResourceBundle\Controller\ResourceController;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Request;
use ImportDefinitionsBundle\Model\DefinitionInterface;
use ImportDefinitionsBundle\Model\Mapping\FromColumn;
use Pimcore\Model\Object;
use Pimcore\Model\DataObject;
use ImportDefinitionsBundle\Model\Mapping\ToColumn;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class DefinitionController extends ResourceController
{
Expand Down Expand Up @@ -85,7 +88,7 @@ public function getColumnsAction(Request $request)
$fromColumns = [];
}

$toColumns = $this->getClassDefinitionForFieldSelection(Object\ClassDefinition::getByName($definition->getClass()));
$toColumns = $this->getClassDefinitionForFieldSelection(DataObject\ClassDefinition::getByName($definition->getClass()));
$mappings = $definition->getMapping();
$mappingDefinition = [];
$fromColumnsResult = [];
Expand Down Expand Up @@ -142,11 +145,78 @@ public function getColumnsAction(Request $request)
}

/**
* @param Object\ClassDefinition $class
* @param Request $request
* @return Response
*/
public function exportAction(Request $request)
{
$id = intval($request->get("id"));

if ($id) {
$definition = $this->repository->find($id);

if ($definition instanceof DefinitionInterface) {

$name = $definition->getName();
unset($definition->id);
unset($definition->creationDate);
unset($definition->modificationDate);

$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->headers->set('Content-Disposition', 'attachment; filename="' . sprintf('import-definition-%s.json', $name) . '"');
$response->headers->set('Pragma', "no-cache");
$response->headers->set('Expires', "0");
$response->headers->set('Content-Transfer-Encoding', "binary");

$response->setContent(json_encode($definition));

return $response;
}
}

throw new NotFoundHttpException();
}

/**
* @param Request $request
* @return mixed|\Symfony\Component\HttpFoundation\JsonResponse
*/
public function importAction(Request $request)
{
$id = intval($request->get("id"));
$definition = $this->repository->find($id);

if ($id && $request->files->has('Filedata') && $definition instanceof DefinitionInterface) {
$uploadedFile = $request->files->get('Filedata');

if ($uploadedFile instanceof UploadedFile) {
$jsonContent = file_get_contents($uploadedFile->getPathname());
$data = $this->decodeJson($jsonContent, false);

$form = $this->resourceFormFactory->create($this->metadata, $definition);
$handledForm = $form->submit($data);

if ($handledForm->isValid()) {
$definition = $form->getData();

$this->manager->persist($definition);
$this->manager->flush();

return $this->viewHandler->handle(['success' => true]);
}
}
}

return $this->viewHandler->handle(['success' => false]);
}

/**
* @param DataObject\ClassDefinition $class
*
* @return array
*/
public function getClassDefinitionForFieldSelection(Object\ClassDefinition $class)
public function getClassDefinitionForFieldSelection(DataObject\ClassDefinition $class)
{
$fields = $class->getFieldDefinitions();

Expand All @@ -170,7 +240,7 @@ public function getClassDefinitionForFieldSelection(Object\ClassDefinition $clas
}

foreach ($fields as $field) {
if ($field instanceof Object\ClassDefinition\Data\Localizedfields) {
if ($field instanceof DataObject\ClassDefinition\Data\Localizedfields) {
foreach ($activatedLanguages as $language) {
$localizedFields = $field->getFieldDefinitions();

Expand All @@ -186,12 +256,12 @@ public function getClassDefinitionForFieldSelection(Object\ClassDefinition $clas
$result[] = $localizedField;
}
}
} elseif ($field instanceof Object\ClassDefinition\Data\Objectbricks) {
$list = new Object\Objectbrick\Definition\Listing();
} elseif ($field instanceof DataObject\ClassDefinition\Data\Objectbricks) {
$list = new DataObject\Objectbrick\Definition\Listing();
$list = $list->load();

foreach ($list as $brickDefinition) {
if ($brickDefinition instanceof Object\Objectbrick\Definition) {
if ($brickDefinition instanceof DataObject\Objectbrick\Definition) {
$key = $brickDefinition->getKey();
$classDefs = $brickDefinition->getClassDefinitions();

Expand All @@ -216,9 +286,9 @@ public function getClassDefinitionForFieldSelection(Object\ClassDefinition $clas
}
}
}
} elseif ($field instanceof Object\ClassDefinition\Data\Fieldcollections) {
} elseif ($field instanceof DataObject\ClassDefinition\Data\Fieldcollections) {
foreach ($field->getAllowedTypes() as $type) {
$definition = Object\Fieldcollection\Definition::getByKey($type);
$definition = DataObject\Fieldcollection\Definition::getByKey($type);

$fieldDefinition = $definition->getFieldDefinitions();

Expand All @@ -235,8 +305,8 @@ public function getClassDefinitionForFieldSelection(Object\ClassDefinition $clas
$result[] = $resultField;
}
}
} elseif ($field instanceof Object\ClassDefinition\Data\Classificationstore) {
$list = new Object\Classificationstore\GroupConfig\Listing();
} elseif ($field instanceof DataObject\ClassDefinition\Data\Classificationstore) {
$list = new DataObject\Classificationstore\GroupConfig\Listing();

$allowedGroupIds = $field->getAllowedGroupIds();

Expand All @@ -252,10 +322,10 @@ public function getClassDefinitionForFieldSelection(Object\ClassDefinition $clas
$key = $config->getId() . ($config->getName() ? $config->getName() : 'EMPTY');

foreach ($config->getRelations() as $relation) {
if ($relation instanceof Object\Classificationstore\KeyGroupRelation) {
if ($relation instanceof DataObject\Classificationstore\KeyGroupRelation) {
$keyId = $relation->getKeyId();

$keyConfig = Object\Classificationstore\KeyConfig::getById($keyId);
$keyConfig = DataObject\Classificationstore\KeyConfig::getById($keyId);

$toColumn = new ToColumn();
$toColumn->setIdentifier('classificationstore~' . $field->getName() . '~' . $keyConfig->getId() . '~' . $config->getId());
Expand All @@ -281,10 +351,10 @@ public function getClassDefinitionForFieldSelection(Object\ClassDefinition $clas
}

/**
* @param Object\ClassDefinition\Data $field
* @param DataObject\ClassDefinition\Data $field
* @return ToColumn
*/
protected function getFieldConfiguration(Object\ClassDefinition\Data $field)
protected function getFieldConfiguration(DataObject\ClassDefinition\Data $field)
{
$toColumn = new ToColumn();

Expand Down
2 changes: 1 addition & 1 deletion src/ImportDefinitionsBundle/Model/Definition.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
use Pimcore\Model\AbstractModel;


class Definition extends AbstractModel implements DefinitionInterface, ResourceInterface
class Definition extends AbstractModel implements DefinitionInterface
{
/**
* @var int
Expand Down
4 changes: 3 additions & 1 deletion src/ImportDefinitionsBundle/Model/DefinitionInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@

namespace ImportDefinitionsBundle\Model;

interface DefinitionInterface
use CoreShop\Component\Resource\Model\ResourceInterface;

interface DefinitionInterface extends ResourceInterface
{
/**
* @return int
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,12 @@ importdefinitions_admin_definitions:
testData:
path: test-data
action: testData
methods: [GET]
import:
path: import
action: import
methods: [GET,POST]
export:
path: export
action: export
methods: [GET]
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ pimcore.plugin.importdefinitions.definition.item = Class.create(coreshop.resourc
iconCls: 'importdefinitions_icon_definition',
url: {
save: '/admin/import_definitions/definitions/save',
//upload : '/plugin/ImportDefinitions/admin_definition/import',
//export : '/plugin/ImportDefinitions/admin_definition/export',
upload : '/admin/import_definitions/definitions/import',
export : '/admin/import_definitions/definitions/export',
test: '/admin/import_definitions/definitions/test-data'
},

Expand All @@ -33,13 +33,14 @@ pimcore.plugin.importdefinitions.definition.item = Class.create(coreshop.resourc
deferredRender: false,
forceLayout: true,
iconCls: this.iconCls,
buttons: [{
text: t('import'),
iconCls: 'pimcore_icon_import',
handler: this.upload.bind(this)
},
buttons: [
{
text: t('importdefinitions_import_definition'),
iconCls: 'pimcore_icon_import',
handler: this.upload.bind(this)
},
{
text: t('export'),
text: t('importdefinitions_export_definition'),
iconCls: 'pimcore_icon_export',
handler: function () {
var id = this.data.id;
Expand Down Expand Up @@ -356,6 +357,7 @@ pimcore.plugin.importdefinitions.definition.item = Class.create(coreshop.resourc
this.updateProviderMapViews();
}.bind(this));
} else {
this.data.provider = provider;
this.updateProviderMapViews();
}
}
Expand All @@ -367,7 +369,7 @@ pimcore.plugin.importdefinitions.definition.item = Class.create(coreshop.resourc
},

undirtyMappingRecords: function () {
if (this.mappingSettings) {
if (this.mappingSettings && this.mappingSettings.down("grid")) {
var store = this.mappingSettings.down("grid").getStore();

store.getRange().forEach(function (record) {
Expand Down Expand Up @@ -647,22 +649,9 @@ pimcore.plugin.importdefinitions.definition.item = Class.create(coreshop.resourc
},

upload: function (callback) {

pimcore.helpers.uploadDialog(this.url.upload + "?id=" + this.data.id, "Filedata", function () {

Ext.Ajax.request({
url: "/plugin/ImportDefinitions/admin_definition/get",
params: {
id: this.data.id
},
success: function (response) {
this.data = Ext.decode(response.responseText.data);
this.parentPanel.getEditPanel().removeAll();
this.addLayout();
this.initLayoutFields();
pimcore.layout.refresh();
}.bind(this)
});
this.panel.destroy();
this.parentPanel.openItem(this.data);
}.bind(this), function () {
Ext.MessageBox.alert(t("error"), t("error"));
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,6 @@ importdefinitions_processmanager_params: 'Params'
importdefinitions_skip_new_objects: 'Skip New Objects'
importdefinitions_skip_existing_objects: 'Skip Existing Objects'
importdefinitions_csv_headers: 'CSV Headers'
importdefinitions_csv_headers_description: 'If your CSV doesn''t have any headers, put them here, and ImportDefinitions will always map your data this way'
importdefinitions_csv_headers_description: 'If your CSV doesn''t have any headers, put them here, and ImportDefinitions will always map your data this way'
importdefinitions_import_definition: 'Import Definition'
importdefinitions_export_definition: 'Export Definition'

0 comments on commit 15fb9d6

Please sign in to comment.