ページ 11

DHAの利用について  【解決済み】

Posted: 2013年9月05日(木) 01:30
by yaaaam
DHA https://github.com/yama/dha をインストールしたところ、
MODXリソース投稿画面で

MODX encountered the following error while attempting to parse the requested resource:
« Execution of a query to the database failed - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY editedon desc' at line 1 »
SQL:SELECT * FROM `modx`.`modx2_approval_logs` WHERE id='6' AND ( ) ORDER BY editedon desc

が表示されました。
DAAAHに書かれてあるSQLの投入も行いましたが同じエラーが返ってきました。
これはインストール方法の問題なのか、元々の構文がまちがっているのか、判断がつきかねているため今回皆様にご教示いただきたいと思います。
お忙しいとは思いますが、ご回答のほどよろしくお願いいたします。

Basic info
REQUEST_URI : /modx/manager/index.php?a=27&id=5
Manager action : 27 - Editing resource
Current Plugin : DHA(OnDocFormRender)
Referer : http://www.***.jp/modx/manager/index.php?a=1&f=tree
User Agent : Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36
IP : ***
Parser timing
MySQL : 0.0025 s (16 Requests)
PHP : 0.0410 s
Total : 0.0435 s

Backtrace

1 include_once()
manager/index.php on line 234
2 DocumentParser->invokeEvent()
manager/actions/mutate_content.dynamic.php on line 1292
3 DocumentParser->evalPlugin()
manager/includes/document.parser.class.inc.php on line 3573
4 eval()
manager/includes/document.parser.class.inc.php on line 1559
5 DBAPI->select()
manager/includes/document.parser.class.inc.php(1559) : eval()'d code on line 349
6 DBAPI->query()
manager/includes/extenders/dbapi.mysql.class.inc.php on line 234

-----
MODXのバージョン:1.0.10J-r3
PHPのバージョン:5.3.10-1ubuntu3.7
MySQLのバージョン:5.5.31-0ubuntu0.12.04.1
-----

Re: DHAの利用について

Posted: 2013年9月05日(木) 05:52
by yama
dha_configという名前のチャンクを作って、その中にconfig.inc.phpの内容を貼り付けて保存してみてください。

Re: DHAの利用について

Posted: 2013年9月05日(木) 07:47
by yaaaam
yama さんが書きました:dha_configという名前のチャンクを作って、その中にconfig.inc.phpの内容を貼り付けて保存してみてください。
ご返信ありがとうございます。
試してみましたが、変化ありませんでした。
全く同じ内容のエラーが出力されます。

他に方法がありましたら、引き続きご教示ください。
よろしくお願いいたします。

Re: DHAの利用について

Posted: 2013年9月05日(木) 09:27
by yama
<?php や ?> などの文字列がチャンク内にある場合は、これを削除してみてください。
(configの読み取りができてないみたいなので、PHPが分かる場合はconfig.inc.phpを読むように編集してもよいかも?)

Re: DHAの利用について

Posted: 2013年9月05日(木) 09:36
by yaaaam
yama さんが書きました:<?php や ?> などの文字列がチャンク内にある場合は、これを削除してみてください。
(configの読み取りができてないみたいなので、PHPが分かる場合はconfig.inc.phpを読むように編集してもよいかも?)
モジュール、プラグイン、チャンクともに削除しましたが変化ありませんでした。
また、//$dha_config = $modx->getChunk('dha_config');
//eval($dha_config);
とし、
include_once($dha_path . 'config.inc.php');
に変更しましたが変化ありませんでした。

引き続きご教示お願いいたします。

Re: DHAの利用について

Posted: 2013年9月05日(木) 09:40
by yama
configが読めてないために$approval_levelの値を取得できてないように思いますが、もしかすると他の理由で$approval_levelの値が空になってるのかもしれません。
configが読めているはずのポイントでecho $approval_level;exit;などと記述をはさんで、何か表示されますでしょうか?

Re: DHAの利用について

