| Server IP : 54.36.91.62 / Your IP : 216.73.217.112 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/administrator/components/com_djcfimporter/helpers/ |
Upload File : |
<?php
/**
* @version 1.0
* @package DJCF-Importer
* @subpackage DJCF-Importer Component
* @copyright Copyright (C) 2010 DJ-Extensions.com LTD, All rights reserved.
* @license http://www.gnu.org/licenses GNU/GPL
* @author url: http://design-joomla.eu
* @author email contact@design-joomla.eu
* @developer Ćukasz Ciastek - lukasz.ciastek@design-joomla.eu
*
*
* DJCF-Importer is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* DJCF-Importer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with DJCF-Importer. If not, see <http://www.gnu.org/licenses/>.
*
*/
defined('_JEXEC') or die('Restricted access');
require_once(JPATH_ADMINISTRATOR . '/components/com_djclassifieds/lib/djseo.php');
require_once(JPATH_ADMINISTRATOR . '/components/com_djclassifieds/lib/djimage.php');
require_once(JPATH_ADMINISTRATOR . '/components/com_djclassifieds/lib/djgeocoder.php');
JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR . DS . 'tables');
jimport('joomla.database.table');
class DJCFImporterHelper
{
private static $_import_id = null;
private static $_changelog_items = array();
private static $_changelog_items_update = array();
public static function import($id)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$par = JComponentHelper::getParams('com_djcfimporter');
$start_i = $app->input->getInt('start_i', 0);
$end_i = $start_i + 10;
$msg = '';
$msg_type = '';
$query = "SELECT c.* FROM #__djcf_categories c ORDER BY c.id";
$db->setQuery($query);
$cats = $db->loadObjectList('id');
$query = "SELECT r.* FROM #__djcf_regions r ORDER BY r.id";
$db->setQuery($query);
$regs = $db->loadObjectList('id');
$query = "SELECT t.* FROM #__djcf_types t ORDER BY t.id";
$db->setQuery($query);
$types = $db->loadObjectList('id');
$query = "SELECT i.* FROM #__djcf_fields i "
. "WHERE i.source=0 ORDER BY i.id ";
$db->setQuery($query);
$advert_cat_fields = $db->loadObjectList('id');
$query = "SELECT i.* FROM #__djcf_fields i "
. "WHERE i.source=1 ORDER BY i.id ";
$db->setQuery($query);
$advert_contact_fields = $db->loadObjectList('id');
$query = "SELECT i.* FROM #__djcfi_items i "
. "WHERE i.id=" . $id . " LIMIT 1";
$db->setQuery($query);
$feed_item = $db->loadObject();
self::getImportID();
$registry = new JRegistry();
$registry->loadString($feed_item->params);
$feed_item->params = $registry->toObject();
//echo '<pre>';print_r($feed_item);die();
if ($feed_item->params->sync_url) {
$xml = self::getXmlFeed($feed_item->params->sync_url, $feed_item->params->sync_protocol, $feed_item->params->sync_headers, $feed_item->params->sync_xml);
$xml_fields = self::getXmlFields($feed_item->group_id);
$item_fields = self::getItemFields($xml_fields);
$ii_c = 0;
$xml_items = $xml->{$feed_item->params->xml_parent};
$items_c = count($xml_items);
//echo '<pre>';print_r( );die();
if ($items_c > 0 && $start_i <= $items_c) {
foreach ($xml->{$feed_item->params->xml_parent} as $item) {
if ($ii_c >= $start_i && $ii_c < $end_i) {
$new_id = self::addItem($item, $xml_fields, $item_fields, $feed_item, $cats, $regs, $types, $advert_cat_fields, $advert_contact_fields);
}
$ii_c++;
//$new_id = self::addItem($xml_items[$ii],$xml_fields,$item_fields,$feed_item, $cats,$regs,$types);
//echo '<pre>';print_r($item);die();
//if($ii==20){break;}
}
}
self::saveChangelog();
if ($items_c > $end_i) {
echo '<h3>' . JTEXT::_('COM_DJCFIMPORTER_IMPORTING_ELEMENTS') . ' [' . $start_i . '-' . $end_i . ']... ' . $items_c . '</h3>';
header("refresh: 0; url=" . JURI::base() . 'index.php?option=com_djcfimporter&task=items.import&id=' . $id . '&start_i=' . $end_i . '&i_id=' . self::$_import_id);
} else {
if ($feed_item->params->missing_action == 1) {
self::deleteMissingAdverts($feed_item);
}
$app->enqueueMessage('Items imported/updated: ' . $items_c);
$app->redirect('index.php?option=com_djcfimporter&view=items');
}
die();
//echo '<pre>..............'; print_r($xml); print_r($feed_item);die();
} else {
$msg = JText::_("COM_DJCFIMPORTER_MISSING_FEED_URL");
$msg_type = "error";
}
//redirect
/*echo '<pre>';
print_r($feed_item);
die('aaaa');*/
}
public static function addItem($xml_item, $xml_fields, $item_fields, $feed_item, &$cats, &$regs, &$types, $advert_cat_fields, $advert_contact_fields)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$row = JTable::getInstance('CFItems', 'DJCFImporterTable');
JPluginHelper::importPlugin('djclassifieds');
$is_new = 1;
$external_id = 0;
if ($feed_item->params->external_id) {
$f_value = self::getFieldValue($xml_item, $feed_item->params->external_id);
if ($f_value != false) {
//if(isset($xml_item->{$feed_item->params->external_id})){
// $f_value = $xml_item->{$feed_item->params->external_id};
if (is_array($f_value)) {
$external_id = $f_value[0];
} else if (is_object($f_value)) {
$external_id = (string)$f_value;
} else {
$external_id = $f_value;
}
}
}
$old_id = 0;
if ($external_id) {
$query = "SELECT ch.item_id FROM #__djcfi_changelog ch, #__djcf_items i "
. "WHERE i.id=ch.item_id AND ch.feed_id=" . $feed_item->id . " AND element=1 AND old_value='" . $external_id . "' ";
$db->setQuery($query);
$old_id = $db->loadResult();
}
if ($old_id) {
$is_new = 0;
if ($feed_item->params->duplicate_action == 1) {
$row->load($old_id);
$query = "SELECT * FROM #__djcf_images WHERE item_id = " . $row->id . " AND type='item' ";
$db->setQuery($query);
$items_images = $db->loadObjectList('id');
if ($items_images) {
foreach ($items_images as $item_img) {
$path_to_delete = JPATH_ROOT . $item_img->path . $item_img->name;
if (JFile::exists($path_to_delete . '.' . $item_img->ext)) {
JFile::delete($path_to_delete . '.' . $item_img->ext);
}
if (JFile::exists($path_to_delete . '_ths.' . $item_img->ext)) {
JFile::delete($path_to_delete . '_ths.' . $item_img->ext);
}
if (JFile::exists($path_to_delete . '_thm.' . $item_img->ext)) {
JFile::delete($path_to_delete . '_thm.' . $item_img->ext);
}
if (JFile::exists($path_to_delete . '_thb.' . $item_img->ext)) {
JFile::delete($path_to_delete . '_thb.' . $item_img->ext);
}
}
}
$query = "DELETE FROM #__djcf_images WHERE item_id = " . $row->id . " AND type='item' ";
$db->setQuery($query);
$db->execute();
$query = "DELETE FROM #__djcf_fields_values WHERE item_id = " . $row->id . " ";
$db->setQuery($query);
$db->execute();
} else {
return true;
}
}
$row->user_id = $feed_item->params->user_id;
foreach ($item_fields->fields_core as $field) {
$f_value = self::getFieldValue($xml_item, $field->source_name, $field->source_attribute);
if ($f_value != false) {
if (is_array($f_value)) {
$row_value = $f_value[0];
} else if (is_object($f_value)) {
$row_value = (string)$f_value;
} else {
$row_value = $f_value;
}
if ($field->dest_core == 'email') {
$email = $row_value;
$row_value = self::getUserId($email);
if ($row_value) {
$row->user_id = $row_value;
}
$row->{$field->dest_core} = $email;
} else if ($field->dest_core == 'user_id') {
if ($row_value) {
$row->{$field->dest_core} = $row_value;
}
} else {
$row->{$field->dest_core} = $row_value;
}
}
}
$row->name = preg_replace('/&([0-9]+);/i', '&#$1;', $row->name);
/*$ref_id = 0;
if($row->id){
$ref_id = $row->id;
$row->id = 0;
}*/
$row->alias = DJClassifiedsSEO::getAliasName($row->name);
if ($row->date_start) {
$date_start_t = strtotime($row->date_start);
$row->date_start = date("Y-m-d H:i:s", $date_start_t);
}
if ($row->date_exp) {
$date_exp_t = strtotime($row->date_exp);
$row->date_exp = date("Y-m-d H:i:s", $date_exp_t);
} else {
$row->exp_days = $feed_item->params->exp_days;
$row->date_exp = date("Y-m-d G:i:s", mktime(date("G"), date("i"), date("s"), date("m"), date("d") + $row->exp_days, date("Y")));
}
if ($row->date_sort) {
$date_sort_t = strtotime($row->date_sort);
$row->date_sort = date("Y-m-d H:i:s", $date_sort_t);
} else {
$row->date_sort = $row->date_start;
}
if (!$row->intro_desc) {
$row->intro_desc = mb_substr(strip_tags($row->description), 0, '120', "UTF-8");
}
if (!$row->description) {
$row->description = '';
}
if (!$row->contact) {
$row->contact = '';
}
$row->published = 1;
$row->promotions = empty($row->promotions) ? '' : $row->promotions;
//echo '<pre>';print_r($row);die();
//$row->id = 92;
//$row->store();
if (!$row->region_id || $feed_item->params->duplicate_action == 1) {
$reg_id = self::getRegion($xml_item, $xml_fields, $item_fields, $feed_item, $row, $regs);
}
if (!$row->cat_id || $feed_item->params->duplicate_action == 1) {
$cat_id = self::getCategory($xml_item, $xml_fields, $item_fields, $feed_item, $row, $cats);
}
if (!$row->type_id || $feed_item->params->duplicate_action == 1) {
$type_id = self::getType($xml_item, $xml_fields, $item_fields, $feed_item, $row, $types);
}
$switch_id = null;
if ($old_id == 0 && $row->id) { // j! store() does not support inserts with custom pk
$switch_id = $row->id;
$row->id = 0;
}
if(!$row->store()){
throw new Exception($row->getError());
}
if($switch_id){
$db = JFactory::getDBO();
$query = "UPDATE #__djcf_items SET id=".$switch_id." WHERE id=".$row->id;
$db->setQuery($query);
$db->execute();
$row->id = $switch_id;
}
$img_added = self::getImages($xml_item, $xml_fields, $item_fields, $feed_item, $row);
$cat_fields_added = self::getAdvertCatFields($xml_item, $xml_fields, $item_fields, $feed_item, $row, $advert_cat_fields);
$contact_fields_added = self::getAdvertContactFields($xml_item, $xml_fields, $item_fields, $feed_item, $row, $advert_contact_fields);
if ($old_id == 0) {
self::$_changelog_items[] = "(" . self::$_import_id . ", " . $feed_item->id . ", 0, 0, " . $row->id . ",'1', '" . addslashes($row->name) . "', '" . addslashes($external_id) . "', '0')";
}
self::$_changelog_items_update[] = "(" . self::$_import_id . ", " . $row->id . ")";
$app->triggerEvent('onAfterDJClassifiedsSaveAdvert', array(&$row, $is_new));
return $row->id;
}
public static function getFieldValue($xml_item, $source_name, $source_attribute = '')
{
$field_path = explode('|', $source_name);
$field_val = false;
if (count($field_path) > 1) {
$field_val = $xml_item;
foreach ($field_path as $fp) {
if (isset($field_val->{$fp})) {
$field_val = $field_val->{$fp};
if ($source_attribute) {
if (isset($field_val->attributes()->{$source_attribute})) {
$field_val = $field_val->attributes()->{$source_attribute};
}
}
}
}
} else {
if (isset($xml_item->{$source_name})) {
$field_val = $xml_item->{$source_name};
if ($source_attribute) {
if (isset($field_val->attributes()->{$source_attribute})) {
$field_val = $field_val->attributes()->{$source_attribute};
}
}
}
}
if ($field_val) {
if (count($field_val->children()) == 0) {
$field_val = trim($field_val);
}
}
//djcustom
//if($field_val==$xml_item || $field_val==false){
if ($field_val == false) {
return false;
} else {
return $field_val;
}
}
public static function getAdvertContactFields($xml_item, $xml_fields, $item_fields, $feed_item, &$item, $advert_contact_fields)
{
$app = JFactory::getApplication();
$lang = JFactory::getLanguage();
$db = JFactory::getDBO();
//echo '<pre>';print_r($item_fields->fields_contact);die();
//echo '<pre>';print_r($xml_item);die();
$cf_i = 0;
$ad_fields_query = "INSERT INTO `#__djcf_fields_values` (`field_id`, `item_id`, `value`, `value_date`) VALUES ";
if (count($item_fields->fields_contact)) {
foreach ($item_fields->fields_contact as $field) {
$ad_field_value = '';
$f_value = self::getFieldValue($xml_item, $field->source_name, $field->source_attribute);
if ($f_value != false) {
//if(isset($xml_item->{$field->source_name})){
// $f_value = $xml_item->{$field->source_name};
if (is_array($f_value)) {
$ad_field_value = $f_value[0];
} else if (is_object($f_value)) {
$ad_field_value = (string)$f_value;
} else {
$ad_field_value = $f_value;
}
}
if ($ad_field_value == "\n ") {
$ad_field_value = '';
}
if (isset($advert_contact_fields[$field->dest_custom_contact])) {
$ad_field = $advert_contact_fields[$field->dest_custom_contact];
if ($ad_field->type == 'date') {
if ($ad_field_value != '') {
$ad_fields_query .= "('" . $ad_field->id . "','" . $item->id . "','','" . $db->escape($ad_field_value) . "'), ";
$cf_i++;
} else if ($ad_field->default_value != '') {
$ad_fields_query .= "('" . $ad_field->id . "','" . $item->id . "','','" . $db->escape($ad_field->default_value) . "'), ";
$cf_i++;
}
} else {
if ($ad_field_value != '') {
$ad_fields_query .= "('" . $ad_field->id . "','" . $item->id . "','" . $db->escape($ad_field_value) . "',''), ";
$cf_i++;
} else if ($ad_field->default_value != '') {
$ad_fields_query .= "('" . $ad_field->id . "','" . $item->id . "','" . $db->escape($ad_field->default_value) . "',''), ";
$cf_i++;
}
}
}
}
}
if ($cf_i > 0) {
$ad_fields_query = substr($ad_fields_query, 0, -2) . ';';
$db->setQuery($ad_fields_query);
$db->execute();
//echo '<pre>';print_r($db);die();
}
//echo '<pre>';print_r($item);echo $cat_id;die();
return $cf_i;
}
public static function getAdvertCatFields($xml_item, $xml_fields, $item_fields, $feed_item, &$item, $advert_cat_fields)
{
$app = JFactory::getApplication();
$lang = JFactory::getLanguage();
$db = JFactory::getDBO();
//echo '<pre>';print_r($item_fields->fields_category);die();
//echo '<pre>';print_r($xml_item);die();
$cf_i = 0;
$ad_fields_query = "INSERT INTO `#__djcf_fields_values` (`field_id`, `item_id`, `value`, `value_date`) VALUES ";
if (count($item_fields->fields_category)) {
foreach ($item_fields->fields_category as $field) {
//$field = $item_fields->fields_category[0];
$ad_field_value = '';
$f_value = self::getFieldValue($xml_item, $field->source_name, $field->source_attribute);
if ($f_value != false) {
//if(isset($xml_item->{$field->source_name})){
// $f_value = $xml_item->{$field->source_name};
if (is_array($f_value)) {
$ad_field_value = $f_value[0];
} else if (is_object($f_value)) {
$ad_field_value = (string)$f_value;
} else {
$ad_field_value = $f_value;
}
}
if ($ad_field_value == "\n ") {
$ad_field_value = '';
}
if (isset($advert_cat_fields[$field->dest_custom_category])) {
$ad_field = $advert_cat_fields[$field->dest_custom_category];
if ($ad_field->type == 'date') {
if ($ad_field_value != '') {
$ad_fields_query .= "('" . $ad_field->id . "','" . $item->id . "','','" . $db->escape($ad_field_value) . "'), ";
$cf_i++;
} else if ($ad_field->default_value != '') {
$ad_fields_query .= "('" . $ad_field->id . "','" . $item->id . "','','" . $db->escape($ad_field->default_value) . "'), ";
$cf_i++;
}
} else {
if ($ad_field->type == 'checkbox' && $ad_field_value) {
$ad_field_value = ';' . $ad_field_value . ';';
}
if ($ad_field_value != '') {
$ad_fields_query .= "('" . $ad_field->id . "','" . $item->id . "','" . $db->escape($ad_field_value) . "',NULL), ";
$cf_i++;
} else if ($ad_field->default_value != '') {
$ad_fields_query .= "('" . $ad_field->id . "','" . $item->id . "','" . $db->escape($ad_field->default_value) . "',NULL), ";
$cf_i++;
}
}
}
}
}
if ($cf_i > 0) {
$ad_fields_query = substr($ad_fields_query, 0, -2) . ';';
$db->setQuery($ad_fields_query);
$db->execute();
// echo '<pre>';print_r($db);die();
}
//echo '<pre>';print_r($item);echo $cat_id;die();
return $cf_i;
}
public static function getImages($xml_item, $xml_fields, $item_fields, $feed_item, &$item)
{
$app = JFactory::getApplication();
$lang = JFactory::getLanguage();
$db = JFactory::getDBO();
if (count($item_fields->images)) {
foreach ($item_fields->images as $field) {
$cat_name = '';
$f_value = self::getFieldValue($xml_item, $field->source_name, $field->source_attribute);
if ($f_value != false) {
//if(isset($xml_item->{$field->source_name})){
//$f_value = $xml_item->{$field->source_name}->ImageUrl;
if ($field->source_subname) {
//$f_value = $xml_item->{$field->source_name}->{$field->source_subname};
$f_value = $f_value->{$field->source_subname};
} else {
//$f_value = $xml_item->{$field->source_name};
}
//echo '<pre>';print_r($f_value);print_r($xml_item);die();
$cfpar = JComponentHelper::getParams('com_djclassifieds');
$nw = (int)$cfpar->get('th_width', -1);
$nh = (int)$cfpar->get('th_height', -1);
$nws = (int)$cfpar->get('smallth_width', -1);
$nhs = (int)$cfpar->get('smallth_height', -1);
$nwm = (int)$cfpar->get('middleth_width', -1);
$nhm = (int)$cfpar->get('middleth_height', -1);
$nwb = (int)$cfpar->get('bigth_width', -1);
$nhb = (int)$cfpar->get('bigth_height', -1);
$img_ord = 1;
$img_to_insert = 0;
$query_img = "INSERT INTO #__djcf_images(`item_id`,`type`,`name`,`ext`,`path`,`caption`,`ordering`) VALUES ";
$new_img_path = JPATH_SITE . "/components/com_djclassifieds/images/item/";
//for($im = 0;$im<count($img_ids);$im++){
foreach ($f_value as $ii => $img) {
$img = trim($img);
$img_info = @getimagesize($img);
if (is_array($img_info)) {
$img_type = $img_info[2];
if ($img_type == 2) { //jpg
$img_name = $item->id . '_' . $ii . '_' . strtolower($item->alias) . '.jpg';
$new_img_name_u = JPATH_ROOT . '/tmp/' . $img_name;
copy($img, $new_img_name_u);
} else { //png 3
//1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(orden de bytes intel), 8 = TIFF(orden de bytes motorola), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF, 15 = WBMP, 16 = XBM.
$img_name = $item->id . '_' . $ii . '_' . strtolower($item->alias) . '.png';
$new_img_name_u = JPATH_ROOT . '/tmp/' . $img_name;
copy($img, $new_img_name_u);
}
if (JFile::exists($new_img_name_u)) {
if (getimagesize($new_img_name_u)) {
$new_img_n = $img_name;
$new_img_n = $lang->transliterate($new_img_n);
$new_img_n = strtolower($new_img_n);
$new_img_n = JFile::makeSafe($new_img_n);
$new_path_check = $new_img_path . $new_img_n;
$nimg = 0;
$new_img_temp = $new_img_n;
while (JFile::exists($new_path_check)) {
$nimg++;
$new_img_n = $item->id . '_' . $nimg . '_' . $new_img_temp;
$new_img_n = $lang->transliterate($new_img_n);
$new_img_n = strtolower($new_img_n);
$new_img_n = JFile::makeSafe($new_img_n);
$new_path_check = $new_img_path . $new_img_n;
}
rename($new_img_name_u, $new_img_path . $new_img_n);
$name_parts = pathinfo($new_img_n);
$img_name = $name_parts['filename'];
$img_ext = $name_parts['extension'];
DJClassifiedsImage::makeThumb($new_img_path . $new_img_n, $new_img_path . $img_name . '_ths.' . $img_ext, $nws, $nhs);
DJClassifiedsImage::makeThumb($new_img_path . $new_img_n, $new_img_path . $img_name . '_thm.' . $img_ext, $nwm, $nhm);
DJClassifiedsImage::makeThumb($new_img_path . $new_img_n, $new_img_path . $img_name . '_thb.' . $img_ext, $nwb, $nhb);
$query_img .= "('" . $item->id . "','item','" . $img_name . "','" . $img_ext . "','/components/com_djclassifieds/images/item/','','" . $img_ord . "'), ";
$img_to_insert++;
if ($cfpar->get('store_org_img', '1') == 0) {
JFile::delete($new_img_path . $new_img_n);
}
if ($img_to_insert == 5) {
break;
}
}
}
$img_ord++;
} else {
continue;
}
}
if ($img_to_insert) {
$query_img = substr($query_img, 0, -2) . ';';
$db->setQuery($query_img);
$db->execute();
}
}
}
}
//echo '<pre>';print_r($item);echo $cat_id;die();
return isset($img_to_insert) ? $img_to_insert : null;
}
public static function getType($xml_item, $xml_fields, $item_fields, $feed_item, &$item, &$types)
{
$type_id = 0;
//echo '<pre>';print_r($item_fields->type);die();
if (count($item_fields->type)) {
$field = $item_fields->type[0];
$type_name = '';
$f_value = self::getFieldValue($xml_item, $field->source_name, $field->source_attribute);
if ($f_value != false) {
//if(isset($xml_item->{$field->source_name})){
// $f_value = $xml_item->{$field->source_name};
if (is_array($f_value)) {
$type_name = $f_value[0];
} else if (is_object($f_value)) {
$type_name = (string)$f_value;
} else {
$type_name = $f_value;
}
}
$ctype_id = 0;
foreach ($types as $type) {
if ($type->name == $type_name) {
$ctype_id = $type->id;
break;
}
}
//echo $ctype_id;die();
if ($ctype_id == 0 && $field->sync_behaviour == 1) {
$last_type_ord = 0;
if (count($types)) {
$last_type_ord = end($types)->ordering;
}
$last_type_ord++;
$row_type = JTable::getInstance('CFTypes', 'DJCFImporterTable');
$row_type->name = $type_name;
$row_type->published = 1;
$row_type->ordering = $last_type_ord;
$row_type->params = '{"bt_class":"","bt_use_styles":"1","bt_color":"#000000","bt_bg":"#CCCCCC","bt_border_color":"#DEDEDE","bt_border_size":"1","bt_style":"border-radius:2px;padding:2px 4px;margin:3px 5px;"}';
$row_type->store();
$types[$row_type->id] = $row_type;
$ctype_id = $row_type->id;
self::$_changelog_items[] = "(" . self::$_import_id . ", " . $feed_item->id . ", " . $field->id . ", '" . $field->dest_core . "', " . $row_type->id . ",'4', '" . addslashes($type_name) . "', '', '0')";
}
$type_id = $ctype_id;
}
$item->type_id = $type_id;
//echo '<pre>';print_r($item);echo $cat_id;die();
return $type_id;
}
public static function getCategory($xml_item, $xml_fields, $item_fields, $feed_item, &$item, &$cats)
{
$cat_id = 0;
$parent_id = 0;
if (count($item_fields->category)) {
ksort($item_fields->category);
foreach ($item_fields->category as $field) {
$cat_name = '';
$f_value = self::getFieldValue($xml_item, $field->source_name, $field->source_attribute);
if ($f_value != false) {
//if(isset($xml_item->{$field->source_name})){
//$f_value = $xml_item->{$field->source_name};
if (is_array($f_value)) {
$cat_name = $f_value[0];
} else if (is_object($f_value)) {
$cat_name = (string)$f_value;
} else {
$cat_name = $f_value;
}
}
if ($cat_name) {
//print_r($field);$reg_lvl = $field->dest_reg_lvl;echo $reg_name;die();
$ccat_id = 0;
foreach ($cats as $cat) {
if (strtolower(trim($cat->name)) == strtolower(trim($cat_name))) {
if ($parent_id > 0) {
if ($parent_id != $cat->parent_id) {
continue;
}
}
$parent_id = $cat->id;
$ccat_id = $cat->id;
//print_r($reg);
break;
}
}
//echo $parent_id.' '.$creg_id.' '.$reg_name.'<br />';
if ($ccat_id == 0 && $field->sync_behaviour == 1) {
if (@$field->dest_parent_id > 0) {
$parent_id = $field->dest_parent_id;
}
$row_cat = JTable::getInstance('CFCategories', 'DJCFImporterTable');
$row_cat->name = $cat_name;
$row_cat->alias = DJClassifiedsSEO::getAliasName($row_cat->name);
$row_cat->published = 1;
$row_cat->parent_id = $parent_id;
$row_cat->store();
$cats[$row_cat->id] = $row_cat;
$parent_id = $row_cat->id;
$ccat_id = $row_cat->id;
self::$_changelog_items[] = "(" . self::$_import_id . ", " . $feed_item->id . ", " . $field->id . ", '" . $field->dest_core . "', " . $row_cat->id . ",'2', '" . addslashes($cat_name) . "', '', '0')";
}
$cat_id = $ccat_id;
}
}
}
$item->cat_id = $cat_id;
//echo '<pre>';print_r($item);echo $cat_id;die();
return $cat_id;
}
public static function getRegion($xml_item, $xml_fields, $item_fields, $feed_item, &$item, &$regs)
{
$reg_id = 0;
$parent_id = 0;
//echo '<pre>';
//print_r($xml_item);
//print_r($item_fields->region);die();
if (count($item_fields->region)) {
ksort($item_fields->region);
foreach ($item_fields->region as $field) {
if ($field->dest_parent_id > 0 && $parent_id == 0) {
$parent_id = $field->dest_parent_id;
}
$reg_name = '';
$f_value = self::getFieldValue($xml_item, $field->source_name, $field->source_attribute);
if ($f_value != false) {
//if(isset($xml_item->{$field->source_name})){
// $f_value = $xml_item->{$field->source_name};
if (is_array($f_value)) {
$reg_name = $f_value[0];
} else if (is_object($f_value)) {
$reg_name = (string)$f_value;
} else {
$reg_name = $f_value;
}
}
//print_r($field);$reg_lvl = $field->dest_reg_lvl;echo $reg_name;die();
$creg_id = 0;
foreach ($regs as $reg) {
if (strtolower(trim($reg->name)) == strtolower(trim($reg_name))) {
if ($parent_id > 0) {
if ($parent_id != $reg->parent_id) {
continue;
}
}
$parent_id = $reg->id;
$creg_id = $reg->id;
//print_r($reg);
break;
}
}
//echo $parent_id.' '.$creg_id.' '.$reg_name.'<br />';
if ($creg_id == 0 && $field->sync_behaviour == 1) {
if ($field->dest_parent_id > 0) {
$parent_id = $field->dest_parent_id;
}
$row_region = JTable::getInstance('CFRegions', 'DJCFImporterTable');
$row_region->name = ucfirst($reg_name);
$row_region->published = 1;
$row_region->city = 1;
$row_region->parent_id = $parent_id;
$new_reg_address = '';
if ($parent_id) {
$new_reg_address = $regs[$parent_id]->name . ', ';
}
$new_reg_address .= $row_region->name;
$loc_coord = DJClassifiedsGeocode::getLocation($new_reg_address);
if (is_array($loc_coord)) {
$row_region->latitude = $loc_coord['lat'];
$row_region->longitude = $loc_coord['lng'];
}
//echo '<pre>';print_r($row_region);die();
$row_region->store();
$regs[$row_region->id] = $row_region;
$parent_id = $row_region->id;
$creg_id = $row_region->id;
self::$_changelog_items[] = "(" . self::$_import_id . ", " . $feed_item->id . ", " . $field->id . ", '" . $field->dest_core . "', " . $row_region->id . ",'3', '" . addslashes($reg_name) . "', '', '0')";
}
$reg_id = $creg_id;
}
}
$item->region_id = $reg_id;
if (!$item->longitude && !$item->latitude && isset( $regs[$reg_id]->longitude) && isset($regs[$reg_id]->latitude)) {
$item->longitude = $regs[$reg_id]->longitude;
$item->latitude = $regs[$reg_id]->latitude;
}
//print_r($item);echo $reg_id;die();
return $reg_id;
}
public static function getItemFields($xml_fields)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$ifields = new stdClass();
$ifields->fields_core = array();
$ifields->fields_category = array();
$ifields->fields_contact = array();
$ifields->fieldf_profile = array();
$ifields->category = array();
$ifields->region = array();
$ifields->type = array();
$ifields->images = array();
$ifields->unit = array();
foreach ($xml_fields as $field) {
$dest_type = $field->params->dest_type;
$field->params->id = $field->id;
//echo '<pre>';print_r($field);die();
//$source_name = $field->params->get('source_name','');
if ($dest_type == 1) {
$ifields->fields_category[] = $field->params;
} else if ($dest_type == 2) {
$ifields->fields_contact[] = $field->params;
} else if ($dest_type == 3) {
$ifields->fieldf_profile[] = $field->params;
} else if ($dest_type == 4) {
$ifields->category[$field->params->dest_cat_lvl] = $field->params;
} else if ($dest_type == 5) {
$ifields->region[$field->params->dest_reg_lvl] = $field->params;
} else if ($dest_type == 6) {
$ifields->images[] = $field->params;
} else if ($dest_type == 7) {
$ifields->type[] = $field->params;
} else if ($dest_type == 8) {
$ifields->unit[] = $field->params;
} else {
$ifields->fields_core[] = $field->params;
}
//echo '<pre>';print_r($xml_fields);
}
//echo '<pre>';print_r($ifields);die();
return $ifields;
}
public static function getXmlFields($group_id)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$query = "SELECT f.* FROM #__djcfi_fields f "
. "WHERE f.group_id=" . $group_id . " ORDER BY ordering";
$db->setQuery($query);
$fields = $db->loadObjectList();
foreach ($fields as &$field) {
$registry = new JRegistry();
$registry->loadString($field->params);
$field->params = $registry->toObject();
}
return $fields;
}
public static function getXmlFeed($feed_url, $fsync_protocol = 0, $sync_headers = '', $sync_xml = '')
{
if ($fsync_protocol == 0) { //http get
//$feed_url = JPATH_ROOT.'/components/com_djcfimporter/feeds/martzone.xml';
$content = file_get_contents($feed_url);
} else if ($fsync_protocol == 1) { //http post
$ch = curl_init();
$url_parts = explode('?', $feed_url);
curl_setopt($ch, CURLOPT_URL, $url_parts[0]);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $url_parts[1]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
if (curl_errno($ch)) {
$err = curl_error($ch);
@curl_close($ch);
return self::renderAlert('<p>CURL ERROR: ' . $err . '</p>', 'error');
}
curl_close($ch);
} else if ($fsync_protocol == 2) { //soap 1.1
$soapUrl = $feed_url;
$xml_post_string = $sync_xml;
$headers = array(
"Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: http://connecting.website.com/WSDL_Service/GetPrice",
"Content-length: " . strlen($xml_post_string),
); //SOAPAction: your op URL
$headers = array(
"POST /v1.1/portal.asmx HTTP/1.1",
"Host: webservice.gomasterkey.com",
"Content-Type: text/xml; charset=utf-8",
"Content-Length: " . strlen($xml_post_string) . "",
"SOAPAction: http://webservice.gomasterkey.com/portalservices/v1.1/RentListings"
);
$url = $soapUrl;
// PHP cURL for https connection with auth
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_USERPWD, $soapUser.":".$soapPassword); // username and password - declared at the top of the doc
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// converting
$content = curl_exec($ch);
curl_close($ch);
} else if ($fsync_protocol == 3) { //soap 1.2
$soapUrl = $feed_url;
$xml_post_string = $sync_xml;
$headers = explode(',', str_ireplace('"', '', $sync_headers));
//print_r($headers);die();
$headers[] = "Content-Length: " . strlen($xml_post_string);
$url = $soapUrl;
// PHP cURL for https connection with auth
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_USERPWD, $soapUser.":".$soapPassword); // username and password - declared at the top of the doc
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// converting
$content = curl_exec($ch);
curl_close($ch);
}
//echo $fsync_protocol;die();
//header("Content-type: text/xml; charset=utf-8");
//echo $content;die();
//$xml = new SimpleXMLElement($content);
$xml = simplexml_load_string($content);
//echo '<pre>';print_r($xml);die();
return $xml;
if ($fsync_protocol == 1) {
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $feed_url);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);
$contents = curl_exec($c);
curl_close($c);
//if($contents){}
header("Content-type: text/xml; charset=utf-8");
//header('HTTP/1.1 200 OK;Content-Type: text/xml; charset=utf-8');
echo $contents;
die();
}
}
public static function getUserId($email)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$par = JComponentHelper::getParams('com_djcfimporter');
$query = "SELECT id FROM #__users u WHERE email ='" . addslashes($email) . "' ";
$db->setQuery($query);
$user_id = $db->loadResult();
return $user_id;
}
public static function renderAlert($msg, $type = '', $title = '')
{
if (!in_array($type, array('success', 'error', 'info', ''))) $type = 'info';
$html = '<div class="alert alert-' . $type . '">'
. (!empty($title) ? '<h3>' . $title . '</h3>' : '')
. '<div class="alert-body">' . $msg . '</div>'
. '</div>';
return $html;
}
public static function addSubmenu($vName = 'cpanel')
{
$app = JFactory::getApplication();
$version = new JVersion;
if (version_compare($version->getShortVersion(), '4.0.0', '<')) {
JHtmlSidebar::addEntry(JText::_('COM_DJCFIMPORTER_CPANEL'), 'index.php?option=com_djcfimporter&view=cpanel', $vName == 'cpanel');
JHtmlSidebar::addEntry(JText::_('COM_DJCFIMPORTER_ITEMS'), 'index.php?option=com_djcfimporter&view=items', $vName == 'items');
JHtmlSidebar::addEntry(JText::_('COM_DJCFIMPORTER_GROUPS'), 'index.php?option=com_djcfimporter&view=groups', $vName == 'groups');
JHtmlSidebar::addEntry(JText::_('COM_DJCFIMPORTER_FIELDS'), 'index.php?option=com_djcfimporter&view=fields', $vName == 'fields');
JHtmlSidebar::addEntry(JText::_('COM_DJCFIMPORTER_CHANGELOGS'), 'index.php?option=com_djcfimporter&view=changelogs', $vName == 'changelogs');
}
}
public static function getActions($asset = null, $assetId = 0)
{
$user = JFactory::getUser();
$result = new JObject;
if (!$asset) {
$assetName = 'com_djcfimporter';
} else if ($assetId != 0) {
$assetName = 'com_djcfimporter.' . $asset . $assetId;
} else {
$assetName = 'com_djcfimporter.' . $asset;
}
$actions = array(
'core.admin', 'core.manage'
);
foreach ($actions as $action) {
$result->set($action, $user->authorise($action, $assetName));
}
return $result;
}
public static function getImportID()
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
if ($app->input->getInt('i_id', 0) > 0) {
self::$_import_id = $app->input->getInt('i_id', 0);
} else {
self::$_import_id = time();
/*$i_id = rand(100000000,999999999);
$query = "SELECT count(*) FROM #__djcfi_changelog "
."WHERE import_id=".$i_id." ";
$db->setQuery($query);
$i_id_c = $db->loadResult();
if($i_id_c>0){
self::getImportID();
}else{
self::$_import_id = $i_id;
}*/
}
return true;
}
public static function saveChangelog()
{
$db = JFactory::getDBO();
if (count(self::$_changelog_items)) {
$query = 'INSERT INTO `#__djcfi_changelog` (`import_id`, `feed_id`, `field_id`, `core_field`, `item_id`, `element`, `new_value`, `old_value`, `update`) VALUES ';
$query .= implode(', ', self::$_changelog_items);
$db->setQuery($query);
$db->execute();
}
if (count(self::$_changelog_items_update)) {
$query = 'INSERT INTO `#__djcfi_changelog_items_update` (`import_id`, `item_id`) VALUES ';
$query .= implode(', ', self::$_changelog_items_update);
$db->setQuery($query);
$db->execute();
}
//INSERT INTO `r7bqa_djcfi_changelog` (`import_id`, `feed_id`, `field_id`, `core_field`, `item_id`, `element`, `new_value`, `old_value`, `update`) VALUES (1, 2, 3, '4', 5, '2016-04-12 14:38:35', '6', '7', 0);
//self::$_changelog_items[] = "(".self::$_import_id.", ".$feed_item->id.", '', '', ".$row->id.",'1', '".addslashes($row->name)."', '', '0')";
//echo '<pre>';print_r(self::$_changelog_items);die();
return true;
}
public static function deleteMissingAdverts($feed_item)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$query = "SELECT i.* FROM (SELECT i.id, u.import_id FROM #__djcfi_changelog ch, #__djcf_items i "
. "LEFT JOIN #__djcfi_changelog_items_update u ON u.item_id=i.id AND u.import_id=" . self::$_import_id . " "
. "WHERE ch.item_id = i.id AND ch.core_field = '' AND ch.feed_id=" . $feed_item->id . " ) i "
. "WHERE i.import_id IS NULL ORDER BY i.id";
$db->setQuery($query);
$items = $db->loadObjectList();
if (count($items)) {
foreach ($items as $item) {
$query = "SELECT * FROM #__djcf_images WHERE item_id = " . $item->id . " AND type='item' ";
$db->setQuery($query);
$items_images = $db->loadObjectList('id');
if ($items_images) {
foreach ($items_images as $item_img) {
$path_to_delete = JPATH_ROOT . $item_img->path . $item_img->name;
if (JFile::exists($path_to_delete . '.' . $item_img->ext)) {
JFile::delete($path_to_delete . '.' . $item_img->ext);
}
if (JFile::exists($path_to_delete . '_ths.' . $item_img->ext)) {
JFile::delete($path_to_delete . '_ths.' . $item_img->ext);
}
if (JFile::exists($path_to_delete . '_thm.' . $item_img->ext)) {
JFile::delete($path_to_delete . '_thm.' . $item_img->ext);
}
if (JFile::exists($path_to_delete . '_thb.' . $item_img->ext)) {
JFile::delete($path_to_delete . '_thb.' . $item_img->ext);
}
}
}
$query = "DELETE FROM #__djcf_images WHERE item_id = " . $item->id . " AND type='item' ";
$db->setQuery($query);
$db->execute();
$query = "DELETE FROM #__djcf_fields_values WHERE item_id = " . $item->id . " ";
$db->setQuery($query);
$db->execute();
$query = "DELETE FROM #__djcf_items WHERE id = " . $item->id . " ";
$db->setQuery($query);
$db->execute();
}
}
$app->enqueueMessage('Items deleted: ' . count($items));
//echo '<pre>';print_r($items);die();
return true;
}
}