HEX
Server:Apache
System:Linux localhost 5.10.0-14-amd64 #1 SMP Debian 5.10.113-1 (2022-04-29) x86_64
User:enlugo-es (10006)
PHP:7.4.33
Disabled:opcache_get_status
Upload Files
File: /var/www/vhosts/enlugo.es/httpdocs/wp-content/plugins/google-maps-ready/modules/csv/controller.php
<?php
class csvControllerGmp extends controllerGmp {
	private function _connectCsvLib() {
		importClassGmp('filegeneratorGmp');
		importClassGmp('csvgeneratorGmp');
	}
	private function _getSitePath() {
		return $this->getModel()->getSitePath();
	}
	public function exportMaps() {
		$fileName = langGmp::_('Maps');
		$this->_connectCsvLib();
		$withMarkers = (int) reqGmp::getVar('withMarkers');
		$maps = frameGmp::_()->getModule('gmap')->getModel()->getAllMaps(array(), $withMarkers, $withMarkers);	// If there will be markers - there should be also be all groups data
		$mapOptKeys = frameGmp::_()->getModule('gmap')->getModel()->getParamsList();
		foreach($maps as $i => $map) {
			foreach($mapOptKeys as $key) {
				$maps[$i][$key] = isset($maps[$i]['params'][$key]) ? $maps[$i]['params'][$key] : '';
				switch($key) {
					case 'map_center':
						if(!empty($maps[$i][$key]) && is_array($maps[$i][$key]))
							$maps[$i][$key] = implode(', ', $maps[$i][$key]);
						break;
				}
			}
		}
		$htmlKeys = frameGmp::_()->getModule('gmap')->getModel()->getHtmlOptionsList();
		foreach($maps as $i => $map) {
			foreach($htmlKeys as $key) {
				$maps[$i][$key] = isset($maps[$i]['html_options'][$key]) ? $maps[$i]['html_options'][$key] : '';
			}
		}
		$mapHeaders = $this->getModule()->getMapHeadersList();
		if($withMarkers) {
			$markerHeaders = $this->getModule()->getMarkerHeadersList();
		}
		
		$c = $r = 0;
		$csvGenerator = toeCreateObjGmp('csvgeneratorGmp', array($fileName));
		foreach($mapHeaders as $k => $v) {
			$csvGenerator->addCell($r, $c, langGmp::_($v). ' ['. $k. ']');
			$c++;
		}
		$mapHeaderCount = $c;
		if($withMarkers) {
			foreach($markerHeaders as $k => $v) {
				$csvGenerator->addCell($r, $c, langGmp::_('Marker'). ' - '. langGmp::_($v). ' ['. $k. ']');
				$c++;
			}
		}
		$c = 0;
		$r = 1;
		foreach($maps as $map) {
			$c = 0;
			foreach($mapHeaders as $k => $v) {
				$mapValue = $this->_prepareValueToExport($map[$k]);
				$csvGenerator->addCell($r, $c, $mapValue);
				$c++;
			}
			$r++;
			if($withMarkers && !empty($map['markers'])) {
				foreach($map['markers'] as $marker) {
					for($c = 0; $c < $mapHeaderCount; $c++) {
						$csvGenerator->addCell($r, $c, '');
					}
					foreach($markerHeaders as $k => $v) {
						$markerValue = $this->_prepareValueToExport( $this->_getMarkerValue($marker, $k) );
						$csvGenerator->addCell($r, $c, htmlspecialchars($markerValue));
						$c++;
					}
					$r++;
				}
			}
		}
		$csvGenerator->generate();
		frameGmp::_()->getModule('promo_ready')->getModel()->saveUsageStat('csv.export.maps');
		exit();
	}
	private function _prepareValueToExport($val) {
		$sitePath = $this->_getSitePath();
		return str_replace($sitePath, '[GMP_SITE_PATH]', $val);
	}
	private function _getMarkerValue($marker, $key) {
		$value = '';
		switch($key) {
			case 'icon_path': 
				$value = $marker['icon_data']['path']; break;
			case 'icon_title':
				$value = $marker['icon_data']['title']; break;
			case 'marker_group_title':
				$value = $marker['groupObj']['title']; break;
			case 'marker_group_description':
				$value = $marker['groupObj']['description']; break;
			default:
				$value = $marker[$key]; break;
		}
		return $value;
	}
	public function exportMarkers() {
		$fileName = langGmp::_('Markers');
		$this->_connectCsvLib();
		$csvGenerator = toeCreateObjGmp('csvgeneratorGmp', array($fileName));
		$markers = frameGmp::_()->getModule('marker')->getModel()->getAllMarkers();
		$markerHeaders = $this->getModule()->getMarkerHeadersList();
		$c = $r = 0;
		
		foreach($markerHeaders as $k => $v) {
			$csvGenerator->addCell($r, $c, langGmp::_($v). ' ['. $k. ']');
			$c++;
		}
		$c = 0;
		$r = 1;
		foreach($markers as $marker) {
			$c = 0;
			foreach($markerHeaders as $k => $v) {
				$csvGenerator->addCell($r, $c, htmlspecialchars($marker[$k]));
				$c++;
			}
			$r++;
		}
		$csvGenerator->generate();
		frameGmp::_()->getModule('promo_ready')->getModel()->saveUsageStat('csv.export.markers');
		exit();
	}
	public function import() {
		@ini_set('auto_detect_line_endings', true);
		$res = new responseGmp();
		$this->_connectCsvLib();
		$csvGenerator = toeCreateObjGmp('csvgeneratorGmp', array($fileName));

        $file = reqGmp::getVar('csv_import_file', 'file');
        if(empty($file) || empty($file['size']))
            $res->pushError (langGmp::_('Missing File'));
        if(!empty($file['error']))
            $res->pushError (langGmp::_(array('File uploaded with error code', $file['error'])));
        if(!$res->error()) {
            $fileArray = array();
			$handle = fopen($file['tmp_name'], 'r');
			$csvParams['delimiter'] = $csvGenerator->getDelimiter();
			$csvParams['enclosure'] = $csvGenerator->getEnclosure();
			$csvParams['escape'] = $csvGenerator->getEscape();
			//if(version_compare( phpversion(), '5.3.0' ) == -1) //for PHP lower than 5.3.0 third parameter - escape - is not implemented
				while($row = @fgetcsv( $handle, 0, $csvParams['delimiter'], '"' )) $fileArray[] = $row;
			/*else
				while($row = @fgetcsv( $handle, 0, $csvParams['delimiter'], $csvParams['enclosure'], $csvParams['escape'] )) $fileArray[] = $row;*/
			/*var_dump($fileArray);
			exit();*/
			if(!empty($fileArray)) {
				if(count($fileArray) > 1) {
					$overwriteSameNames = (int) reqGmp::getVar('overwrite_same_names');
					$importRes = $this->getModel()->import($fileArray, $overwriteSameNames);
					if($importRes) {
						if($importRes['map']['added'])
							$res->addMessage (langGmp::_(array('Added', $importRes['map']['added'], 'maps')));
						if($importRes['map']['updated'])
							$res->addMessage (langGmp::_(array('Updated', $importRes['map']['updated'], 'maps')));
						if($importRes['marker']['added'])
							$res->addMessage (langGmp::_(array('Added', $importRes['marker']['added'], 'markers')));
						if($importRes['marker']['updated'])
							$res->addMessage (langGmp::_(array('Updated', $importRes['marker']['updated'], 'markers')));
					} else
						$res->pushError ($this->getModel()->getErrors());
				} else
					$res->pushError (langGmp::_('File should contain more then 1 row, at least 1 row should be for headers'));
			} else
				$res->pushError (langGmp::_('Empty data in file'));
		}
		frameGmp::_()->getModule('promo_ready')->getModel()->saveUsageStat('csv.import');
		$res->ajaxExec();
	}
	private function _toYesNo($val) {
		return empty($val) ? 'No' : 'Yes';
	}
	private function _fromYesNo($val) {
		return $val === 'No' ? 0 : 1;
	}
	
	/**
	 * @see controller::getPermissions();
	 */
	public function getPermissions() {
		return array(
			GMP_USERLEVELS => array(
				GMP_ADMIN => array('exportMaps', 'exportMaps', 'import')
			),
		);
	}
}