/** * 稼働中のプラグインを取得する。 */ function getEnablePlugin() { $objQuery =& SC_Query_Ex::getSingletonInstance(); $col = '*'; $table = 'dtb_plugin'; $where = 'enable = 1'; // XXX 2.11.0 互換のため $arrCols = $objQuery->listTableFields($table); if (in_array('priority', $arrCols)) { $objQuery->setOrder('priority DESC, plugin_id ASC'); } $arrRet = $objQuery->select($col, $table, $where); // プラグインフックポイントを取得. $max = count($arrRet); for ($i = 0; $i < $max; $i++) { $plugin_id = $arrRet[$i]['plugin_id']; $arrHookPoint = SC_Plugin_Util::getPluginHookPoint($plugin_id); $arrRet[$i]['plugin_hook_point'] = $arrHookPoint; } return $arrRet; }
/** * フックポイントで衝突する可能性のあるプラグインを判定.メッセージを返します. * * @param int $plugin_id プラグインID * @return string $conflict_alert_message メッセージ */ public function checkConflictPlugin($plugin_id = '') { // フックポイントを取得します. $where = 'T1.hook_point = ? AND NOT T1.plugin_id = ? AND T2.enable = ?'; if ($plugin_id > 0) { $hookPoints = SC_Plugin_Util::getPluginHookPoint($plugin_id, ''); } else { $hookPoints = SC_Plugin_Util::getPluginHookPointList(1); $where .= ' AND T1.use_flg = 1'; } $conflict_alert_message = ''; $arrConflictPluginName = array(); $arrConflictHookPoint = array(); $objQuery =& SC_Query_Ex::getSingletonInstance(); $objQuery->setGroupBy('T1.hook_point, T1.plugin_id, T2.plugin_name'); $table = 'dtb_plugin_hookpoint AS T1 LEFT JOIN dtb_plugin AS T2 ON T1.plugin_id = T2.plugin_id'; foreach ($hookPoints as $hookPoint) { // 競合するプラグインを取得する, $conflictPlugins = $objQuery->select('T1.hook_point, T1.plugin_id, T2.plugin_name', $table, $where, array($hookPoint['hook_point'], $hookPoint['plugin_id'], PLUGIN_ENABLE_TRUE)); // プラグイン名重複を削除する為、専用の配列に格納し直す. foreach ($conflictPlugins as $conflictPlugin) { // プラグイン名が見つからなければ配列に格納 if (!in_array($conflictPlugin['plugin_name'], $arrConflictPluginName)) { $arrConflictPluginName[] = $conflictPlugin['plugin_name']; } // プラグイン名が見つからなければ配列に格納 if (!in_array($conflictPlugin['hook_point'], $arrConflictHookPoint)) { $arrConflictHookPoint[] = $conflictPlugin['hook_point']; } } } if ($plugin_id > 0) { // メッセージをセットします. foreach ($arrConflictPluginName as $conflictPluginName) { $conflict_alert_message .= '* ' . $conflictPluginName . 'と競合する可能性があります。<br/>'; } return $conflict_alert_message; } else { return $arrConflictHookPoint; } }