ホーム > Marijuana

Marijuana

OWCのクラスを書いてみた

<?php /**  * PHPからCOMを使いOWCでグラフを作成するための基底クラス  *  * @package OWC  * @version 0.1  * @copyright Copyright 2010- Marijuana  * @license Modified BSD license  * @author: Marijuana  */ /**  * グラフの種類  */ define('OWC_ChartTypeArea', 29); define('OWC_ChartTypeArea3D', 60); define('OWC_ChartTypeAreaOverlapped3D', 61); define('OWC_ChartTypeAreaStacked', 30); define('OWC_ChartTypeAreaStacked100', 31); define('OWC_ChartTypeAreaStacked1003D', 63); define('OWC_ChartTypeAreaStacked3D', 62); define('OWC_ChartTypeBar3D', 50); define('OWC_ChartTypeBarClustered', 3); define('OWC_ChartTypeBarClustered3D', 51); define('OWC_ChartTypeBarStacked', 4); define('OWC_ChartTypeBarStacked100', 5); define('OWC_ChartTypeBarStacked1003D', 53); define('OWC_ChartTypeBarStacked3D', 52); define('OWC_ChartTypeBubble', 27); define('OWC_ChartTypeBubbleLine', 28); define('OWC_ChartTypeColumn3D', 46); define('OWC_ChartTypeColumnClustered', 0); define('OWC_ChartTypeColumnClustered3D', 47); define('OWC_ChartTypeColumnStacked', 1); define('OWC_ChartTypeColumnStacked100', 2); define('OWC_ChartTypeColumnStacked1003D', 49); define('OWC_ChartTypeColumnStacked3D', 48); define('OWC_ChartTypeCombo', -1); define('OWC_ChartTypeCombo3D', -2); define('OWC_ChartTypeDoughnut', 32); define('OWC_ChartTypeDoughnutExploded', 33); define('OWC_ChartTypeLine', 6); define('OWC_ChartTypeLine3D', 54); define('OWC_ChartTypeLineMarkers', 7); define('OWC_ChartTypeLineOverlapped3D', 55); define('OWC_ChartTypeLineStacked', 8); define('OWC_ChartTypeLineStacked100', 10); define('OWC_ChartTypeLineStacked1003D', 57); define('OWC_ChartTypeLineStacked100Markers', 11); define('OWC_ChartTypeLineStacked3D', 56); define('OWC_ChartTypeLineStackedMarkers', 9); define('OWC_ChartTypePie', 18); define('OWC_ChartTypePie3D', 58); define('OWC_ChartTypePieExploded', 19); define('OWC_ChartTypePieExploded3D', 59); define('OWC_ChartTypePieStacked', 20); define('OWC_ChartTypePolarLine', 42); define('OWC_ChartTypePolarLineMarkers', 43); define('OWC_ChartTypePolarMarkers', 41); define('OWC_ChartTypePolarSmoothLine', 44); define('OWC_ChartTypePolarSmoothLineMarkers', 45); define('OWC_ChartTypeRadarLine', 34); define('OWC_ChartTypeRadarLineFilled', 36); define('OWC_ChartTypeRadarLineMarkers', 35); define('OWC_ChartTypeRadarSmoothLine', 37); define('OWC_ChartTypeRadarSmoothLineMarkers', 38); define('OWC_ChartTypeScatterLine', 25); define('OWC_ChartTypeScatterLineFilled', 26); define('OWC_ChartTypeScatterLineMarkers', 24); define('OWC_ChartTypeScatterMarkers', 21); define('OWC_ChartTypeScatterSmoothLine', 23); define('OWC_ChartTypeScatterSmoothLineMarkers', 22); define('OWC_ChartTypeSmoothLine', 12); define('OWC_ChartTypeSmoothLineMarkers', 13); define('OWC_ChartTypeSmoothLineStacked', 14); define('OWC_ChartTypeSmoothLineStacked100', 16); define('OWC_ChartTypeSmoothLineStacked100Markers', 17); define('OWC_ChartTypeSmoothLineStackedMarkers', 15); define('OWC_ChartTypeStockHLC', 39); define('OWC_ChartTypeStockOHLC', 40); /**  * 凡例  */ define('OWC_LegendPositionAutomatic', 0); define('OWC_LegendPositionBottom', 2); define('OWC_LegendPositionLeft', 3); define('OWC_LegendPositionRight', 4); define('OWC_LegendPositionTop', 1); /**  * 線の太さ  */ define('OWC_LineWeightHairline', 0); define('OWC_LineWeightMedium', 2); define('OWC_LineWeightThick', 3); define('OWC_LineWeightThin', 1); /**  * 目盛  */ define('OWC_AxisPositionBottom', -2); define('OWC_AxisPositionCategory', -7); define('OWC_AxisPositionCircular', -6); define('OWC_AxisPositionLeft', -3); define('OWC_AxisPositionPrimary', -10); define('OWC_AxisPositionRadial', -5); define('OWC_AxisPositionRight', -4); define('OWC_AxisPositionSecondary', -11); define('OWC_AxisPositionSeries', -9); define('OWC_AxisPositionTimescale', -7); define('OWC_AxisPositionTop', -1); define('OWC_AxisPositionValue', -8); /**  * ChartDimensionsEnum  */ define('OWC_DimBubbleValues', 9); define('OWC_DimCategories', 1); define('OWC_DimCharts', 15); define('OWC_DimCloseValues', 6); define('OWC_DimFilter', 14); define('OWC_DimFormatValues', 16); define('OWC_DimHighValues', 7); define('OWC_DimLowValues', 8); define('OWC_DimOpenValues', 5); define('OWC_DimRValues', 10); define('OWC_DimSeriesNames', 0); define('OWC_DimThetaValues', 11); define('OWC_DimValues', 2); define('OWC_DimXValues', 4); define('OWC_DimYValues', 3); /**  * ChartSpecialDataSourcesEnum  */ define('OWC_DataBound', 0); define('OWC_DataLinked', -3); define('OWC_DataLiteral', -1); define('OWC_DataNone', -2); abstract class OWC {   /**     * OWCのオブジェクト     *     * @var object     */   public $ChartSpace = null;      /**     * グラフオブジェクト     *     * @var object     */   public $Charts = null;      /**     * 基本のフォント設定     *     * @var array     */   public $BaseFont = array('Bold' => false, 'Color' => 0, 'Italic' => false, 'Name' => 'MS Gothic', 'Size' => 12, 'Underline' => false);      /**     * 横軸のラベル     *     * @var array     */   protected $X_Labels = array();      /**     * 基本の線の色     *     * @var array     */   protected $LineColor = array();      /**     * 基本の線の色のカウンタ     *     * @var array     */   protected $ColorNum = -1;      /**     * コンストラクタ     */   public function __construct()   {     $this->ChartSpace = new COM('OWC11.ChartSpace');     $this->ChartSpace->Clear();     $this->Charts = $this->ChartSpace->Charts->Add();     $this->LineColor = array(OWC::RGB(25, 135, 255), OWC::RGB(255, 100, 100), OWC::RGB(0, 192, 0), OWC::RGB(255, 128, 64));     $this->Charts->PlotArea->Interior->Color = OWC::RGB(255, 255, 255);   }      /**     * VB互換のRGB変換メソッド     *     * @param integer $red 赤の数値(0-255)     * @param integer $green 緑の数値(0-255)     * @param integer $blue 青の数値(0-255)     * @return integer (0-16777215)     */   public static function RGB($red, $green, $blue)   {     $hex = str_pad(dechex($red), 2, '0', STR_PAD_LEFT);     $hex.= str_pad(dechex($green), 2, '0', STR_PAD_LEFT);     $hex.= str_pad(dechex($blue), 2, '0', STR_PAD_LEFT);     return hexdec($hex);   }   /**     * 横軸の設定     *     * @param boolean $use 横軸の縦線を表示する     * @param intger $Color 縦線の色(0-16777215)     * @param intger $line 縦線の太さ(定数OWC_LineWeight***)     * @param array $font 横軸のラベルのフォント     */   public function UseYAxes($use = true, $Color = 10526880, $line = OWC_LineWeightThin, $font = false)   {     $axValueAxis = $this->Charts->Axes(OWC_AxisPositionLeft);     $axValueAxis->HasMajorGridlines = $use;     //フォント     $font = is_array($font) ? $font : $this->BaseFont;     foreach ( $font as $key => $value ){       $axValueAxis->Font->$key = $value;     }          if ( $use ) {       $axValueAxis->MajorGridlines->Line->Color = $Color;       $axValueAxis->MajorGridlines->Line->Weight = $line;     }   }      /**     * 縦軸の設定     *     * @param boolean $use 縦軸の縦線を表示する     * @param intger $Color 横線の色(0-16777215)     * @param intger $line 横線の太さ(定数OWC_LineWeight***)     * @param array $font 縦軸のラベルのフォント     */   public function UseXAxes($use = true, $Color = 10526880, $line = OWC_LineWeightThin, $font = false)   {     $axValueAxis = $this->Charts->Axes(OWC_AxisPositionBottom);     $axValueAxis->HasMajorGridlines = $use;     //フォント     $font = is_array($font) ? $font : $this->BaseFont;     foreach ( $font as $key => $value ){       $axValueAxis->Font->$key = $value;     }          if ( $use ) {       $axValueAxis->MajorGridlines->Line->Color = $Color;       $axValueAxis->MajorGridlines->Line->Weight = $line;     }   }      /**     * 縦軸の目盛設定     *     * @param intger $min 最小値     * @param intger $max 最大値     * @param intger $unit 目盛の数値     */   public function YAxesScale($min = 0, $max = 100, $unit = 10)   {     $axValueAxis = $this->Charts->Axes(OWC_AxisPositionLeft);     $axValueAxis->Scaling->Maximum = $max;     $axValueAxis->Scaling->Minimum = $min;     $axValueAxis->MajorUnit = $unit;   }      /**     * 凡例の設定     *     * @param boolean $use 凡例を表示する     * @param intger $position 凡例を表示する場所(定数OWC_LegendPosition***)     * @param array $font 凡例のフォント     */   public function UseLegend($use = true, $position = OWC_LegendPositionTop, $font = false)   {     $this->Charts->HasLegend = $use;     if ( $use ) {       $this->Charts->Legend->Position = OWC_LegendPositionTop;       //フォント       $font = is_array($font) ? $font : $this->BaseFont;       foreach ( $font as $key => $value ){         $this->Charts->Legend->Font->$key = $value;       }     }   }      /**     * グラフタイトルの設定     *     * @param string $title タイトルの文字列(空の時は表示しない)     * @param array $font タイトルのフォント     */   public function setTitle($title = '', $font = false)   {     if ( $title != '' ) {       $this->Charts->HasTitle = true;       $this->Charts->Title->Caption = $title;       $font = is_array($font) ? $font : $this->BaseFont;       foreach ( $font as $key => $value ){         $this->Charts->Title->Font->$key = $value;       }     } else {       $this->Charts->HasTitle = false;     }   }      /**     * 横軸のラベルをセットする     *     * @param array $labels ラベルタイトルの配列     */   public function setXLabel($labels)   {     $this->X_Labels = $labels;   }      /**     * データをセットする     * オーバーライドして使用     *     * @param array $values データの配列     * @param string $title データ名称(凡例に表示される)     * @param intger $color データの色(デフォルトは$LineColorが順番に設定される)     */   public function setData($values, $title, $color = -1)   {     $this->ColorNum++;     if ( $this->ColorNum >= count($this->LineColor) ) {       $this->ColorNum = 0;     }     $color = ($color > 0) ? $color : $this->LineColor[$this->ColorNum];          $SeriesCollection = $this->Charts->SeriesCollection->Add();     $SeriesCollection->Caption = $title;     $SeriesCollection->SetData(OWC_DimCategories, OWC_DataLiteral, $this->X_Labels);     $SeriesCollection->SetData(OWC_DimValues, OWC_DataLiteral, $values);   }      /**     * グラフの出力     *     * @param string $type 画像の種別(jpg,png,gif)     * @param intger $width 画像の幅     * @param intger $height 画像の高さ     */   public function DrawChart($type = 'png', $width = 800, $height = 600)   {     switch ($type) {       case 'jpg': header('Content-type: image/jpeg'); break;       case 'png': header('Content-type: image/png'); break;       case 'gif': header('Content-type: image/gif'); break;     }          foreach ( $this->ChartSpace->GetPicture($type, $width, $height) as $bit ) {       echo pack('c', $bit);     }     exit;   }      /**     * グラフの保存     *     * @param string $filename 画像を保存するファイル名(フルパス)     * @param string $type 画像の種別(jpg,png,gif)     * @param intger $width 画像の幅     * @param intger $height 画像の高さ     */   public function SaveChart($filename, $type = 'png', $width = 800, $height = 600)   {     $this->ChartSpace->ExportPicture($filename, $type, $width, $height);   } } ?> ↓こんな感じでグラフ毎にオーバーライドして使用を想定 #個人的にはOWC_ChartTypeLineMarkersのグラフしか使用しないので他のグラフだと設定の追加などが必要かも <?php//マーカーdefine('OWC_MarkerStyleCircle', 8);define('OWC_MarkerStyleDash', 7);define('OWC_MarkerStyleDiamond', 2);define('OWC_MarkerStyleDot', 6);define('OWC_MarkerStyleNone', 0);define('OWC_MarkerStylePlus', 9);define('OWC_MarkerStyleSquare', 1);define('OWC_MarkerStyleStar', 5);define('OWC_MarkerStyleTriangle', 3);define('OWC_MarkerStyleX', 4); class OWC_LineChart extends OWC{  public function __construct($type = OWC_ChartTypeLineMarkers)  {    $LineType = array(      OWC_ChartTypeLine, OWC_ChartTypeLine3D, OWC_ChartTypeLineMarkers,       OWC_ChartTypeLineOverlapped3D, OWC_ChartTypeLineStacked,       OWC_ChartTypeLineStacked100, OWC_ChartTypeLineStacked1003D, OWC_ChartTypeLineStacked100Markers,      OWC_ChartTypeLineStacked3D, OWC_ChartTypeLineStackedMarkers    );    if ( !in_array($type, $LineType) ) {      exit('Invalid Type');    }    //$this->BaseFont['Name'] = mb_convert_encoding('MS ゴシック', 'SJIS-win', 'UTF-8');        parent::__construct();     $this->Charts->PlotArea->Interior->Color = OWC::RGB(255, 255, 255);    $this->Charts->Type = $type;        //凡例    $this->UseLegend();        //横軸の縦線    $this->UseXAxes();        //縦軸の横線    $this->UseYAxes();        //縦軸の目盛    $this->YAxesScale(0, 360, 36);  }    public function setData($values, $title, $color = -1)  {    $this->ColorNum++;    $color = ($color > 0) ? $color : $this->LineColor[$this->ColorNum];        $SeriesCollection = $this->Charts->SeriesCollection->Add();    $SeriesCollection->Caption = $title;    $SeriesCollection->SetData(OWC_DimCategories, OWC_DataLiteral, $this->X_Labels);    $SeriesCollection->SetData(OWC_DimValues, OWC_DataLiteral, $values);        //線の色    $SeriesCollection->Line->Color = $color;        //マーカーの種類と大きさ、色    $SeriesCollection->Marker->Style = OWC_MarkerStyleCircle;    $SeriesCollection->Marker->Size = 7;    $SeriesCollection->Interior->Color = $color;  }} $c = new OWC_LineChart();$c->setTitle(mb_convert_encoding('グラフのタイトル', 'SJIS-win', 'UTF-8'));$c->setXLabel($Xlabels);$c->setData($data1, mb_convert_encoding('データ名1', 'SJIS-win', 'UTF-8'));$c->setData($data2, mb_convert_encoding('データ名2', 'SJIS-win', 'UTF-8'));$c->DrawChart('png', 640, 480);?>

PHPでOWCを使う

Windows限定だけど、PHPからでもOWC(Office Web Components)が利用出来ます。 日本語も使えるので、見慣れた?エクセルのグラフを手軽にウェブ上で作成可能です。 PHPでの利用のサンプルを見か [...]

Gumblarウイルス

Gumblarの亜種に感染したHPを見つけたんでメールしてみた — 貴ホームページ(http://example.com/)が、ウィルスに感染しています。 おそらくクライアントPCが、感染しホームページを改竄 [...]

給水ポンプ

某大型マンションの給水増圧ポンプ(これが2組ある) デカイポンプが3台もある・・・ 普通は2連式で3連式は初めて見た このポンプは、基本的に1台が常に動いていて、流量が足りなくなるともう一台動くようになっている 基本的 [...]

間違ったSQL Injection対策

関連会社が発注してたものが納品になりました。 俺は微塵も関与してなかったのですが、サーバごと来るから管理してって言われてました。 サーバ丸ごとセットアップされた状態で納品なのですが、OSがWindows2000 Webの [...]

XSNS

XSNSで俺のモジュールが表示されないと相談を受けたので、ちょっと調べてみた。 結果、単にXSNSがXOOPS2のモジュールなだけだった。 検索のロジックは、XCLでサービス経由で呼ばれるようになり、xoops_vers [...]

この対応はどうなんだか・・・

先日、ここで脆弱性のあるコードのネタが出てたので、配布元(http://chixi.jp/)に問合せのメールをしてみたんだけど、この程度の感覚なのかとガッカリした。 以下やり取りのメールを晒してみる 俺が送ったメール h [...]

2.1.7のパッチ

もう更新さないのかな 2.2もいまいち進んでないし・・・ とりあえず把握してるバグのパッチ --- class/module.textsanitizer.php Tue Oct 27 09:59:32 2009 +++ class/module.textsanitizer.php Tue Oct 27 09:35:41 2009 @@ -195,7 +195,7 @@ function checkUrlString($text) { // Check control code - if (preg_match("/[\\0-\\31]/", $text)) { + [...]

最近気づいたこと

質問で「どのように変更したらよいのか教えてください」とか書いて、「ご教授してください」ってあるけど これって、やり方を聞いてるんじゃなくて、答えそのものを聞いてるのかって最近気づいた こーゆー質問はほぼ回答しても無駄だし [...]

PHP5.3.0のparse_ini_file

某所に書いたけど、忘れそうなんでこっちにも 5.2以下では、 iniファイルをini.phpとして < ?php /* [HAGE] HEAD="KATSURA" */ ?> って書いて、直接アクセスされ [...]

第1回XOOPS Cubeサタデーラボ

行ってきました。そして不肖にもしゃべって来ました。 どんな設備があって、どんな感じなのか全く分からなかったので、「しゃべるだけ」で良いように何も作らずに挑んだ訳なんですが・・・ 他の人は、スライド用意してたorz しゃべ [...]

NHKの大麻の番組

9/11金曜だっけかな、番組表みたら大麻の番組やってたんで見てみた。 サクラ使って大麻に引き込んでその後、シャブに引き込むって嘘くせー やらせとしか思えん(素) 街中でナンパ?した女を事務所に連れ込んで、サクラの男女が居 [...]

たまにはテレビネタ

イモトすげー! 番組自体は似非チャリティで胡散臭いけど 120km超えを走り切ったイモトは凄いと思った キリマンジャロも登ったし、大した根性の持ち主だよ 若かりし頃に、ボーイスカウトでいろんな山登ったり、100Kmハイク [...]

GRAYBOXの使い方

headタグ内に記述して、aタグで利用する方法は比較的見つかるけど、その他の使い方の日本語ページが見つからなかったので、簡単にメモしてみる 意外と知られてないかもだけどgrayboxでは、ウィンドウ表示した後に呼び出した [...]

SiteUrl.class.php

ひよこむに投稿したプリロードを簡単に解説してみます XOOPS_ROOT_PATH/preload/SiteUrl.class.php <?php class SiteUrl extends XCube_Actio [...]

XCLのPHP5.3パッチ

細かな部分の確認は出来ていませんが、以下のパッチにてローカルでは動作しています。 --- core/XCube_Root.class.php Wed Jul 08 10:19:21 2009 +++ core/XCub [...]

PHP5.3.0

XOOPSは動かないので、自鯖などでアップデートするときは気をつけてください。 parse_iniの挙動が変わったり、クラスのコンストラクタの呼び出しが変わったりで動作しません。 プリロードでフックして対応とかでは動作さ [...]

郵便番号

今までは郵便番号→住所だけだったけど、住所→郵便番号も対応してみた ここで動作確認ちぅ 郵便番号データはここで配布の全国一括のCSVで簡単に更新出来るようにしてみた 解凍したCSVをアップロードしてモジュールアップデート [...]

割と(´・ω・`)ガッカリ・・・

includeフォルダがそのままだったりで、モジュールが変わっただけじゃんとか思ってしまった・・・ smartyも相変わらずcoreディレクトリかよ。。。 下位互換性も大事なのかもだけど、いっそ切り捨てもありなんじゃない [...]

釣られてみる

この記事見て初めてこんなサービスがあったのかと思ったけど > XCL がGravatarに対応してないことだ、 対応も何もないじゃん、ちょっとテンプレート(user_userinfo.html)書き換えるだけじゃん [...]
To Top