예제 #1
0
    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;
    }
예제 #2
0
    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'));
                }
            }
        }
    }