NetCommons開発TIPS

NetCommons2 の任意のモジュールでjqueryを利用する

こんにちは。

オープンソース・ワークショップの牟田口です。

 

NetCommons2 のJavaScriptライブラリはprototype.jsですが、jqueryを使いたい時があります。
jqueryを使う時に、jqueryを個別にダウンロードして読み込むと、ウィジウィグの画像添付、ファイル添付が動作しなくなったり、jqueryの多重読み込みで白画面になったりする不具合が出たりします。

そこでNetCommons2でもメニューの一部がjqueryを使っていますので、その仕組みを流用して他のモジュールでも使えるようにする方法を記載します。

 

 1.html/webapp/modules/モジュール名/モジュール名_script.html

<script class="nc_script" type="text/javascript">
if(!iepCls["<{$id}>"]) {
iepCls["<{$id}>"] = new clsIep("<{$id}>");
}

// use jquery
// 実装例: https://github.com/netcommons/NetCommons2/blob/develop/html/webapp/modules/menu/files/js/menu.js#L899
// jqcheckCls変数: https://github.com/netcommons/NetCommons2/blob/develop/html/webapp/modules/common/files/js/jqcheck.js
// jquery実体: https://github.com/netcommons/NetCommons2/blob/develop/html/webapp/modules/comp/files/js/extension/jquery-1.6.4.min.js
// これを書くことでjqueryを読み込んでる
jqcheckCls.jqload("jquery-1.6.4.min", "window.jQuery", function() {
});

</script>

 

・上記を書くことで、jqueryが読み込まれ、$の代わりにjQueryで書く事が出来ます。

 ・[補足] NetCommons2ではprototype.jsで$を先に使っているため、jqueryも使う$と衝突します。そのため$の代わりに別の変数jQueryを使って記述します。

・モジュール名_script.htmlは、各テンプレートから参照させるため、モジュールのどのテンプレートでもjQueryが使えるようになります。

 ・この方法でjqueryを何度も読み込んでも、jqueryの多重読み込みになりませんでした。

JQuery記述例

// 項目表示
jQuery('#discroption').show('slow');

// 項目非表示
jQuery('#discroption').hide('slow');

 

参考になれば幸いです。

 

(2019/12/23追記) 

Jqueryのライブラリは拡張モジュールを含めると、複数ありました。 

本体検索:

https://github.com/search?utf8=%E2%9C%93&q=repo%3Anetcommons%2FNetCommons2+extension%3Ajs+filename%3AJquery&type=Code&ref=advsearch&l=&l=

html/webapp/modules/comp/files/js/extension/jquery.mobile_addition.js
html/webapp/modules/comp/files/js/extension/jquery-1.6.4.min.js
html/webapp/modules/comp/files/js/extension/jquery.mobile-1.0.1.min.js

⇒共通としてJquery利用

Jqueryの利用
https://github.com/netcommons/NetCommons2/search?q=jquery&unscoped_q=jquery

html/webapp/modules/menu/files/js/menu.js
⇒メニューの一部テンプレートで利用
html/webapp/modules/comp/files/js/extension/jquery.mobile_addition.js
⇒スマホ表示のjqueryモバイルで利用
html/webapp/modules/common/files/js/jqcheck.js
⇒何かチェックしてる?
html/webapp/modules/comp/files/js/plugins/comp_textareamain.js
⇒ウィジウィグの入力にIE+jquery属性入ってるかのIF文。Jquery利用の観点からすると影響なし。

拡張モジュール検索:

https://github.com/search?utf8=%E2%9C%93&q=repo%3Anetcommons%2FNC2ExtensionModules+extension%3Ajs+filename%3Ajquery&type=Code&ref=advsearch&l=&l=

multimedia/files/images/jquery.jplayer.js
multimedia/files/images/jquery-1.7.1.min.js
multimedia/files/images/jquery-1.8.3.min.js

⇒動画モジュール再生のjplayerで利用

 参考まで。

 

NetCommons2 loggerでデバッグログをファイル出力する

こんにちは。

オープンソース・ワークショップの牟田口です。

 

NetCommons2 にはloggerの仕組みがありますが、初期状態は画面出力のため、ファイル出力されず、インストール時の確認やデバッグ時には不便な場合があります。

そこでloggerの出力をファイル出力に変更する方法を記載します。

 

1. html\webapp\config\global-config.ini を変更

;;DEFAULT_LOGGER = viewDisplayManage
DEFAULT_LOGGER = simpleFile

2. html\webapp\config\define.inc.php の末尾に追記

define('LOG_LEVEL', LEVEL_ERROR);

 

すると、下記ディレクトリにログが出力されます。

html\webapp\logs\maple.log

