function ImportFromCSV( $withids=0) { $database = JFactory::getDBO(); $my = JFactory::getUser(); $cfg=BidsHelperTools::getConfig(); jimport('joomla.filesystem.file'); jimport('joomla.filesystem.archive'); $tmpdir = uniqid('images_'); $base_Dir = JPath::clean(JPATH_ROOT . DS . 'media') . DS; $extractdir = JPath::clean($base_Dir . $tmpdir) . DS; define('_TMP_DIR', JPATH_ROOT . "/media/"); $shipzones = null; if ($cfg->bid_opt_multiple_shipping) { $database->setQuery("SELECT id,name FROM `#__bid_shipment_zones`"); $shipzones = $database->loadObjectList("name"); } $database->setQuery("SELECT name FROM #__bid_currency"); $allowedCurrencies = $database->loadResultArray(); $auction = JTable::getInstance('auction'); $errors = array(); $msg = ''; if ($_FILES['csv']['tmp_name']) { $csv_fname = $_FILES['csv']['name']; $ext = substr($csv_fname, strrpos($csv_fname, '.') + 1, strlen($csv_fname)); if ($ext != "csv") { $msg .= bid_err_csv_ext_not_allowed; } $upload_path = _TMP_DIR . $csv_fname; if (!move_uploaded_file($_FILES['csv']['tmp_name'], $upload_path)) { $msg .= bid_err_csv_import_error; } @chmod($upload_path, 0777); if (!file_exists($upload_path)) { $msg .= bid_err_file_not_there; } $handle = fopen($upload_path, "r"); set_time_limit(0); $i = 1; if ($_FILES['arch']['tmp_name']) { $upload_arch = $base_Dir . $_FILES['arch']['name']; if (!move_uploaded_file($_FILES['arch']['tmp_name'], $upload_arch)) { $msg .= JText::_('COM_BIDS_ERR_CSV_IMPORT_ERROR'); } @chmod($upload_arch, 0777); $archivename = $upload_arch; @mkdir($extractdir); $archivename = JPath::clean($archivename); $archiver = JArchive::getAdapter('zip'); $archiver->extract($archivename, $extractdir); //echo $archivename; $ret = $archiver->extract($archivename, $extractdir); if ($ret == 0) { die('Unrecoverable error ' . $archiver->get('error.message') . '"'); } } while (($data = fgetcsv($handle, 30000, "\t")) !== FALSE) { $params['add_picture'] = $data[16]; $params['auto_accept_bin'] = $data[17]; $params['bid_counts'] = $data[18]; $params['max_price'] = $data[19]; if (is_array($params)) { $txt = array(); foreach ($params as $k => $v) { $txt[] = "$k=$v"; } $auction->params = implode("\n", $txt); } $auction->id = null; $auction->title = strip_tags($data[1]); $auction->shortdescription = strip_tags($data[2]); $auction->description = preg_replace('/<script[^>]*?>.*?<\/script>/si', '', $data[3]); //de testat $auction->initial_price = floatval($data[6]); if(!in_array($data[7], $allowedCurrencies)) { JError::raiseNotice(0, 'Currency '.$data[7].' not allowed!'); continue; } $auction->currency = $data[7]; $auction->BIN_price = floatval($data[8]); $auction->auction_type = $data[9]; switch ($auction->auction_type) { case 'public': $auction->auction_type = 1; break; case 'private': $auction->auction_type = 2; break; } $auction->automatic = $data[10]; $auction->shipment_info = $data[12]; $auction->start_date = date("Y-m-d H:i:s", strtotime($data[13])); $auction->end_date = date("Y-m-d H:i:s", strtotime($data[14])); $auction->published = $data[20]; $auction->SetCategory($data[21]); if ($withids && intval($data[0]) > 0) { $database->setQuery('SELECT id FROM #__users WHERE id='.$database->quote($data[0])); $userid = $database->loadResult(); if(!$userid) { $userid = $my->id; } } else { $userid = $my->id; } $auction->userid = $userid; $auction->auction_nr = time() . rand(100, 999); // min increase column missing $auction->min_increase = $cfg->bid_opt_min_increase; $auction->payment_method = $data[11]; //$err = $admin ? $auction->check() : array(); //$err = $auction->check(); //TODO: auction validating through model $arr_pics = array(); $k = 22;//pozitia lu first aux picture $j = 32; // J ia valoarea lui "Shipment" if ($shipzones != null) { $sh = array_search("Shipment", $data); if ($sh != false) { $j = $sh; } } for ($m = $k; $m < $j; $m++) { if ($data[$m]) { $arr_pics[] = $data[$m]; } } if ($data[15]) { array_unshift($arr_pics, $data[4]); //add what used to be the "main picture" } $err = array(); if (count($err) <= 0) { $auction->store(true); $nrfiles = 0; for ($m = 0; $m < count($arr_pics); $m++) { if ($nrfiles >= $cfg->bid_opt_maxnr_images) continue; if (file_exists($extractdir . $arr_pics[$m])) { if (filesize($extractdir . $arr_pics[$m]) > $cfg->bid_opt_max_picture_size * 1024) { $msg.=$arr_pics[$m] . "- " . JText::_('COM_BIDS_ERR_IMAGESIZE_TOO_BIG') . "<br><br>"; continue; } $fname = $arr_pics[$m]; $ext = JFile::getExt($fname); if ( !in_array( $ext, array('JPEG','JPG','GIF','PNG') ) ) { $msg .= JText::_('COM_BIDS_ERR_NOT_ALLOWED_EXT') . ': ' . $fname; continue; } $file_name = $fname; $pic = JTable::getInstance('bidimage'); $pic->auction_id = $auction->id; $pic->picture = $file_name; $pic->modified = gmdate('Y-m-d H:i:s'); $pic->store(); $file_name = $auction->id . "_img_$pic->id.$ext"; $pic->picture = $file_name; $pic->store(); $path = AUCTION_PICTURES_PATH . DS . "$file_name"; if (rename(JPATH_ROOT . DS . "media" . DS . $tmpdir . DS . $arr_pics[$m], $path)) { BidsHelperTools::resize_image($file_name, $cfg->bid_opt_thumb_width, $cfg->bid_opt_thumb_height, 'resize'); BidsHelperTools::resize_image($file_name, $cfg->bid_opt_medium_width, $cfg->bid_opt_medium_height, 'middle'); } else { $msg.=$arr_pics[$m] . "- " . JText::_('COM_BIDS_ERR_UPLOAD_FAILED') . "<br><br>"; } $nrfiles++; } } //arch pics // m ia valoarea indexului lui "Shipment" + 1 if ($shipzones != null) { $arr_ships = array(); $m = array_search("Shipment", $data); $m = $m + 1; while ($m && $data[$m]) { if (!$data[$m]) { break; } else { $ship_id = false; if (isset($shipzones[$data[$m]])) $ship_id = $shipzones[$data[$m]]->id; if ($ship_id !== false) { $arr_ships[] = "(NULL, {$ship_id} , {$data[$m + 1]}, {$auction->id})"; } } $m = $m + 2; } if (count($arr_ships)) { $sql_ships = "INSERT INTO #__bid_shipment_prices VALUES " . implode(",", $arr_ships); $database->setQuery($sql_ships); $database->query(); } } }else $errors[] = "$i : " . join('<br>', $err); $i++; } if (file_exists($extractdir)) { JFolder::delete($extractdir); } fclose($handle); if (file_exists($base_Dir . $_FILES['csv']['name'])) unlink($base_Dir . $_FILES['csv']['name']); if (file_exists($base_Dir . $_FILES['csv']['name'])) unlink($base_Dir . $_FILES['arch']['name']); } return $errors; }
protected function saveImages($fromId=0) { $cfg = BidsHelperTools::getConfig(); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $auction = $this->auction; $db = $this->getDBO(); if( $fromId ) { //copy images from another auction $fromauction = JTable::getInstance('auction'); $fromauction->load($fromId); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $delete_pictures = JRequest::getVar('delete_pictures', array()); $pictures = $fromauction->getPicturesList(); $bidImage = JTable::getInstance('bidimage'); for ($i = 0; $i < count($pictures); $i++) { $bidImage->id = null; $ext = substr($pictures[$i]->picture, strpos($pictures[$i]->picture, '.') + 1, strlen($pictures[$i]->picture)); if ($this->isAllowedImage($ext) && !in_array($pictures[$i]->id, $delete_pictures)) { if (file_exists(AUCTION_PICTURES_PATH.DS.$pictures[$i]->picture)) { $bidImage->auction_id = $auction->id; $bidImage->modified = gmdate('Y-m-d'); $bidImage->ordering = $pictures[$i]->ordering; $bidImage->store(); $file_name = $auction->id.'_img_'.$bidImage->id.'.'.$ext; $bidImage->picture = $file_name; $bidImage->store(); JFile::copy(AUCTION_PICTURES_PATH.DS.$pictures[$i]->picture, AUCTION_PICTURES_PATH.DS.$bidImage->picture); JFile::copy(AUCTION_PICTURES_PATH.DS."middle_" . $pictures[$i]->picture, AUCTION_PICTURES_PATH.DS."middle_" . $bidImage->picture); JFile::copy(AUCTION_PICTURES_PATH.DS."resize_" . $pictures[$i]->picture, AUCTION_PICTURES_PATH.DS."resize_" . $bidImage->picture); } } } } else {// save new images $files = $auction->_uploadedFiles; $delete_pictures = JRequest::getVar('delete_pictures', array()); foreach ($delete_pictures as $dele_id) { $db->setQuery( 'SELECT picture FROM #__bid_pictures WHERE id='.$db->Quote($dele_id).' AND auction_id='.$db->Quote($auction->id) ); $pic = $db->loadResult(); $db->setQuery('DELETE FROM #__bid_pictures WHERE id='.$db->Quote($dele_id).' AND auction_id='.$db->Quote($auction->id) ); $db->query(); JFile::delete(AUCTION_PICTURES_PATH.DS.$pic); JFile::delete(AUCTION_PICTURES_PATH.DS."middle_".$pic); JFile::delete(AUCTION_PICTURES_PATH.DS."resize_".$pic); } $nrfiles = 0; $bidImage = JTable::getInstance('bidimage'); $auction = $this->auction; if (!JFolder::exists(AUCTION_PICTURES_PATH)) { JFolder::create(AUCTION_PICTURES_PATH); } $db->setQuery("SELECT MAX(ordering) FROM #__bid_pictures WHERE auction_id=".$auction->id); $newOrdering = $db->loadResult() + 1; foreach ($files as $k => $file) { $bidImage->id = null; if (substr($k, 0, 7) != "picture") continue; if (!is_uploaded_file(@$file['tmp_name'])) continue; if (!$cfg->bid_opt_resize_if_larger && filesize($file['tmp_name']) > $cfg->bid_opt_max_picture_size * 1024) { JError::raiseNotice(100,$file['name'] . "- " . JText::_('COM_BIDS_ERR_IMAGESIZE_TOO_BIG')); continue; } $fname = JFile::makeSafe($file['name']); $ext = JFile::getExt($fname); if (!$this->isAllowedImage($ext)) { JError::raiseNotice(100,JText::_('COM_BIDS_ERR_NOT_ALLOWED_EXT') . ': ' . $file['name']); continue; } if ($cfg->bid_opt_maxnr_images && $nrfiles >= $cfg->bid_opt_maxnr_images) { JError::raiseNotice(100,JText::_('COM_BIDS_ERR_IMAGE_TOO_MANY') . ': ' . $file['name']); continue; } $bidImage->auction_id = $auction->id; $bidImage->modified = gmdate('Y-m-d'); $bidImage->ordering = $newOrdering++; $bidImage->store(); $file_name = $auction->id.'_img_'.$bidImage->id.'.'.$ext; $bidImage->picture = $file_name; $bidImage->store(); $nrfiles++; $path = AUCTION_PICTURES_PATH.DS.$file_name; if ($cfg->bid_opt_resize_if_larger && filesize($file['tmp_name']) > $cfg->bid_opt_max_picture_size * 1024) { $res = resize_to_filesize($file['tmp_name'], $path, $cfg->bid_opt_max_picture_size * 1024); } else { $res = JFile::upload($file['tmp_name'], $path); } if ($res) { @chmod($path, 0755); BidsHelperTools::resize_image($file_name, $cfg->bid_opt_thumb_width, $cfg->bid_opt_thumb_height, 'resize'); BidsHelperTools::resize_image($file_name, $cfg->bid_opt_medium_width, $cfg->bid_opt_medium_height, 'middle'); } else { JError::raiseNotice(100,$file['name'] . "- " . JText::_('COM_BIDS_ERR_UPLOAD_FAILED')); } } } }