Пример #1
0
 /**
  * 稼働中のプラグインを取得する。
  */
 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;
 }
Пример #2
0
 /**
  * フックポイントで衝突する可能性のあるプラグインを判定.メッセージを返します.
  *
  * @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;
     }
 }