Posted: 2013年9月06日(金) 00:17
by yaaaam
yama さんが書きました:configが読めてないために$approval_levelの値を取得できてないように思いますが、もしかすると他の理由で$approval_levelの値が空になってるのかもしれません。
configが読めているはずのポイントでecho $approval_level;exit;などと記述をはさんで、何か表示されますでしょうか?
こちらでは1段階承認で設定しているため、echo $approval_level;exit;すると1と表示されました。
これを2段階承認にすると2と表示されました。configは読めているようです。

それとphpmyadminを用いてmodx2_approval_logsテーブルを調べたところ、データが空でした。
ほかにmodx2_approvalテーブル、modx2_approvaled_site_tmplvar_contentvaluesテーブル、modx2_history_of_site_tmplvar_contentvaluesテーブルも空です。
単にこのSQL文の SELECT * FROM `modx`.`modx2_approval_logs` WHERE id='6' AND ( ) ORDER BY editedon desc の赤字部分が
不要だと思うのですが(phpmyadminでSQLをたたくと同じエラーが出ました) 具体的な修正部分が判断できかねます。
引き続きご教示のほどよろしくお願いいたします。

Re: DHAの利用について

Posted: 2013年9月07日(土) 00:28
by yaaaam
一応エラーは治まりました。
今後同じ問題に遭遇した方のために、方法を載せておきます。

yamaさんの「$approval_levelの値がどこかで空になっている」ということで調べていたところ、
DHAプラグインの中で
$config['approval_level'] という連想配列がみつかり、ここに値が入っていないのではないかと判断し、47行目に

コード: 全て選択

$config['approval_level']  = 1;
を追加しました。さらに、functions.phpなどを見るとapproval_levelを直接取得しているものもあったため

コード: 全て選択

$approval_level = 1;
をその下に追加しました。

さらにconfig.inc.phpやチャンクによる影響を避けるため

コード: 全て選択

$dha_config = $modx->getChunk('dha_config');
eval($dha_config);
の2行を//でコメントアウトし、

コード: 全て選択

$level_and_role [ 1 ] = "1/2/3/4";
$level_and_mes [ 1 ] = "公開の承認";
$a_approval_string [ 0 ] = "公開を承認しない";
$a_approval_string [ 1 ] = "公開を承認する";
として直接指定するように変更しました。(設定内容は一例です)

これで当該エラーはなくなり、きちんと承認タブが表示されました。
ただ、タブ内のヘルプアイコンのパスが通っておらず配置が崩れるため、そちらも修正しました。
<?php echo $style_path?>icons/b02_trans.gif

<?php echo $style_path?>images/icons/b02_trans.gif
など数カ所あります。DHAモジュール内にも1カ所あります。
$style_pathでソース内検索をかけるとよいかと思います。


ほかにもDHAに関する話題がみつかり次第投稿しますので、引き続きよろしくお願いいたします。

Re: DHAの利用について

Posted: 2013年9月07日(土) 01:06
by yama
なるほどですね。これでもかなり修正したほうなんですが、DAAAHがどうというより、MODX自体の特性上、いろいろ難しいみたいです。

結論的なことを言うと、DAAAHも改善版DHAも、実用的には肝心なところで難が多いと思います。気付いた点があればご連絡いただければ、できるだけフォローしたいと思います。承認ワークフロー機能を前提とした開発版のメンテを続けてますので、場合によってはそちらのほうを紹介させていただくかもしれません。

Re: DHAの利用について

Posted: 2013年9月07日(土) 01:12
by yama

コード: 全て選択

