protected function executeImpl($params, $type, $name, $result, $defaultSortKey = "create_time") { $post = Vizualizer::request(); if (!$params->check("search") || isset($post[$params->get("search")])) { $loader = new Vizualizer_Plugin($type); // ページャの初期化 $pagerMode = $params->get("_pager_mode", Vizualizer_Pager::PAGE_SLIDE); $pagerDisplay = $params->get("_pager_dispmode", Vizualizer_Pager::DISPLAY_ATTR); if ($params->check("_pager_per_page_key") && $post[$params->get("_pager_per_page_key")] > 0) { $pagerCount = $post[$params->get("_pager_per_page_key")]; } else { $pagerCount = $params->get("_pager_per_page", 20); } if ($params->check("_pager_displays_key")) { $pagerNumbers = $post[$params->get("_pager_displays_key")]; } else { $pagerNumbers = $params->get("_pager_displays", 3); } $pager = new Vizualizer_Pager($pagerMode, $pagerDisplay, $pagerCount, $pagerNumbers); $pager->importTemplates($params); // カテゴリが選択された場合、カテゴリの商品IDのリストを使う $conditions = $this->condition; if (is_array($post["search"])) { foreach ($post["search"] as $key => $value) { if (!$this->isEmpty($value)) { $conditions[$key] = $value; } } } // 追加の検索条件があれば設定 if ($params->check("wkey")) { $conditions[$params->check("wkey")] = $params->check("wvalue"); } if ($params->check("wkey2")) { $conditions[$params->check("wkey2")] = $params->check("wvalue2"); } if ($params->check("wkey3")) { $conditions[$params->check("wkey3")] = $params->check("wvalue3"); } if ($params->check("wkey4")) { $conditions[$params->check("wkey4")] = $params->check("wvalue4"); } if ($params->check("wkey5")) { $conditions[$params->check("wkey5")] = $params->check("wvalue5"); } if ($params->check("wkey6")) { $conditions[$params->check("wkey6")] = $params->check("wvalue6"); } if ($params->check("wkey7")) { $conditions[$params->check("wkey7")] = $params->check("wvalue7"); } if ($params->check("wkey8")) { $conditions[$params->check("wkey8")] = $params->check("wvalue8"); } if ($params->check("wkey9")) { $conditions[$params->check("wkey9")] = $params->check("wvalue9"); } // 並べ替え順序が指定されている場合に適用 $sortOrder = ""; $sortReverse = false; if ($params->check("sort_key")) { $sortOrder = $post[$params->get("sort_key")]; if ($this->isEmpty($sortOrder)) { $sortOrder = $defaultSortKey; $sortReverse = true; } elseif (strpos($sortOrder, "rev@") === 0) { list($dummy, $sortOrder) = explode("@", $sortOrder); $sortReverse = true; } } elseif ($params->check("sort")) { $sortOrder = $params->check("sort"); if (strpos($sortOrder, "rev@") === 0) { list($dummy, $sortOrder) = explode("@", $sortOrder); $sortReverse = true; } } $model = $loader->LoadModel($name); if ($params->get("force_operator", "0") == "1") { $model->setIgnoreOperator(true); } // 顧客データを検索する。 if (!$this->isEmpty($this->countColumn)) { $pager->setDataSize($model->countBy($conditions, $this->countColumn)); } else { $pager->setDataSize($model->countBy($conditions)); } if ($this->groupBy) { $model->setGroupBy($this->groupBy); } $model->limit($pager->getPageSize(), $pager->getCurrentFirstOffset()); $models = $model->findAllBy($conditions, $sortOrder, $sortReverse); $attr = Vizualizer::attr(); $attr[$result . "_pager"] = $pager; $attr[$result] = $models; } elseif (!$params->check("reset") || isset($post[$params->get("reset")])) { $post["search"] = array(); unset($post[$params->get("reset")]); } }
protected function executeImpl($params, $type, $name, $defaultSortKey = "create_time") { $post = Vizualizer::request(); if (!$params->check("search") || isset($post[$params->get("search")])) { $loader = new Vizualizer_Plugin($type); // カテゴリが選択された場合、カテゴリの商品IDのリストを使う $conditions = array(); if (is_array($post["search"])) { foreach ($post["search"] as $key => $value) { if (!$this->isEmpty($value)) { $conditions[$key] = $value; } } } // 並べ替え順序が指定されている場合に適用 $sortOrder = ""; $sortReverse = false; if ($params->check("sort_key")) { $sortOrder = $post[$params->get("sort_key")]; if ($this->isEmpty($sortOrder)) { $sortOrder = $defaultSortKey; $sortReverse = true; } elseif (strpos($sortOrder, "rev@") === 0) { list($dummy, $sortOrder) = explode("@", $sortOrder); $sortReverse = true; } } $model = $loader->LoadModel($name); // 顧客データを検索する。 if ($this->groupBy) { $model->setGroupBy($this->groupBy); } $result = $model->getAllBy($conditions, $sortOrder, $sortReverse); $titles = explode(",", $params->get("titles")); $columns = explode(",", $params->get("columns")); $basename = uniqid($type . "_" . $name . "_") . ".csv"; $filename = CLAY_ROOT . DIRECTORY_SEPARATOR . "_uploads" . DIRECTORY_SEPARATOR . $basename; if (($fp = fopen($filename, "w+")) !== FALSE) { // CSVヘッダを出力 fwrite($fp, mb_convert_encoding("\"" . implode("\",\"", $titles) . "\"\r\n", "Shift_JIS", "UTF-8")); while ($data = $result->next()) { // データが0件以上の場合は繰り返し foreach ($columns as $index => $column) { if ($index > 0) { fwrite($fp, ","); } fwrite($fp, "\"" . mb_convert_encoding($data[$column], "Shift_JIS", "UTF-8") . "\""); } fwrite($fp, "\r\n"); } fclose($fp); // 作成したファイルを転送 $info = parse_url($params->get("url", "")); $info["chost"] = $info["host"]; if ($info["scheme"] == "https") { $info["chost"] = "ssl://" . $info["host"]; if (empty($info["port"])) { $info["port"] = "443"; } } elseif ($info["scheme"] == "http") { if (empty($info["port"])) { $info["port"] = "80"; } } $protocol = $info["scheme"]; $chost = $info["chost"]; $host = $info["host"]; $port = $info["port"]; if (($fp = fsockopen($chost, $port)) !== FALSE) { $postdata = ""; $postdata .= "POST " . $info["path"] . " HTTP/1.0\r\n"; $postdata .= "Host: " . $host . "\r\n"; $postdata .= "User-Agent: VIZUALIZER-TRANSFER-CALLER\r\n"; $data = $params->get("data", ""); $data = str_replace("[[filename]]", urlencode($basename), $data); $data = str_replace("[[filepath]]", urlencode($filename), $data); $filesize = filesize($filename); $filecontents = chunk_split(base64_encode(file_get_contents($filename))); $boundary = "TRANSFER-" . sha1(uniqid()); $postdata .= "Content-Type: multipart/form-data; boundary=" . $boundary . "\r\n"; $postdata2 = "--" . $boundary . "\r\n"; $postdata2 .= "Content-Disposition: form-data; name=\"" . $params->get("file_key", "FILE") . "_input\"\r\n"; $postdata2 .= "Content-Length: " . strlen($data) . "\r\n"; $postdata2 .= "\r\n"; $postdata2 .= $data . "\r\n"; $postdata2 .= "\r\n--" . $boundary . "\r\n"; $postdata2 .= "Content-Type: text/csv\r\n"; $postdata2 .= "Content-Disposition: form-data; name=\"" . $params->get("file_key", "FILE") . "\"; filename=\"" . $basename . "\"\r\n"; $postdata2 .= "Content-Length: " . strlen($filecontents) . "\r\n"; $postdata2 .= "Content-Transfer-Encoding: base64\r\n"; $postdata2 .= "\r\n"; $postdata2 .= $filecontents; $postdata2 .= "\r\n--" . $boundary . "--"; $postdata .= "Content-Length: " . strlen($postdata2) . "\r\n"; $postdata .= "\r\n" . $postdata2; echo $postdata; fputs($fp, $postdata); $response = ""; while (!feof($fp)) { $response .= fgets($fp, 4096); } fclose($fp); $result = explode("\r\n\r\n", $response, 2); $attr = Vizualizer::attr(); $attr["TransferResult"] = $result[1]; } } } }
protected function executeImpl($params, $type, $name, $result, $defaultSortKey = "create_time") { if (!$params->check("search") || isset($_POST[$params->get("search")])) { $loader = new Vizualizer_Plugin($type); // カテゴリが選択された場合、カテゴリの商品IDのリストを使う $conditions = array(); $post = Vizualizer::request(); if (is_array($post["search"])) { foreach ($post["search"] as $key => $value) { if (!$this->isEmpty($value)) { $conditions[$key] = $value; } } } // 並べ替え順序が指定されている場合に適用 $sortOrder = ""; $sortReverse = false; if ($params->check("sort_key")) { $sortOrder = $post[$params->get("sort_key")]; if ($this->isEmpty($sortOrder)) { $sortOrder = $defaultSortKey; $sortReverse = true; } elseif (strpos($sortOrder, "rev@") === 0) { list($dummy, $sortOrder) = explode("@", $sortOrder); $sortReverse = true; } } $model = $loader->LoadModel($name); // 顧客データを検索する。 if ($this->groupBy) { $model->setGroupBy($this->groupBy); } if ($params->get("force_operator", "0") == "1") { $model->setIgnoreOperator(true); } $result = $model->findAllBy($conditions, $sortOrder, $sortReverse); if ($params->check("columns")) { $columns = explode(",", $params->get("columns")); } else { $columns = $model->columns(); } if ($params->check("titles")) { $titles = explode(",", $params->get("titles")); } else { $titles = $columns; } // ヘッダを送信 header("Content-Type: application/csv"); header("Content-Disposition: attachment; filename=\"" . $params->get("prefix", "csvfile") . Vizualizer::now()->date("YmdHis") . ".csv\""); ob_end_clean(); ob_start(); // CSVヘッダを出力 $out = fopen("php://output", "w"); fputcsv($out, $titles); foreach ($result as $data) { // データが0件以上の場合は繰り返し $output = array(); $data = $this->filterData($data); foreach ($columns as $index => $column) { $output[] = $data->{$column}; } fputcsv($out, $output); } fclose($out); echo mb_convert_encoding(ob_get_clean(), "Shift_JIS", "UTF-8"); $this->postprocess(); exit; } }