function execute($params) { // パラメータを調整 $post = Vizualizer::request(); $month = $post["ym"]; if (empty($month) || preg_match("/[0-9]{4}-[0-9]{2}/", $month) == 0) { $month = date("Y-m"); } // クエリを生成 $loader = new Vizualizer_Plugin("stock"); $orders = $loader->loadTable("Orders"); $select = new Vizualizer_Query_Select($orders); $select->addColumn("SUBSTR(" . $orders->order_date . ", 1, 10)", "order_date"); $select->addColumn("SUM(" . $orders->price . ")", "price"); $select->where("order_date LIKE ?", array($month . "-%")); $select->group("SUBSTR(" . $orders->order_date . ", 1, 10)"); // 生成したクエリに対して検索を実行し、結果をモデルとして取得 $order = $loader->loadModel("Order"); $orders = $order->queryAllBy($select); // 結果を属性に設定 $attr = Vizualizer::attr(); $attr["sales"] = $orders; $attr["thismonth"] = date("Y-m-01", strtotime($month . "-01")); $attr["nextmonth"] = date("Y-m", strtotime("+1 month", strtotime($month . "-01"))); $attr["lastmonth"] = date("Y-m", strtotime("-1 month", strtotime($month . "-01"))); }
public function material() { $loader = new Vizualizer_Plugin("stock"); $model = $loader->loadModel("Material"); $model->findByPrimaryKey($this->material_id); return $model; }
protected function executeImpl($params, $type, $name, $key) { if (!$params->check("upload") || isset($_POST[$params->get("upload")])) { $loader = new Vizualizer_Plugin($type); // アップされたファイルのデータを取得する。 if ($_FILES[$key]["error"] == UPLOAD_ERR_OK) { // Excelファイルを読み込む $book = PHPExcel_IOFactory::load($_FILES[$key]["tmp_name"]); // 処理を実行する $data = $this->process($params, $book); // トランザクションの開始 $connection = Vizualizer_Database_Factory::begin(strtolower($type)); try { foreach ($data as $item) { $model = $loader->loadModel($name); foreach ($item as $col => $value) { $model->{$col} = $value; } $model->save(); } // エラーが無かった場合、処理をコミットする。 Vizualizer_Database_Factory::commit($connection); // 画面をリロードする。 if (!$this->continue) { // 登録に使用したキーを無効化 $this->removeInput("upload"); $this->reload(); } } catch (Exception $e) { Vizualizer_Database_Factory::rollback($connection); throw new Vizualizer_Exception_Database($e); } } } }
public function purchase() { $loader = new Vizualizer_Plugin("stock"); $model = $loader->loadModel("Purchase"); $model->findByPrimaryKey($this->purchase_id); return $model; }
protected function executeImpl($type, $name, $key) { $post = Vizualizer::request(); if ($post["delete"]) { // サイトデータを取得する。 $loader = new Vizualizer_Plugin($type); $model = $loader->loadModel($name); $model->findByPrimaryKey($post[$key]); // データが検索された場合のみ削除処理を実施 if ($model->{$key} > 0) { // トランザクションデータベースの取得 $connection = Vizualizer_Database_Factory::begin(strtolower($type)); try { $model->delete(); // エラーが無かった場合、処理をコミットする。 Vizualizer_Database_Factory::commit($connection); // 画面をリロードする。 if (!$this->continue) { // 登録に使ったキーを無効化 $this->removeInput("delete"); $this->removeInput($key); $this->reload(); } } catch (Exception $e) { Vizualizer_Database_Factory::rollback($connection); throw new Vizualizer_Exception_Database($e); } } } }
protected function executeImpl($type, $name, $value, $result) { // サイトデータを取得する。 $loader = new Vizualizer_Plugin($type); $model = $loader->loadModel($name); $model->setIgnoreOperator(true); $model->findByPrimaryKey($value); $attr = Vizualizer::attr(); $attr[$result] = $model; }
public function purchases($status = "") { $loader = new Vizualizer_Plugin("stock"); $model = $loader->loadModel("Purchase"); $condition = array("material_id" => $this->material_id); if (!empty($status)) { $condition["purchase_status"] = $status; } return $model->findAllBy($condition); }
/** * 別途用意したサブモジュールのexecuteを呼び出すためのメソッドです。 * * @param string $name サブモジュール名 * @param Vizualizer_Plugin_Module_Parameters $params サブモジュールのexecuteに渡すパラメータ */ protected function executeSubModule($name, $params) { list($namespace, $class) = explode(".", $name, 2); $loader = new Vizualizer_Plugin($namespace); $object = $loader->loadModule($class); if (method_exists($object, "execute")) { $this->debug("=========== " . $name . " start ==========="); $object->execute($params); $this->debug("=========== " . $name . " end ==========="); } else { $this->debug($name . " is not plugin module."); } }
function execute($params) { $this->executeImpl("Stock", "Menu", "menu_id"); $post = Vizualizer::request(); $loader = new Vizualizer_Plugin("stock"); $model = $loader->loadModel("Menu"); $model->findByPrimaryKey($post["menu_id"]); if ($model->menu_id > 0 && $model->fixed_flg == "1") { $orderDetail = $loader->loadModel("OrderDetail"); $orderDetails = $orderDetail->findAllBy(array("set_id" => $model->set_id, "choice_id" => $model->choice_id, "ne:provision_flg" => "1")); foreach ($orderDetails as $orderDetail) { $orderDetail->provision(); } } }
protected function executeImpl($type, $name, $primary_key) { $post = Vizualizer::request(); if ($post["add"] || $post["save"]) { // サイトデータを取得する。 $loader = new Vizualizer_Plugin($type); $model = $loader->loadModel($name); if (!empty($post[$this->key_prefix . $primary_key])) { $model->findByPrimaryKey($post[$this->key_prefix . $primary_key]); if (!($model->{$primary_key} > 0)) { $model = $loader->loadModel($name, array($primary_key => $post[$this->key_prefix . $primary_key])); } } foreach ($post as $key => $value) { if (!empty($this->key_prefix)) { if (substr($key, 0, strlen($this->key_prefix)) == $this->key_prefix) { $key = preg_replace("/^" . $this->key_prefix . "/", "", $key); $model->{$key} = $value; } } else { $model->{$key} = $value; } } // トランザクションの開始 $connection = Vizualizer_Database_Factory::begin(strtolower($type)); try { $model->save(); if (!empty($this->key_prefix)) { $post->set($this->key_prefix . $primary_key, $model->{$primary_key}); } else { $post->set($primary_key, $model->{$primary_key}); } // エラーが無かった場合、処理をコミットする。 Vizualizer_Database_Factory::commit($connection); // 画面をリロードする。 if (!$this->continue) { // 登録に使用したキーを無効化 $this->removeInput("add"); $this->removeInput("save"); $this->reload(); } } catch (Exception $e) { Vizualizer_Database_Factory::rollback($connection); throw new Vizualizer_Exception_Database($e); } } }
protected function executeImpl($params, $type, $name, $key) { if (!$params->check("upload") || isset($_POST[$params->get("upload")])) { $loader = new Vizualizer_Plugin($type); // アップされたファイルのデータを取得する。 if ($_FILES[$key]["error"] == UPLOAD_ERR_OK) { if (($fp = fopen($_FILES[$key]["tmp_name"], "r")) !== FALSE) { // 1行目はタイトル行とする。 $data = $this->getCsvData($fp); if ($this->checkTitle($data)) { $line = 2; // トランザクションの開始 $connection = Vizualizer_Database_Factory::begin(strtolower($type)); try { while (($data = $this->getCsvData($fp)) !== FALSE) { $model = $loader->loadModel($name); $model = $this->check($line, $model, $data); if ($model != null) { $model->save(); } $line++; } if (count($this->errors) > 0) { throw new Vizualizer_Exception_Invalid($key, $this->errors); } // エラーが無かった場合、処理をコミットする。 Vizualizer_Database_Factory::commit($connection); // 画面をリロードする。 if (!$this->continue) { // 登録に使用したキーを無効化 $this->removeInput("upload"); $this->reload(); } } catch (Exception $e) { Vizualizer_Database_Factory::rollback($connection); throw new Vizualizer_Exception_Database($e); } } else { throw new Vizualizer_Exception_Invalid($key, array("アップされたファイルのタイトル行が正しくありません")); } fclose($fp); } } } }
/** * コンストラクタ */ public function __construct($table = "session_stores", $id_key = "session_id", $data_key = "session_data") { list($module, $name) = explode("_", $table, 2); $names = explode("_", $name); $name = ""; $module = strtoupper(substr($module, 0, 1)) . strtolower(substr($module, 1)); foreach ($names as $part) { $name .= strtoupper(substr($part, 0, 1)) . strtolower(substr($part, 1)); } $name .= "Table"; $loader = new Vizualizer_Plugin($module); $this->table = $loader->loadTable($name); $this->id_key = $id_key; $this->data_key = $data_key; // 初期化時にクラスのローディングを行う。 $select = new Vizualizer_Query_Select($this->table); $insert = new Vizualizer_Query_Replace($this->table); }
function execute($params) { $post = Vizualizer::request(); $attr = Vizualizer::attr(); if ($params->check("daily")) { $search = $post["search"]; if (empty($search["pre:order_date"])) { $search["pre:order_date"] = date("Y-m-d"); $post->set("search", $search); } $attr["thisday"] = date("Y-m-d", strtotime($search["pre:order_date"])); $attr["lastday"] = date("Y-m-d", strtotime("-1 day", strtotime($attr["thisday"]))); $attr["nextday"] = date("Y-m-d", strtotime("+1 day", strtotime($attr["thisday"]))); } $loader = new Vizualizer_Plugin("stock"); $model = $loader->loadModel("Order"); $attr["total"] = $model->summeryBy("price", $post["search"]); $this->executeImpl($params, "Stock", "Order", $params->get("result", "orders")); }
private function updateDetails() { $loader = new Vizualizer_Plugin("stock"); foreach ($this->details as $purchase_id => $volume) { $model = $loader->loadModel("ReportDetail"); $model->findBy(array("report_id" => $this->report_id, "purchase_id" => $purchase_id)); $purchase = $loader->loadModel("Purchase"); $purchase->findByPrimaryKey($purchase_id); if (!($model->report_detail_id > 0)) { $model->report_id = $this->report_id; $model->purchase_id = $purchase_id; $model->original_volume = $purchase->volume - $purchase->consumed; } $model->fixed_volume = $volume; $model->save(); $purchase->consumed = $purchase->volume - $volume; if ($purchase->volume == $purchase->consumed) { $purchase->purchase_status = "consumed"; } $purchase->save(); } }
/** * 注文詳細のデータを元に在庫の引き当てを実施 */ public function provision() { $loader = new Vizualizer_Plugin("stock"); $menu = $loader->loadModel("Menu"); $menu->findBy(array("set_id" => $this->set_id, "choice_id" => $this->choice_id)); if ($menu->menu_id > 0 && $menu->fixed_flg == "1") { // トランザクションの開始 $connection = Vizualizer_Database_Factory::begin("stock"); try { // メニューが確定されている場合は引き当てを実行 $components = $menu->components(); foreach ($components as $component) { if ($component->quantity <= 0) { break; } $quantity = $component->quantity; $purchase = $loader->loadModel("Purchase"); $purchases = $purchase->findAllBy(array("material_id" => $component->material_id, "purchase_status" => "stocked"), "production_date", false); foreach ($purchases as $purchase) { if ($quantity < $purchase->volume - $purchase->consumed) { $purchase->consumed += $quantity; $quantity = 0; } else { $quantity -= $purchase->volume - $purchase->consumed; $purchase->consumed = $purchase->volume; $purchase->purchase_status = "consumed"; } $purchase->save(); } } $this->provision_flg = 1; $this->save(); Vizualizer_Database_Factory::commit($connection); } catch (Exception $e) { Vizualizer_Database_Factory::rollback($connection); throw new Vizualizer_Exception_Database($e); } } }
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]; } } } }
/** * Smarty {loadmodule} function plugin * * Type: function<br> * Name: loadmodule<br> * Purpose: load framework module.<br> * * @author Naohisa Minagawa <minagawa at web-life dot co dot jp> * @param array $params parameters * @param object $smarty Smarty object * @param object $template template object * @return string null */ function smarty_function_loadmodule($params, $template) { // nameパラメータは必須です。 if (empty($params['name'])) { trigger_error("loadmodule: missing name parameter", E_USER_WARNING); return; } if (!empty($params["if"])) { $result = true; $expression = '$result = ' . str_replace('_POST', '$_POST', $params["if"]) . ';'; eval($expression); if (!$result) { return; } } // パラメータを変数にコピー $name = $params['name']; // errorパラメータはエラー例外時に指定されたテンプレートに変更する。 if (isset($params["error"])) { $error = $params['error']; } else { $error = ""; } // モジュールのクラスが利用可能か調べる。 $errors = null; try { // モジュール用のクラスをリフレクション list($namespace, $class) = explode(".", $name, 2); $loader = new Vizualizer_Plugin($namespace); $object = $loader->loadModule($class); if (method_exists($object, "start")) { Vizualizer_Logger::writeDebug("=========== " . $name . " start ==========="); // 検索条件と並べ替えキー以外を無効化する。 if (isset($params["clear"]) && $params["clear"] == "1") { if (isset($params["sort_key"]) && !empty($params["sort_key"])) { $_POST = array("search" => $_POST["search"], $params["sort_key"] => $_POST[$params["sort_key"]]); } else { $_POST = array("search" => $_POST["search"]); } } if (!empty($params["key_prefix"])) { $object->key_prefix = $params["key_prefix"]; } else { $object->key_prefix = ""; } if (!empty($params["continue"])) { $object->continue = $params["continue"]; } else { $object->continue = ""; } $object->execute(new Vizualizer_Plugin_Module_Parameters($params)); Vizualizer_Logger::writeDebug("=========== " . $name . " end ==========="); } else { Vizualizer_Logger::writeAlert($name . " is not plugin module."); } } catch (Vizualizer_Exception_Invalid $e) { // 入力エラーなどの例外(ただし、メッセージリストを空にすると例外処理を行わない) Vizualizer_Logger::writeError($e->getMessage(), $e); $errors = $e->getErrors(); } catch (Vizualizer_Exception_Database $e) { // システムエラーの例外処理 Vizualizer_Logger::writeError($e->getMessage(), $e); $errors = array(Vizualizer::ERROR_TYPE_DATABASE => $e->getMessage()); } catch (Vizualizer_Exception_System $e) { // システムエラーの例外処理 Vizualizer_Logger::writeError($e->getMessage(), $e); $errors = array(Vizualizer::ERROR_TYPE_SYSTEM => $e->getMessage()); } catch (Exception $e) { // 不明なエラーの例外処理 Vizualizer_Logger::writeError($e->getMessage(), $e); $errors = array(Vizualizer::ERROR_TYPE_UNKNOWN => $e->getMessage()); } // エラー配列をスタックさせる if (is_array($errors) && !empty($errors)) { $attr = Vizualizer::attr(); // エラー用配列が配列になっていない場合は初期化 $errorData = $attr[Vizualizer::ERROR_KEY]; if (!is_array($errorData)) { $errorData = array(); } // エラー内容をマージさせる。 foreach ($errors as $key => $message) { if ($key != "" && !array_key_exists($key, $errorData)) { $errorData[$key] = $message; } } $templateEngine = $attr["template"]; if (!empty($error)) { // errorパラメータが渡っている場合はスタックさせたエラーを全て出力してエラー画面へ $templateEngine->assign("ERRORS", $errorData); unset($attr[Vizualizer::ERROR_KEY]); $info = pathinfo($error); switch ($info["extension"]) { case "php": // PHPを実行する場合、インクルードパスの最優先をテンプレートのディレクトリに設定 ini_set("include_path", Vizualizer_Configure::get("site_home") . $attr["userTemplate"] . PATH_SEPARATOR . ini_get("include_path")); $source = file_get_contents(Vizualizer_Configure::get("site_home") . $attr["userTemplate"] . DIRECTORY_SEPARATOR . $error); // 先頭のPHPタグを除去 $source = "?>" . $source; // バッファを除去 ob_end_clean(); ob_start(); eval($source); // 実行後のデータを取得し、バッファを再度除去 $source = ob_get_contents(); ob_end_clean(); ob_start(); // ソースデータをリソース化 $source = "eval:" . $source; // テンプレートを表示 $templateEngine->display($source); exit; default: $templateEngine->display($error); exit; } } else { $attr[Vizualizer::ERROR_KEY] = $errorData; } } }
/** * コンストラクタ * * @param $values モデルに初期設定する値 */ public function __construct($values = array()) { $loader = new Vizualizer_Plugin("stock"); parent::__construct($loader->loadTable("Products"), $values); }
public function components() { $loader = new Vizualizer_Plugin("stock"); $model = $loader->loadModel("Component"); return $model->findAllBy(array("menu_id" => $this->menu_id)); }
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, $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; } }
/** * レジからの注文データを取り込む。 * @param $params バッチ自体のパラメータ * @param $data バッチで引き回すデータ * @return バッチで引き回すデータ */ protected function importOrders($params, $data) { try { // Use the us-west-2 region and latest version of each client. $sharedConfig = array('region' => 'ap-northeast-1', 'version' => 'latest'); // Create an SDK class used to share configuration across clients. $sdk = new Aws\Sdk($sharedConfig); // Create an Amazon S3 client using the shared configuration data. $client = $sdk->createS3(); if (count($params) > 3) { if ($params[3] == "today") { $time = time(); } elseif ($params[3] == "yesterday") { $time = strtotime("-1 day"); } else { $time = strtotime($params[3]); } } else { $time = time(); } // Get the object $result = $client->getObject(array('Bucket' => "oder-report", 'Key' => "150/" . date("Ym", $time) . "/sales-" . date("Y-m-d", $time) . ".csv")); Vizualizer_Logger::writeDebug($result['Body']); $lines = explode("\n", $result['Body']); $columns = array(); $data = array(); foreach ($lines as $index => $line) { if (!empty($line)) { if ($index > 0) { $item = str_getcsv($line); $record = array(); foreach ($columns as $i => $key) { $record[$key] = $item[$i]; } $data[] = $record; } else { $columns = str_getcsv($line); } } } Vizualizer_Logger::writeDebug(print_r($data, true)); $sets = array(); foreach ($data as $item) { if ($item["type"] == "summary") { // トランザクションの開始 $connection = Vizualizer_Database_Factory::begin("stock"); try { $loader = new Vizualizer_Plugin("stock"); $model = $loader->loadModel("Order"); $model->findByPrimaryKey($item["order_id"]); if (!($model->order_id > 0)) { $model = $loader->loadModel("Order", array("order_id" => $item["order_id"])); } $model->user_id = $item["user_id"]; $model->payment_type = $item["payment_type"]; $model->order_date = $item["purchase_date"]; $model->price = $item["price"]; $model->save(); // エラーが無かった場合、処理をコミットする。 Vizualizer_Database_Factory::commit($connection); } catch (Exception $e) { Vizualizer_Database_Factory::rollback($connection); throw new Vizualizer_Exception_Database($e); } } if ($item["type"] == "set") { $sets[$item["order_id"] . "-" . $item["set_id"]] = $item; // トランザクションの開始 $connection = Vizualizer_Database_Factory::begin("stock"); try { $loader = new Vizualizer_Plugin("stock"); $model = $loader->loadModel("OrderDetail"); $model->order_id = $item["order_id"]; $model->set_id = $item["set_id"]; $model->set_menu_name = $item["set_menu_name"]; $model->order_date = $item["purchase_date"]; $model->price = $item["price"]; $model->quantity = $item["count"]; $model->save(); $model = $loader->loadModel("Menu"); $model->findBy(array("set_id" => $item["set_id"], "choice_id" => 0)); $model->set_id = $item["set_id"]; $model->set_menu_name = $sets[$item["order_id"] . "-" . $item["set_id"]]["set_menu_name"]; $model->menu_name = $item["menu_name"]; $model->price = $item["price"]; $model->fixed_flg = "1"; $model->save(); // エラーが無かった場合、処理をコミットする。 Vizualizer_Database_Factory::commit($connection); } catch (Exception $e) { Vizualizer_Database_Factory::rollback($connection); throw new Vizualizer_Exception_Database($e); } // 在庫の引き当てを実施 $model = $loader->loadModel("OrderDetail"); $models = $model->findAllBy(array("set_id" => $item["set_id"], "ne:provision_flg" => "1")); foreach ($models as $model) { $model->provision(); } } if ($item["type"] == "choice") { // トランザクションの開始 $connection = Vizualizer_Database_Factory::begin("stock"); try { $loader = new Vizualizer_Plugin("stock"); $model = $loader->loadModel("OrderDetail"); $model->order_id = $item["order_id"]; $model->set_id = $item["set_id"]; $model->choice_id = $item["choice_id"]; $model->set_menu_name = $sets[$item["order_id"] . "-" . $item["set_id"]]["set_menu_name"]; $model->menu_name = $item["menu_name"]; $model->price = $item["price"]; $model->quantity = $sets[$item["order_id"] . "-" . $item["set_id"]]["count"]; $model->save(); $model = $loader->loadModel("Menu"); $model->findBy(array("set_id" => $item["set_id"], "choice_id" => $item["choice_id"])); $model->set_id = $item["set_id"]; $model->choice_id = $item["choice_id"]; $model->set_menu_name = $sets[$item["order_id"] . "-" . $item["set_id"]]["set_menu_name"]; $model->menu_name = $item["menu_name"]; $model->price = $item["price"]; $model->fixed_flg = "1"; $model->save(); // エラーが無かった場合、処理をコミットする。 Vizualizer_Database_Factory::commit($connection); } catch (Exception $e) { Vizualizer_Database_Factory::rollback($connection); throw new Vizualizer_Exception_Database($e); } // 在庫の引き当てを実施 $model = $loader->loadModel("OrderDetail"); $models = $model->findAllBy(array("set_id" => $item["set_id"], "choice_id" => $item["choice_id"], "ne:provision_flg" => "1")); foreach ($models as $model) { $model->provision(); } } } } catch (S3Exception $e) { echo $e->getMessage() . "\n"; } return $data; }
/** * 注文データ */ public function orderDetail() { $loader = new Vizualizer_Plugin("stock"); $model = $loader->loadModel("OrderDetail"); return $model->findAllByOrderId($this->order_id); }
/** * PDF出力の処理を実行する。 * 出力処理にはHaruを使用します。 * @param $type モデルクラスのタイプ * @param $name モデルクラスの名前 * @param $value 取得する主キー */ protected function getData($type, $name, $value) { // データを取得する。 $loader = new Vizualizer_Plugin($type); $model = $loader->loadModel($name); $model->findByPrimaryKey($value); return $model; }
/** * フレームワークの起動処理を行うメソッドです。 */ public static final function startup($siteRoot = ".") { // システムのルートディレクトリを設定 if (!defined('VIZUALIZER_SITE_ROOT')) { define('VIZUALIZER_SITE_ROOT', realpath($siteRoot)); } // インストールの処理を実行 if (array_key_exists("argc", $_SERVER) && $_SERVER["argc"] > 2) { // Bootstrapを実行する。 Vizualizer_Bootstrap::register(10, "PhpVersion"); Vizualizer_Bootstrap::register(20, "Configure"); Vizualizer_Bootstrap::register(30, "ErrorMessage"); Vizualizer_Bootstrap::register(40, "Timezone"); Vizualizer_Bootstrap::register(50, "Locale"); Vizualizer_Bootstrap::register(60, "UserAgent"); Vizualizer_Bootstrap::startup(); // システム実行時の時間を記録するため、カレンダーを取得する。 Vizualizer_Data_Calendar::get(); $class =& $_SERVER["argv"][2]; if ($_SERVER["argv"][1] === "install") { try { $class::install(); echo "Package " . $class . " installed successfully\r\n"; } catch (Exception $e) { echo "Package " . $class . " install failed\r\n"; } } elseif ($_SERVER["argv"][1] === "batch") { try { $batch = new $class(); $batch->execute($_SERVER["argv"]); echo "Batch " . $class . " executed successfully\r\n"; } catch (Exception $e) { echo "Batch " . $class . " execution failed\r\n"; } } exit; } else { // ドキュメントルートを調整 $_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]); if (!substr_compare($_SERVER["DOCUMENT_ROOT"], "/", -1)) { $_SERVER["DOCUMENT_ROOT"] = substr($_SERVER["DOCUMENT_ROOT"], 0, -1); } if (strpos(VIZUALIZER_SITE_ROOT, $_SERVER["DOCUMENT_ROOT"]) !== 0) { $_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], "", $_SERVER['SCRIPT_FILENAME']); } // システムのルートURLへのサブディレクトリを設定 if (!defined('VIZUALIZER_SUBDIR')) { if (substr_compare($_SERVER["DOCUMENT_ROOT"], "/", -1) === 0) { define('VIZUALIZER_SUBDIR', substr(VIZUALIZER_SITE_ROOT, strlen($_SERVER["DOCUMENT_ROOT"]) - 1)); } else { define('VIZUALIZER_SUBDIR', substr(VIZUALIZER_SITE_ROOT, strlen($_SERVER["DOCUMENT_ROOT"]))); } } // システムのルートURLを設定 if (!defined('VIZUALIZER_URL')) { define('VIZUALIZER_URL', "http" . (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] === "on" ? "s" : "") . "://" . $_SERVER["SERVER_NAME"] . VIZUALIZER_SUBDIR); } // Bootstrapを実行する。 Vizualizer_Bootstrap::register(10, "PhpVersion"); Vizualizer_Bootstrap::register(20, "Configure"); Vizualizer_Bootstrap::register(30, "ErrorMessage"); Vizualizer_Bootstrap::register(40, "Timezone"); Vizualizer_Bootstrap::register(50, "Locale"); Vizualizer_Bootstrap::register(60, "UserAgent"); Vizualizer_Bootstrap::register(70, "SessionId"); Vizualizer_Bootstrap::register(80, "Session"); Vizualizer_Bootstrap::register(90, "TemplateName"); Vizualizer_Bootstrap::startup(); } $prefilters = Vizualizer_Configure::get("prefilters"); if (is_array($prefilters) && !empty($prefilters)) { foreach ($prefilters as $prefilter) { $prefilter::prefilter(); } } $attr = Vizualizer::attr(); $info = pathinfo($attr["templateName"]); // フレームとコンテンツタイプのオプションを指定 header("X-Frame-Options: SAMEORIGIN"); header("X-Content-Type-Options: nosniff"); header("X-XSS-Protection: 1; mode=block"); try { switch ($info["extension"]) { case "html": case "htm": case "xml": // 実行時間を出力 self::resetTimer($attr["templateName"]); // テンプレートを生成 $templateClass = "Vizualizer_Template_" . Vizualizer_Configure::get("template"); $template = new $templateClass(); $template->assign("ERRORS", array()); // テンプレートを表示 $attr["template"] = $template; $template->display(substr($attr["templateName"], 1)); // 実行時間を出力 self::printTimer(); break; case "php": // 実行時間を出力 self::resetTimer($attr["templateName"]); // PHPを実行する場合、インクルードパスの最優先をテンプレートのディレクトリに設定 ini_set("include_path", Vizualizer_Configure::get("site_home") . $attr["userTemplate"] . PATH_SEPARATOR . ini_get("include_path")); $source = file_get_contents(Vizualizer_Configure::get("site_home") . $attr["userTemplate"] . $attr["templateName"]); // 先頭のPHPタグを除去 $source = "?>" . $source; // バッファを除去 ob_end_clean(); ob_start(); eval($source); // 実行後のデータを取得し、バッファを再度除去 $source = ob_get_contents(); ob_end_clean(); // 実行時間を出力 self::printTimer(); ob_start(); // テンプレートを生成 $templateClass = "Vizualizer_Template_" . Vizualizer_Configure::get("template"); $template = new $templateClass(); $template->assign("ERRORS", array()); // ソースデータをリソース化 $source = "eval:" . $source; // テンプレートを表示 $attr["template"] = $template; $template->display($source); // 実行時間を出力 self::printTimer(); break; case "json": // 実行時間を出力 self::resetTimer($attr["templateName"]); // テンプレートを生成 $templateClass = "Vizualizer_Template_" . Vizualizer_Configure::get("template"); $template = new $templateClass(); $template->assign("ERRORS", array()); // テンプレートを属性に設定 $attr["template"] = $template; if (file_exists(Vizualizer_Configure::get("site_home") . $attr["userTemplate"] . $attr["templateName"])) { // バッファをクリアしてJSONの結果を出力する。 header("Content-Type: application/json; charset=utf-8"); Vizualizer_Parameter::$enableRefresh = false; $template->display(substr($attr["templateName"], 1)); } elseif (Vizualizer_Configure::get("json_api_key") == "" || isset($_POST["k"]) && Vizualizer_Configure::get("json_api_key") == $_POST["k"]) { Vizualizer_Parameter::$enableRefresh = false; $post = Vizualizer::request(); // コールバックを取得 $callback = ""; if (!empty($post["callback"])) { $callback = $post["callback"]; $post->remove("callback"); } $post->remove("_"); // JSONモジュールを実行する。 $loader = new Vizualizer_Plugin(substr($info["dirname"], 1)); $json = $loader->loadJson($info["filename"]); $result = json_encode($json->execute()); // バッファをクリアしてJSONの結果を出力する。 ob_end_clean(); header("Content-Type: application/json; charset=utf-8"); if (!empty($callback)) { echo $callback . "(" . $result . ");"; } else { echo $result; } } else { header("HTTP/1.0 404 Not Found"); exit; } // 実行時間を出力 self::printTimer(); break; case "css": header("Content-Type: text/css"); echo self::getStaticContents(); break; case "js": header("Content-Type: text/javascript"); echo self::getStaticContents(); break; default: echo self::getStaticContents(); break; } } catch (Exception $e) { Vizualizer_Logger::writeError("Uncaught Exeception was throwed.", $e); throw $e; } $postfilters = Vizualizer_Configure::get("postfilters"); if (is_array($postfilters) && !empty($postfilters)) { foreach ($postfilters as $postfilter) { $postfilter::postfilter(); } } }
protected function executeImpl($params, $type, $name, $result, $defaultSortKey = "create_time") { $post = Vizualizer::request(); // セレクトモードの時は通常の検索条件を適用しない if ($params->check("mode", "normal") == "select") { $savedPost = $post->export(); $selectSearch = array(); if ($params->check("selectSearchKeys") && array_key_exists("search", $savedPost) && is_array($savedPost["search"])) { $selectKeys = explode(",", $params->get("selectSearchKeys")); foreach ($selectKeys as $key) { if (array_key_exists($key, $savedPost["search"])) { $selectSearch[$key] = $savedPost["search"][$key]; } } } Vizualizer::request()->set("search", $selectSearch); } if (!$params->check("search") || isset($post[$params->get("search")])) { // サイトデータを取得する。 $loader = new Vizualizer_Plugin($type); $model = $loader->loadModel($name); // カテゴリが選択された場合、カテゴリの商品IDのリストを使う $conditions = $this->condition; if (is_array($post["search"])) { foreach ($post["search"] as $key => $value) { if (!$this->isEmpty($value)) { if ($params->get("mode", "list") != "select" || !$params->check("select") || $key != substr($params->get("select"), 0, strpos($params->get("select"), "|"))) { $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"); } $attr = Vizualizer::attr(); if ($this->groupBy) { $model->setGroupBy($this->groupBy); } // 並べ替え順序が指定されている場合に適用 $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; } } if ($params->get("force_operator", "0") == "1") { $model->setIgnoreOperator(true); } $models = $model->findAllBy($conditions, $sortOrder, $sortReverse); if ($params->get("mode", "list") == "list") { $attr[$result] = $models; } elseif ($params->get("mode", "list") == "select") { $attr[$result] = array(); if ($params->check("select")) { list($select_key, $select_value) = explode("|", $params->get("select")); $selection = array(); foreach ($models as $model) { $selection[$model->{$select_key}] = $model->{$select_value}; } $attr[$result] = $selection; } } if ($params->check("mode", "normal") == "select") { Vizualizer::request()->import($savedPost); } } }