[2019/06/02 02:23:57] [error] 存在しないコンポーネントが指定されました : dicon://Session - DIContainerInitializer#doValueBeforeParse
[2019/06/02 02:24:53] [error] 存在しないコンポーネントが指定されました : dicon://Session - DIContainerInitializer#doValueBeforeParse
[2019/06/02 02:24:55] [error] 存在しないコンポーネントが指定されました : dicon://Session - DIContainerInitializer#doValueBeforeParse

 

参考になれば幸いです。

 

参考リンク

http://allcreator.net/jo0c73c3b-294/?block_id=294&active_action=journal_view_main_detail&post_id=154&comment_flag=1

https://nc2.netcommons.org/bbjx36jrx-6666/#_6666

 

NetCommons2 ページスタイル 指定できるテーマの違いについて

オープンソース・ワークショップのプログラマの牧野です。

 

NetCommons2のページスタイルのテーマについて、備忘録として記載しておきます。

 

NetCommons2では、全体、ページ、ブロック毎にページスタイルを設定できますが、

その時に指定できるテーマについて、差があります。

 

テーマ種類 全体 ページ ブロック
クラシック
サイドライン
アンダーライン
シンプル
タイトルアクセント × ×
パネル
パネル+ライン
点線
アート ×
テクスチャ ×
アクセシビリティ対応 ×

 

例えば、「タイトルアクセント」は、サイト全体もしくはページ全体に指定ができませんので、ブロックごとに指定する必要があります。

「アート」は、サイト全体もしくはページ全体で指定できますが、ブロックごとに指定する事ができません。

 

ページスタイルのテーマを指定する時は、上記の事をお気を付けください。

NetCommons2 新着情報のバグ

こんにちは。
株式会社オープンソース・ワークショップの永原です。

NetCommons2 新着情報のバグを見つけたので、とりあえずここにメモ。

発現する条件は以下

  • 新着情報を配置している。
  • 新着情報に日誌を表示している。(他のモジュールでも起こり得そう)
  • 日誌をブロック移動した。

この時、移動した日誌ブロックの記事をクリックすると、

"入力値が不正です。不正にアクセスされた可能性があります。"

とエラーになって、表示できないことがあります。

これは、NetCommons2 の新着情報モジュールのバグです。

  1. ログインしていること。
  2. ブロック移動前に新着から該当記事にリンクすること。
  3. この時点で、そのユーザが該当記事を見たという履歴ができる。
  4. 履歴データはroom_id を持っていない。
  5. ブロックを移動する。
  6. 再び新着をクリック。
  7. 履歴があるかどうかを判定する際、room_id も含めて確認するので、履歴なしと判定。
  8. 履歴をINSERTしようとするが、データベースのキーはroom_id がないので、重複エラーになる。

ということで、以下のように修正。

