Esempio n. 1
0
 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")));
 }
Esempio n. 2
0
 public function material()
 {
     $loader = new Vizualizer_Plugin("stock");
     $model = $loader->loadModel("Material");
     $model->findByPrimaryKey($this->material_id);
     return $model;
 }
Esempio n. 3
0
 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;
 }
Esempio n. 5
0
 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);
             }
         }
     }
 }
Esempio n. 6
0
 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;
 }
Esempio n. 7
0
 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);
 }
Esempio n. 8
0
 /**
  * 別途用意したサブモジュールの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.");
     }
 }
Esempio n. 9
0
 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();
         }
     }
 }
Esempio n. 10
0
 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);
         }
     }
 }
Esempio n. 11
0
 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);
             }
         }
     }
 }
Esempio n. 12
0
 /**
  * コンストラクタ
  */
 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);
 }
Esempio n. 13
0
 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"));
 }
Esempio n. 14
0
 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();
     }
 }
Esempio n. 15
0
 /**
  * 注文詳細のデータを元に在庫の引き当てを実施
  */
 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);
         }
     }
 }
Esempio n. 16
0
 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;
        }
    }
}
Esempio n. 18
0
 /**
  * コンストラクタ
  *
  * @param $values モデルに初期設定する値
  */
 public function __construct($values = array())
 {
     $loader = new Vizualizer_Plugin("stock");
     parent::__construct($loader->loadTable("Products"), $values);
 }
Esempio n. 19
0
 public function components()
 {
     $loader = new Vizualizer_Plugin("stock");
     $model = $loader->loadModel("Component");
     return $model->findAllBy(array("menu_id" => $this->menu_id));
 }
Esempio n. 20
0
 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")]);
     }
 }
Esempio n. 21
0
 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;
     }
 }
Esempio n. 22
0
 /**
  * レジからの注文データを取り込む。
  * @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;
 }
Esempio n. 23
0
 /**
  * 注文データ
  */
 public function orderDetail()
 {
     $loader = new Vizualizer_Plugin("stock");
     $model = $loader->loadModel("OrderDetail");
     return $model->findAllByOrderId($this->order_id);
 }
Esempio n. 24
0
 /**
  * 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;
 }
Esempio n. 25
0
 /**
  * フレームワークの起動処理を行うメソッドです。
  */
 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();
         }
     }
 }
Esempio n. 26
0
 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);
         }
     }
 }