このサイトは株式会社オープンソース・ワークショップの旧サイトです。
新サイトを参照していただけますようお願いいたします。
https://opensource-workshop.jp/
NetCommons開発TIPS
NetCommons2のキャビネットで圧縮ファイルを展開した時、文字化けする。
こんにちは。
永原です。
NetCommons2のキャビネットで圧縮ファイルを展開した時、文字化けするケースがありました。
ファイル名やフォルダ名が日本語の場合に文字化けするようです。
現象としては、変なフォルダができたり、ファイル名が文字化けしたりしました。
原因はPear のライブラリのマルチバイト対応です。
修正方法は以下の通りです。
maple/includes/pear/File/Archive/Reader.php
の
getStandardURL 関数を修正します。
// Japanese file-name decompress bug mod by nagahara@opensource-workshop.jp
//$std = str_replace("\\", "/", $path);
$std = preg_replace ("/\\//" ,"/",$path);
以上
会員検索したら xmlがダイアログに表示された場合の対処方法
こんにちは。牟田口です。
netcommons2 で会員検索したら xmlがダイアログに表示されて
結果が表示されない問題がでました。
対処方法を書きます。
### 画面
### 環境
$ php -v
PHP 5.6.8 (cli) (built: Apr 15 2015 15:07:09)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
NetCommons2.4.2.0
### 対応
NetCommons2.4.2.1にバージョンアップすると解消します。
### 感想
PHP 5.6.8、NetCommons2.4.2.0
PHP 5.6.10、NetCommons2.4.2.0
でこの症状が出たので、おおよそPHP5.6系でNetCommons2.4.2.0を使うと出るようです。
PHP5.5系以下であれば下記の方法もあるようです。
### その他方法1
システム管理>開発者向け(タブ)>PHPデバッグ
ではでは。
validateはpostであればviewでもactionでも動く
こんにちは。牟田口です。
主に自分メモです。
- validateはpostであればviewでもactionでも動く。
- viewにpostする場合、maple.iniに下記追記をする。
[RequestCheck]
request = BOTH
ではでは。
共通コンポーネントのコンストラクタで、他の共通コンポーネントがセットできずnull問題に対応
こんにちは。
プログラムを担当している牟田口です。
ichigoCommonView = "ichigo.view"
remonCommonView = "remon.view"
remonCommonAction = "remon.action"
remonCommonView = "remon.view"
remonCommonAction = "remon.action"
ichigoCommonView = "ichigo.view"
class Remon_Action {
var $_db = null;
var $_container = null;
var $_request = null;
var $_remonCommonView = null;
var $_ichigoCommonView = null;
/**
* コンストラクター
*
* @accesspublic
*/
function Remon_Action() {
$this->_container =& DIContainerFactory::getContainer();
$this->_db =& $this->_container->getComponent("DbObject");
$this->_request =& $this->_container->getComponent('Request');
$this->_remonCommonView =& $this->_container->getComponent('remonCommonView');
$this->_ichigoCommonView =& $this->_container->getComponent('ichigoCommonView');
var_dump($this->_ichigoCommonView);
// var_dump出力 OKパターン:object(Kyomu_View)
// var_dump出力 NGパターン:null
}
}
Fatal error: Call to a member function getXXXX() on a non-object
既存モジュールをコピーしてカスタマイズ
こんにちは。
プログラムを担当している牟田口です。
NetCommons2の自分メモです。
NetCommons2で入力値が不正です。不正にアクセスされた可能性があります。
NetCommons2 で「入力値が不正です。不正にアクセスされた可能性があります。」というエラーメッセージが表示され、強制的にログアウトさせられる場合、IP変動が発生している可能性があります。
ガラケー(フューチャーフォン)では、よく発生していましたが、最近は少なくなった気がします。
ガラケー以外でも、プロキシサーバー経由の場合や、組織内ネットワークからインターネットへ行く場合、IP変動するケースがあります。
ネットワーク管理者に相談して、解決できれば良いのですが、なかなか、設定を変更していただけるものではないかなと思います。
その場合、
「セキュリティ管理」→「一般設定」→「セキュリティ設定」
にある、[IP変動を禁止するベース権限]の「管理者」のチェックを外す。
この対応で、IP変動のチェックは無効化されます。
NetCommons2 でSession ××とエラーメッセージが出た後、ログインできなくなった場合
こんにちは。
オープンソース・ワークショップの永原です。
以下の現象がありましたので、ここに書いておきます。
たまーにあるんですよね。
--- 0.NetCommon にログインできない。
Session ×× なんてエラーが出ていたら、Session テーブルが壊れています。
--- 1.バックアップ
// 必ず、バックアップを取ってから実行してください。
// Sessionテーブル名
[prefix]_session
[prefix] はインストール時のテーブルプレフィックス。
--- 2.session テーブルのリペア
// Sessionテーブルのチェック
$ mysqlcheck -c [detabase名] [prefix]_session -u root -p
// Sessionテーブルのリペア
$ mysqlcheck -r [detabase名] [prefix]_session -u root -p
--- 3.上記でダメなら、sessionテーブルのクリア(TRUNCATE)
// Sessionテーブルのクリア(TRUNCATE)
TRUNCATE TABLE [prefix]_session;
--- 4.上記でダメなら、sessionテーブルの作り直し
// [prefix]_session テーブルを削除し、手動でCreate
SQL文は以下にあります。
webapp/modules/install/sql/mysql/table.sql
このSQL 文から、session テーブルの部分を実行。
ただし、テーブル名を[prefix]_session にしてから。
以上
NetCommons2 で強制ログアウトさせられるケースがある。
学内ネットワークから使用している際、強制的にログアウトさせられてしまう。
ということが発生するケースがあります。
--- 原因
学内からのアクセスの際、外に出るときのグローバルIP アドレスが変更される場合に起こります。
初期設定では、管理者権限のユーザのみです。
学校で使用しているネットワーク機器などにより、このような設定がされているケースがあります。
IP変動と呼んでいます。
このIP変動が起こるケースとしては、ネットワーク機器によるケースもありますが、不正な攻撃を受けているケースも想定されます。
そのため、NetCommons2 の初期値では、管理者権限の場合のみ、IP変動が起こると、不正アクセスかもしれないということで、強制ログアウトさせられてしまうように設定されています。
--- 確認
システム管理者権限でログインし、管理(コントロールパネル) > セキュリティ管理 > ログ一覧表示(タブ)を確認すると、IP変動の履歴が確認できます。
--- 設定
セキュリティ管理 > 一般(タブ) > セキュリティ設定詳細 > IP変動を禁止するベース権限 の管理者について、初期値ではチェックが入っているのですが、このチェックを外すことにより、管理者でもIP 変動を許可するようにできます。
これにより、管理者でログイン中にIP変動が起こっても、強制ログアウトさせられることはありません。
maple.iniのvalidateフィルターにエラーメッセージ時下書き時の注意
こんにちは。牟田口です。
NetCommons2のmaple.iniに記載するvalidateフィルター [ValidateDef] にエラーメッセージを時下書きしていたら、エラーメッセージが正しく表示されない動作をしました。
以下回避策です。
- エラーメッセージにlangを指定する場合は、langを使うように統一する
- エラーメッセージ時下書き時は、時下書きのみで統一する
### lang指定統一 - OK
[ValidateDef]
no.required = "1:lang._required,番号"
name.required = "1:lang._required,名前"
mount.numeric = "1:lang.numeric,金額"
#### エラーメッセージ
番号を入力してください。
名前を入力してください。
金額は数値を入力してください。
### 時下書き - OK
[ValidateDef]
no.required = "1:番号を入力してください。"
name.required = "1:名前を入力してください。"
mount.numeric = "1:金額は数値を入力してください。"
#### エラーメッセージ
番号を入力してください。
名前を入力してください。
金額は数値を入力してください。
### 混在 - NG
[ValidateDef]
no.required = "1:lang._required,番号"
name.required = "1:名前を入力してください。"
mount.numeric = "1:lang.numeric,金額"
#### エラーメッセージ
番号を入力してください。
名前を入力してください。
名前を入力してください。
以上です。
OSWS社提供のシンプル動画モジュールでアップロードできるファイル形式
みなさまこんにちは。
株式会社オープンソース・ワークショップの永原です。
当社提供のシンプル動画モジュールでアップロードできるファイル形式について、ここでも情報を提示しておきます。
シンプル動画モジュールで再生できるのは、H.264 でコーデックされたMP4 形式のファイルです。
MP4 でも、H.264 でコーデックされていない場合、ブラウザによっては再生できません。
MP4 の変換機能とかH.264 かのチェック機能とかも付けたいと思いつつも、現在はシンプル動画モジュールではそこまでは実装できていません。
コーデックの変換に、オープンソースの「VLCメディアプレーヤー」が使えるという情報をいただきました。
以下、情報として掲載します。
https://ja.wikipedia.org/wiki/VLCメディアプレーヤー
https://www.videolan.org/videolan/
2015-09-13
以上
NetCommons2でファイルダウンロード処理を自作した場合の、IEファイル名文字化け対応
こんにちは。牟田口です。
自分メモです。
ここが参考になります。
Uploads_Viewコンポーネント _headerOutput() function
https://github.com/netcommons/NetCommons2/blob/develop/html/webapp/components/uploads/View.class.php#L337-L356
以上です。
MySQL5.6 はSTRICT_TRANS_TABLES が初期値
こんにちは。
永原です。
MySQL5.6 はSTRICT_TRANS_TABLES が初期値で設定されているんですよね。
my.cnf にしっかりと。
NetCommons2.4.2.1 では、まだ汎用データベースのデータベース作成アクションにバグがあり、この状態ではコケてしまいます。
(他にどこにバグがあるかはわからない)
ということで、以下の通り、MySQL の設定を変更して対応しています。
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
sql_mode=NO_ENGINE_SUBSTITUTION
以上
PHP5.6 をremi からインストールしたら、SimpleXML は明示的にインストール
こんにちは。
永原です。
PHP5.6 をremi からインストールしたら、SimpleXML は明示的にインストールすること。
# yum install --enablerepo=remi --enablerepo=remi-php56 php-xml
これを忘れていて、phpExcel でコケました。
[追記]
php-xml がインストールされていないと、検索モジュールでコケました。
検索の初期画面が出ない現象なので、ちょっとはまりました。
NetCommons2で開発中はsmartyのコンパイルを自動にする
こんにちは。牟田口です。
忘れるのでメモ。
NetCommons2で使っているテンプレートエンジン smarty。
smartyは一度、phpに変換をするコンパイルが必要。
通常は、モジュール管理からモジュールをアップデートすると、
対象モジュールのsmartyがコンパイルされる。
開発中は、smartyテンプレートを変えたら、すぐに画面に反映して欲しいので、自動コンパイルさせたい。
NetCommons2だと、下記パラメータにすればOK
\html\webapp\config\maple.inc.php
define('SMARTY_FORCE_COMPILE', true);
maple.inc.php - github
https://github.com/netcommons/NetCommons2/blob/e89bfb7c3e9253c07c34ac16999b44428473b51e/html/webapp/config/maple.inc.php#L55
本番リリース時は、パフォーマンスが落ちるので、false を推奨。
ではでは。
NetCommons2のFileUploadフィルター調査
こんにちは。牟田口です。
よくアップロード処理の開発でハマるので、FileUploadフィルターについて調べてみた。
### maple.ini
[FileUpload]
name = file_csv ← input type=file属性のname名称。実際のテンプレートに合わせる
allow_extension = "true" ← configテーブルの許す拡張子の一覧から拡張子チェックを行うかどうかのフラグ
maxsize = "" ← 最大ファイル容量=無制限
stopper = "false" ← 無指定だと trueになる。
true:FileUploadフィルタ内で、MIME-Typeチェック、拡張子チェック等行う。チェックエラーの場合、画面に出るエラーメッセージは一律「ファイルアップロードに失敗しました」
false:ファイルの最大ファイル容量チェック、ルームの合計最大ファイル容量チェックのみ行う。
### stopper = "true"チェック
### stopper = "false"でもチェック
### 参考
### おまけ allow_attachment
[FileUpload]
;allow_attachment = _ALLOW_ATTACHMENT_IMAGE
基本、指定しなくて良い。
指定しないと、allow_attachment = _ALLOW_ATTACHMENT_ALL として扱われる。
//configの権限でアップロード可能かどうかを取得
$allow_attachment_flag = $session->getParameter("_allow_attachment_flag");
//maple.iniで allow_attachment の定数取得
$attributes_allow_attachment_flag = $this->constantDef($attributes["allow_attachment"]);
- configのアップロード権限が、_ALLOW_ATTACHMENT_IMAGE
- maple.iniの allow_attachment _ALLOW_ATTACHMENT_ALL
理由はよくわからんのです。
ではでは。
NC1.xから2.4.0.xへの移行
--- 環境
--- NCMigration1.0.3を使う
--- 準備NC1
--- 準備NC2
--- 準備NCMigration
--- サイト構成
--- データ移行
--- エラー1
--- 対応1
--- エラー2
INSERT INTO netcommons2_pages_users_link(`room_id`,`user_id`,`role_authority_id`,`createroom_flag`,`insert_time`,`insert_site_id`,`insert_user_id`,`insert_user_name`,`update_time`,`update_site_id`,`update_user_id`,`update_user_name`) VALUES(?,?,?,?,?,?,?,?,?,?,?,?);:Array ( [room_id] => 9615 [user_id] => 6d2ec6f4f918347aef5cfb189bfedcd8d85ff44d [role_authority_id] => 4 [createroom_flag] => 0 [insert_time] => 20150327233503 [insert_site_id] => 0621068e454f23fc44c714e8eaef6f27f41b2662 [insert_user_id] => 6f08a38bcb67340f22bb7122d5e4ebdbe8c4c58d [insert_user_name] => XX5200 [update_time] => 20150327233503 [update_site_id] => 0621068e454f23fc44c714e8eaef6f27f41b2662 [update_user_id] => 6f08a38bcb67340f22bb7122d5e4ebdbe8c4c58d [update_user_name] => HA5217 ) :Duplicate entry '9615-6d2ec6f4f918347aef5cfb189bfedcd8d85ff44d' for key 1:C:\projects\xampp_lite\htdocs\NCMigration\model\utility.php:393
--- 対応2
--- エラー3
--- 対応3
/**
* NC1データベースコネクションオブジェクト設定
*
* @param string $dsn データソース名称(dbType://user:password@host/dbName?new)
* @return void
* @access public
*/
function setNC1ADOConnection($dsn)
{
$dsn = $this->addDSNNew($dsn);
$this->nc1ADOConnection = NewADOConnection($dsn);
if (!empty($this->nc1ADOConnection)) {
// 追記箇所
$adoConnection = $this->nc1ADOConnection;
if (strpos($adoConnection->dataProvider, "mysql") === 0) {
$serverInfo = $adoConnection->ServerInfo();
if (floatval($serverInfo["version"]) >= 4.01) {
$adoConnection->Execute("SET NAMES 'ujis';");
}
}
$this->nc1ADOConnection->SetFetchMode(ADODB_FETCH_ASSOC);
}
}
NetCommons2のファイルアップロード時にでてくるダイアログについて
こんにちは。牟田口です。
ファイルアップロード時に、アップロード処理の時間が長いと
「アップロードが失敗したか、タイムアウトになった可能性があります。処理を続行しますか?」
とダイアログが出る事がありますが、
カスタマイズ時に非表示にできないか調べました。
https://github.com/netcommons/NetCommons2/blob/537e08b7a2892bacd2eed5dbac3ea45792de0f36/html/webapp/modules/common/files/js/common.js#L2451
/*timeout_flag:0の場合、タイムアウトチェックをしない */
/*********************************************************/
sendAttachment: function(params_obj) {
上記パラメータをセットすれば、できる。
サンプルJS
/**
* ファイルアップロード
*/
uploadFile: function() {
var messageBody = new Object();
messageBody["action"] = "custummodule_action_main_import";
var option = new Object();
option["param"] = messageBody;
option["top_el"] = $(this.id);
option["timeout_flag"] = 0; // タイムアウトチェックをしない
option["callbackfunc"] = function(response) {
commonCls.alert("インポートしました。");
commonCls.sendRefresh(this.id);
}.bind(this);
option["callbackfunc_error"] = function(file_list, res){
commonCls.alert(res);
}.bind(this);
commonCls.sendAttachment(option);
},
ではでは。
NetCommons3の$this->NetCommonsForm->hidden
こんにちは。牟田口です。
自分用でせっかく調べたので、開発メモを残します。
2016/1/4時点のNetCommons3情報です。
- NetCommonsFormHelper.phpにはhiddenメソッドがないけど、実際のソース上では使っている。
- NetCommonsFormHelper.php内で、さらにhelperを指定していて、「Form」helperを呼んでいた。
- そこと、__callで「FormHelperラップ用マジックメソッド」してた。
- それで、FormHelper.phpのhiddenメソッドが使われていた。
--- 詳細
NetCommonsFormHelper.php
- https://github.com/NetCommons3/NetCommons/blob/5eb054cf27991703519ae97a6ae7643e09a8a72b/View/Helper/NetCommonsFormHelper.php#L27
- https://github.com/NetCommons3/NetCommons/blob/5eb054cf27991703519ae97a6ae7643e09a8a72b/View/Helper/NetCommonsFormHelper.php#L429-L438 __callで「FormHelperラップ用マジックメソッド」
実際のソース上では使っている箇所
<?php echo $this->NetCommonsForm->hidden('Block.id'); ?>
<?php echo $this->NetCommonsForm->hidden('VideoBlockSetting.id'); ?>
<?php echo $this->NetCommonsForm->hidden('VideoBlockSetting.block_key'); ?>
FormHelper.phpのhiddenメソッド
--- おまけ
http://book.cakephp.org/2.0/ja/core-libraries/helpers/form.html#FormHelper::hidden
フォームが編集されると(すなわち、配列 $this->request->data に User モデルに渡されるべき情報が含まれている場合)、生成される HTML の中に id フィールドに対応する値が自動的に追加されます。
上記が便利。
以上です。
NC3開発、cakephp2.x FormHelperメモ
こんにちは。牟田口です。
NetCommos3プラグイン開発しています。
cakephp2.xメモです。
- cakephpの`FormHelper`で`$options['type'] =‘put`は編集フォーム。
- $this->request->dataに、モデルのプライマリキー の値が空でなければ、編集フォームになる。
- 編集フォームの`<input type="hidden" name="_method" value="PUT" />`は、cookbookでは《HTTPメソッド》と表現していた。
- RFC 7231のHTTPメソッドでも、《置換するもの》として定義されていた。
なるほど、納得した。
情報元
▼ フォームの作成 - FormHelper - CakePHP Cookbook 2.x ドキュメント
http://book.cakephp.org/2.0/ja/core-libraries/helpers/form.html#id1
《 <form id="RecipeEditForm" method="post" action="/recipes/edit/5">
<input type="hidden" name="_method" value="PUT" />
注釈
これは編集フォームなので hidden の入力項目が生成され、 デフォルトの HTTP メソッドは上書きされます。》
▼ create() のオプション - FormHelper - CakePHP Cookbook 2.x ドキュメント
http://book.cakephp.org/2.0/ja/core-libraries/helpers/form.html#create
《$options['type'] このキーは生成するフォームのタイプを指定します。 有効な値は ‘post’, ‘get’, ‘file’, ‘put’, ‘delete’ です。》
▼ 4.3.4. PUT - RFC 7231 - HTTP/1.1: Semantics and Content (日本語訳)
http://www.hcn.zaq.ne.jp/___/WEB/RFC7231-ja.html#section-4.3.4
《PUT 要請は:
[ 同封された表現が、ターゲットリソースの状態を置換する ]ものとして定義される。 》
NC3開発、cakephp2.xメモ。$this->request->isPost()は非推奨
こんにちは。牟田口です。
NetCommons3プラグイン開発しています。
cakephp2.xメモです。
$this->request->isPost(); // 非推奨 だった。
$this->request->is('post'); //こっちが正解
情報元
▼ リクエストを調べる - リクエストとレスポンスオブジェクト - CakePHP Cookbook 2.x ドキュメント
http://book.cakephp.org/2.0/ja/controllers/request-response.html#check-the-request
《$this->request->is('post');
$this->request->isPost(); // 非推奨》