コメント(5)

ドメイン変更してました^^;
開発は飽きずに進めています。内部を更に大幅に変更したのでブログ更新が追いつかずにすいません。
サイトの方もリニューアル予定なので、とりあえず近況報告をこちらにします。
今年に入ってからはDrupalの メニューシステム および フォームAPI と同等機能の開発導入を行っていました。
別にこれらがなくても良かったのですが、後々の導入では各プラグインにも大きな影響が出ると思いましたので。。 Drupalの実装とは若干異なりますが、かなり近いものに仕上がっています。もちろん、コードは一切取ったりしていません。^^;
また、WordPressおよびWordPress MU双方への対応も完了したので、Pluggの各プラグインはWordPress/WordPress MU/XOOPS Cube Legacy/XOOPS本家版/ImpressCMSで動くようになります。XOOPS2.0やJPex対応は時間があればやってみたいと思います。
ライセンスは未定ですが、Pluggのコアは一応LGPLとしているので各プラグインは自由にライセンスを付与することができるはずです。もちろん、各CMSに対応させるための一部プラグインはGPLとしてあります。
いつも同じことを言っているような気がしますが、早ければ今月中には何らかのリリースができればと思っています。
とりあえず既存モジュールも同時に検索できる検索プラグインが欲しいです。
これに関しては各モジュールの開発者さんに対応をお願いするしかなさそうです。
下記の内容のファイルを各モジュールで用意してもらうことになりますが、リリース時には
ML等で呼びかけてみたいと思っています。下記は例えばnewbbモジュールをPluggの
検索プラグインへと対応させるものです。
<?php
class Plugg_XOOPSCube_Module_newbb extends Plugg_XOOPSCube_Module
{
function searchGetContentUrl($contentId)
{
require_once $this->_moduleDocRoot . '/class/class.forumposts.php';
$post = new ForumPosts($contentId);
if (!$post->postid()) return false; // post no longer exists
return sprintf('%1$s/modules/%2$s/viewtopic.php?post_id=%3$d&topic_id=%4$d&forum=%5$d#forumpost%3$d',
XOOPS_URL, $this->_moduleDir, $post->postid(), $post->topic(), $post->forum());
}
function searchFetchContents($limit, $offset)
{
$db = XoopsDatabaseFactory::getDatabaseConnection();
$sql = sprintf(
'SELECT p.post_id, p.uid, p.subject, p.post_time, p.nohtml, p.nosmiley, t.post_text
FROM %1$s_bb_posts p
INNER JOIN %1$s_bb_posts_text t ON p.post_id = t.post_id
ORDER BY p.post_id ASC',
$db->prefix()
);
if (!$result = $db->query($sql)) return array();
return $this->_processResult($db, $result);
}
function searchCountContents()
{
$db = XoopsDatabaseFactory::getDatabaseConnection();
$sql = sprintf(
'SELECT COUNT(post_id) FROM %s_bb_posts',
$db->prefix()
);
if ($result = $db->query($sql)) {
if ($row = $db->fetchRow($result)) {
return $row[0];
}
}
return 0;
}
function searchFetchContentsSince($timestamp, $limit, $offset)
{
$db = XoopsDatabaseFactory::getDatabaseConnection();
$sql = sprintf(
'SELECT p.post_id, p.uid, p.subject, p.post_time, p.nohtml, p.nosmiley, t.post_text
FROM %s_bb_posts p
INNER JOIN %1$s_bb_posts_text t ON p.post_id = t.post_id
WHERE p.post_time > %d
ORDER BY p.post_id ASC',
$db->prefix(),
$timestamp
);
if (!$result = $db->query($sql)) return array();
return $this->_processResult($db, $result);
}
function searchCountContentsSince($timestamp)
{
$db = XoopsDatabaseFactory::getDatabaseConnection();
$sql = sprintf(
'SELECT COUNT(post_id) FROM %s_bb_posts WHERE post_time > %d',
$db->prefix(),
$timestamp
);
if ($result = $db->query($sql)) {
if ($row = $db->fetchRow($result)) {
return $row[0];
}
}
return 0;
}
function searchFetchContentsByIds($contentIds)
{
$db = XoopsDatabaseFactory::getDatabaseConnection();
$sql = sprintf(
'SELECT p.post_id, p.uid, p.subject, p.post_time, p.nohtml, p.nosmiley, t.post_text
FROM %1$s_bb_posts p
INNER JOIN %1$s_bb_posts_text t ON p.post_id = t.post_id
WHERE p.post_id IN (%2$s)
ORDER BY p.post_id ASC',
$db->prefix(),
implode(',', array_map('intval', $contentIds))
);
if (!$result = $db->query($sql)) return array();
return $this->_processResult($db, $result);
}
private function _processResult($db, $result)
{
$ret = array();
$myts = MyTextSanitizer::getInstance();
while ($row = $db->fetchRow($result)) {
$ret[] = array(
'id' => $row['post_id'],
'user_id' => $row['uid'],
'title' => $row['subject'],
'body' => $myts->makeTareaData4Show($row['post_text'], !$row['nohtml'], !$row['nosmiley'], 1),
'created' => $row['post_time'],
'modified' => $row['post_time'],
'keywords' => array(),
'group' => '',
);
}
return $ret;
}
}