Commit 748c40fe authored by Simonas's avatar Simonas

Merge branch 'Import_from_JSON' into dev

parents a268c1a0 81eb3603
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PublishConfigData">
<serverData>
<paths name="Budget">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="Oltranet-CAT">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="Skubis">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="Taxi">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="bioetika">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="biuro-dev">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="biuro-export">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="brabemanning">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="dev.biuro">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="etime">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="laravel">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="laravelangular">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="olClone">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="olExternal">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="oltranet">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="oltranet (1)">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="oltranet2">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="servy">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="sms_proxy">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="test.app">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="testCI">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
</serverData>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with NO BOM" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="NodePackageJsonFileManager">
<packageJsonPaths />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/dev.biuro.iml" filepath="$PROJECT_DIR$/.idea/dev.biuro.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PhpCodeSniffer">
<phpcs_settings>
<PhpCSConfiguration tool_path="C:/cygwin64/home/AndriusMickus/.composer/vendor/squizlabs/php_codesniffer/scripts/phpcs" />
</phpcs_settings>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="972bea23-7ed8-4a27-8e45-563851aba7d9" name="Default Changelist" comment="" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileEditorManager">
<leaf>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/wp-content/plugins/jobs-importer/JobsImporter.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="546">
<caret line="275" column="38" lean-forward="true" selection-start-line="275" selection-start-column="38" selection-end-line="275" selection-end-column="38" />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>parserDefaults</find>
<find>divi</find>
<find>fiel</find>
<find>type</find>
<find>-'</find>
</findStrings>
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/wp-content/plugins/jobs-importer/DataCollector.php" />
<option value="$PROJECT_DIR$/wordpress/readme.html" />
<option value="$PROJECT_DIR$/wp-content/plugins/jobs-importer/Model.php" />
<option value="$PROJECT_DIR$/wp-content/plugins/jobs-importer/jobs-importer.php" />
<option value="$PROJECT_DIR$/wp-content/plugins/jobs-importer/JsonDataCollector.php" />
<option value="$PROJECT_DIR$/wp-content/plugins/jobs-importer/JobsImporter.php" />
</list>
</option>
</component>
<component name="PackageJsonUpdateNotifier">
<dismissed value="$PROJECT_DIR$/package.json" />
</component>
<component name="PhpServers">
<servers />
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="914" />
<option name="width" value="935" />
<option name="height" value="1087" />
</component>
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes />
</component>
<component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="true" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="nodejs_package_manager_path" value="npm" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="972bea23-7ed8-4a27-8e45-563851aba7d9" name="Default Changelist" comment="" />
<created>1545993967987</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1545993967987</updated>
<workItem from="1545993970038" duration="703000" />
<workItem from="1545995247139" duration="2802000" />
<workItem from="1545998312801" duration="1214000" />
<workItem from="1546001282395" duration="363000" />
<workItem from="1546001727252" duration="564000" />
<workItem from="1546002474153" duration="1476000" />
<workItem from="1546185514432" duration="366000" />
<workItem from="1546515105767" duration="10000" />
<workItem from="1546516205207" duration="470000" />
<workItem from="1546516730595" duration="1888000" />
<workItem from="1546534069932" duration="9000" />
<workItem from="1546538001585" duration="2193000" />
<workItem from="1546541788681" duration="1064000" />
<workItem from="1546588634966" duration="52000" />
<workItem from="1546588744716" duration="729000" />
<workItem from="1546589706539" duration="48000" />
<workItem from="1546850222316" duration="2274000" />
<workItem from="1546853824110" duration="174000" />
<workItem from="1546854074292" duration="614000" />
<workItem from="1546854713968" duration="2988000" />
<workItem from="1546961111197" duration="161000" />
<workItem from="1546961546006" duration="7000" />
<workItem from="1546961595759" duration="557000" />
<workItem from="1546962608035" duration="1378000" />
<workItem from="1546975416184" duration="604000" />
<workItem from="1547110249857" duration="1372000" />
<workItem from="1547111836495" duration="1762000" />
<workItem from="1547113748631" duration="1257000" />
<workItem from="1547115252125" duration="285000" />
<workItem from="1547117525383" duration="619000" />
<workItem from="1547123538504" duration="607000" />
<workItem from="1547194485837" duration="1280000" />
<workItem from="1547198716959" duration="1489000" />
<workItem from="1547203619847" duration="2419000" />
<workItem from="1547210774589" duration="2242000" />
<workItem from="1547388562482" duration="32000" />
<workItem from="1547389658593" duration="1213000" />
<workItem from="1547408391961" duration="1730000" />
<workItem from="1547451754052" duration="327000" />
<workItem from="1547452605294" duration="159000" />
<workItem from="1547455183047" duration="2375000" />
<workItem from="1547457616319" duration="6706000" />
<workItem from="1547470723455" duration="3860000" />
<workItem from="1547474648555" duration="1496000" />
<workItem from="1547477470327" duration="837000" />
<workItem from="1547485503242" duration="6401000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="61176000" />
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="1858" height="1096" extended-state="6" />
<editor active="true" />
<layout>
<window_info content_ui="combo" id="Project" order="0" weight="0.15255158" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Favorites" order="2" side_tool="true" weight="0.3294271" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" weight="0.32986766" />
<window_info anchor="bottom" id="Run" order="2" weight="0.32986766" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
<window_info anchor="bottom" id="Version Control" order="8" />
<window_info anchor="bottom" id="Event Log" order="9" side_tool="true" weight="0.32971373" />
<window_info anchor="bottom" id="Database Changes" order="10" show_stripe_button="false" />
<window_info anchor="bottom" id="File Transfer" internal_type="SLIDING" order="11" type="SLIDING" weight="0.31591448" />
<window_info anchor="bottom" id="Terminal" order="12" weight="0.32872656" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
<window_info anchor="right" id="Remote Host" order="3" weight="0.3296875" />
<window_info anchor="right" id="Database" order="4" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/docker-entrypoint.sh">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/docker-compose.yml">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/.env">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="336">
<caret line="16" column="26" lean-forward="true" selection-start-line="16" selection-start-column="26" selection-end-line="16" selection-end-column="26" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/wordpress/readme.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="546">
<caret line="26" column="13" selection-start-line="26" selection-start-column="13" selection-end-line="26" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/wp-content/plugins/jobs-importer/DataCollector.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="546">
<caret line="140" column="21" lean-forward="true" selection-start-line="140" selection-start-column="21" selection-end-line="140" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/wp-content/themes/biuro/functions.php">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/wp-content/plugins/jobs-importer/Model.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="252">
<caret line="12" column="1" lean-forward="true" selection-start-line="12" selection-start-column="1" selection-end-line="12" selection-end-column="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/wp-content/plugins/jobs-importer/jobs-importer.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="616">
<caret line="64" lean-forward="true" selection-start-line="64" selection-end-line="64" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/wp-content/plugins/jobs-importer/JsonDataCollector.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1008">
<caret line="51" column="27" selection-start-line="51" selection-start-column="14" selection-end-line="51" selection-end-column="27" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/wp-content/plugins/jobs-importer/JobsImporter.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="546">
<caret line="275" column="38" lean-forward="true" selection-start-line="275" selection-start-column="38" selection-end-line="275" selection-end-column="38" />
</state>
</provider>
</entry>
</component>
</project>
\ No newline at end of file
......@@ -10,7 +10,8 @@ class DataCollector
{
// Data mapping
protected $dataMap = [
'livas-id' => '@livas_id',
// 'lang' => '@lang',
'livas_id' => '@livas_id',
'valid' => '@valid',
'division' => 'division',
'name' => 'title',
......@@ -25,7 +26,6 @@ class DataCollector
'contact' => 'contact',
'post_date' => '@published_date',
'post_modified' => '@updated',
'lang' => '@lang',
];
// Relations mapping
......@@ -120,12 +120,15 @@ class DataCollector
if (array_key_exists($this->containerTag, $parsedData)) {
$container = $parsedData[$this->containerTag];
if (array_key_exists($this->elementTag, $container)) {
foreach ($container[$this->elementTag] as $elementData) {
$lang = $elementData['@lang'];
var_dump($elementData);
$lang = $container[$this->elementTag]['@lang'];
$element = [];
foreach ($this->dataMap as $key => $item) {
$itemValue = (empty($elementData[$item])) ? '' : $elementData[$item];
var_dump($itemValue);
$value = (is_array($itemValue))
? [$this->getKey($key, $itemValue, $lang) => html_entity_decode($this->getValue($itemValue))]
: html_entity_decode($itemValue);
......@@ -142,6 +145,7 @@ class DataCollector
}
}
var_dump($transformed);
$this->data = $transformed;
}
......@@ -213,7 +217,6 @@ class DataCollector
*/
function xmlToArray($xml, $options = array())
{
$options = array_merge($this->parserDefaults, $options);
$namespaces = $xml->getDocNamespaces();
$namespaces[''] = null; //add base (empty) namespace
......
......@@ -3,17 +3,21 @@
/**
* Class JobsImporter - Import data to WP posts with custom fields
*
* @uses Pods framework
* @uses Pods framework
* @package Biuro Jobs importer
* @used-by \jobs-importer\job-importer.php
*/
class JobsImporter {
class JobsImporter
{
private $data;
// Biuro record unique key
protected $primaryKey = 'livas-id';
// Language attribute key
protected $lang_id = 'lang';
// Pods instance
protected $pods;
......@@ -26,7 +30,6 @@ class JobsImporter {
'comment_status' => 'closed'
];
public function __construct($data)
{
$this->data = $data;
......@@ -42,21 +45,24 @@ class JobsImporter {
}
/**
* Get related items mapping array and remove it from data array
* Transform data keys by relations mapping
*
* @param array $data Data array
*
* @param $data
* @param array $relationsMap
*
* @return array
*/
private function getRelations(&$data)
private function mapRelations($data, $relationsMap = [])
{
$relations = [];
if (array_key_exists('related_items', $data)) {
$relations = $data['related_items'];
unset($data['related_items']);
foreach ($relationsMap as $relationKey => $dataKey) {
if (array_key_exists($dataKey, $data)) {
$data[$relationKey] = $data[$dataKey];
unset($data[$dataKey]);
}
}
return $relations;
return $data;
}
/**
......@@ -66,14 +72,28 @@ class JobsImporter {
{
foreach ($this->data as $ad) {
// Get related items
$relations = $this->getRelations($ad);
// Prepare data array fro importing
$this->prepare($ad, $relations);
// Set language code
$lang = $this->getAdLang($ad);
// Set relations mapping
$relations = $ad['relations'];
// Set related taxonomies
$terms = $this->getTerms($ad['terms'], $lang);
// Set related custom posts
$posts = $this->getPosts($ad['posts'], $lang);
// Collect and prepare job's data
$adData = $this->mapRelations(array_merge(
$ad['properties'],
['lang' => $lang],
$terms,
$posts,
$this->postProperties
),
$relations
);
// Unique key of post
$primaryKey = $ad[$this->primaryKey];
$primaryKey = $adData[$this->primaryKey];
$pod = $this->getPod($primaryKey);
......@@ -81,8 +101,8 @@ class JobsImporter {
try {
$podId = $pod->save(array_merge($ad, $this->postProperties));
print_r("Old record ($this->idKey: $primaryKey) has been updated. <br>");
$podId = $pod->save($adData);
print_r("Old record ($this->primaryKey: $primaryKey) has been updated. <br>");
} catch (Exception $e) {
......@@ -92,11 +112,11 @@ class JobsImporter {
try {
$podId = $this->pods->add(array_merge($ad, $this->postProperties));
print_r("New record ($this->idKey: $primaryKey) has been created. <br>");
$podId = $this->pods->add($adData);
print_r("New record ($this->primaryKey: $primaryKey) has been created. <br>");
} catch (Exception $e) {
print_r("Error while creating record ($this->idKey: $primaryKey). Error: $e->getMessage()<br>");
print_r("Error while creating record ($this->primaryKey: $primaryKey). Error: $e->getMessage()<br>");
}
}
......@@ -110,49 +130,77 @@ class JobsImporter {
}
/**
* Creates related pods if needed and prepare data array fro import
* Get taxonomies Id's
*
* @param $ad
* @param $relations
* @param array $terms Data array
* @param string $lang Language code
*
* @return array
*/
private function prepare(&$ad, $relations)
private function getTerms($terms, $lang)
{
foreach ($ad as $key => $item) {
$result = [];
$lang = $ad['lang'];
foreach ($terms as $termKey => $termData) {
$slug = $this->getSlug($termKey, $termData, $lang);
$result[$termKey] = $this->getTerm($termKey, $slug, $termData['name'], $lang);
}
if (is_array($item)) {
return $result;
}
$slug = array_keys($item)[0];
$value = array_values($item)[0];
/**
* Get custom posts Id's
*
* @param $posts array Data array
* @param $lang string Language code
*
* @return array
*/
private function getPosts($posts, $lang)
{
$result = [];
$termId = $this->getTerm($key, $slug, $value, $lang);
foreach ($posts as $postKey => $postData) {
$result[$postKey] = $this->getPost($postKey, $postData, $lang);
}
$ad[$key] = $slug;
return $result;
}
// Adding related item if exists
if (array_key_exists($key, $relations)) {
$ad[$relations[$key]] = $termId;
}
}
/**
* Return formated slug
*
* @param string $key Object key name
* @param array $data Object data
* @param string $lang Language code
*
* @return string Slug
*/
private function getSlug($key, $data, $lang)
{
if (isset($data['slug'])) {
return $key . '-' . $data['slug'] . '-' . $lang;
}
return $data['name'] . '-' . $lang;
}
/**
* Find and return pod id, if not exist, create it
* Find and return taxonomy id, if not exist, create it
*
* @param $key
* @param $slug
* @param $value
* @param $lang
* @param string $key Taxonomy key name
* @param string $slug Taxonomy slug0
* @param string $value Taxonomy name
* @param string $lang Taxonomy language code
*
* @return int
* @return int Taxonomy id
*/
private function getTerm($key, $slug, $value, $lang)
{
$term = pods($key, $slug);
if ( ! $term->exists()) {
if (!$term->exists()) {
try {
......@@ -161,38 +209,111 @@ class JobsImporter {
'slug' => $slug,
]);
if ($termId) {
} catch (Exception $e) {
$this->setTermLang($termId, $lang);
print_r("Error while creating taxonomies ($key => $slug). Error: $e->getMessage()<br>");
}
} else {
return $termId;
}
try {
$termId = $term->save([
'name' => $value,
'slug' => $slug,
]);
} catch (Exception $e) {
print_r("Error while adding taxonomies ($key => $slug). Error: $e->getMessage()<br>");
print_r("Error while updating taxonomies ($key => $slug). Error: $e->getMessage()<br>");
}
}
if (empty($termId)) {
return false;
}
return $term->id();
$this->setTermLang($termId, $lang);
return $termId;
}
/**
* Get custom post Id, if post not exists, creates it
*
* @param string $key Post key name
* @param array $data Post data array
* @param string $lang Post language code
*
* @return int Post Id
*/
private function getPost($key, $data, $lang)
{
$slug = $this->getSlug($key, $data, $lang);
$post = pods($key, $slug);
if (!$post->exists()) {
try {
$postId = pods($key)->add(
array_merge(
$data,
['slug' => $slug],
$this->postProperties
)
);
} catch (Exception $e) {
print_r("Error while creating custom post ($key => $slug). Error: $e->getMessage()<br>");
}
} else {
try {
$postId = $post->save(
array_merge(
$data,
['slug' => $slug],
$this->postProperties
)
);
} catch (Exception $e) {
print_r("Error while updating custom post ($key => $slug). Error: $e->getMessage()<br>");
}
}
if (empty($postId)) {
return false;
}
$this->setPostLang($postId, $lang);
return $postId;
}
/**
* Set language param for given pod, using Polylang library
*
* @param $termId
* @param $postId
* @param $lang
*/
private function setPostLang($termId, $lang)
private function setPostLang($postId, $lang)
{
try {
PLL()->model->post->set_language($termId, $lang);
print_r("Set language code '$lang' for item. <br>");
PLL()->model->post->set_language($postId, $lang);
print_r("Set language code '$lang' for custom post (id: $postId). <br>");
} catch (Exception $e) {
print_r("Error while setting language code for item, error: $e->getMessage().<br>");
print_r("Error while setting language code for custom post (id: $postId), error: $e->getMessage().<br>");
}
}
......@@ -206,13 +327,12 @@ class JobsImporter {
{
try {
// PLL()->model->post->set_language($termId, $lang);
PLL()->model->term->save_translations($termId, $lang);
print_r("Set language code '$lang' for item. <br>");
PLL()->model->term->set_language($termId, $lang);
print_r("Set language code '$lang' for taxonomy (id: $termId). <br>");
} catch (Exception $e) {
print_r("Error while setting language code for item, error: $e->getMessage().<br>");
print_r("Error while setting language code for taxonomy (id: $termId), error: $e->getMessage().<br>");
}
}
......@@ -226,12 +346,12 @@ class JobsImporter {
private function getPod($id)
{
$params = [
'where' => [
'relation' => 'AND',
'where' => [
'relation' => 'AND',
[
'value' => (int) $id,
'key' => $this->idKey,
'compare' => '=',
'value' => (int)$id,
'key' => $this->primaryKey,
'compare' => '=',
]
]
];
......@@ -239,6 +359,17 @@ class JobsImporter {
return $this->pods->find($params);
}
/**
* Get language code from advert data
*
* @param array $ad
*
* @return string`
*/
private function getAdLang($ad)
{
return $ad[$this->lang_id];
}
}
<?php
class JsonDataCollector
{
// Job properties data map
protected $properties = [
'livas-id' => 'id',
'valid' => 'galioja',
'post_date' => 'data',
'post_modified' => 'atnaujinta',
'title' => 'pareigos',
'post_content' => 'aprasymas',
// 'email' => 'email',
// 'work_time' => 'darbo_laikas',
// 'contact' => 'kontaktai',
];
// Taxonomies data map
protected $terms = [
'city' => [
'slug' => 'miestas_id',
'name' => 'regionas'
],
'field' => [
'slug' => 'kategorija',
'name' => 'sritis'
],
'company' => [
'name' => 'imone'
],
'type' => [
'slug' => 'type',
'name' => 'type'
]
// 'tag'
// 'position',
];
// Custom posts data map
protected $posts = [
'division' => [
'title' => 'padalinys_name',
'slug' => 'padalinys'
]
];
// Language map
protected $lang = 'kalba';
// Relations mapping
protected $relationsMap = [
'division-id' => 'division',
];
// Source data
protected $sourceData;
protected $data;
public function __construct($source)
{
$this->setData($source);
$this->data = $this->transformData();
}
/**
* Set data source:
* get data from source and transform into array
*
* @param $source
*/
protected function setData($source)
{
$this->sourceData = $this->loadData($source);
}
/**
* Parse xml data
*
* @param $source
*
* @return SimpleXMLElement
*/
protected function loadData($source)
{
$context = stream_context_create([
'http' => [
'header' => 'Accept: application/json',
],
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
]);
$json = file_get_contents($source, false, $context);
return json_decode($json);
}
/**
* Get data
*
* @return mixed
*/
public function getData()
{
return $this->data;
}
protected function transformData()
{
$result = [];
foreach ($this->sourceData as $ad) {
$item = [];
$item['properties'] = $this->getProperties($ad);
$item['lang'] = $ad->{$this->lang};
$item['terms'] = $this->getTerms($ad);
$item['posts'] = $this->getPosts($ad);
$item['relations'] = $this->relationsMap;
// foreach ($this->dataMap as $mapKey => $dataKey) {
// $dataValue = $ad->{$dataKey};
// $itemValue = $this->getValue($dataValue);
// $postValue = $this->getValue($dataValue);
// $item[$mapKey] = $itemValue;
//
//// if (array_key_exists($mapKey, $this->relationsMap)) {
//// $item['related_items'][$mapKey] = $this->relationsMap[$mapKey];
//// }
// }
//
// foreach ($this->relationsMap as $keyItem => $valueItem) {
// if (array_key_exists($keyItem, $item) && array_key_exists($valueItem, $item)) {
// $item[$valueItem] = [$valueItem . '_' . $item[$keyItem] => $item[$valueItem]];
// unset($item[$keyItem]);
// }
// }
$result[] = $item;
};
return $result;
}
private function getProperties($ad)
{
$result = [];
foreach ($this->properties as $propertyKey => $propertyValue) {
if (isset($ad->{$propertyValue}))
$dataValue = $ad->{$propertyValue};
$result[$propertyKey] = $this->getValue($dataValue);
}
return $result;
}
private function getTerms($ad)
{
$result = [];
foreach ($this->terms as $termKey => $termProperties) {
foreach ($termProperties as $propertyKey => $propertyValue) {
if (isset($ad->{$propertyValue})) {
$dataValue = $ad->{$propertyValue};
$result[$termKey][$propertyKey] = $this->getValue($dataValue);
}
}
}
return $result;
}
private function getPosts($ad)
{
$result = [];
foreach ($this->posts as $postKey => $postProperties) {
foreach ($postProperties as $propertyKey => $propertyValue) {
if (isset($ad->{$propertyValue})) {
$dataValue = $ad->{$propertyValue};
$result[$postKey][$propertyKey] = $this->getValue($dataValue);
}
}
}
return $result;
}
private function getValue($value)
{
return (is_array($value)) ? $value : html_entity_decode($value);
}
}
\ No newline at end of file
<?php
abstract class Model {
protected $type;
protected $slug;
protected $value;
public function setSlug($slug = null)
{
}
}
\ No newline at end of file
......@@ -8,7 +8,7 @@ Version: 1.0.0
set_time_limit(300);
// Data collector: prepare data for import
require_once 'DataCollector.php';
require_once 'JsonDataCollector.php';
// Data importer: imports data to WP posts
require_once 'JobsImporter.php';
......@@ -58,8 +58,10 @@ function do_import()
echo "<br><br>";
print_r("Data source: $inputFile<br>");
// XML reader
$ads = (new DataCollector($inputFile))->getData();
// JSON reader
$ads = (new JsonDataCollector($inputFile))->getData();
// var_dump($ads);
// exit();
print_r("Found " . count($ads) . " ads from Biuro.<br>");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment