OpenCart使用现有文件而不是上传

时间:2015-10-14 18:41:36

标签: php csv upload opencart stock

我正在使用opencart并使用免费扩展程序每天更新广告资源。 Php脚本/扩展程序上传CSV文件并运行它以更新数量更新数据库。

不是每次都上传,我希望脚本每次都在网站的基本目录中使用OPENCART.CSV文件来消除额外的步骤。

我希望脚本在调用URL时自动运行,这样我就可以在cron中使用它。

这是代码

<?php 
class ControllerToolInventoryUpdate extends Controller { 
private $error = array();

public function index() {       
    $this->load->language('tool/inventory_update');

    $this->load->model('tool/inventory_update');
    $this->load->model('setting/setting');      

    if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validate())) {  

        $this->model_setting_setting->editSetting('inventory_update', $this->request->post);        

    if (isset($this->request->post['id_field'])) {
     if ($this->ValidateFormFile()) {
                        //Select case to reference the product to be updated
                        switch ($this->request->post['id_field'])
                        {
                        case "model":
                        $column = "model";
                        break;
                        case "sku":
                        $column = "sku";
                        } 

                        //Create an array of file content
            $file_content = explode("\n",(file_get_contents($this->request->files['import']['tmp_name'])));
        $this->data['error_filedata'] = '';

            $error_reference = $this->language->get('error_reference');
            $error_quantity = $this->language->get('error_quantity');
            $error_recordnotfound = $this->language->get('error_recordnotfound');
            $error_failedvalidation = $this->language->get('error_failedvalidation');
            $error_fieldcount = $this->language->get('error_fieldcount');                               

            $recordsUpdated = 0;
                        //Create second dimension to hold items using defined delimiter on lines that have data
        foreach ($file_content as $key => $value)   {
                   if (trim(strlen($value)) > 1) {
                    //      $value = stripslashes($value);
$value = str_replace(array('\'', '"'), '', $value); 
                            $line_records = explode(',', $value);

                                if ( (count($line_records) < 2) || (count($line_records) > 3) ){
                                         $this->data['error_filedata'].= $error_fieldcount. $value."<br />";
                                       } else {
                                            $reference = trim($line_records[0]);      
                                            $quantity = trim($line_records[1]);
            if (isset($line_records[2])) {  $dbprice = trim($line_records[2]); } else { $dbprice = ''; } 

                                     if ($this->ValidateFileData($quantity) || $this->ValidateFileData($dbprice)) {  

                                      if ($this->model_tool_inventory_update->inventory_update($column,$reference,$quantity,$dbprice)) {
                                            $recordsUpdated ++;
                                            } else {
                                            $this->data['error_filedata'].= $error_recordnotfound.$error_reference.$reference."<br />";
                                        }
                                        } else {
                                        $this->data['error_filedata'].= $error_failedvalidation.$error_reference.$reference.$error_quantity.$quantity."<br />";
                                        }    
                                      }
                                    }   
                                }   

                        $this->session->data['success'] = $this->language->get('text_success');
                        } else { 
                        $this->data['error_file']= $this->language->get('error_file');
                    }
                        } else {
                        $this->data['error_id_field'] = $this->language->get('error_id_field');
                        }
                }

    $this->data['heading_title'] = $this->language->get('heading_title');
    $this->data['entry_file'] = $this->language->get('entry_file');
    $this->data['entry_model'] = $this->language->get('entry_model');
    $this->data['entry_sku'] = $this->language->get('entry_sku');
    $this->data['text_howto'] = $this->language->get('text_howto');
    $this->data['text_id_field'] = $this->language->get('text_id_field');
    $this->data['button_update'] = $this->language->get('button_update');
    $this->data['tab_general'] = $this->language->get('tab_general');

    if (isset($this->request->post['id_field'])) {
        $this->data['id_field'] = $this->request->post['id_field'];
    } else {
         $this->data['id_field'] = $this->config->get('id_field');
    }   

if (isset($this->data['error_filedata'])) {
  $this->data['error_filedata'] = $this->language->get('error_filedata').$this->data['error_filedata'];
}       

    if (isset($this->error['warning'])) {
        $this->data['error_warning'] = $this->error['warning'];
    } else {
        $this->data['error_warning'] = '';
    }

    if (isset($this->session->data['success'])) {
        $this->data['success'] = $recordsUpdated.$this->session->data['success'];

        unset($this->session->data['success']);
    } else {
        $this->data['success'] = '';
    }

    $this->document->breadcrumbs = array();
    $this->document->breadcrumbs[] = array(
        'href'      => HTTPS_SERVER . 'index.php?route=common/home&token=' . $this->session->data['token'],
        'text'      => $this->language->get('text_home'),
        'separator' => FALSE
    );

    $this->document->breadcrumbs[] = array(
        'href'      => HTTPS_SERVER . 'index.php?route=tool/inventory_update&token=' . $this->session->data['token'],
        'text'      => $this->language->get('heading_title'),
        'separator' => ' :: '
    );

    $this->data['action'] = HTTPS_SERVER . 'index.php?route=tool/inventory_update&token=' . $this->session->data['token'];

  $this->template = 'tool/inventory_update.tpl';
    $this->children = array(
        'common/header',    
        'common/footer' 
    );

    $this->response->setOutput($this->render(TRUE), $this->config->get('config_compression'));
}

private function validate() {
    if (!$this->user->hasPermission('modify', 'tool/inventory_update')) {
        $this->error['warning'] = $this->language->get('error_permission');
    }

    if (!$this->error) {
        return TRUE;
    } else {
        return FALSE;
    }       
}

private function ValidateFormFile() { 
     if (($this->request->files['import']) && ($this->request->files['import']['error']==0)) {
                 $filename = basename($this->request->files['import']['name']);
       $ext = substr($filename, strrpos($filename, '.') + 1);
    if (($ext == "CSV") && ($this->request->files['import']['size'] < 1000000)) {
    return file_get_contents($this->request->files['import']['tmp_name']);
            } else {
            return FALSE;
            }
    } else {
    return FALSE;       
  }
}


function stripslashes_deep($value)
{
    if(isset($value)) {
    $value = is_array($value) ?
        array_map('stripslashes_deep', $value) :
        stripslashes($value);
}
return $value;
}




  private function ValidateFileData ($value) {
                    if (strlen($value)<1 || strlen($value)>20) {
                    return false;
                    //} else if (!eregi('^[0-9]+$', $value)) {
                //return false;
                } else {
                    return true;
                    }                 
 }              
} 
?>

这是原始扩展程序的链接。

http://www.opencart.com/index.php?route=extension/extension/info&extension_id=17282&filter_search=bulk%20quantity%20update

1 个答案:

答案 0 :(得分:0)

您应该替换所有出现的:

$this->request->files['import']['tmp_name']

带有文件路径,例如如果文件在根目录

$_SERVER['DOCUMENT_ROOT'] . "OPENCART.CSV"