webapp/modules/whatsnew/components/Action.class.php

	function setRead() 
	{
    	$_user_id = $this->_session->getParameter("_user_id");
		if (empty($_user_id)) {
			return true;
		}
		$whatsnew = $this->_request->getParameter("whatsnew");
		if (empty($whatsnew)) {
			return false;
		}

		// 新着の既読確認に romm_id が含まれていたので、削除。by nagahara@opensource-workshop.jp
		// リンク先のブロックをルーム移動した際、エラーになる。
		// エラーは、ここで romm_id を含んで既読確認しているのに、既読データのINSERT は romm_id なしで行おうとするため。
		$params = array(
			"whatsnew_id"=>$whatsnew["whatsnew_id"], 
			"user_id" => $_user_id
		);
/*
		$params = array(
			"whatsnew_id"=>$whatsnew["whatsnew_id"], 
			"user_id" => $_user_id,
			'room_id' => $whatsnew['room_id']
		);
*/

 

Win7 + IE11の動画ダウンロードについて

こんにちは。
オープンソース・ワークショップの永原です。

Win7 + IE11の動画ダウンロードについて、はまった件があったのでメモです。

対象は当社のシンプル動画モジュール。
ログインする(HTTPS)とダメで、ログアウトしている(HTTP)と再生できるという現象でした。
以下、備忘録として。

原因はIE のSSL 時に Content-disposition: inline にした際、IE がファイル名を認識せず、動画再生で拡張子とファイル形式の不一致エラーがあったこと。
ログイン時にアウトなのは、ログインすると、SSL になるから。
Content-disposition: attachment なら、イケた。しかし、ダウンロードの選択画面が出る。

Content-disposition: inline で動かすためには、動画のデータはHTTP で流す必要がある。
そのため、以下をカスタマイズ。

simplemovie_view_main_init.html で動画のリンクは、http にする。
define.inc.php で、ログイン時の強制HTTPS を動画再生時には無効にする。
movie/View.class.php で、Content-disposition のinline指定
Simplemovie_View_Main_Iframe で動画のリンクは、http にする。

以上

NetCommons2のPHPMailerを最新版に差し替える

こんにちは、牟田口です。

最新版(2016/12/28時点) PHPMailer 5.2.19(70d041b6f5ed4e2ed8e2330b8c5b0f6926fc9781).zip に差し替えてメール飛びました。
すべての動作確認をしたわけではないので、参考程度の情報です。

PHPMailer最新版に差し替える

  • PHPMailerの最新版をGithubからzipをダウンロードする
  • ダウンロードしたzipを解凍して以下を変更する
  • class.phpmailer.phpに1行追加
    • require_once("PHPMailerAutoload.php");

確認動作

  • 掲示板に投稿してメールが飛びました
  • システム管理画面から、会員登録後にメールが飛びました

確認環境

  • NC2.4.2.1
  • XAMPP
  • PHP 5.6.12 (VC11 X86 32bit thread safe)
  • PHPMailer 5.2.19(70d041b6f5ed4e2ed8e2330b8c5b0f6926fc9781)

NC2.4.2.1の状態

参考

https://github.com/netcommons/NetCommons2/issues/134

以上です。

NetCommons2 使用しているテンプレート名をphpで取得する

こんにちは、牟田口です。

php側でテンプレート名を使ってプラグラムの動きを変えたかったので、
やり方を調査しました。

下記PHPで実現できます。

componentsの場合
$container =& DIContainerFactory::getContainer();
$block =& $container->getComponent("blocksView");
$block_id = intval($request->getParameter("block_id"));
$block_obj = $block->getBlockById($block_id);

// $block_obj['temp_name'];    //←テンプレート名が取得できる

 

(2018/09/28追記)

view・actionの場合

PHP

 var $block_id = null;
var $blocksView = null;

function execute()
{
$block_obj = $this->blocksView->getBlockById($this->block_id);
$block_obj['temp_name']; //←テンプレート名が取得できる
}

maple.ini

[Action]
blocksView = "ref:blocksView"

参考になれば幸いです。

ではでは。

NetCommons2 正常処理の際に、JavaScript Alaert メッセージでサーバ...

永原です。

備忘録。
NetCommons2 正常処理の際に、JavaScript Alaert メッセージでサーバからの文字列を表示する。

Backup_Action_Main_Init で処理している。

// 正常終了(エラーリストに完了メッセージ追加)

の部分。

--- 2016-05-25 追記

action クラスの maple.ini で
warning = "main:error.html"
のように、"main:error.html" を呼び出さないと、設定したメッセージがAlert されないみたい。

NetCommons2 のセッションに保持している権限

永原です。

NetCommons2 のセッションに保持している権限が、いつも覚えられないので、メモ

_auth_id : 参照中のルームへの権限 (_AUTH_xxxx)
_role_auth_id : 権限管理で作成する権限 (_ROLE_AUTH_xxxx)
_user_auth_id : ユーザのベース権限 (_AUTH_xxxx)

システム管理者の見分け方:_role_auth_id == _SYSTEM_ROLE_AUTH_ID
管理者以上の見分け方:_user_auth_id == _AUTH_ADMIN

以上

NetCommons2 のID、パスワードの長さの変更

こんにちは。
永原です。

いつも忘れるので、備忘録的に。
NetCommons2 のID、パスワードの長さの変更方法

--- webapp/config/user.ini

USER_LOGIN_ID_MINSIZE = 4
USER_PASSWORD_MINSIZE = 4


--- webapp/language/japanese/items.ini

USER_ITEM_MES_CHAR_DESCRIPTION="4文字以上の英数字または記号を入力"


ID とパスワードの長さは別に定義できるのに、説明は同じ定数なのよね。
まあ、会員管理 > 項目の「説明」で定数使わずに設定すれば良いのですけどね。

以上

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(); // 非推奨》

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 要請は:
    [ 同封された表現が、ターゲットリソースの状態を置換する ]ものとして定義される。 》

NetCommons3の$this->NetCommonsForm->hidden

こんにちは。牟田口です。
自分用でせっかく調べたので、開発メモを残します。
2016/1/4時点NetCommons3情報です。

  1. NetCommonsFormHelper.phpにはhiddenメソッドがないけど、実際のソース上では使っている。
  2. NetCommonsFormHelper.php内で、さらにhelperを指定していて、「Form」helperを呼んでいた。
  3. そこと、__callで「FormHelperラップ用マジックメソッド」してた。
  4. それで、FormHelper.phpのhiddenメソッドが使われていた。

 

--- 詳細

 

NetCommonsFormHelper.php

 

 

実際のソース上では使っている箇所


https://github.com/NetCommons3/Videos/blob/master/View/Elements/VideoBlockRolePermissions/edit_form.ctp#L14-L16

<?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メソッド


https://github.com/cakephp/cakephp/blob/506051f688431f6234edfb818c191f1d7a9df384/lib/Cake/View/Helper/FormHelper.php#L1690-L1713

--- おまけ


http://book.cakephp.org/2.0/ja/core-libraries/helpers/form.html#FormHelper::hidden

フォームが編集されると(すなわち、配列 $this->request->data に User モデルに渡されるべき情報が含まれている場合)、生成される HTML の中に id フィールドに対応する値が自動的に追加されます。

上記が便利。

以上です。

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


ではでは。

NC1.xから2.4.0.xへの移行

こんにちは。牟田口です。
NC1.xから2.4.0.xへの移行をする機会があったので、
メモを残しておきます。
 

--- 環境

 
windows8.1
XAMPPlite 1.6.2
 

--- NCMigration1.0.3を使う

 
Get NCMigration1.0.3 for Windows
 

--- 準備NC1

 
・NC1.xは NetCommons1.1.4 にする
・サイト閉鎖中にする
 

--- 準備NC2

 
・NetCommons2.4.0.0.zipを用意する
・NetCommons2.4.0.0を同じサーバの別ディレクトリにインストール
・サイト閉鎖中にする
 

--- 準備NCMigration

 
・NCMigration1.0.3を同じサーバの別ディレクトリに設置
 

--- サイト構成

 
NC1         ⇒ http://localhost/
NC2         ⇒ http://localhost/nc2/
NCMigration ⇒ http://localhost/NCMigration/
 

--- データ移行

 
http://localhost/NCMigration/
・「同意する>>」押下
 
http://localhost/NCMigration/index.php?action=entry
 
NetCommons1.1ルートディレクトリ:C:/Projects/xampp_lite/htdocs
NetCommons1.1管理者ログインID:(NC1の管理者ID)
NetCommons1.1管理者パスワード:(NC1のパスワード)
 
NetCommons2.4ルートディレクトリ:C:/Projects/xampp_lite/htdocs/nc2
NetCommons1.1管理者ログインID:(NC2の管理者ID)
NetCommons1.1管理者パスワード:(NC2のパスワード)
 
「設定内容の確認>>」押下
 
http://localhost/NCMigration/index.php
全てOKなら
「データ移行開始>>」押下
 

--- エラー1

 
「データ移行開始>>」押下後、下記URLになって白画面のまま動かない。
http://localhost/NCMigration/index.php?action=result
 

--- 対応1

 
・NCMigration1.0.3
 \NCMigration1.0.3\templates_c\ にsmartyの古いファイルが残っていて、マイグレーション実行できなかった。
 ⇒ 古いファイルを消せば解消した。
 

--- エラー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

 
NC2のテーブル「netcommons2_pages_users_link」で本来重複しないはずのデータが重複していた。
エラーメッセージ「Duplicate entry '9615-6d2ec6f4f918347aef5cfb189bfedcd8d85ff44d' for key 1」
 
移行元のNC1テーブル「nc1_rooms_members_link」を確認した処、ルーム参加データに重複があったため、
重複データを削除した処、解消した。
 

--- エラー3

 
移行が完了したけど、日本語が文字化けしていた。
 

--- 対応3

 
本来、MYSQL側の文字コード設定を EUC になっていれば文字化けしない。
 
しかし、手元の古いxamppのmysqlに設定が反映されないため、
暫定対応で、NC1のDB接続は、SET NAMES 'ujis' を強制的に行うようにした。
 
\NCMigration\model\database.php
 
/**
 * 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の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 として扱われる。

maple.iniで allow_attachment を設定すると、ここに入る。
 
//configの権限でアップロード可能かどうかを取得
$allow_attachment_flag = $session->getParameter("_allow_attachment_flag");
//maple.iniで allow_attachment の定数取得
$attributes_allow_attachment_flag = $this->constantDef($attributes["allow_attachment"]);
 
 
何等かエラー有り(PHP自体が感知するエラーは発生していない場合)の時
  • configのアップロード権限が、_ALLOW_ATTACHMENT_IMAGE
  • maple.iniの allow_attachment _ALLOW_ATTACHMENT_ALL
だとエラーにしてた。
理由はよくわからんのです。

ではでは。

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 を推奨。

ではでは。

PHP5.6 をremi からインストールしたら、SimpleXML は明示的にインストール

こんにちは。
永原です。

PHP5.6 をremi からインストールしたら、SimpleXML は明示的にインストールすること。

# yum install --enablerepo=remi --enablerepo=remi-php56 php-xml

これを忘れていて、phpExcel でコケました。

[追記]
php-xml がインストールされていないと、検索モジュールでコケました。
検索の初期画面が出ない現象なので、ちょっとはまりました。

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

以上

NetCommons2でファイルダウンロード処理を自作した場合の、IEファイル名文字化け対応

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
以上

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

以上