NetCommons開発TIPS

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,金額"

#### エラーメッセージ

番号を入力してください。
名前を入力してください。
名前を入力してください。

以上です。

NetCommons2 で強制ログアウトさせられるケースがある。

学内ネットワークから使用している際、強制的にログアウトさせられてしまう。
ということが発生するケースがあります。

--- 原因

学内からのアクセスの際、外に出るときのグローバルIP アドレスが変更される場合に起こります。
初期設定では、管理者権限のユーザのみです。

学校で使用しているネットワーク機器などにより、このような設定がされているケースがあります。
IP変動と呼んでいます。

このIP変動が起こるケースとしては、ネットワーク機器によるケースもありますが、不正な攻撃を受けているケースも想定されます。
そのため、NetCommons2 の初期値では、管理者権限の場合のみ、IP変動が起こると、不正アクセスかもしれないということで、強制ログアウトさせられてしまうように設定されています。

--- 確認

システム管理者権限でログインし、管理(コントロールパネル) > セキュリティ管理 > ログ一覧表示(タブ)を確認すると、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で入力値が不正です。不正にアクセスされた可能性があります。

NetCommons2 で「入力値が不正です。不正にアクセスされた可能性があります。」というエラーメッセージが表示され、強制的にログアウトさせられる場合、IP変動が発生している可能性があります。

ガラケー(フューチャーフォン)では、よく発生していましたが、最近は少なくなった気がします。

ガラケー以外でも、プロキシサーバー経由の場合や、組織内ネットワークからインターネットへ行く場合、IP変動するケースがあります。
ネットワーク管理者に相談して、解決できれば良いのですが、なかなか、設定を変更していただけるものではないかなと思います。

その場合、
「セキュリティ管理」→「一般設定」→「セキュリティ設定」
にある、[IP変動を禁止するベース権限]の「管理者」のチェックを外す。
この対応で、IP変動のチェックは無効化されます。

共通コンポーネントのコンストラクタで、他の共通コンポーネントがセットできずnull問題に対応

こんにちは。
プログラムを担当している牟田口です。

共通コンポーネントのコンストラクタで、他の共通コンポーネントを参照したけどnullのままで使えない問題を対応しました。

--- \webapp\modules\fruit\action\dicon.ini (OKパターン) 
 
ichigoCommonView = "ichigo.view"
remonCommonView = "remon.view"
remonCommonAction = "remon.action"
 
--- \webapp\modules\fruit\action\dicon.ini (NGパターン)
 
remonCommonView = "remon.view"
remonCommonAction = "remon.action"
ichigoCommonView = "ichigo.view"
 
--- \webapp\components\remon\Action.class.php
 
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
}
}
 
NGパターンの場合、ichigoCommonViewのクラス生成前に、remonCommonActionのクラス生成が始まるため、nullのままと推察。
 
ichigoCommonViewのメソッドを呼び出そうとしたけど、nullのため、下記エラーが発生した。

Fatal error: Call to a member function getXXXX() on a non-object
問題解決の参考になれば幸いです。

会員検索したら 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.iniのdefault_charset = UTF-8 をコメントアウトする。
 

システム管理>開発者向け(タブ)>PHPデバッグ
のチェックを外す。
 

ではでは。

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);

以上