CREATE TABLE IF NOT EXISTS `{PREFIX}site_revision` (
  `internalKey` int(10) NOT NULL auto_increment,
  `target` varchar(32) NOT NULL default 'resource' COMMENT 'resource, template, chunk, snippet, plugin, module',
  `id` int(10) NOT NULL default '0',
  `revision` int(5) NOT NULL default '0',
  `status` varchar(20) NOT NULL default 'inherit' COMMENT 'inherit,pending,draft,auto-draft,future,private',
  `description` varchar(255) NOT NULL default '',
  `content` text,
  `editedon` int(20) NOT NULL default '0',
  `editedby` int(10) NOT NULL default '0',
  `submittedon` int(20) NOT NULL default '0',
  `submittedby` int(10) NOT NULL default '0',
  `approvedon` int(20) NOT NULL default '0',
  `approvedby` int(10) NOT NULL default '0',
  `pub_date` int(20) NOT NULL default '0',
  `unpub_date` int(20) NOT NULL default '0',
  `checksum` varchar(50) NOT NULL default '0',
  PRIMARY KEY `internalKey` (`internalKey`),
  UNIQUE INDEX `idx_revision` (`target`,`id`,`revision`),
  KEY `status` (`status`)
) ENGINE=MyISAM COMMENT='Contains revision data.';
参考情報ですが、開発版では上記のような新規テーブルを追加しています。この構造なら、承認ワークフローやリビジョン管理に関してはたいていのことを管理できることと思います。

Re: DHAの利用について

Posted: 2014年7月11日(金) 10:33
by minema
はじめまして、トピ主様と同じくMODXへのDHAのインストールでエラーが生じたものです。いろいろ試行錯誤し(その間、誤った情報をこちらにアップしてしまったので削除させていただきました、失礼しました)、根本的な原因と対処を確定しました。トピ主様とは別の対処方法もあるということで報告いたします。

【環境】
MODX Evolution 1.0.14J
DHAタブ実装版(?)

【現象】
ドキュメント編集画面下部に以下のSQL文法エラーが表示され、DHA関係の処理がされない。
SQL:SELECT * FROM `modx`.`modx2_approval_logs` WHERE id='【ドキュメント番号】' AND ( ) ORDER BY editedon desc

【原因】
DHAプラグインのバグ。設定の読み込み先が誤っています。また、ある設定を格納した変数名が誤っています。ついでに、アイコン画像のパスを修正します。

【対処】
(1) 設定の保存先の変更:
手順書では設定ファイルconfig.inc.phpを編集するよう指示があるが、プラグインでは設定をスニペットから読み込んでいます。そこで、config.inc.phpの内容をコピーして(上下の「<?php」、「?>」を除く)スニペット「dha_config」を新規作成します。
→修正理由:プラグイン43行目、44行目でgetChunk()でチャンクを読み込んで評価しており、その時点で設定内容がすべてチャンクのものに置き換えられます。したがって、それ以前の(当ファイル外の)処理でconfig.inc.phpから設定を読み込んでいたとしても、チャンクが優先されると思われます。


(2) プラグインの修正:
DHAプラグイン(配布時のファイル名は「plugin_dha.tpl」)で、変数名「$config['approval_level']」をすべて「$approval_level」に変更する。プラグインをテキストエディタで開き、一括置換するのが便利だと思います。
→修正理由:プラグイン内の$config['approval_level']使用箇所すべてで$configの内容をダンプしましたが、いずれも空でした。一方、設定「approval_level」は上記設定チャンク内で「$approval_level」として定義されており、プラグイン内でも正常に取得できました。また、approval_level以外の設定はすべてそのまま(配列$configに収めず)利用されています。これらのことから、$configは存在せず(バグ・以前のバージョンの名残り?)、approval_level設定は$approval_levelに格納されていると判断しました。

(3)アイコン画像のパス修正:
プラグイン内で「<?php echo $style_path?>icons」となっている箇所をすべて「<?php echo $style_path?>images/icons」と修正する。
→修正理由:画像のパスが誤っています。なお、$style_pathが誤っている可能性がありますが、定義元は面倒で追いかけていません。しかし、$style_pathはmanagerの共通要素であることから、その定義元が誤っているとは思えません。そこでプラグイン内で修正対処しました。

以上、ご報告します。