OSDN Git Service

ver 0.2.9.7
authorkmorimatsu <kmorimatsu@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Tue, 13 May 2008 00:16:27 +0000 (00:16 +0000)
committerkmorimatsu <kmorimatsu@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Tue, 13 May 2008 00:16:27 +0000 (00:16 +0000)
git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/plugin@622 1ca29b6e-896d-4ea0-84a5-967f57386b96

112 files changed:
trunk/NP_SubSilver/plugins/NP_OnlineUsers.php [new file with mode: 0644]
trunk/NP_SubSilver/plugins/NP_subSilver.php [new file with mode: 0644]
trunk/NP_SubSilver/plugins/subsilver/.htaccess [new file with mode: 0644]
trunk/NP_SubSilver/plugins/subsilver/action.php [new file with mode: 0644]
trunk/NP_SubSilver/plugins/subsilver/comments.php [new file with mode: 0644]
trunk/NP_SubSilver/plugins/subsilver/if.php [new file with mode: 0644]
trunk/NP_SubSilver/plugins/subsilver/index.php [new file with mode: 0644]
trunk/NP_SubSilver/plugins/subsilver/install.php [new file with mode: 0644]
trunk/NP_SubSilver/plugins/subsilver/member.php [new file with mode: 0644]
trunk/NP_SubSilver/plugins/subsilver/posting.php [new file with mode: 0644]
trunk/NP_SubSilver/plugins/subsilver/search.php [new file with mode: 0644]
trunk/NP_SubSilver/plugins/subsilver/skin.php [new file with mode: 0644]
trunk/NP_SubSilver/plugins/subsilver/template.php [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/.htaccess [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/category.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/faq.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/footer.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/formIE.css [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/head.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/header.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/cellpic.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/cellpic1.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/cellpic2.jpg [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/cellpic3.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/created_by.jpg [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder_announce.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder_announce_new.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder_big.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder_hot.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder_lock.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder_lock_new.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder_locked_big.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder_new.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder_new_big.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder_new_hot.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder_sticky.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/folder_sticky_new.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_delete.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_latest_reply.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_mini_faq.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_mini_groups.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_mini_login.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_mini_members.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_mini_message.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_mini_profile.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_mini_register.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_mini_search.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_minipost.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_minipost_new.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/icon_newest_reply.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/index.htm [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_aim.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_edit.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_email.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_icq_add.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_ip.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_msnm.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_pm.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_profile.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_quote.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_search.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_www.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_yim.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/msg_newpost.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/post.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/reply-locked.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/lang_english/reply.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/logo_clear.png [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/logo_petitforum.png [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/logo_phpBB.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/logo_phpBB_med.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/msg_inbox.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/msg_outbox.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/msg_savebox.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/msg_sentbox.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/s_asc.png [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/s_desc.png [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/spacer.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/topic_delete.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/topic_lock.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/topic_move.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/topic_split.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/topic_unlock.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/vote_lcap.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/vote_rcap.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/voting_bar.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/images/whosonline.gif [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/index.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/item.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq1.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq2.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq3.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq4.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq5.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq6.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq7.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/legend.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/loginform.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/member.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/memberlist.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/nucleus.css [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/onlinedata.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/posting.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/regconfirm.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/regform.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/search.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/searchform.inc [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/skinbackup.xml [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/subSilver.css [new file with mode: 0644]
trunk/NP_SubSilver/skins/subsilver/timezone.inc [new file with mode: 0644]

diff --git a/trunk/NP_SubSilver/plugins/NP_OnlineUsers.php b/trunk/NP_SubSilver/plugins/NP_OnlineUsers.php
new file mode 100644 (file)
index 0000000..7a8233d
--- /dev/null
@@ -0,0 +1,128 @@
+<?php 
+class NP_OnlineUsers extends NucleusPlugin { 
+       function getName() { return 'NP_OnlineUsers'; }
+       function getMinNucleusVersion() { return 220; }
+       function getAuthor()  { return 'Katsumi'; }
+       function getVersion() { return '0.1.2'; }
+       function getURL() {return 'http://hp.vector.co.jp/authors/VA016157/';}
+       function getDescription() { return $this->getName().' plugin'; } 
+       function supportsFeature($what) { return (int)($what=='SqlTablePrefix'); }
+       function getEventList() { return array('PreSkinParse'); }
+       function getTableList() { return $this->sql_query('list'); }
+       function install() {
+               $this->sql_query('create','(
+                       id int(11) not null auto_increment,
+                       ip varchar(16) not null default "000.000.000.000",
+                       mid int(11) not null default 0,
+                       itemid int(11) not null default 0,
+                       catid int(11) not null default 0,
+                       time datetime not null default "0000-00-00 00:00:00",
+                       PRIMARY KEY id(id)
+                       )');
+               $this->createOption('howlong','How many minutes do you collect the data?','text','5','datatype=numerical');
+               $this->createOption('siteadmin','Template for showing siteadmin:','textarea','<span style="color: rgb(255, 163, 79);"><%name%></span>');
+               $this->createOption('moderator','Template for showing blogadmin:','textarea','<span style="color: rgb(0, 102, 0);"><%name%></span>');
+               $this->createOption('member','Template for showing other member:','textarea','<%name%>');
+               $this->createOption('maxonlinenum','Maximum online user number','text','0','access=hidden');
+               $this->createOption('recorddate','When recorded (timestamp)?','text','0','access=hidden');
+       }
+       function unInstall() { $this->sql_query('drop'); }
+       var $data=false;
+       function doSkinVar($skinType,$type,$p1='') {
+               global $manager, $itemid, $catid;
+               if (!$this->data){
+                       $res=$this->sql_query('SELECT * FROM');
+                       $this->data=array();
+                       while($row=mysql_fetch_assoc($res)) $this->data[]=$row;
+                       mysql_free_result($res);
+                       if (count($this->data)>(int)$this->getOption('maxonlinenum')) {
+                               $this->setOption('maxonlinenum',count($this->data));
+                               $this->setOption('recorddate',$this->time);
+                       }
+               }
+               switch($type=strtolower($type)){
+               case 'online':
+               case 'member':
+               case 'guest':
+                       $count=0;
+                       foreach($this->data as $row){
+                               if (0<$row[mid]){
+                                       if ($type!='guest') $count++;
+                               } else {
+                                       if ($type!='member') $count++;
+                               }
+                       }
+                       echo (int)$count;
+                       break;
+               case 'recordtime':
+                       $template =& $manager->getTemplate($p1);
+                       echo strftime($template['FORMAT_TIME'],$this->getOption('recorddate'));
+                       break;
+               case 'recorddate':
+                       $template =& $manager->getTemplate($p1);
+                       echo strftime($template['FORMAT_DATE'],$this->getOption('recorddate'));
+                       break;
+               case 'howlong':
+               case 'maxonlinenum':
+                       echo htmlspecialchars($this->getOption($type),ENT_QUOTES);
+                       break;
+               case 'onlinelist':
+                       $moderators=array();
+                       $query='SELECT m.mnumber FROM '.sql_table('member').' as m, '.
+                               sql_table('team').' as t'.
+                               ' WHERE m.mnumber=t.tmember AND t.tadmin>0';
+                       $res=sql_query($query);
+                       while($row=mysql_fetch_row($res)) $moderators[$row[0]]=$row[0];
+                       mysql_free_result($res);
+                       $list=array();
+                       $extra=strstr($p1,'category')?' AND o.catid='.(int)$catid:'';
+                       $extra.=strstr($p1,'item')?' AND o.itemid='.(int)$itemid:'';
+                       $query='SELECT m.mnumber as mid, m.mrealname as name, m.madmin as admin FROM '.
+                               sql_table('member').' as m, '.$this->sql_query('name').' as o'.
+                               ' WHERE m.mnumber=o.mid'.$extra.' ORDER BY o.time DESC';
+                       $res=sql_query($query);
+                       while($row=mysql_fetch_assoc($res)) {
+                               $template=$this->getOption('member');
+                               if ($moderators[$row['mid']]) $template=$this->getOption('moderator');
+                               if ($row['admin']) $template=$this->getOption('siteadmin');
+                               $list[]=TEMPLATE::fill($template,array('name'=>htmlspecialchars($row['name'],ENT_QUOTES)));
+                       }
+                       mysql_free_result($res);
+                       echo implode(',',$list);
+               default:
+                       break;
+               }
+       }
+       function event_PreSkinParse(){
+               global $blog,$member,$catid,$itemid;
+               if ($blog) $this->time=$blog->getCorrectTime();
+               else $this->time=time();
+               $ip=addslashes(serverVar('REMOTE_ADDR'));
+               $this->sql_query('DELETE FROM','WHERE ip="'.$ip.'"'.
+                       ' OR ( mid='.(int)$member->getID().' AND mid>0 )'.
+                       ' OR time<='.mysqldate(($this->time)-$this->getOption('howlong')*60));
+               $this->sql_query('INSERT INTO','SET'.
+                       ' ip="'.$ip.'"'.
+                       ',mid='.(int)$member->getID().
+                       ',itemid='.(int)$itemid.
+                       ',catid='.(int)$catid.
+                       ',time='.mysqldate($this->time));
+       }
+       function sql_query($mode='name',$p1=''){
+               $tablename[0]=sql_table(strtolower('plugin_'.substr(get_class($this),3)));
+               switch($mode){
+               case 'create': return sql_query('CREATE TABLE IF NOT EXISTS '.$tablename[0].' '.$p1);
+               case 'drop':   return sql_query('DROP TABLE IF EXISTS '.$tablename[0]);
+               case 'list':   return $tablename;
+               case 'name':   return $tablename[0];
+               default:       return sql_query($mode.' '.$tablename[0].' '.$p1);
+               }
+       }
+       function quickQuery($mode,$p1){
+               $row=mysql_fetch_assoc($res=$this->sql_query($mode,$p1));
+               mysql_free_result($res);
+               return $row['result'];
+       }
+       //function getOption($name){ return $this->_getOption('global', 0, $name); }//required for Nucleus 3.24
+}
+?>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/plugins/NP_subSilver.php b/trunk/NP_SubSilver/plugins/NP_subSilver.php
new file mode 100644 (file)
index 0000000..58556e9
--- /dev/null
@@ -0,0 +1,416 @@
+<?php 
+class NP_subSilver extends NucleusPlugin { 
+       function getName() { return 'NP_subSilver'; }
+       function getMinNucleusVersion() { return 330; }
+       function getAuthor()  { return 'Katsumi'; }
+       function getVersion() { return '0.2.9.7'; }
+       function getURL() {return 'http://japan.nucleuscms.org/bb/viewtopic.php?t=3257';}
+       function getDescription() { return $this->getName().' plugin'; } 
+       function supportsFeature($what) { return (int)($what=='SqlTablePrefix'); }
+       function getEventList() {
+               return array('QuickMenu','InitSkinParse','PostAuthentication',
+                       'SpamCheck','PostAddComment','ValidateForm',
+                       'PreDeleteComment','PostDeleteComment','PreUpdateComment','PrepareCommentForEdit',
+                       'PostAddItem','PostAddCategory');
+       }
+       function getTableList() { return $this->sql_query('list'); }
+       function install() { return call_user_func(array($this->loadClass('install'),'install')); }
+       function unInstall() { return call_user_func(array($this->loadClass('install'),'unInstall')); }
+       //function init() {}
+       function sql_query($mode='name',$p1=''){
+               $tablename[0]=sql_table(strtolower('plugin_'.substr(get_class($this),3)));
+               switch($mode){
+               case 'create': return sql_query('CREATE TABLE IF NOT EXISTS '.$tablename[0].' '.$p1);
+               case 'drop':   return sql_query('DROP TABLE IF EXISTS '.$tablename[0]);
+               case 'list':   return $tablename;
+               case 'name':   return $tablename[0];
+               default:       return sql_query($mode.' '.$tablename[0].' '.$p1);
+               }
+       }
+       function quickQuery($mode,$p1){
+               $row=mysql_fetch_assoc($res=$this->sql_query($mode,$p1));
+               mysql_free_result($res);
+               if (!$row) return false;
+               return $row['result'];
+       }
+       var $commentquery='cid';// for example, 'cid' of 'http://www..com/?itemid=1&cid=5#cid5'
+       var $searchincform='<div class="commentform">';
+       var $home=false;
+       var $skin;
+       var $skintype;
+       var $showstickies=false;// see NP_subSilver_SKIN::showStickies and NP_subSilver_TEMPLATE::_if()
+       var $query_null=false;// See NP_subSilver_BLOG::getSqlSearch()
+       var $limit=10;// See NP_subSilver_BLOG_MEMBER::getSqlBlog()
+       var $langobj;// See NP_subSilver_text::doSkinVar()
+       function event_QuickMenu(&$data) {
+               global $member;
+               if (!($member->isLoggedIn() && $member->isAdmin())) return;
+               array_push($data['options'], array('title' => $this->getName(),
+                                               'url' => '?action=pluginoptions&plugid='.(int)$this->getId(),
+                                               'tooltip' => $this->getName() ) );
+?><style type="text/css">
+/*<![CDATA[*/
+.jsbuttonbar {
+       display:none;
+}
+/*]]>*/
+</style><script type="text/javascript">
+/*<![CDATA[*/
+try {
+  // Check the more first, then body, in order to avoid hidding comment form.
+  document.getElementById('inputmore').style.display='none';
+  document.getElementById('inputbody').style.display='none';
+} catch(e) {}
+/*]]>*/
+</script><?php
+       }
+/* Following event is used to check the values of blog/category settings */
+       var $noblogid=false;
+       function event_PostAuthentication(){
+               // Set blogid for the search page.
+               global $blogid,$query,$DIR_NUCLEUS;
+               if (strpos(realpath('./'),realpath($DIR_NUCLEUS))!==0 && ($query || getVar('search_author')) && !$blogid) {
+                       $blogid=(int)quickQuery('SELECT bnumber as result FROM '.sql_table('blog').' LIMIT 1');
+                       $this->noblogid=true;
+               }
+               // Restrict member's admin area.
+               global $member,$DIR_PLUGINS,$HTTP_POST_VARS,$action;
+               if ($member->isAdmin()) return;
+               if (strpos(realpath('./'),realpath($DIR_PLUGINS))===0) return;
+               if (strpos(realpath('./'),realpath($DIR_NUCLEUS))!==0) return;
+               $invalid=array('createitem');
+               if ( !(postVar('ticket') || getVar('ticket')) && (!in_array($action,$invalid)) ) return;
+               $obj=&$this->loadClass('member');
+               return $obj->event_PostAuthentication();
+       }
+/* General stuffs when the skin parse */
+       function event_InitSkinParse(&$data){
+               // Reset global $blogid if it's set in event_PostAuthentication.
+               // This is for avoiding error on search page when blogid isn't set.
+               // Also see the NP_subSilver_BLOG::getSqlSearch() function.
+               global $blogid;
+               if ($this->noblogid) $blogid='';
+               // Check if homepage.
+               global $HTTP_SERVER_VARS,$CONF;
+               if (!isset($_SERVER)) $_SERVER=&$HTTP_SERVER_VARS;
+               if (!isset($_SERVER['REQUEST_URI'])) {
+                       $_SERVER['REQUEST_URI']=str_replace(array('%2F','%2f'),'/',urlencode($_SERVER['PHP_SELF'])).'?'.$_SERVER['QUERY_STRING'];
+               }
+               $iuri=preg_replace('!^([^:]+)://([^/]+)/!','/',$CONF['IndexURL']);
+               if ($_SERVER['REQUEST_URI']==$iuri || $_SERVER['REQUEST_URI']==$iuri.'index.php') {
+                       $this->home=true;
+               } elseif( !( getVar('blogid') || postVar('blogid') ||
+                               getVar('catid') || postVar('catid') ||
+                               getVar('itemid') || postVar('itemid') ) ) {
+                       $this->home=true;
+               }
+               // Redirect just after logout.
+               if (getVar('action')=='logout') {
+                       redirect(preg_replace('/^([^\?]+)\?([\s\S]*)$/','$1',$_SERVER['REQUEST_URI']));
+                       exit;
+               }
+               // Set skin object
+               $this->skin=&$data['skin'];
+               $this->skintype=$data['type'];
+               // Set category if item page.
+               global $catid,$itemid;
+               if ($itemid && !$catid) $catid=quickQuery('SELECT icat as result FROM '.sql_table('item').' WHERE inumber='.(int)$itemid);
+               // Count up the readnum column of table
+               //$_SERVER['REMOTE_ADDR']=rand(0,255).'.'.rand(0,255).'.'.rand(0,255).'.'.rand(0,255);
+               if ($itemid) {
+                       if ($readip=$this->quickQuery('SELECT readip as result FROM','WHERE itemid='.(int)$itemid.
+                               ' AND readip NOT LIKE "%,'.addslashes(serverVar('REMOTE_ADDR')).',%"')){
+                                       $this->sql_query('UPDATE','SET'.
+                                               ' readnum=readnum+1'.
+                                               //',readip=CONCAT(SUBSTRING(readip,LOCATE(",",readip,2)),"'.addslashes(serverVar('REMOTE_ADDR')).',")'.
+                                               ',readip="'.addslashes(substr($readip,strpos($readip,',',1)).serverVar('REMOTE_ADDR')).',"'.
+                                               ' WHERE itemid='.(int)$itemid);
+                       }
+               }
+               // Set the item read.
+               global $member;
+               if ($member->isLoggedIn()) {
+                       $mstr=addslashes(','.$member->getId().',');
+                       if ($itemid) {
+                               $this->sql_query('UPDATE','SET '.
+                                       'unread=CONCAT(LEFT(unread,INSTR(unread,"'.$mstr.'")),SUBSTRING(unread,INSTR(unread,"'.$mstr.'")+'.strlen($mstr).'))'.
+                                       ' WHERE itemid='.(int)$itemid);
+                       } elseif (getVar('subSilver_action')=='mark') {
+                               if ($cid=intGetVar('catid')) {
+                                       $this->sql_query('UPDATE','as s, '.sql_table('item').' as i SET '.
+                                               's.unread=CONCAT(LEFT(s.unread,INSTR(s.unread,"'.$mstr.'")),SUBSTRING(s.unread,INSTR(s.unread,"'.$mstr.'")+'.strlen($mstr).'))'.
+                                               ' WHERE s.itemid=i.inumber'.
+                                               ' AND i.icat='.(int)$cid);
+                               } elseif ($bid=intGetVar('blogid')) {
+                                       $this->sql_query('UPDATE','as s, '.sql_table('item').' as i, '.sql_table('category').' as c'.' SET '.
+                                               's.unread=CONCAT(LEFT(s.unread,INSTR(s.unread,"'.$mstr.'")),SUBSTRING(s.unread,INSTR(s.unread,"'.$mstr.'")+'.strlen($mstr).'))'.
+                                               ' WHERE s.itemid=i.inumber'.
+                                               ' AND i.icat=c.catid'.
+                                               ' AND c.cblog='.(int)$bid);
+                               } else {
+                                       $this->sql_query('UPDATE','SET '.
+                                               'unread=CONCAT(LEFT(unread,INSTR(unread,"'.$mstr.'")),SUBSTRING(unread,INSTR(unread,"'.$mstr.'")+'.strlen($mstr).'))'.
+                                               ' WHERE 1');
+                               }
+                       
+                       }
+               }
+               // Error message (must use htmlspecialchars)
+               global $errormessage;
+               if ($msg=getVar('errormessage')) $errormessage=str_replace('&amp;amp;','&amp;',htmlspecialchars($msg,ENT_QUOTES));
+               // Replace blog object for searching/memberlist feature.
+               global $blog,$query;
+               if ($blog && $data['type']=='search') { //if ($blog && ( $query||getVar('search_author') )) {
+                       $obj=&$this->loadClass('search');
+                       $bid=$blog->getId();
+                       $blog=new NP_subSilver_BLOG($bid,$this);
+                       if (!$query) {
+                               // Create put temporary string into $query.
+                               // This will be removed in NP_subSilver_BLOG::getSqlSearch()
+                               $query = 'author: '.getVar('search_author');
+                               $this->query_null=true;
+                       }
+               } elseif ($blog && $data['type']=='member'){
+                       $obj=&$this->loadClass('member');
+                       $bid=$blog->getId();
+                       $blog=new NP_subSilver_BLOG_MEMBER($bid,$this);
+               }
+               // Use language class
+               $this->loadClass('skin');
+               $this->langobj=new NP_subSilver_text;
+       }
+/* Following three events are used for posting */
+       function event_SpamCheck(){
+               if (postVar('subSilver_action')=='posting') {
+                       $obj=&$this->loadClass('posting');
+                       return $obj->posting('SpamCheck',$data);
+               }
+       }
+       function event_ValidateForm(&$data){
+               if (postVar('subSilver_action')=='posting') {
+                       $obj=&$this->loadClass('posting');
+                       return $obj->posting('ValidateForm',$data);
+               }
+       }
+       function event_PostAddComment(&$data){
+               $this->_event_everycomment();
+               if (postVar('subSilver_action')=='posting') {
+                       $obj=&$this->loadClass('posting');
+                       return $obj->posting('PostAddComment',$data);
+               } else {
+                       $obj=&$this->loadClass('comments');
+                       return $obj->event_PostAddComment(&$data);
+               }
+       }
+       // PostAddItem event occurs when a new blog is created.
+       function event_PostAddItem(&$data){
+               $obj=&$this->loadClass('posting');
+               return $obj->event_PostAddItem($data);
+       }
+       function event_PostAddCategory(&$data){
+               $obj=&$this->loadClass('posting');
+               return $obj->event_PostAddCategory($data);
+       }
+/* Following events are used when the comment is modified */
+       function event_PreDeleteComment(&$data){
+               $obj=&$this->loadClass('comments');
+               return $obj->event_PreDeleteComment(&$data);
+       }
+       function event_PostDeleteComment(&$data){
+               $obj=&$this->loadClass('comments');
+               return $obj->event_PostDeleteComment(&$data);
+       }
+       function event_PrepareCommentForEdit(&$data){
+               $obj=&$this->loadClass('comments');
+               return $obj->event_PrepareCommentForEdit(&$data);
+       }
+       function event_PreUpdateComment(&$data){
+               $obj=&$this->loadClass('comments');
+               return $obj->event_PreUpdateComment(&$data);
+       }
+/* General class object manager */
+       var $classobjects=array();
+       function &loadClass($name){
+               if (isset($this->classobjects[$name])) return $this->classobjects[$name];
+               if (file_exists($phpfile=dirname(__FILE__).'/subsilver/'.$name.'.php')) require_once($phpfile);
+               switch($name){
+               case 'install':  $this->classobjects[$name]=new NP_subSilver_install($this);  break;
+               case 'posting':  $this->classobjects[$name]=new NP_subSilver_posting($this);  break;
+               case 'skin':     $this->classobjects[$name]=new NP_subSilver_SKIN($this);     break;
+               case 'member':   $this->classobjects[$name]=new NP_subSilver_member($this);   break;
+               case 'template': $this->classobjects[$name]=new NP_subSilver_TEMPLATE($this); break;
+               case 'comments': $this->classobjects[$name]=new NP_subSilver_COMMENTS($this); break;
+               case 'action':   $this->classobjects[$name]=new NP_subSilver_action($this);   break;
+               case 'search':   $this->classobjects[$name]=new NP_subSilver_search($this);   break;
+               default:         exit('loadClass: error');
+               }
+               return $this->classobjects[$name];
+       }
+/* common functions follow */
+       var $stickydata;
+       function &infoSticky(){
+               // List up all "information" and "sticky" items.
+               if (!isset($this->stickydata)) {
+                       $this->stickydata=array();
+                       $res=sql_query('SELECT o.ovalue as value, o.ocontextid as itemid FROM '.
+                               sql_table('plugin_option_desc').' as d, '.
+                               sql_table('plugin_option').' as o '.
+                               ' WHERE d.oname="iteminfo"'.
+                               ' AND d.oid=o.oid'.
+                               ' AND d.opid='.(int)$this->getId().
+                               ' AND NOT (o.ovalue=d.odef)');
+                       while($row=mysql_fetch_assoc($res)) $this->stickydata[$row['itemid']]=$row['value'];
+                       mysql_free_result($res);
+               }
+               return $this->stickydata;
+       }
+       var $popularitemdata;
+       function popularItems($itemid=0){
+               $popularnum=$this->getOption('popularnum');
+               $populardef=$this->getOption('populardef');
+               $populardef=TEMPLATE::fill($populardef,array(
+                       'days'=>'((1+UNIX_TIMESTAMP(s.time)-UNIX_TIMESTAMP(s.since))/86400)',
+                       'viewed'=>'s.readnum',
+                       'replies'=>'s.replynum'
+                       ));
+               if (!isset($this->popularitemdata)) {
+                       $this->popularitemdata=array();
+                       $res=$this->sql_query('SELECT itemid FROM','as s '.
+                               ' ORDER BY ('.$populardef.')'.
+                               ' DESC LIMIT '.(int)$popularnum);
+                       while($row=mysql_fetch_row($res)) $this->popularitemdata[]=$row[0];
+                       mysql_free_result($res);
+               }
+               if ($itemid) return in_array($itemid,$this->popularitemdata);
+               return $this->popularitemdata;
+       }
+       function _event_everycomment(){
+               // This function is called every "add comment" event.
+               global $itemid,$manager;
+               $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
+               $timestamp=$blog->getCorrectTime();
+               // Update the timestamp of item
+               sql_query('UPDATE '.sql_table('item').
+                       ' SET itime='.mysqldate($timestamp).
+                       ' WHERE inumber='.(int)$itemid);
+               // Remove old "unread" data
+               $this->sql_query('UPDATE','SET unread=","'.
+                       ' WHERE time<'.mysqldate($timestamp-$this->getOption('unreaddays')*86400).
+                       ' AND NOT (unread=",")' );
+       }
+/* doXxx(Vars) follow */
+       function doAction(){
+               $args=func_get_args();
+               $class=&$this->loadClass('action');
+               return call_user_func_array(array(&$class,'doAction'),$args);
+       }
+       function doSkinVar() {
+               $args=func_get_args();
+               if ($args[0]=='member'){
+                       if ($args[1]=='member') {
+                               $class=&$this->loadClass('member');
+                               return call_user_func_array(array(&$class,'doSkinVar'),$args);
+                       }
+               }
+               $class=&$this->loadClass('skin');
+               return call_user_func_array(array(&$class,'doSkinVar'),$args);
+       }
+       function doTemplateVar() {
+               $args=func_get_args();
+               $class=&$this->loadClass('template');
+               return call_user_func_array(array(&$class,'doTemplateVar'),$args);
+       }
+       function doTemplateCommentsVar(&$item,&$comment,$type) {
+               $args=func_get_args();
+               switch(strtolower($type)){
+               case 'member':
+                       $class=&$this->loadClass('member');
+                       return call_user_func_array(array(&$class,'doTemplateCommentsVar'),$args);
+               default:
+                       $class=&$this->loadClass('comments');
+                       return call_user_func_array(array(&$class,'doTemplateCommentsVar'),$args);
+               }
+       }
+       var $isblogadmin=array();
+       var $every=array();
+       function doIf($mode,$p1=''){
+               global $blog,$member,$memberid,$memberinfo;
+               if (!preg_match('/^([^=]+)=([^=]*)$/',$p1,$matches)) exit('doIf: error 1');
+               $name=$matches[1];
+               $value=$matches[2];
+               switch(strtolower($mode)){
+               case 'every':
+                       if (isset($this->every[$name])) $this->every[$name]++;
+                       else $this->every[$name]=1;
+                       if ($this->every[$name]<(int)$value) return false;
+                       $this->every[$name]=0;
+                       return true;
+               case 'globalvar':
+                       return $GLOBALS[$name]==$value;
+               case 'intglobalvar':
+                       return (int)$GLOBALS[$name]==(int)$value;
+               case 'thisvar':
+                       return $this->$name==$value;
+               case 'intthisvar':
+                       return (int)$this->$name==(int)$value;
+               case 'getvar':
+                       return getVar($name)==$value;
+               case 'intgetvar':
+                       return (int)getVar($name)==(int)$value;
+               case 'postvar':
+                       return postVar($name)==$value;
+               case 'intpostvar':
+                       return (int)postVar($name)==(int)$value;
+               case 'requestvar':
+                       if ($value) return postVar($name)==$value || getVar($name)==$value;
+                       else return postVar($name)=='' && getVar($name)=='';
+               case 'intrequestvar':
+                       if ($value) return (int)postVar($name)==(int)$value || (int)getVar($name)==(int)$value;
+                       else return (int)postVar($name)==0 && (int)getVar($name)==0;
+               case 'member':
+                       switch($name){
+                       case 'position':
+                               switch(strtolower($value)){
+                               case 'superadmin':
+                                       return $memberinfo->isAdmin();
+                               case 'blogadmin':
+                                       if (isset($this->isblogadmin[$memberid])) return $this->isblogadmin[$memberid];
+                                       return $this->isblogadmin[$memberid]=quickQuery('SELECT COUNT(*) as result FROM '.sql_table('team').
+                                               ' WHERE tmember='.(int)$memberid.' AND tadmin=1 LIMIT 1');
+                               case 'ownerofpage':
+                                       if (!$member->isLoggedIn()) return false;
+                                       if ($member->isAdmin()) return true;
+                                       return $member->getId()==$memberid;
+                               default: exit('doIf: error 4');
+                               }
+                       case 'has':
+                               switch(strtolower($value)){
+                               case 'url':
+                                       $obj=&$this->loadClass('member');
+                                       $data=$obj->getData($memberid);
+                                       return (bool)$data['url'];
+                               default: exit('doIf: error 4');
+                               }
+                       case 'can':
+                               switch(strtolower($value)){
+                               case 'postnew':
+                                       if ($this->getBlogOption($blog->getID(),'blogpostingbyguest')!='yes' && !$member->isLoggedIn()) return false;
+                               case 'reply':
+                                       if (!$blog->getSetting('bcomments')) return false;
+                                       if ($member->isAdmin() || $member->isBlogAdmin($blog->getID())) return true;
+                                       if ($this->getBlogOption($blog->getID(),'bloghidden')=='yes') return false;
+                                       if ($member->isLoggedIn() || $blog->getSetting('bpublic')) return true;
+                                       return false;
+                               case 'editcomment':
+                                       if (!$member->isLoggedIn()) return false;
+                                       if (!$member->canLogin()) return false;
+                                       return true;
+                               default: exit('doIf: error 4');
+                               }
+                       default: exit('doIf: error 3');
+                       }
+               default: exit('doIf: error 2');
+               }
+       }
+}
+?>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/plugins/subsilver/.htaccess b/trunk/NP_SubSilver/plugins/subsilver/.htaccess
new file mode 100644 (file)
index 0000000..c4b37f0
--- /dev/null
@@ -0,0 +1,3 @@
+Order allow,deny
+Deny from all
+#EOF
diff --git a/trunk/NP_SubSilver/plugins/subsilver/action.php b/trunk/NP_SubSilver/plugins/subsilver/action.php
new file mode 100644 (file)
index 0000000..cf22002
--- /dev/null
@@ -0,0 +1,12 @@
+<?php 
+class NP_subSilver_action { 
+       var $plug;
+       function NP_subSilver_action(&$plug){
+               $this->plug=&$plug;
+               foreach($plug as $key=>$value) $this->$key=&$plug->$key;
+       }
+       function doAction($type,$p1='') {
+               echo htmlspecialchars($type);
+       }
+}
+?>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/plugins/subsilver/comments.php b/trunk/NP_SubSilver/plugins/subsilver/comments.php
new file mode 100644 (file)
index 0000000..d73cee9
--- /dev/null
@@ -0,0 +1,83 @@
+<?php 
+include_once(dirname(__FILE__).'/if.php');
+class NP_subSilver_COMMENTS extends NP_subSilver_if { 
+       var $plug;
+       function NP_subSilver_COMMENTS(&$plug){
+               $this->plug=&$plug;
+               foreach($plug as $key=>$value) $this->$key=&$plug->$key;
+       }
+/* Reply to the topic (see posting.php for creating new topic) */
+       function event_PostAddComment(&$data){
+               global $manager;
+               $itemid=quickQuery('SELECT citem as result FROM '.sql_table('comment').' WHERE cnumber='.(int)$data['commentid']);
+               $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
+               $timestamp=$blog->getCorrectTime();
+               // List up all members.
+               $members=',';
+               $res=sql_query('SELECT mnumber FROM '.sql_table('member'));
+               while($row=mysql_fetch_row($res)) $members.=$row[0].',';
+               mysql_free_result($res);
+               // Update data in SQL table
+               $itemid=quickQuery('SELECT citem as result FROM '.sql_table('comment').' WHERE cnumber='.(int)$data['commentid']);
+               $replies=-1+(int)quickQuery('SELECT COUNT(*) as result FROM '.sql_table('comment').' WHERE citem='.(int)$itemid);
+               $this->plug->sql_query('UPDATE','SET lastcommentid='.(int)$data['commentid'].','.
+                       ' time='.mysqldate($timestamp).','.
+                       ' unread="'.addslashes($members).'",'.
+                       ' readip=",,,,,,",'.
+                       ' replynum='.(int)$replies.
+                       ' WHERE itemid='.(int)$itemid);
+               // redirect to the new reply
+               $url=createItemLink($itemid, array('cid'=>(int)$data['commentid'])).'#cid'.(int)$data['commentid'];
+               redirect(str_replace('&amp;','&',$url));
+               exit;
+       }
+/* Following events are used when the comment is modified */
+       var $deleteitemid=false;
+       function event_PreDeleteComment(&$data){// If there is just one comment for item, register the itemid
+               $itemid=quickQuery('SELECT citem as result FROM '.sql_table('comment').' WHERE cnumber='.(int)$data['commentid']);
+               if (1==quickQuery('SELECT COUNT(*) as result FROM '.sql_table('comment').' WHERE citem='.(int)$itemid)) $this->deleteitemid=$itemid;
+       }
+       function event_PostDeleteComment(&$data){// If there were just one comment for item. Let's delete the item.
+               if (!$this->deleteitemid) return;
+               sql_query('DELETE FROM '.sql_table('item').' WHERE inumber='.(int)$this->deleteitemid);
+               $this->plug->sql_query('DELETE FROM','WHERE itemid='.(int)$this->deleteitemid);
+       }
+       function event_PrepareCommentForEdit(&$data){// Add <title>xxxx</title> if first comment in item.
+               if ($itemid=$this->plug->quickQuery('SELECT itemid as result FROM','WHERE firstcommentid='.(int)$data['comment']['commentid'])) {
+                       $title=quickQuery('SELECT ititle as result FROM '.sql_table('item').' WHERE inumber='.(int)$itemid);
+                       $data['comment']['body']='&lt;title&gt;'.htmlspecialchars($title)."&lt;/title&gt;\n".$data['comment']['body'];
+               }
+       }
+       function event_PreUpdateComment(&$data){// Pickup <title>xxxx</title> and change the title of item.
+               $itemid=$this->plug->quickQuery('SELECT itemid as result FROM','WHERE firstcommentid='.intRequestVar('commentid'));
+               if ($itemid && preg_match('!&lt;title&gt;([^\r\n]*)&lt;/title&gt;<br />!',$data['body'],$matches)) {
+                       $data['body']=trim(str_replace($matches[0],'',$data['body']));
+                       sql_query('UPDATE '.sql_table('item').' SET ititle="'.addslashes($matches[1]).'" WHERE inumber='.(int)$itemid);
+               }// Note that the $data['body'] has been sanitized before comming to this event.
+       }
+       function doTemplateCommentsVar(&$item, &$comment,$type) {
+               $type=strtolower($type);
+               if ($this->ob_ok && !in_array($type,array('if','ifnot','endif','else','elseif','elseifnot'))) return; // Just return if ob_ok.
+               global $catid;
+               $args=func_get_args();
+               array_shift($args);
+               array_shift($args);
+               array_shift($args);
+               switch($type){
+               case 'adminurl':
+                       global $CONF;
+                       echo htmlspecialchars($CONF['AdminURL'],ENT_QUOTES);
+                       return;
+               case 'if':
+               case 'ifnot':
+               case 'else':
+               case 'elseif':
+               case 'elseifnot':
+               case 'endif':
+                       return $this->_if_comment($type,$item,$comment,$args);
+               default:
+                       break;
+               }
+       }
+}
+?>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/plugins/subsilver/if.php b/trunk/NP_SubSilver/plugins/subsilver/if.php
new file mode 100644 (file)
index 0000000..0b32f05
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+class NP_subSilver_if { 
+       var $cecomm=array();
+       var $comment;
+       function _canEditComment(){
+               global $member;
+               $cid=$this->comment['commentid'];
+               if (!$member->isLoggedIn()) return false;
+               elseif (!$member->canLogin()) return false;
+               elseif ($member->isAdmin()) return true;
+               if (!isset($this->cecomm[$cid])) {
+                       $this->cecomm[$cid]=$member->canAlterComment($cid);
+               }
+               return $this->cecomm[$cid];
+       }
+       function _if_comment($mode,&$item,&$comment,&$args){
+               $this->comment=&$comment;
+               return $this->_if($mode,$item,$args);
+       }
+       var $ob_ok=false;
+       var $parse_done=true;
+       var $if_stack=array();
+       function _if($mode,&$item,&$args){
+               if ($mode=='if' || $mode=='ifnot') {
+                       array_push($this->if_stack,array($this->ob_ok,$this->parse_done));
+                       $this->ob_ok=false;
+                       $this->parse_done=true;
+               }
+               switch($mode){
+               case 'endif':
+                       if ($this->ob_ok) ob_end_clean();
+                       list($this->ob_ok,$this->parse_done)=array_pop($this->if_stack);
+                       return;
+               case 'else':
+                       if ($this->ob_ok) {
+                               ob_end_clean();
+                               $this->ob_ok=false;
+                       } else $this->ob_ok=ob_start();
+                       return;
+               case 'elseif':
+               case 'elseifnot':
+                       if ($this->ob_ok) {
+                               ob_end_clean();
+                               $this->ob_ok=false;
+                       } else if ($this->parse_done) return;
+               default:
+                       break;
+               }
+               // Several conditions follow
+               $type=array_shift($args);
+               $cond=$this->_ifCond($type,$item);
+               while(count($args)){
+                       $andor=strtolower(array_shift($args));
+                       $type=array_shift($args);
+                       switch($andor){
+                       case 'and':
+                               $cond=$cond && $this->_ifCond($type,$item);
+                               break;
+                       case 'or':
+                               $cond=$cond || $this->_ifCond($type,$item);
+                               break;
+                       case 'andnot':
+                               $cond=$cond && !$this->_ifCond($type,$item);
+                               break;
+                       case 'ornot':
+                               $cond=$cond || !$this->_ifCond($type,$item);
+                               break;
+                       default:
+                               exit ('NP_subSilver syntax error: '.htmlspecialchars($andor,ENT_QUOTES));
+                       }
+               }
+               // Make decision.
+               switch($mode){
+               case 'if':
+               case 'elseif':
+                       if (!$cond) $this->ob_ok=ob_start();
+                       break;
+               case 'ifnot':
+               case 'elseifnot':
+                       if ($cond) $this->ob_ok=ob_start();
+               default:
+                       break;
+               }
+               $this->parse_done=!$this->ob_ok;
+       }
+       function _ifCond($type,&$item) {
+               switch(strtolower($type)){
+               case 'sticky':
+                       $infosticky=$this->plug->infoSticky();
+                       return (bool)@$infosticky[$item->itemid];
+               case 'showstickies':
+                       return (bool)$this->plug->showstickies;
+               case 'new':
+                       global $member;
+                       if (!$member->isLoggedIn()) return false;
+                       $data=$this->_getData($item->itemid);
+                       return (bool)strstr($data['unread'],','.$member->getId().',');
+               case 'search':
+                       global $query;
+                       return $query || requestVar('subsilver_search')=='yes';
+               case 'caneditcomment':
+                       return $this->_canEditComment();
+               case 'category':
+                       global $catid;
+                       return (bool)$catid;
+               case 'search':
+                       global $query;
+                       return (bool)$query;
+               case 'authorismember':
+                       if (isset($this->comment)) return (bool)$this->comment['userid'];
+                       else return (bool)$this->plug->quickQuery('SELECT authorid as result FROM','WHERE itemid='.(int)$item->itemid);
+               case 'hasurl':
+                       if (!isset($this->comment)) exit ('if: Error');
+                       if ($authorid=$this->comment['memberid']) {
+                               $memberclass=&$this->plug->loadClass('member');
+                               $memberdata=&$memberclass->getData($authorid);
+                               return (bool)$memberdata['rawurl'];
+                       } else {
+                               return preg_match('!^(http|https)://[^/]+!',$this->comment['userid']);
+                       }
+               default:
+                       exit ('NP_subSilver syntax error: '.htmlspecialchars($type,ENT_QUOTES));
+               }
+       }
+}
+?>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/plugins/subsilver/index.php b/trunk/NP_SubSilver/plugins/subsilver/index.php
new file mode 100644 (file)
index 0000000..42682b4
--- /dev/null
@@ -0,0 +1 @@
+<html><body></body></html>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/plugins/subsilver/install.php b/trunk/NP_SubSilver/plugins/subsilver/install.php
new file mode 100644 (file)
index 0000000..ea7835e
--- /dev/null
@@ -0,0 +1,99 @@
+<?php 
+class NP_subSilver_install { 
+       var $plug;
+       function NP_subSilver_install(&$plug){
+               $this->plug=&$plug;
+               foreach($plug as $key=>$value) $this->$key=&$plug->$key;
+       }
+       function install() {
+               $this->plug->createOption('droptable','Drop SQL table when uninstall?','yesno','no');
+               $this->plug->createOption('popularnum','Number of popular topics?','text','5','datatype=numerical');
+               $this->plug->createOption('populardef',
+                       'The definition of populer topic: (Use <%replies%>, <%viewed%>, and <%days%> here)',
+                       'textarea','(<%viewed%>/<%days%>)*(<%days%> > 6)');
+               $this->plug->createOption('unreaddays','The "unread" data are kept for days:','text','7','datatype=numerical');
+               $this->plug->createItemOption('iteminfo','This item is:','select','normal','Normal|normal|Information|info|Sticky|sticky');
+               $this->plug->createBlogOption('blogpostingbyguest','Allow guest to post new reply?','yesno','yes');
+               $this->plug->createBlogOption('blogpublic','Allow guest to see this?','yesno','yes');
+               $this->plug->createBlogOption('bloghidden','Hidden category (only siteadmin and moderators can see this)?','yesno','no');
+               // SQL table stuffs follow
+               $this->plug->sql_query('create','(
+                       itemid int(11) not null default 0,
+                       authorid int(11) not null default 0,
+                       firstcommentid int(11) not null default 0,
+                       lastcommentid int(11) not null default 0,
+                       replynum int(11) not null default 0,
+                       unread text not null default "",
+                       readip varchar(85) not null default ",,,,,,",
+                       readnum int(11) not null default 0,
+                       time datetime not null default  "0000-00-00 00:00:00",
+                       since datetime not null default  "0000-00-00 00:00:00",
+                       PRIMARY KEY itemid (itemid),
+                       KEY authorid (authorid),
+                       FULLTEXT KEY unread(unread)
+                       )');
+               // List up all items without comment
+               $items=array();
+               $res=sql_query('SELECT citem FROM '.sql_table('comment'));
+               while($row=mysql_fetch_row($res)) $items[$row[0]]=true;
+               mysql_free_result($res);
+               $res=sql_query('SELECT DISTINCT i.inumber as itemid, i.iauthor as authorid, i.ibody as body, i.itime as time, i.iblog as blogid'.
+                       ' FROM '.sql_table('item').' as i');
+               while($row=mysql_fetch_assoc($res)){
+                       if (isset($items[$row['itemid']])) continue;
+                        sql_query('INSERT INTO '.sql_table('comment').
+                               ' SET cbody="'.htmlspecialchars(strip_tags($row['body']),ENT_QUOTES).'"'.
+                               ', cmember='.(int)$row['authorid'].
+                               ', citem='.(int)$row['itemid'].
+                               ', ctime="'.addslashes($row['time']).'"'.
+                               ', cip="'.addslashes(serverVar('REMOTE_ADDR')).'"'.
+                               ', cblog='.(int)$row['blogid']);
+               }
+               mysql_free_result($res);
+               // List up all members.
+               $members=',';
+               $res=sql_query('SELECT mnumber FROM '.sql_table('member'));
+               while($row=mysql_fetch_row($res)) $members.=$row[0].',';
+               mysql_free_result($res);
+               // List up the data in the table
+               $data=array();
+               $res=$this->plug->sql_query('SELECT itemid FROM');
+               while ($row=mysql_fetch_row($res)) $data[]=$row[0];
+               mysql_free_result($res);
+               // List up all the unregistered data in table
+               $items=array();
+               $res=sql_query('SELECT inumber FROM '.sql_table('item'));
+               while ($row=mysql_fetch_row($res)) {
+                       if (!in_array($row[0],$data)) $items[]=$row[0];
+               }
+               mysql_free_result($res);
+               // Create the data if not exists.
+               foreach($items as $itemid){
+                       $query='SELECT cnumber, cmember, ctime FROM '.sql_table('comment').
+                               ' WHERE citem='.(int)$itemid.
+                               ' ORDER BY ctime ASC LIMIT 1';
+                       $first=mysql_fetch_assoc($res=sql_query($query));
+                       mysql_free_result($res);
+                       $query='SELECT cnumber, cmember, ctime FROM '.sql_table('comment').
+                               ' WHERE citem='.(int)$itemid.
+                               ' ORDER BY ctime DESC LIMIT 1';
+                       $last=mysql_fetch_assoc($res=sql_query($query));
+                       mysql_free_result($res);
+                       $unread=(mysqldate(time()-8*86400)<$last['ctime'])?$members:'';// "unread" data is created items in these 7 days.
+                       $replies=-1+(int)quickQuery('SELECT COUNT(*) as result FROM '.sql_table('comment').' WHERE citem='.(int)$itemid);
+                       $this->plug->sql_query('INSERT INTO','SET'.
+                               ' itemid='.(int)$itemid.
+                               ',authorid='.(int)$first['cmember'].
+                               ',firstcommentid='.(int)$first['cnumber'].
+                               ',lastcommentid='.(int)$last['cnumber'].
+                               ',replynum='.(int)$replies.
+                               ',unread="'.addslashes($unread).'"'.
+                               ',time="'.addslashes($last['ctime']).'"'.
+                               ',since="'.addslashes($first['ctime']).'"');
+               }
+       }
+       function unInstall() {
+               if ($this->plug->getOption('droptable')=='yes') $this->plug->sql_query('drop');
+       }
+}
+?>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/plugins/subsilver/member.php b/trunk/NP_SubSilver/plugins/subsilver/member.php
new file mode 100644 (file)
index 0000000..3148afb
--- /dev/null
@@ -0,0 +1,233 @@
+<?php 
+class NP_subSilver_member { 
+       var $plug;
+       function NP_subSilver_member(&$plug){
+               $this->plug=&$plug;
+               foreach($plug as $key=>$value) $this->$key=&$plug->$key;
+               global $memberid;
+               $this->mid=(int)$memberid;
+               $this->_getData();
+       }
+       var $mid;
+       var $memberdata=array();
+       var $totalreplies=false;
+       function &getData($mid){
+               if (!$mid) exit ('Error: NP_subSilver_member::getData()');
+               $tempmid=$this->mid;
+               $this->mid=$mid;
+               if (!isset($this->memberdata[$mid])) $this->_getData();
+               $this->mid=$tempmid;
+               return $this->memberdata[$mid];
+       }
+       function _getData(){
+               if (!$this->totalreplies) $this->totalreplies=(int)quickQuery('SELECT COUNT(*) as result FROM '.sql_table('comment'));
+               if (!$this->totalreplies) $this->totalreplies=1;
+               $this->memberdata[$this->mid]=array();
+               $this->memberdata[$this->mid]['replies']=(int)quickQuery('SELECT COUNT(*) as result FROM '.sql_table('comment').' WHERE cmember='.(int)$this->mid);
+               $this->memberdata[$this->mid]['percent']=0.01*(int)((float)10000*$this->memberdata[$this->mid]['replies']/$this->totalreplies);
+               $this->memberdata[$this->mid]['regdate']=strtotime(quickQuery('SELECT ctime as result FROM '.sql_table('comment').' WHERE cmember>='.(int)$this->mid.' ORDER BY ctime ASC LIMIT 1'));
+               $this->memberdata[$this->mid]['repliesperday']=0.01*(int)((float)100*$this->memberdata[$this->mid]['replies']*86000/(time()-$this->memberdata[$this->mid]['regdate']));
+               $rawurl=quickQuery('SELECT murl as result FROM '.sql_table('member').' WHERE mnumber='.(int)$this->mid);
+               $url=htmlspecialchars($rawurl,ENT_QUOTES);
+               if ($url && $url!='http://') $url='<a href="'.$url.'" onclick="window.open(this.href);return false;">'.$url.'</a>';
+               else $url=$rawurl='';
+               $this->memberdata[$this->mid]['url']=$url;
+               $this->memberdata[$this->mid]['rawurl']=$rawurl;
+               if (quickQuery('SELECT madmin as result FROM '.sql_table('member').' WHERE mnumber='.(int)$this->mid))
+                       $this->memberdata[$this->mid]['position']='Administrator';
+               elseif (quickQuery('SELECT COUNT(*) as result FROM '.sql_table('team').' WHERE tmember='.(int)$this->mid.' AND tadmin=1 LIMIT 1'))
+                       $this->memberdata[$this->mid]['position']='Moderator';
+               else $this->memberdata[$this->mid]['position']='Member';
+       }
+       function _getGuestData(){
+               if (!$this->totalreplies) $this->totalreplies=(int)quickQuery('SELECT COUNT(*) as result FROM '.sql_table('comment'));
+               if (!$this->totalreplies) $this->totalreplies=1;
+               $this->memberdata[$this->mid]=array();
+               $this->memberdata[$this->mid]['replies']=(int)quickQuery('SELECT COUNT(*) as result FROM '.sql_table('comment').' WHERE cuser="'.addslashes($this->mid).'"');
+               $this->memberdata[$this->mid]['percent']=0.01*(int)((float)10000*$this->memberdata[$this->mid]['replies']/$this->totalreplies);
+               $this->memberdata[$this->mid]['regdate']=strtotime(quickQuery('SELECT ctime as result FROM '.sql_table('comment').' WHERE cuser="'.addslashes($this->mid).'" ORDER BY ctime ASC LIMIT 1'));
+               $this->memberdata[$this->mid]['repliesperday']=0.01*(int)((float)100*$this->memberdata[$this->mid]['replies']*86000/(time()-$this->memberdata[$this->mid]['regdate']));
+               $url=$rawurl=$this->comment['url'];
+               if ($url && $url!='http://') $url='<a href="'.htmlspecialchars($url,ENT_QUOTES).'" onclick="window.open(this.href);return false;">'.$url.'</a>';
+               else $url=$rawurl='';
+               $this->memberdata[$this->mid]['url']=$url;
+               $this->memberdata[$this->mid]['url']=$rawurl;
+               $this->memberdata[$this->mid]['position']='Guest';
+       }
+       function member($type,$p1=''){
+               global $manager;
+               switch($type=strtolower($type)){
+               case 'url':
+                       echo $this->memberdata[$this->mid]['url'];// This data was sanitized before ( see _getData() and _getGuestData() )
+                       break;
+               case 'rawurl':
+               case 'position':
+               case 'replies':
+               case 'percent':
+               case 'repliesperday':
+                       echo htmlspecialchars($this->memberdata[$this->mid][$type],ENT_QUOTES);
+                       break;
+               case 'regdate':
+                       $template=&$manager->getTemplate($p1);
+                       echo strftime($template['FORMAT_DATE'],$this->memberdata[$this->mid]['regdate']);
+               default:
+                       break;
+               }
+       }
+       function doSkinVar() {
+               global $memberid;
+               if ((int)$memberid) {
+                       $this->mid=(int)$memberid;
+                       if (!isset($this->memberdata[$this->mid])) $this->_getData();
+               }
+               $args=func_get_args();
+               $skinType=array_shift($args);
+               $type=array_shift($args);
+               switch(strtolower($type)){
+               case 'member':
+                       return call_user_func_array(array($this,$type),$args);
+               default:
+               }
+       }
+       var $comment;
+       function doTemplateCommentsVar(&$item,&$comment) {
+               $args=func_get_args();
+               $item=array_shift($args);
+               $this->comment=array_shift($args);
+               $mid=$this->comment['memberid'];
+               if (!$mid) {
+                       $this->mid=$this->comment['user'];
+                       if (!@$this->memberdata[$this->mid]['regdate']) $this->_getGuestData();
+                       
+               } elseif ($mid!=$this->mid) {
+                       $this->mid=$mid;
+                       if (!@$this->memberdata[$this->mid]['regdate']) $this->_getData();
+               }
+               $type=array_shift($args);
+               switch(strtolower($type)){
+               case 'member':
+                       return call_user_func_array(array($this,$type),$args);
+               default:
+               }
+       }
+/* Following function is used to avoid submitting <>"'\ by members. */
+       function event_PostAuthentication(){
+               // exclude body in commentupdate event
+               // plugoption[][] -> just unset the var when containing <>"'\
+               // The value may contain <>"'\ if the value is equal to nucleus_blog.bname, bdesc or nucleus_category.cname, cdesc.
+               // forbidden: createitem/additem
+               global $CONF,$action;
+               global $HTTP_POST_VARS,$HTTP_GET_VARS;// $HTTP_REQUEST_VARS does not exist.
+               // First, remove all $_COOKIE values from $_REQUEST
+               // This must be OK because cookieVar() is not checked in requestVar() function for php 4.0.6
+               if (isset($_REQUEST) and isset($_COOKIE)) {
+                       foreach($_COOKIE as $key=>$value) {
+                               if (isset($_REQUEST[$key])) unset($_REQUEST[$key]);
+                       }
+               }
+               $accept=array();
+               switch(strtolower($action)){
+               case 'createitem':
+               case 'itemedit':
+               case 'additem':
+               case 'itemupdate':
+                       exit($this->_error('_ERROR_DISALLOWED'));
+               case 'commentupdate':
+                       $accept[]='body';
+                       break;
+               default: break;
+               }
+               if (isset($_REQUEST)) $this->_valueCheck($_POST,$_GET,$_REQUEST,$accept);
+               else {
+                       // In requestVar() function, postVar() is first checked.
+                       // In forrowing array_merge function, $HTTP_GET_VARS values are overrided by $HTTP_POST_VARS.
+                       $request=array_merge($HTTP_GET_VARS,$HTTP_POST_VARS);
+                       $this->_valueCheck($HTTP_POST_VARS,$HTTP_GET_VARS,$request,$accept);
+               }
+       }
+       function _valueCheck(&$post,&$get,&$request,&$accept,$depth=0){
+               foreach($request as $key=>$value){
+                       if (is_array($value)) {
+                               //if ($depth==0 && $key=='plugoption') continue;
+                               $p=$g=false;
+                               if (isset($post[$key])) $p=&$post[$key];
+                               if (isset($get[$key])) $g=&$get[$key];
+                               $this->_valueCheck($p,$g,$request[$key],$accept,$depth+1);
+                               continue;
+                       }
+                       if (!preg_match('/[\x00<>\'"\\\\]/',$value)) continue;
+                       switch($depth){
+                       case 0:
+                               if (in_array($key,$accept)) continue;
+                               if (quickQuery('SELECT COUNT(*) as result FROM '.
+                                       sql_table('blog').' as b, '.
+                                       sql_table('category').' as c'.
+                                       ' WHERE b.bname="'.addslashes($value).'"'.
+                                       ' OR b.bdesc="'.addslashes($value).'"'.
+                                       ' OR c.cname="'.addslashes($value).'"'.
+                                       ' OR c.cdesc="'.addslashes($value).'"'.
+                                       ' LIMIT 1')) break;
+                               exit($this->_error('_ERROR_DISALLOWED',": '$key'=>'$value'"));
+                       case 2:
+                               if (quickQuery('SELECT COUNT(*) as result FROM '.
+                                       sql_table('plugin_option').' as o, '.
+                                       sql_table('plugin_option_desc').' as d'.
+                                       ' WHERE (d.odef="'.addslashes($value).'" AND NOT (d.ocontext="global"))'.
+                                       ' OR (o.ovalue="'.addslashes($value).'" AND o.ocontextid>0)'.
+                                       ' LIMIT 1')) break;
+                       default:
+                               exit($this->_error('_ERROR_DISALLOWED',": '$key'=>'$value'"));
+                       }
+               }
+       }
+       function _error($msg,$msg2){
+               // Must exit at the end of this function. Do not return.
+               global $DIR_LANG,$CONF;
+               include_once($DIR_LANG . ereg_replace( '[\\|/]', '', getLanguageName()) . '.php');
+               if (defined($msg)) eval('$msg='.$msg.';');
+               redirect($CONF['IndexURL'].'?special=error&errormessage='.urlencode($msg.htmlspecialchars($msg2,ENT_QUOTES)));
+               exit;
+       }
+}
+// To use NP_PageSwitch for the member list, replace the $blog object.
+if (class_exists('BLOG')) {// This statement is requred when the member registration
+class NP_subSilver_BLOG_MEMBER extends BLOG {
+       var $np_subsilver;
+       function NP_subSilver_BLOG_MEMBER($id,&$np_subsilver){
+               $this->np_subsilver=&$np_subsilver;
+               return $this->BLOG($id);
+       }
+       function getSqlBlog($extraQuery, $mode=''){
+               global $startpos;
+               if ($search=getVar('search_author')){
+                       $where= ' WHERE mrealname LIKE "%'.addslashes($search).'%" ';
+               } else {
+                       $where=' WHERE 1 ';
+               }
+               if ($mode) {
+                       $select='SELECT COUNT(*) as result ';
+                       $limit=' ';
+                       $order=' ';
+               } else {
+                       $select='SELECT * ';
+                       $limit=' LIMIT '.(int)$this->np_subsilver->limit.' OFFSET '.(int)$startpos.' ';
+                       switch(getVar('sort')){
+                       case 'name_desc':
+                               $order=' ORDER BY mrealname DESC ';
+                               break;
+                       case 'name_asc':
+                               $order=' ORDER BY mrealname ASC ';
+                               break;
+                       case 'id_desc':
+                               $order=' ORDER BY mnumber DESC ';
+                               break;
+                       case 'id_asc':
+                       default:
+                               $order=' ORDER BY mnumber ASC ';
+                       }
+               }
+               return $select.' FROM '.sql_table('member').$where.$extraQuery.$order.$limit;
+       }
+}
+}
+?>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/plugins/subsilver/posting.php b/trunk/NP_SubSilver/plugins/subsilver/posting.php
new file mode 100644 (file)
index 0000000..057a5b6
--- /dev/null
@@ -0,0 +1,126 @@
+<?php 
+class NP_subSilver_posting { 
+       var $plug;
+       function NP_subSilver_posting(&$plug){
+               $this->plug=&$plug;
+               foreach($plug as $key=>$value) $this->$key=&$plug->$key;
+       }
+       var $nowposting=false;
+       function posting($event,&$data,$p1='') {
+               $this->nowposting=true;
+               switch($event){
+               case 'SpamCheck':
+                       // Unset global $itemid for parsing category skin.
+                       global $itemid;
+                       $itemid=0;
+                       // Temporaliry accept the comment for current item for posting.
+                       // This setting won't be saved into MySQL table.
+                       global $manager;
+                       $item=&$manager->getItem(postVar('itemid'),false,false);
+                       $item['closed']=0;
+                       return;
+               case 'ValidateForm':
+                       // Require title
+                       if (!postVar('title')) $data['error']=_LISTS_TITLE.':'._ERROR_NOEMPTYITEMS;
+                       return;
+               case 'PostAddComment':
+                       $newblogitemid=$p1;
+                       // Create new item.
+                       $cid=$data['commentid'];
+                       // Find the administrator
+                       $adminid=(int)quickQuery('SELECT mnumber as result FROM '.sql_table('member').' WHERE madmin=1 ORDER BY mnumber ASC LIMIT 1');
+                       global $member;
+                       $mid=(0<$member->getID())?$member->getID():0;
+                       if (phpversion() >= '5.0.0') eval('$mcopy = clone $member;');
+                       else $mcopy=$member;
+
+                       $member=MEMBER::createFromID($adminid);
+
+                       // Create new item
+                       if ($newblogitemid) $result=array('status'=>'added','itemid'=>$newblogitemid);
+                       else $result=ITEM::createFromRequest();
+
+                       // Return to original member object
+                       unset($member);
+                       if (phpversion() >= '5.0.0') eval('$member = clone $mcopy;');
+                       else $member=$mcopy;
+
+                       // All done. Redirect to item URL
+                       switch($result['status']){
+                       case 'added':
+                               // Remove tags in item.
+                               $query = 'UPDATE '.sql_table('item').
+                                       ' SET ititle="'.addslashes(htmlspecialchars(postVar('title'),ENT_QUOTES)).'"'.
+                                       ' , ibody="'.addslashes(htmlspecialchars(postVar('body'),ENT_QUOTES)).'"'.
+                                       ' , imore=""'.
+                                       ' WHERE inumber=' . (int)$result['itemid'];
+                               if (!$newblogitemid) sql_query($query);
+                               // Move the comment to new item
+                               $query = 'UPDATE '.sql_table('comment').
+                                       ' SET citem='.(int)$result['itemid'].
+                                       ' WHERE cnumber=' . (int)$cid;
+                               sql_query($query);
+                               // List up all members.
+                               $members=',';
+                               $res=sql_query('SELECT mnumber FROM '.sql_table('member'));
+                               while($row=mysql_fetch_row($res)) $members.=$row[0].',';
+                               mysql_free_result($res);
+                               // Add data into sql table
+                               $this->plug->sql_query('DELETE FROM','WHERE itemid='.(int)$result['itemid']);
+                               $this->plug->sql_query('INSERT INTO','SET'.
+                                       ' itemid='.(int)$result['itemid'].
+                                       ', authorid='.(int)$mid.
+                                       ', firstcommentid='.(int)$cid.
+                                       ', lastcommentid='.(int)$cid.
+                                       ', unread="'.addslashes($members).'"'.
+                                       ', time='.mysqldate($data['comment']['timestamp']).
+                                       ', since='.mysqldate($data['comment']['timestamp']));
+                               // Redirect 
+                               redirect(createItemLink($result['itemid']));
+                               exit;
+                       default: // failed
+                               $query = 'DELETE FROM '.sql_table('comment').' WHERE cnumber=' . (int)$cid;
+                               sql_query($query);
+                               exit('Sorry, an error occured.');
+                       }
+               default:
+                       return;
+               }
+       }
+       // PostAddItem event occurs when a new blog is created.
+       function event_PostAddItem(&$data){
+               // Just return if AddItem happens because of a posting of new topic
+               if ($this->nowposting) return;
+               global $member;
+               $itemid=$data['itemid'];
+               $row=mysql_fetch_assoc($res=sql_query('SELECT iauthor, ibody, itime FROM '.sql_table('item').' WHERE inumber='.(int)$itemid));
+               mysql_free_result($res);
+               $comment=array();
+               
+               $name      = addslashes($comment['user']='');
+               $url       = addslashes($comment['userid']='');
+               $email     = addslashes($comment['email']='');
+               $body      = addslashes($comment['body']=htmlspecialchars($row['ibody'],ENT_QUOTES));
+               $host      = addslashes($comment['host']=serverVar('HTTP_HOST'));
+               $ip        = addslashes($comment['ip']=serverVar('REMOTE_ADDR'));
+               $memberid  = intval($comment['memberid']=$row['iauthor']);
+               $timestamp = date('Y-m-d H:i:s', ($comment['timestamp']=strtotime($row['itime'])));
+               $itemid    = (int)$itemid;
+
+               $query = 'INSERT INTO '.sql_table('comment').' (CUSER, CMAIL, CEMAIL, CMEMBER, CBODY, CITEM, CTIME, CHOST, CIP, CBLOG) '
+                          . "VALUES ('$name', '$url', '$email', $memberid, '$body', $itemid, '$timestamp', '$host', '$ip', '$blogid')";
+
+               sql_query($query);
+               $commentid = mysql_insert_id();
+               $data=array('comment'=>&$comment,'commentid'=>$commentid);
+               $this->posting('PostAddComment',$data,$itemid);
+       }
+       // WHen  new category is created.
+       function event_PostAddCategory(&$data){
+               global $member;
+               $blog=&$data['blog'];
+               $blog->additem($data['catid'],'First Item','You can modify this topic.','',$blog->getId(), $member->getId(),$blog->getCorrectTime(),0,0,0);
+
+       }
+}
+?>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/plugins/subsilver/search.php b/trunk/NP_SubSilver/plugins/subsilver/search.php
new file mode 100644 (file)
index 0000000..8c27524
--- /dev/null
@@ -0,0 +1,151 @@
+<?php
+class NP_subSilver_search {
+       var $plug;
+       function NP_subSilver_search(&$plug){
+               $this->plug=&$plug;
+               foreach($plug as $key=>$value) $this->$key=&$plug->$key;
+       }
+}
+class NP_subSilver_BLOG extends BLOG {
+       var $np_subsilver;
+       function NP_subSilver_BLOG($id,&$np_subsilver){
+               $this->np_subsilver=&$np_subsilver;
+               return $this->BLOG($id);
+       }
+       function getSqlSearch($query, $amountMonths = 0, &$highlight, $mode = ''){
+               global $blogid;
+               switch(getVar('search_type')){
+               case 'unanswered':
+                       $where=' and s.replynum<1 and s.itemid=i.inumber ';
+                       if ($stime=intGetVar('search_time')) $where.=' and i.itime>' . mysqldate($this->getCorrectTime()-86400*$stime);
+                       $query=$this->getSqlBlog($where,$mode);
+                       $query = preg_replace('/^([\s]*)SELECT[\s]([^\'"=]*)[\s]FROM[\s]/i',
+                               'SELECT $2 FROM '.$this->np_subsilver->sql_query('name').' as s, ',$query);
+                       if ($blogid) return $query; // $blogid is '' when not from intRequestVar('blogid') (see event_PostAuthentication)
+                       return preg_replace('/i\.iblog([\s]*)=([\s]*)([0-9]+)([\s]+)and/i','',$query);
+               default:
+                       return $this->subSilver_getSqlSearch($query,$amountMonths,$highlight,$mode);
+               }
+       }
+       function subSilver_getSqlSearch($query, $amountMonths = 0, &$highlight, $mode = '')
+       {
+               $searchclass =& new SEARCH($query);
+
+               $highlight        = $searchclass->inclusive;
+
+               // if querystring is empty, return empty string
+               if ($searchclass->inclusive == '')
+                       return '';
+
+               // where to search
+               if (!$this->np_subsilver->query_null) {
+                       srand((double)microtime()*1000000);
+                       $cbody = md5(uniqid(rand(), true));
+                       switch(getVar('search_fields')){
+                       case 'msgonly':
+                               $where=$searchclass->boolean_sql_where($cbody);
+                               break;
+                       case 'titleonly':
+                               $where=$searchclass->boolean_sql_where('ititle');
+                               break;
+                       case 'all':
+                       default:
+                               $where=$searchclass->boolean_sql_where('ititle,'.$cbody);
+                       }
+                       $where=str_replace('i.'.$cbody,'d.cbody',$where);
+               } else $where='1';
+               
+               
+               // Restrict author
+               if ($author=getVar('search_author')) {
+                       switch(getVar('search_author_method')){
+                       case 'match':
+                               $authors=array();
+                               $res=sql_query('SELECT mnumber FROM '.sql_table('member').' WHERE mrealname LIKE "%'.addslashes($author).'%"');
+                               while($row=mysql_fetch_row($res)) $authors[]=(int)$row[0];
+                               mysql_free_result($res);
+                               if (count($authors)) $where.=' and (d.cmember in ('.implode(',',$authors).') or d.cuser LIKE "%'.addslashes($author).'%") ';
+                               else $where.=' and d.cuser LIKE "%'.addslashes($author).'%" ';
+                               break;
+                       case 'exactly':
+                       default:
+                               $authors=array();
+                               $res=sql_query('SELECT mnumber FROM '.sql_table('member').' WHERE mrealname="'.addslashes($author).'"');
+                               while($row=mysql_fetch_row($res)) $authors[]=(int)$row[0];
+                               mysql_free_result($res);
+                               if (count($authors)) $where.=' and (d.cmember in ('.implode(',',$authors).') or d.cuser="'.addslashes($author).'") ';
+                               else $where.=' and d.cuser="'.addslashes($author).'" ';
+                               break;
+                       }
+               }
+               
+               // Restrict time
+               if ($stime=intGetVar('search_time')) {
+                          $where.=' and i.itime>' . mysqldate($this->getCorrectTime()-86400*$stime);
+               }
+               
+               // sort method
+               switch(getVar('sort_by')){
+               case 'replies':
+                       $select='COUNT(d.cbody LIKE "%'.addslashes($query).'%")';
+                       break;
+               case 'title':
+                       $select='i.ititle';
+                       break;
+               case 'forum':
+                       $select='i.icat';
+                       break;
+               case 'time':
+               default:
+                       $select='i.itime';
+               }
+
+               // get list of blogs to search
+               global $blogid; // $blogid is '' when not from intRequestVar('blogid') (see event_PostAuthentication)
+               if ($blogid) $selectblogs=' and i.iblog='.(int)$blogid;
+               else {
+                       $selectblogs=' and i.iblog in (';
+                       $res=sql_query('SELECT bnumber FROM '.sql_table('blog'));
+                       while($row=mysql_fetch_row($res)) $selectblogs.=(int)$row[0].',';
+                       mysql_free_result($res);
+                       $selectblogs=substr($selectblogs,0,-1).')';
+               }
+
+               if ($mode == '')
+               {
+                       $query = 'SELECT DISTINCT i.inumber as itemid, i.ititle as title, i.ibody as body, m.mname as author, m.mrealname as authorname, i.itime, i.imore as more, m.mnumber as authorid, m.memail as authormail, m.murl as authorurl, c.cname as category, i.icat as catid, i.iclosed as closed';
+                       if ($select) $query .= ', '.$select. ' as score ';
+               } else {
+                       $query = 'SELECT COUNT(DISTINCT i.inumber) as result ';
+               }
+
+               $query .= ' FROM '.sql_table('comment').' as d, '.sql_table('item').' as i, '.sql_table('member').' as m, '.sql_table('category').' as c'
+                          . ' WHERE i.iauthor=m.mnumber'
+                          . ' and i.icat=c.catid'
+                          . ' and i.idraft=0'  // exclude drafts
+                          . $selectblogs
+                                       // don't show future items
+                          . ' and i.itime<=' . mysqldate($this->getCorrectTime())
+                          . ' and '.$where
+                          . ' and i.inumber=d.citem';
+
+               // take into account amount of months to search
+               if ($amountMonths > 0)
+               {
+                       $localtime = getdate($this->getCorrectTime());
+                       $timestamp_start = mktime(0,0,0,$localtime['mon'] - $amountMonths,1,$localtime['year']);
+                       $query .= ' and i.itime>' . mysqldate($timestamp_start);
+               }
+
+               if ($mode == '')
+               {
+                       if ($select)
+                               $query .= ' GROUP BY i.inumber ORDER BY score '.(getVar('sort_dir')=='ASC'?'ASC ':'DESC ');
+                       else
+                               $query .= ' ORDER BY i.itime '.(getVar('sort_dir')=='ASC'?'ASC ':'DESC ');
+               }
+
+               return $query;
+       }
+}
+?>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/plugins/subsilver/skin.php b/trunk/NP_SubSilver/plugins/subsilver/skin.php
new file mode 100644 (file)
index 0000000..f768fdc
--- /dev/null
@@ -0,0 +1,415 @@
+<?php 
+class NP_subSilver_SKIN { 
+       var $plug;
+       function NP_subSilver_SKIN(&$plug){
+               $this->plug=&$plug;
+               foreach($plug as $key=>$value) $this->$key=&$plug->$key;
+       }
+       var $blogid;
+       var $blogs;
+       var $template='subSilver/index';
+       function showBlogList($template, $bnametype='') {
+               $this->template=$template;
+               $this->blogs=array();
+               $query = 'SELECT bnumber FROM '.sql_table('blog').' ORDER BY bnumber ASC';
+               $res = sql_query($query);
+               while($row=mysql_fetch_row($res)) $this->blogs[]=$row[0];
+               ob_start();
+               BLOG::showBlogList($template, $bnametype);
+               $html=ob_get_contents();
+               ob_end_clean();
+               echo preg_replace_callback('/<:categorylist:>/',array($this,'showBlogListCallback'),$html);
+       }
+       function showBlogListCallback($match){
+               global $blogid;
+               $this->blogid=array_shift($this->blogs);
+               if ($this->blogid!=$blogid && !$this->home) return '';
+               ob_start();
+               $this->showCategoryList($this->template);
+               $html=ob_get_contents();
+               ob_end_clean();
+               return $html;
+       }
+       function showCategoryList($template) {
+               global $manager,$CONF;
+               $blog=&$manager->getBlog($this->blogid);
+               ob_start();
+               $blog->showCategoryList($template);
+               $html=ob_get_contents();
+               ob_end_clean();
+
+               $template =& $manager->getTemplate($template);
+               $search=$replace=array();
+               $skinurl=$CONF['SkinsURL'] . PARSER::getProperty('IncludePrefix');
+               $search[]='<:skinurl:>';
+               $replace[]=htmlspecialchars($skinurl,ENT_QUOTES);
+
+               $categories=array();
+               $query='SELECT * FROM '.sql_table('category').' WHERE cblog='.(int)$this->blogid;
+               $res=sql_query($query);
+               while($row=mysql_fetch_assoc($res)) $categories[]=$row;
+               mysql_free_result($res);
+
+               $members=array();
+               foreach($categories as $row){
+                       // Number of topics
+                       $catid=$row['catid'];
+                       $query='SELECT COUNT(*) as result FROM '.sql_table('item').' WHERE icat='.(int)$catid;
+                       $search[]='<:topics:'.$catid.':>';
+                       $replace[]=(int)quickQuery($query);
+                       // Number of replies
+                       $query='SELECT COUNT(c.cnumber) as result FROM '.sql_table('item').' as i, '.sql_table('comment').' as c'.
+                               ' WHERE i.icat='.(int)$catid.
+                               ' AND c.citem=i.inumber';
+                       $search[]='<:replies:'.$catid.':>';
+                       $replace[]=(int)quickQuery($query);
+                       // Last item
+                       $query='SELECT inumber as result FROM '.sql_table('item').' WHERE icat='.(int)$catid.' ORDER BY itime DESC LIMIT 1';
+                       $itemid=(int)quickQuery($query);
+                       $query='SELECT * FROM '.sql_table('comment').' WHERE citem='.(int)$itemid.' ORDER BY ctime DESC LIMIT 1';
+                       if ($row=mysql_fetch_assoc($res=sql_query($query))) {
+                               if ($row['cmember']) {
+                                       if (!is_array($members[$row['cmember']])) {
+                                               $query='SELECT * FROM '.sql_table('member').' WHERE mnumber='.(int)$row['cmember'].' LIMIT 1';
+                                               $members[$row['cmember']]=mysql_fetch_assoc($res2=sql_query($query));
+                                               mysql_free_result($res2);
+                                       }
+                                       $authorname=$members[$row['cmember']]['mrealname'];
+                                       $authorlink=createMemberLink($row['cmember']);
+                               } else {
+                                       $authorname=$row['cuser'];
+                                       $authorlink='#'._EDITC_NONMEMBER;
+                               }
+                               $timestamp=strtotime($row['ctime']);
+                               $search[]='<:lastitem:date:'.$catid.':>';
+                               $replace[]=strftime($template['FORMAT_DATE'],$timestamp);
+                               $search[]='<:lastitem:time:'.$catid.':>';
+                               $replace[]=strftime($template['FORMAT_TIME'],$timestamp);
+                               $search[]='<:lastitem:authorname:'.$catid.':>';
+                               $replace[]=htmlspecialchars($authorname,ENT_QUOTES);
+                               $search[]='<:lastitem:authorlink:'.$catid.':>';
+                               $replace[]=$authorlink;
+                               $search[]='<:lastitem:link:'.$catid.':>';
+                               $replace[]=createItemLink($itemid,array($this->commentquery=>(int)$row['cnumber'])).'#'.$this->commentquery.(int)$row['cnumber'];
+                       } else {
+                               $search[]='<:lastitem:link:'.$catid.':>';
+                               $replace[]=createItemLink($itemid);
+                       }
+                       mysql_free_result($res);
+                       
+               }
+               
+               // Parse category icon: read, unread or locked.
+               global $member;
+               $mid=$member->isLoggedIn()?$member->getId():0;
+               $num=preg_match_all('/<:categoryicon:([0-9]+):([^:]+):([^:]+):([^:]+):>/',$html,$matches,PREG_SET_ORDER);
+               for($i=0;$i<$num;$i++){
+                       $search[]=$matches[$i][0];
+                       $comm_ok=quickQuery('SELECT b.bcomments as result FROM '.sql_table('blog').' as b, '.
+                                       sql_table('category').' as c'.
+                                       ' WHERE c.cblog=b.bnumber'.
+                                       ' AND c.catid='.(int)$matches[$i][1].
+                                       ' LIMIT 1');
+                       if ($mid) {
+                               $new=$this->plug->quickQuery('SELECT COUNT(*) as result FROM','as s, '.
+                                       sql_table('item').' as i, '.
+                                       sql_table('category').' as c '.
+                                       ' WHERE i.icat='.(int)$matches[$i][1].
+                                       ' AND c.catid='.(int)$matches[$i][1].
+                                       ' AND i.inumber=s.itemid'.
+                                       ' AND s.unread LIKE "%,'.(int)$mid.',%"');
+                       } else $new=false;
+                       if ($comm_ok && $new) $replace[]=htmlspecialchars($matches[$i][2],ENT_QUOTES);
+                       else if ($comm_ok) $replace[]=htmlspecialchars($matches[$i][3],ENT_QUOTES);
+                       else $replace[]=htmlspecialchars($matches[$i][4],ENT_QUOTES);
+               }
+
+               echo str_replace($search,$replace,$html);
+       }
+       function showClock($template,$mode='both'){
+               global $CONF, $manager, $blog;
+               if (!is_array($template)) $template =& $manager->getTemplate($template);
+               if ($blog) $timestamp=$blog->getCorrectTime();
+               else $timestamp=time();
+               if ($mode!='time') echo strftime($template['FORMAT_DATE'],$timestamp);
+               if ($mode=='both') echo '&nbsp;';
+               if ($mode!='date') echo strftime($template['FORMAT_TIME'],$timestamp);
+       }
+       function showConf($type){
+               global $skin_subsilver_conf;
+               echo htmlspecialchars($skin_subsilver_conf[$type],ENT_QUOTES);
+       }
+       function strftime($format){
+               global $blog;
+               if ($blog) $timestamp=$blog->getCorrectTime();
+               else $timestamp=time();
+               echo strftime($format,$timestamp);
+       }
+       function userdata($mode){
+               switch($mode){
+               case 'totalreplies':
+                       echo (int)quickQuery('SELECT COUNT(*) as result FROM '.sql_table('comment'));
+                       break;
+               case 'number':
+                       echo (int)quickQuery('SELECT COUNT(*) as result FROM '.sql_table('member'));
+                       break;
+               case 'newest':
+                       echo htmlspecialchars(quickQuery('SELECT mrealname as result FROM '.sql_table('member').' ORDER BY mnumber DESC'),ENT_QUOTES);
+                       break;
+               case 'newestlink':
+                       $mid=(int)quickQuery('SELECT mnumber as result FROM '.sql_table('member').' ORDER BY mnumber DESC');
+                       echo createMemberLink($mid);
+                       break;
+               case 'onlinenum':
+               case 'onlinemembernum':
+               case 'onlineguestnum':
+               case 'onlinemembers':
+               default:
+                       echo '?';
+               }
+       }
+       var $handler;
+       var $parser;
+       function _setHandler(){
+               $actions=SKIN::getAllowedActionsForType($this->skintype);
+               $actions=array_merge($actions,array('itemid'));// For commentform for new topic
+               $this->handler =& new ACTIONS($this->skintype, $this);
+               $this->parser =& new PARSER($actions, $this->handler);
+               $this->handler->setParser($this->parser);
+       }
+       function commentform(){// used to show form for new topic
+               global $member;
+               if (!is_object($this->handler)) $this->_setHandler();
+
+               // values to prefill
+               $user = cookieVar($CONF['CookiePrefix'] .'comment_user');
+               if (!$user) $user = postVar('user');
+               $userid = cookieVar($CONF['CookiePrefix'] .'comment_userid');
+               if (!$userid) $userid = postVar('userid');
+               $email = cookieVar($CONF['CookiePrefix'] .'comment_email');
+               if (!$email) {
+                       $email = postVar('email');
+               }
+               $body = postVar('body');
+
+
+               // Discover an item that belongs to this category.
+               global $catid,$itemid;
+               if ($catid && !$itemid){
+                       $itemid=quickQuery('SELECT inumber as result FROM '.sql_table('item').' WHERE icat='.(int)$catid.' ORDER BY itime DESC LIMIT 1');
+               } 
+               $itemid=(int)$itemid;
+               
+               $this->handler->formdata = array(
+                       'destinationurl' => '',
+                       'actionurl' => htmlspecialchars($actionurl,ENT_QUOTES),
+                       'itemid' => $itemid,
+                       'user' => htmlspecialchars($user,ENT_QUOTES),
+                       'userid' => htmlspecialchars($userid,ENT_QUOTES),
+                       'email' => htmlspecialchars($email,ENT_QUOTES),
+                       'body' => htmlspecialchars($body,ENT_QUOTES),
+                       'membername' => $member->getDisplayName(),
+                       'rememberchecked' => cookieVar($CONF['CookiePrefix'] .'comment_user')?'checked="checked"':''
+               );
+
+               ob_start();
+               if (!$member->isLoggedIn()) {
+                       $this->handler->doForm('commentform-notloggedin');
+               } else {
+                       $this->handler->doForm('commentform-loggedin');
+               }
+               $html=ob_get_contents();
+               ob_end_clean();
+               // Insert new tags that are required for posting.
+               $newtag='<label for="nucleus_cf_title">'._ADD_TITLE.":</label>\n";
+               $newtag.='<input type="hidden" name="subSilver_action" value="posting" />'."\n";
+               $newtag.='<input type="text" name="title" value="'.htmlspecialchars(postVar('title'),ENT_QUOTES).
+                       '" class="formfield" id="nucleus_cf_title" maxlength="160" />'."\n";
+               $newtag.='<input type="hidden" name="catid" value="'.(int)$catid.'" />'."\n";
+               $newtag.='<input type="hidden" name="more" value="" />'."\n";
+               $newtag.='<input type="hidden" name="closed" value="0" />'."\n";
+               $newtag.='<input type="hidden" name="actiontype" value="addnow" />'."\n";
+               // $this->searchincform is like '<div class="commentform">' (see NP_subSilver.php)
+               echo str_replace($this->searchincform,$this->searchincform.$newtag,$html);
+       }
+       function showStickies($template){
+               global $blog,$catid;
+               if (!$blog || !$catid) return;
+               if (!$infosticky=$this->plug->infoSticky()) return;
+               $stickies='';
+               foreach($infosticky as $itemid=>$mode) $stickies.=($stickies?',':'').(int)$itemid;
+               $query=$blog->getSqlBlog('AND i.inumber in ('.$stickies.')');
+               $this->plug->showstickies=true;
+               $blog->showUsingQuery($template,$query,'',1);
+               $this->plug->showstickies=false;
+       }
+       function strip_tags(){
+               $args=func_get_args();
+               $mode=array_shift($args);
+               switch(strtolower($mode)){
+               case 'begin':
+                       ob_start();
+                       break;
+               case 'end':
+                       $html=ob_get_contents();
+                       ob_end_clean();
+                       echo htmlspecialchars(strip_tags($html),ENT_QUOTES);
+                       break;
+               default:
+                       if (!is_object($this->handler)) $this->_setHandler();
+                       ob_start();
+                       call_user_func_array(array($this->handler,'parse_'.$mode),$args);
+                       $html=ob_get_contents();
+                       ob_end_clean();
+                       echo htmlspecialchars(strip_tags($html),ENT_QUOTES);
+                       break;
+               }
+       }
+       function form($type){
+               switch($type){
+               case 'bloglist':
+                       $res=sql_query('SELECT bnumber, bname FROM '.sql_table('blog'));
+                       while($row=mysql_fetch_assoc($res)) {
+                               echo '<option value="'.
+                                       (int)$row['bnumber'].'">'.
+                                       htmlspecialchars(strip_tags($row['bname'])).
+                                       "</option>\n";
+                       }
+                       mysql_free_result($res);
+                       break;
+               case 'categorylist':
+                       $res=sql_query('SELECT catid, cname FROM '.sql_table('category'));
+                       while($row=mysql_fetch_assoc($res)) {
+                               echo '<option value="'.
+                                       (int)$row['catid'].'">'.
+                                       htmlspecialchars(strip_tags($row['cname'])).
+                                       "</option>\n";
+                       }
+                       mysql_free_result($res);
+                       break;
+               case 'javascript':
+                       $res=sql_query('SELECT catid, cblog FROM '.sql_table('category'));
+?><script type="text/javascript">
+/*<![CDATA[*/
+function subSilver_blogidFromCatid(cid){
+  switch(cid){
+    <?php while($row=mysql_fetch_assoc($res)) echo 'case "'.(int)$row['catid'].'": return '.(int)$row['cblog'].";\n"; ?>
+    default: return 0;
+  }
+}
+/*]]>*/
+</script><?php
+               default:
+                       break;
+               }
+       }
+       function getVar($name){
+               echo htmlspecialchars(getVar($name),ENT_QUOTES);
+       }
+       function postVar($name){
+               echo htmlspecialchars(postVar($name),ENT_QUOTES);
+       }
+       function requestVar($name){
+               echo htmlspecialchars(requestVar($name),ENT_QUOTES);
+       }
+       function memberlist($template,$limit=10){
+               // See NP_subSilver_BLOG_MEMBER::getSqlBlog()
+               if (!is_object($this->handler)) $this->_setHandler();
+               $this->plug->limit=$limit;
+               global $blog,$manager,$memberinfo,$memberid;
+               $template =& $manager->getTemplate($template);
+               $res=sql_query($blog->getSqlBlog(''));
+               $found=false;
+               $contents=$template['ARCHIVELIST_LISTITEM'];
+               while ($row=mysql_fetch_assoc($res)) {
+                       $memberid=$row['mnumber'];
+                       $memberinfo=$manager->getMember($memberid);
+                       $this->parser->parse($contents);
+                       $found=true;
+               }
+               mysql_free_result($res);
+               if (($author=getVar('search_author')) && !$found) {
+                       $contents=TEMPLATE::fill($template['ARCHIVELIST_FOOTER'],array('query'=>htmlspecialchars($author,ENT_QUOTES)));
+                       $this->parser->parse($contents);
+               }
+       }
+       function sortbutton($descrip,$img_asc,$param_asc,$img_desc,$param_desc){
+               global $CONF;
+               $params=preg_replace('/(^|&)sort=([^&]*)(&|$)/i','$3',serverVar('QUERY_STRING'));
+               if ($params) $params='?'.$params.'&';
+               else $params='?';
+               $skinurl=$CONF['SkinsURL'] . PARSER::getProperty('IncludePrefix');
+               $link_asc=htmlspecialchars($CONF['self'].$params.'sort='.$param_asc);
+               $link_desc=htmlspecialchars($CONF['self'].$params.'sort='.$param_desc);
+               $img_asc=htmlspecialchars($skinurl.$img_asc);
+               $img_desc=htmlspecialchars($skinurl.$img_desc);
+               $descrip=htmlspecialchars($descrip);
+               if (getVar('sort')==$param_asc) {
+?><a href="<?php echo $link_desc; ?>"><img src="<?php echo $img_asc; ?>" alt="<?php echo $descrip; ?>" title="<?php echo $descrip; ?>" border="0" 
+onmouseover="
+this.src='<?php echo $img_desc; ?>';
+" onmouseout="
+this.src='<?php echo $img_asc; ?>';
+" /></a><?php
+               } elseif (getVar('sort')==$param_desc) {
+?><a href="<?php echo $link_asc; ?>"><img src="<?php echo $img_desc; ?>" alt="<?php echo $descrip; ?>" title="<?php echo $descrip; ?>" border="0" 
+onmouseover="
+this.src='<?php echo $img_asc; ?>';
+" onmouseout="
+this.src='<?php echo $img_desc; ?>';
+" /></a><?php
+               } else {
+?><a href="<?php echo $link_asc; ?>"><img src="<?php echo $img_asc; ?>" alt="<?php echo $descrip; ?>" title="<?php echo $descrip; ?>" border="0" /></a>
+<?php
+               }
+       }
+       function includelanguage($file){
+               global $DIR_SKINS;
+               $dir=$DIR_SKINS.PARSER::getProperty('IncludePrefix');
+               $dir.=ereg_replace( '[\\|/]', '', getLanguageName()).'/';
+               if (strpos(realpath($dir),realpath($DIR_SKINS))===false) return;
+               if (strpos(realpath($dir.$file),realpath($dir))===false) return;
+               @readfile($dir.$file);
+       }
+       function doSkinVar() {
+               $args=func_get_args();
+               $skinType=array_shift($args);
+               $type=array_shift($args);
+               switch(strtolower($type)){
+               case 'showclock':
+               case 'showbloglist':
+               case 'showconf':
+               case 'strftime':
+               case 'userdata':
+               case 'commentform':
+               case 'showstickies':
+               case 'strip_tags':
+               case 'form':
+               case 'getvar':
+               case 'postvar':
+               case 'requestvar':
+               case 'memberlist':
+               case 'sortbutton':
+               case 'includelanguage':
+                       return call_user_func_array(array(&$this,&$type),&$args);
+               default:
+               }
+       }
+}
+class NP_subSilver_text extends NucleusPlugin{
+       // Class to use language file for skin
+       function NP_subSilver_text(){
+               // Let manager think this is the plugin object
+               global $manager;
+               if (!$manager->pluginInstalled('NP_text')) {
+                   $pid=count($manager->cachedInfo['installedPlugins'])*2;
+                   $manager->cachedInfo['installedPlugins'][$pid]='NP_text';
+                   $manager->plugins['NP_text']=&$this;
+               }
+       }
+       function doSkinVar(&$skintype,$text){
+               if (preg_match('/[^0-9a-zA-Z_]/',$text) || !defined($text)) return;
+               eval("echo $text;");
+       }
+}
+?>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/plugins/subsilver/template.php b/trunk/NP_SubSilver/plugins/subsilver/template.php
new file mode 100644 (file)
index 0000000..d2a9361
--- /dev/null
@@ -0,0 +1,123 @@
+<?php
+include_once(dirname(__FILE__).'/if.php');
+class NP_subSilver_TEMPLATE extends NP_subSilver_if { 
+       var $plug;
+       function NP_subSilver_TEMPLATE(&$plug){
+               $this->plug=&$plug;
+               foreach($plug as $key=>$value) $this->$key=&$plug->$key;
+       }
+       var $tabledata=array();
+       function &_getData($itemid){
+               // Get all data for the item in SQL table of this plugin
+               if (!isset($this->tabledata[$itemid])) {
+                       $this->tabledata[$itemid]=mysql_fetch_assoc($res=$this->plug->sql_query('SELECT * FROM','WHERE itemid='.(int)$itemid.' LIMIT 1'));
+                       mysql_free_result($res);
+               }
+               return $this->tabledata[$itemid];
+       }
+       var $memberdata=array();
+       function &_getMember($mid){
+               // Get all data for the member
+               if (!isset($this->memberdata[$mid])) {
+                       $this->memberdata[$mid]=mysql_fetch_assoc($res=sql_query('SELECT * FROM '.sql_table('member').' WHERE mnumber='.(int)$mid.' LIMIT 1'));
+                       mysql_free_result($res);
+               }
+               return $this->memberdata[$mid];
+       }
+       var $commentdata=array();
+       function &_getComment($cid){
+               // Get all data for the comment
+               if (!isset($this->commentdata[$cid])) {
+                       $this->commentdata[$cid]=mysql_fetch_assoc($res=sql_query('SELECT * FROM '.sql_table('comment').' WHERE cnumber='.(int)$cid.' LIMIT 1'));
+                       mysql_free_result($res);
+               }
+               return $this->commentdata[$cid];
+       }
+       function _getCidFromItem($itemid){
+               $row=$this->_getdata($itemid);
+               return $row['lastcommentid'];
+       }
+       function _getAuthorFromItem($itemid){
+               $auth=array();
+               $row=$this->_getdata($itemid);
+               if ($row['authorid']) {
+                       $memm=$this->_getMember($row['authorid']);
+                       $auth['authorname']=$memm['mrealname'];
+                       $auth['authorlink']=createMemberLink($row['authorid']);
+               } else {
+                       $comm=$this->_getComment($row['firstcommentid']);
+                       $auth['authorname']=$comm['cuser'];
+                       $auth['authorlink']='#'._EDITC_NONMEMBER;
+               }
+               return $auth;
+       }
+       function _itemicon(&$item,&$args){
+               global $blog,$member;
+               $mid=$member->isLoggedIn()?$member->getId():0;
+               // 0:new, 1:new_hot, 2:new_locked, 3:read, 4:read_hot, 5: read_locked, 6:info, 7:sticky
+               $data=$this->_getData($item->itemid);
+               if ($blog->commentsEnabled()) $closed=$item->closed;
+               else $closed=true;
+               $hot=$this->plug->popularItems($item->itemid);// Popular topics
+               $infosticky=$this->plug->infoSticky();
+               $new=strstr($data['unread'],",$mid,");
+               switch(strtolower(@$infosticky[$item->itemid])){
+               case 'info':   $i=6; break;
+               case 'sticky': $i=7; break;
+               default:
+                       $i=$new?0:3;
+                       if ($closed) $i=$i+2;
+                       elseif ($hot) $i++;
+               }
+               echo htmlspecialchars(trim($args[$i]),ENT_QUOTES);
+       }
+       function doTemplateVar(&$item,$type) {
+               $type=strtolower($type);
+               if ($this->ob_ok && !in_array($type,array('if','ifnot','endif','else','elseif','elseifnot'))) return; // Just return if ob_ok.
+               global $catid;
+               $args=func_get_args();
+               array_shift($args);
+               array_shift($args);
+               switch($type){
+               case 'readnum':
+               case 'replynum':
+                       $row=$this->_getdata($item->itemid);
+                       echo htmlspecialchars($row[$type],ENT_QUOTES);
+                       break;
+               case 'authorname':
+               case 'authorlink':
+                       $data=$this->_getAuthorFromItem($item->itemid);
+                       echo htmlspecialchars($data[$type],ENT_QUOTES);
+                       break;
+               case 'lastreplyby':
+               case 'lastreplyauthorlink':
+               case 'lastreplylink':
+                       $data=array();
+                       $cid=$this->_getCidFromItem($item->itemid);
+                       $data['lastreplylink']=createItemLink($item->itemid,array($this->commentquery=>(int)$cid)).'#'.$this->commentquery.(int)$cid;
+                       $comm=$this->_getComment($cid);
+                       if ($comm['cmember']) {
+                               $memm=$this->_getMember($comm['cmember']);
+                               $data['lastreplyby']=$memm['mrealname'];
+                               $data['lastreplyauthorlink']=createMemberLink($comm['cmember']);
+                       } else {
+                               $data['lastreplyby']=$comm['cuser'];
+                               $data['lastreplyauthorlink']='#'._EDITC_NONMEMBER;
+                       }
+                       echo str_replace('&amp;amp;','&amp;',htmlspecialchars($data[$type],ENT_QUOTES));
+                       break;
+               case 'itemicon':
+                       return $this->_itemicon($item,$args);
+               case 'if':
+               case 'ifnot':
+               case 'else':
+               case 'elseif':
+               case 'elseifnot':
+               case 'endif':
+                       return $this->_if($type,$item,$args);
+               default:
+                       break;
+               }
+       }
+}
+?>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/skins/subsilver/.htaccess b/trunk/NP_SubSilver/skins/subsilver/.htaccess
new file mode 100644 (file)
index 0000000..21c9ea1
--- /dev/null
@@ -0,0 +1,5 @@
+<FilesMatch "\.(inc|php)$">
+  Order allow,deny
+  Deny from all
+</FilesMatch>
+#EOF
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/skins/subsilver/category.inc b/trunk/NP_SubSilver/skins/subsilver/category.inc
new file mode 100644 (file)
index 0000000..590f31d
--- /dev/null
@@ -0,0 +1,90 @@
+<table align="center" border="0" cellpadding="2" cellspacing="2" width="100%">
+<tbody><tr>
+  <td colspan="2" align="left" valign="bottom"><a class="maintitle" href="?catid=<%category(id)%>"><%category(name)%></a><br /><span class="gensmall"><b>モデレーター: 無し</b></span></td>
+  <td align="right" nowrap="nowrap" valign="bottom"><span class="gensmall"><b></b></span></td>
+</tr>
+<tr>
+  <td align="left" valign="middle" width="50">
+    <form method="post" action="#nucleus_cf" style="position:absolute;">
+    <input type="hidden" name="subSilver_action" value="posting" />
+    <input type="image" src="<%skinfile(images/lang_english/post.gif)%>" alt="トピックの新規投稿" title="トピックの新規投稿" />
+    </form><img src="<%skinfile(images/lang_english/post.gif)%>" alt="トピックの新規投稿" title="トピックの新規投稿" />
+  </td>
+  <td class="nav" align="left" valign="middle" width="100%"><span class="nav">&nbsp;&nbsp;&nbsp;<a href="<%sitevar(url)%>" class="nav"><%sitevar(name)%> フォーラム一覧</a> -&gt; <a class="nav" href="?catid=<%category(id)%>&amp;blogid=<%blogsetting(id)%>"><%category(name)%></a></span></td>
+  <td class="nav" align="right" nowrap="nowrap" valign="bottom">
+    <%ifnot(hasplugin,PageSwitch)%>
+    <%elseif(PageSwitch,limit,10)%>ページ移動
+    <%PageSwitch(prev,前へ)%>
+    <%PageSwitch(index,2)%>
+    <%PageSwitch(next,次へ)%>
+    <%endif%>
+    <%if(loggedin)%>&nbsp;<span class="gensmall"><a href="<%self%>?blogid=<%blogsetting(id)%>&amp;catid=<%category(id)%>&amp;subSilver_action=mark" class="nav">全てのトピックをマーク</a></span><%endif%>
+  </td>
+</tr>
+</tbody></table>
+
+<table class="forumline" border="0" cellpadding="4" cellspacing="1" width="100%">
+<tbody><tr>
+  <th colspan="2" class="thCornerL" align="center" height="25" nowrap="nowrap">&nbsp;<span style="white-space: nowrap;">トピック&nbsp;</span></th>
+  <th class="thTop" align="center" nowrap="nowrap" width="50">&nbsp;<span style="white-space: nowrap;">返信&nbsp;</span></th>
+  <th class="thTop" align="center" nowrap="nowrap" width="100">&nbsp;<span style="white-space: nowrap;">投稿者&nbsp;</span></th>
+  <th class="thTop" align="center" nowrap="nowrap" width="50">&nbsp;<span style="white-space: nowrap;">観閲&nbsp;</span></th>
+  <th class="thCornerR" align="center" nowrap="nowrap">&nbsp;<span style="white-space: nowrap;">最新記事&nbsp;</span></th>
+</tr>
+
+<%if(subSilver,getVar,startpos=)%>
+<%subSilver(showStickies,subsilver/index)%>
+<%elseif(subSilver,getVar,startpos=0)%>
+<%subSilver(showStickies,subsilver/index)%>
+<%endif%>
+
+<%if(hasplugin,PageSwitch)%>
+<%blog(subsilver/index,10)%>
+<%else%>
+<%blog(subsilver/index,10000)%>
+<%endif%>
+
+<tr>
+  <td class="catBottom" colspan="6" align="center" height="28" valign="middle">
+    <div class="genmed">
+    <form method="get" action="<%self%>">
+    <input type="hidden" name="special" value="search" />
+    <input type="hidden" name="search_type" value="unanswered" />
+    <input type="hidden" name="catid" value="<%category(id)%>" />
+    <input type="hidden" name="blogid" value="<%blogsetting(id)%>" />
+    特定期間内のトピックを表示:&nbsp;
+    <select name="search_time">
+    <option value="0" selected="selected">全てのトピック</option>
+    <option value="1">1日以内</option>
+    <option value="7">1週間以内</option>
+    <option value="14">2週間以内</option>
+    <option value="30">1ヶ月以内</option>
+    <option value="90">3ヶ月以内</option>
+    <option value="180">6ヶ月以内</option>
+    <option value="364">1年以内</option>
+    </select>&nbsp;
+    <input type="hidden" name="query" value="特定期間内のトピックを表示" />
+    <input type="submit" class="liteoption" value="移動" />
+  </form></div></td>
+</tr>
+</tbody></table>
+
+<table align="center" border="0" cellpadding="2" cellspacing="2" width="100%">
+<tbody><tr>
+  <td align="left" valign="middle" width="50">
+    <form method="post" action="#nucleus_cf" style="position:absolute;">
+    <input type="hidden" name="subSilver_action" value="posting" />
+    <input type="image" src="<%skinfile(images/lang_english/post.gif)%>" alt="トピックの新規投稿" title="トピックの新規投稿" />
+    </form><img src="<%skinfile(images/lang_english/post.gif)%>" alt="トピックの新規投稿" title="トピックの新規投稿" />
+  </td>
+  <td align="left" valign="middle" width="100%"><span class="nav">&nbsp;&nbsp;&nbsp;<a href="<%sitevar(url)%>" class="nav"><%sitevar(name)%> フォーラム一覧</a> -&gt; <a class="nav" href="?catid=<%category(id)%>&amp;blogid=<%blogsetting(id)%>"><%category(name)%></a></span></td>
+  <td align="right" nowrap="nowrap" valign="middle"><br /><span class="nav"></span>
+  </td>
+</tr>
+<%ifnot(hasplugin,PageSwitch)%>
+<%elseif(PageSwitch,requied)%>
+<tr>
+  <td colspan="3" align="left"><span class="nav">Page <b><%PageSwitch(num)%></b> of <b><%PageSwitch(total)%></b></span></td>
+</tr>
+<%endif%>
+</tbody></table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/faq.inc b/trunk/NP_SubSilver/skins/subsilver/faq.inc
new file mode 100644 (file)
index 0000000..0f0e8a6
--- /dev/null
@@ -0,0 +1,16 @@
+<table width="100%" cellspacing="0" cellpadding="2" border="0" align="center">
+  <tr>
+  <td align="left" valign="bottom"><span class="gensmall">
+    現在の時刻 - <%subSilver(showClock,subSilver/index)%><br /></span><span class="nav"><a href="<%sitevar(url)%>" class="nav"><%sitevar(name)%> フォーラム一覧</a></span>
+  </td>
+  </tr>
+</table>
+
+<%subSilver(includelanguage,faq.inc)%><br />
+<%subSilver(includelanguage,faq1.inc)%><br />
+<%subSilver(includelanguage,faq2.inc)%><br />
+<%subSilver(includelanguage,faq3.inc)%><br />
+<%subSilver(includelanguage,faq4.inc)%><br />
+<%subSilver(includelanguage,faq5.inc)%><br />
+<%subSilver(includelanguage,faq6.inc)%><br />
+<%subSilver(includelanguage,faq7.inc)%><br />
diff --git a/trunk/NP_SubSilver/skins/subsilver/footer.inc b/trunk/NP_SubSilver/skins/subsilver/footer.inc
new file mode 100644 (file)
index 0000000..286198c
--- /dev/null
@@ -0,0 +1,10 @@
+<div align="center"><span class="copyright"><br /><br />
+Powered by <a href="http://nucleuscms.org"><%version%></a> &copy;
+<%if(admin)%>
+&nbsp;<a href="http://validator.w3.org/check?uri=referer">Valid XHTML</a>
+<%endif%>
+<br /></span></div>
+</td></tr></table>
+
+</body>
+</html>
diff --git a/trunk/NP_SubSilver/skins/subsilver/formIE.css b/trunk/NP_SubSilver/skins/subsilver/formIE.css
new file mode 100644 (file)
index 0000000..fde54cb
--- /dev/null
@@ -0,0 +1,19 @@
+/* Fancy form styles for IE */
+
+input, textarea, select {
+border-top-width : 1px; 
+border-right-width : 1px; 
+border-bottom-width : 1px; 
+border-left-width : 1px;  
+}
+
+input { text-indent : 2px; }
+
+input.button {
+border-top-width : 1px; 
+border-right-width : 1px; 
+border-bottom-width : 1px; 
+border-left-width : 1px;  
+}
+
+.postbody { line-height: 18px}
diff --git a/trunk/NP_SubSilver/skins/subsilver/head.inc b/trunk/NP_SubSilver/skins/subsilver/head.inc
new file mode 100644 (file)
index 0000000..4ffcaa8
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=<%text(_CHARSET)%>" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+
+<link rel="alternate" type="application/rss+xml" title="RSS" href="xml-rss2.php" />
+
+<link rel="stylesheet" type="text/css" href="<%skinfile(subSilver.css)%>" />
+<link rel="stylesheet" type="text/css" href="<%skinfile(nucleus.css)%>" />
+
+<%if(skintype,index)%>
+  <%if(subSilver,getVar,blogid=)%>
+    <title><%subSilver(strip_tags,sitevar,name)%> :: 一覧</title>
+  <%elseif(category)%>
+    <title><%subSilver(strip_tags,begin)%><%blogsetting(name)%> :: <%category(name)%><%subSilver(strip_tags,end)%></title>
+  <%else%>
+    <title><%subSilver(strip_tags,begin)%><%sitevar(name)%> :: <%blogsetting(name)%><%subSilver(strip_tags,end)%></title>
+  <%endif%>
+<%elseif(skintype,item)%>
+  <title><%subSilver(strip_tags,begin)%><%category(name)%> :: <%itemtitle(attribute)%><%subSilver(strip_tags,end)%></title>
+<%elseif(skintype,member)%>
+  <%if(subSilver,intGlobalVar,memberid=0)%>
+    <title><%subSilver(strip_tags,begin)%><%sitevar(name)%> :: メンバーリスト<%subSilver(strip_tags,end)%></title>
+  <%else%>
+    <title><%subSilver(strip_tags,begin)%><%sitevar(name)%> :: <%member(realname)%><%subSilver(strip_tags,end)%></title>
+  <%endif%>
+<%else%>
+    <title><%subSilver(strip_tags,sitevar,name)%></title>
+<%endif%>
+
+</head>
diff --git a/trunk/NP_SubSilver/skins/subsilver/header.inc b/trunk/NP_SubSilver/skins/subsilver/header.inc
new file mode 100644 (file)
index 0000000..0fe1439
--- /dev/null
@@ -0,0 +1,33 @@
+<body bgcolor="#E5E5E5" text="#000000" link="#006699" vlink="#5493B4">
+
+<noscript>このフォーラムを快適に使用するためには、Javascript をオンにしてください</noscript>
+
+<a name="top"></a>
+
+<table width="100%" cellspacing="0" cellpadding="10" border="0" align="center">
+<tr>
+<td class="bodyline">
+  <table width="100%" cellspacing="0" cellpadding="0" border="0">
+  <tr>
+  <td><a href="<%sitevar(url)%>"><img src="<%skinfile(images/logo_petitforum.png)%>" border="0" alt="<%sitevar(name)%> フォーラム一覧" vspace="1" /></a></td>
+  <td align="center" width="100%" valign="middle"><span class="maintitle"><%sitevar(name)%></span><br /><span class="gen"><%subSilver(showConf,SiteDesc)%><br />&nbsp; </span>
+    <table cellspacing="0" cellpadding="2" border="0">
+      <tr>
+      <td align="center" valign="top" nowrap="nowrap"><span class="mainmenu">
+      &nbsp;<a href="<%self%>?special=faq" class="mainmenu"><img src="<%skinfile(images/icon_mini_faq.gif)%>" width="12" height="13" border="0" alt="よくある質問" hspace="3" />よくある質問</a>&nbsp;
+      &nbsp;<a href="<%self%>?special=search" class="mainmenu"><img src="<%skinfile(images/icon_mini_search.gif)%>" width="12" height="13" border="0" alt="検索" hspace="3" />検索</a>&nbsp;
+      &nbsp;<a href="<%self%>?special=member" class="mainmenu"><img src="<%skinfile(images/icon_mini_members.gif)%>" width="12" height="13" border="0" alt="メンバーリスト" hspace="3" />メンバーリスト</a>&nbsp;
+      </span></td>
+      </tr>
+      <tr>
+      <td height="25" align="center" valign="top" nowrap="nowrap"><span class="mainmenu">
+      <%if(loggedin)%>&nbsp;<a href="<%adminurl%>?action=editmembersettings" class="mainmenu"><img src="<%skinfile(images/icon_mini_profile.gif)%>" width="12" height="13" border="0" alt="ユーザー設定" hspace="3" />ユーザー設定</a>&nbsp;
+      <%else%>&nbsp;<a href="<%self%>?special=register" class="mainmenu"><img src="<%skinfile(images/icon_mini_register.gif)%>" width="12" height="13" border="0" alt="登録" hspace="3" />登録</a>&nbsp;<%endif%>
+      &nbsp;<a href="<%adminurl%>" class="mainmenu"><img src="<%skinfile(images/icon_mini_login.gif)%>" width="12" height="13" border="0" alt="ログイン" hspace="3" /><%if(loggedin)%>管理メニュー<%else%>ログイン<%endif%></a>&nbsp;
+      </span></td>
+      </tr>
+    </table>
+  </td>
+  </tr>
+  </table>
+  <br />
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/cellpic.gif b/trunk/NP_SubSilver/skins/subsilver/images/cellpic.gif
new file mode 100644 (file)
index 0000000..47457ef
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/cellpic.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/cellpic1.gif b/trunk/NP_SubSilver/skins/subsilver/images/cellpic1.gif
new file mode 100644 (file)
index 0000000..715b8d4
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/cellpic1.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/cellpic2.jpg b/trunk/NP_SubSilver/skins/subsilver/images/cellpic2.jpg
new file mode 100644 (file)
index 0000000..a0ca7e8
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/cellpic2.jpg differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/cellpic3.gif b/trunk/NP_SubSilver/skins/subsilver/images/cellpic3.gif
new file mode 100644 (file)
index 0000000..ecf70e1
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/cellpic3.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/created_by.jpg b/trunk/NP_SubSilver/skins/subsilver/images/created_by.jpg
new file mode 100644 (file)
index 0000000..f274727
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/created_by.jpg differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder.gif
new file mode 100644 (file)
index 0000000..c16bfa7
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder_announce.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder_announce.gif
new file mode 100644 (file)
index 0000000..0589feb
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder_announce.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder_announce_new.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder_announce_new.gif
new file mode 100644 (file)
index 0000000..56b2702
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder_announce_new.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder_big.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder_big.gif
new file mode 100644 (file)
index 0000000..9b2bc47
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder_big.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder_hot.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder_hot.gif
new file mode 100644 (file)
index 0000000..a7e8831
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder_hot.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder_lock.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder_lock.gif
new file mode 100644 (file)
index 0000000..10eb776
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder_lock.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder_lock_new.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder_lock_new.gif
new file mode 100644 (file)
index 0000000..720e210
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder_lock_new.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder_locked_big.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder_locked_big.gif
new file mode 100644 (file)
index 0000000..436f3d2
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder_locked_big.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder_new.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder_new.gif
new file mode 100644 (file)
index 0000000..4e56157
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder_new.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder_new_big.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder_new_big.gif
new file mode 100644 (file)
index 0000000..5eec565
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder_new_big.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder_new_hot.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder_new_hot.gif
new file mode 100644 (file)
index 0000000..25ced64
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder_new_hot.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder_sticky.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder_sticky.gif
new file mode 100644 (file)
index 0000000..09861a9
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder_sticky.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/folder_sticky_new.gif b/trunk/NP_SubSilver/skins/subsilver/images/folder_sticky_new.gif
new file mode 100644 (file)
index 0000000..dd2e366
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/folder_sticky_new.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_delete.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_delete.gif
new file mode 100644 (file)
index 0000000..1153ba5
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_delete.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_latest_reply.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_latest_reply.gif
new file mode 100644 (file)
index 0000000..b45e57a
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_latest_reply.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_faq.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_faq.gif
new file mode 100644 (file)
index 0000000..b8b873d
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_faq.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_groups.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_groups.gif
new file mode 100644 (file)
index 0000000..be5c201
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_groups.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_login.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_login.gif
new file mode 100644 (file)
index 0000000..30b309b
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_login.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_members.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_members.gif
new file mode 100644 (file)
index 0000000..a79a5a7
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_members.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_message.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_message.gif
new file mode 100644 (file)
index 0000000..57071d6
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_message.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_profile.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_profile.gif
new file mode 100644 (file)
index 0000000..3dc0871
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_profile.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_register.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_register.gif
new file mode 100644 (file)
index 0000000..11b8f31
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_register.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_search.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_search.gif
new file mode 100644 (file)
index 0000000..1295e9f
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_mini_search.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_minipost.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_minipost.gif
new file mode 100644 (file)
index 0000000..d172abb
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_minipost.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_minipost_new.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_minipost_new.gif
new file mode 100644 (file)
index 0000000..8ec44a1
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_minipost_new.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/icon_newest_reply.gif b/trunk/NP_SubSilver/skins/subsilver/images/icon_newest_reply.gif
new file mode 100644 (file)
index 0000000..eca2861
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/icon_newest_reply.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/index.htm b/trunk/NP_SubSilver/skins/subsilver/images/index.htm
new file mode 100644 (file)
index 0000000..491b26d
--- /dev/null
@@ -0,0 +1,16 @@
+<html>
+<head>
+<title>subSilver created by subBlue Design</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table width="100%" height="100%" cellspacing="0" cellpadding="0" border="0">
+       <tr>
+               <td align="center" valign="middle"><a href="http://www.subblue.com/" target="_new"><img src="created_by.jpg" width="400" height="300" border="0" alt="Created by subBlue Design" /></a></td>
+       </tr>
+</table>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_aim.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_aim.gif
new file mode 100644 (file)
index 0000000..4b6a858
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_aim.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_edit.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_edit.gif
new file mode 100644 (file)
index 0000000..bb70004
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_edit.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_email.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_email.gif
new file mode 100644 (file)
index 0000000..3d359c2
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_email.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_icq_add.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_icq_add.gif
new file mode 100644 (file)
index 0000000..4bf276d
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_icq_add.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_ip.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_ip.gif
new file mode 100644 (file)
index 0000000..bf17a51
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_ip.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_msnm.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_msnm.gif
new file mode 100644 (file)
index 0000000..6518415
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_msnm.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_pm.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_pm.gif
new file mode 100644 (file)
index 0000000..f87b4f5
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_pm.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_profile.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_profile.gif
new file mode 100644 (file)
index 0000000..2bd32d2
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_profile.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_quote.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_quote.gif
new file mode 100644 (file)
index 0000000..3dec675
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_quote.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_search.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_search.gif
new file mode 100644 (file)
index 0000000..8dd38a3
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_search.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_www.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_www.gif
new file mode 100644 (file)
index 0000000..8c1731f
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_www.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_yim.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_yim.gif
new file mode 100644 (file)
index 0000000..57e75b3
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/icon_yim.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/msg_newpost.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/msg_newpost.gif
new file mode 100644 (file)
index 0000000..ce2c1a8
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/msg_newpost.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/post.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/post.gif
new file mode 100644 (file)
index 0000000..4b7cb20
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/post.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/reply-locked.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/reply-locked.gif
new file mode 100644 (file)
index 0000000..5ab1d7a
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/reply-locked.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/lang_english/reply.gif b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/reply.gif
new file mode 100644 (file)
index 0000000..cb385af
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/lang_english/reply.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/logo_clear.png b/trunk/NP_SubSilver/skins/subsilver/images/logo_clear.png
new file mode 100644 (file)
index 0000000..fe4eb3a
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/logo_clear.png differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/logo_petitforum.png b/trunk/NP_SubSilver/skins/subsilver/images/logo_petitforum.png
new file mode 100644 (file)
index 0000000..2ac1b0b
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/logo_petitforum.png differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/logo_phpBB.gif b/trunk/NP_SubSilver/skins/subsilver/images/logo_phpBB.gif
new file mode 100644 (file)
index 0000000..37aa0fd
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/logo_phpBB.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/logo_phpBB_med.gif b/trunk/NP_SubSilver/skins/subsilver/images/logo_phpBB_med.gif
new file mode 100644 (file)
index 0000000..3d84f94
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/logo_phpBB_med.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/msg_inbox.gif b/trunk/NP_SubSilver/skins/subsilver/images/msg_inbox.gif
new file mode 100644 (file)
index 0000000..011d0bd
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/msg_inbox.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/msg_outbox.gif b/trunk/NP_SubSilver/skins/subsilver/images/msg_outbox.gif
new file mode 100644 (file)
index 0000000..84fdce3
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/msg_outbox.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/msg_savebox.gif b/trunk/NP_SubSilver/skins/subsilver/images/msg_savebox.gif
new file mode 100644 (file)
index 0000000..86d1f2c
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/msg_savebox.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/msg_sentbox.gif b/trunk/NP_SubSilver/skins/subsilver/images/msg_sentbox.gif
new file mode 100644 (file)
index 0000000..b95db75
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/msg_sentbox.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/s_asc.png b/trunk/NP_SubSilver/skins/subsilver/images/s_asc.png
new file mode 100644 (file)
index 0000000..9990376
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/s_asc.png differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/s_desc.png b/trunk/NP_SubSilver/skins/subsilver/images/s_desc.png
new file mode 100644 (file)
index 0000000..a03226d
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/s_desc.png differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/spacer.gif b/trunk/NP_SubSilver/skins/subsilver/images/spacer.gif
new file mode 100644 (file)
index 0000000..5bfd67a
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/spacer.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/topic_delete.gif b/trunk/NP_SubSilver/skins/subsilver/images/topic_delete.gif
new file mode 100644 (file)
index 0000000..3b21b11
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/topic_delete.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/topic_lock.gif b/trunk/NP_SubSilver/skins/subsilver/images/topic_lock.gif
new file mode 100644 (file)
index 0000000..fe32fea
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/topic_lock.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/topic_move.gif b/trunk/NP_SubSilver/skins/subsilver/images/topic_move.gif
new file mode 100644 (file)
index 0000000..ab2fd23
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/topic_move.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/topic_split.gif b/trunk/NP_SubSilver/skins/subsilver/images/topic_split.gif
new file mode 100644 (file)
index 0000000..bdbc884
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/topic_split.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/topic_unlock.gif b/trunk/NP_SubSilver/skins/subsilver/images/topic_unlock.gif
new file mode 100644 (file)
index 0000000..dae3e4d
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/topic_unlock.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/vote_lcap.gif b/trunk/NP_SubSilver/skins/subsilver/images/vote_lcap.gif
new file mode 100644 (file)
index 0000000..269088b
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/vote_lcap.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/vote_rcap.gif b/trunk/NP_SubSilver/skins/subsilver/images/vote_rcap.gif
new file mode 100644 (file)
index 0000000..f9584e2
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/vote_rcap.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/voting_bar.gif b/trunk/NP_SubSilver/skins/subsilver/images/voting_bar.gif
new file mode 100644 (file)
index 0000000..9947315
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/voting_bar.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/images/whosonline.gif b/trunk/NP_SubSilver/skins/subsilver/images/whosonline.gif
new file mode 100644 (file)
index 0000000..b450927
Binary files /dev/null and b/trunk/NP_SubSilver/skins/subsilver/images/whosonline.gif differ
diff --git a/trunk/NP_SubSilver/skins/subsilver/index.inc b/trunk/NP_SubSilver/skins/subsilver/index.inc
new file mode 100644 (file)
index 0000000..29fbe84
--- /dev/null
@@ -0,0 +1,27 @@
+<table width="100%" cellspacing="0" cellpadding="2" border="0" align="center">
+  <tr>
+  <td align="left" valign="bottom"><span class="gensmall">
+    現在の時刻 - <%subSilver(showClock,subSilver/index)%><br /></span><span class="nav"><a href="<%sitevar(url)%>" class="nav"><%sitevar(name)%> フォーラム一覧</a></span>
+  </td>
+  <td align="right" valign="bottom" class="gensmall">
+    <a href="<%self%>?search_type=unanswered<%ifnot(subSilver,intGetVar,blogid=0)%>&amp;blogid=<%blogsetting(id)%><%endif%>&amp;query=未返信の記事" class="gensmall">未返信の記事を表示</a>
+    <%ifnot(loggedin)%>
+    <%elseif(subSilver,intGetVar,blogid=0)%>
+      &nbsp;<span class="gensmall"><a href="<%self%>?subSilver_action=mark" class="gensmall">サイト全てのトピックをマーク</a></span>
+    <%else%>
+      &nbsp;<span class="gensmall"><a href="<%self%>?blogid=<%blogsetting(id)%>&amp;subSilver_action=mark" class="gensmall">カテゴリ全てのトピックをマーク</a></span>
+    <%endif%>
+  </td>
+  </tr>
+</table>
+
+<table width="100%" cellpadding="2" cellspacing="1" border="0" class="forumline">
+  <tr>
+  <th colspan="2" class="thCornerL" height="25" nowrap="nowrap">&nbsp;フォーラム&nbsp;</th>
+  <th width="60" class="thTop" nowrap="nowrap">&nbsp;<span style="white-space: nowrap;">トピック</span>&nbsp;</th>
+  <th width="60" class="thTop" nowrap="nowrap">&nbsp;<span style="white-space: nowrap;">投稿記事</span>&nbsp;</th>
+  <th class="thCornerR" nowrap="nowrap">&nbsp;<span style="white-space: nowrap;">最新記事</span>&nbsp;</th>
+  </tr>
+  <%subSilver(showBlogList,subSilver/index)%>
+</table>
+
diff --git a/trunk/NP_SubSilver/skins/subsilver/item.inc b/trunk/NP_SubSilver/skins/subsilver/item.inc
new file mode 100644 (file)
index 0000000..8ae6ce2
--- /dev/null
@@ -0,0 +1,106 @@
+<form method="post" action="#nucleus_cf">
+<input type="hidden" name="body" value="" id="subsilver_form_body" />
+<input type="hidden" name="dummy" value="" id="subsilver_form_dummy" />
+
+<table border="0" cellpadding="2" cellspacing="2" width="100%">
+  <tbody><tr>
+       <td colspan="2" align="left" valign="bottom"><a class="maintitle" href="?itemid=<%itemid%>"><%itemtitle%></a>
+        <%if(admin)%><a href="<%adminurl%>?action=itemedit&itemid=<%itemid%>"><img src="<%skinfile(images/lang_english/icon_edit.gif)%>"/ alt="edit" title="edit" /></a><%endif%>
+        <br /><span class="gensmall"><b></b><br />
+         &nbsp; </span></td>
+  </tr>
+</tbody></table>
+
+<table border="0" cellpadding="2" cellspacing="2" width="100%">
+  <tbody><tr>
+    <td align="left" nowrap="nowrap" valign="bottom">
+      <span class="nav">
+        <input type="image" name="subSilver_action" value="posting" src="<%skinfile(images/lang_english/post.gif)%>" alt="トピックの新規投稿" title="トピックの新規投稿" onclick="
+document.getElementById('subsilver_form_body').value='';
+document.getElementById('subsilver_form_dummy').name=this.name;
+document.getElementById('subsilver_form_dummy').value=this.value;
+return true;
+" />
+        &nbsp;&nbsp;
+        <input type="image" name="subSilver_action" value="commentform" src="<%skinfile(images/lang_english/reply.gif)%>" alt="返信" title="返信" onclick="
+document.getElementById('subsilver_form_body').value='';
+document.getElementById('subsilver_form_dummy').name=this.name;
+document.getElementById('subsilver_form_dummy').value=this.value;
+return true;
+" />
+      </span>
+    </td>
+       <td align="left" valign="middle"><span class="nav">&nbsp;&nbsp;&nbsp;<a href="<%sitevar(url)%>" class="nav"><%sitevar(name)%> フォーラム一覧</a> -&gt; <a class="nav" href="<%self%>?catid=<%category(id)%>&amp;blogid=<%blogsetting(id)%>"><%category(name)%></a></span></td>
+        <td align="right">
+          <%if(hasplugin,DisplayComments)%><span class="nav">
+          <%DisplayComments(pageswitch,info,ページ移動)%>&nbsp;
+          <%DisplayComments(pageswitch,prev,前へ)%>
+          <%DisplayComments(pageswitch,index,10)%>
+          <%DisplayComments(pageswitch,next,次へ)%>
+          </span><%endif%>
+        </td>
+  </tr>
+</tbody></table>
+
+<table class="forumline" border="0" cellpadding="3" cellspacing="1" width="100%">
+       <tbody><tr align="right">
+               <td class="catHead" colspan="2" height="28"><span class="nav"><a href="<%prevlink%>" class="nav">前のトピックを表示</a> :: <a href="<%nextlink%>" class="nav">次のトピックを表示</a> &nbsp;</span></td>
+
+       </tr>
+
+<%if(hasplugin,DisplayComments)%>
+<%DisplayComments(comments,subSilver/index,10)%>
+<%else%>
+<%comments(subSilver/index)%>
+<%endif%>
+       
+</tbody></table>
+
+<table align="center" border="0" cellpadding="2" cellspacing="2" width="100%">
+  <tbody><tr>
+    <td align="left" nowrap="nowrap" valign="bottom">
+      <span class="nav">
+        <input type="image" name="subSilver_action" value="posting" src="<%skinfile(images/lang_english/post.gif)%>" alt="トピックの新規投稿" title="トピックの新規投稿" onclick="
+document.getElementById('subsilver_form_body').value='';
+document.getElementById('subsilver_form_dummy').name=this.name;
+document.getElementById('subsilver_form_dummy').value=this.value;
+return true;
+" />
+        &nbsp;&nbsp;
+        <input type="image" name="subSilver_action" value="commentform" src="<%skinfile(images/lang_english/reply.gif)%>" alt="返信" title="返信" onclick="
+document.getElementById('subsilver_form_body').value='';
+document.getElementById('subsilver_form_dummy').name=this.name;
+document.getElementById('subsilver_form_dummy').value=this.value;
+return true;
+" />
+      </span>
+    </td>
+       <td align="right" nowrap="nowrap" valign="top">
+          <%if(hasplugin,DisplayComments)%><span class="nav">
+          <%DisplayComments(pageswitch,info,ページ移動)%>&nbsp;
+          <%DisplayComments(pageswitch,prev,前へ)%>
+          <%DisplayComments(pageswitch,index,10)%>
+          <%DisplayComments(pageswitch,next,次へ)%>
+          </span><%endif%>
+        </td>
+  </tr>
+</tbody></table>
+
+</form>
+
+<%if(subSilver,postVar,subSilver_action=commentform)%>
+<a name="subSilver_cf" id="subSilver_cf"></a>
+<table class="forumline" border="0" cellpadding="3" cellspacing="1" width="100%">
+<tbody><tr>
+  <th class="thHead" colspan="2" height="25"><b>返信の投稿</b></th>
+</tr>
+<tr>
+  <td class="commentform">
+    <table align="center" border="0"><tr><td>
+      <%commentform%>
+    </td></tr></table>
+  </td>
+</tr>
+</tbody>
+</table>
+<%endif%>
diff --git a/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq.inc b/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq.inc
new file mode 100644 (file)
index 0000000..9abd968
--- /dev/null
@@ -0,0 +1,75 @@
+<table class="forumline" align="center" border="0" cellpadding="3" cellspacing="1" width="100%">
+  <tbody><tr>
+    <th class="thHead">よくある質問</th>
+  </tr>
+  <tr>
+    <td class="row1">
+      <span class="gen"><b>ログインと登録に関する問題</b></span><br>
+
+      <span class="gen"><a href="#0" class="postlink">何故ログインできないのでしょうか?</a></span><br>
+      <span class="gen"><a href="#1" class="postlink">登録は必ずしなければいけないですか?</a></span><br>
+      <span class="gen"><a href="#2" class="postlink">何故自動的にログオフしてしまうのでしょうか?</a></span><br>
+      <span class="gen"><a href="#3" class="postlink">オンライン状態のユーザーとして名前をリストに表示されないようにするにはどうすればいいのでしょうか?</a></span><br>
+      <span class="gen"><a href="#4" class="postlink">パスワードが無くなってしまいました。</a></span><br>
+      <span class="gen"><a href="#5" class="postlink">登録したのにログインすることができません。</a></span><br>
+
+      <span class="gen"><a href="#6" class="postlink">過去に登録したのにログインできません。</a></span><br>
+      <br>
+      <span class="gen"><b>ユーザー設定</b></span><br>
+      <span class="gen"><a href="#7" class="postlink">どのようにユーザー設定を変更できますか?</a></span><br>
+      <span class="gen"><a href="#8" class="postlink">時刻が正しくありません。</a></span><br>
+      <span class="gen"><a href="#9" class="postlink">タイムゾーン設定を変更しても時刻が正しくありません。</a></span><br>
+
+      <span class="gen"><a href="#10" class="postlink">掲示板の言語に私の使用する言語がありません。</a></span><br>
+      <span class="gen"><a href="#11" class="postlink">どのように名前の下に画像を表示できますか?</a></span><br>
+      <span class="gen"><a href="#12" class="postlink">どのようにランクを変更できますか?</a></span><br>
+      <span class="gen"><a href="#13" class="postlink">メールアイコンを使ってユーザーにメールを送信しようとするとログイン画面が表示されます。</a></span><br>
+      <br>
+      <span class="gen"><b>投稿に関する問題</b></span><br>
+
+      <span class="gen"><a href="#14" class="postlink">どのようにトピックを投稿できますか?</a></span><br>
+      <span class="gen"><a href="#15" class="postlink">どのように記事を削除/編集できますか?</a></span><br>
+      <span class="gen"><a href="#16" class="postlink">どのように自分の記事にサインを追加できますか?</a></span><br>
+      <span class="gen"><a href="#17" class="postlink">どのように記事に投票を追加できますか?</a></span><br>
+      <span class="gen"><a href="#18" class="postlink">どのように投票の削除/編集を行うことができますか?</a></span><br>
+      <span class="gen"><a href="#19" class="postlink">何故フォーラムにアクセスできないのでしょうか?</a></span><br>
+
+      <span class="gen"><a href="#20" class="postlink">何故投票が行えないのでしょうか?</a></span><br>
+      <br>
+      <span class="gen"><b>フォーマットとトピックの種類</b></span><br>
+      <span class="gen"><a href="#21" class="postlink">BBCodeとは何でしょうか?</a></span><br>
+      <span class="gen"><a href="#22" class="postlink">HTMLを使うことはできますか?</a></span><br>
+      <span class="gen"><a href="#23" class="postlink">スマイリーとは何でしょうか?</a></span><br>
+
+      <span class="gen"><a href="#24" class="postlink">記事の本文中に画像を載せることはできますか?</a></span><br>
+      <span class="gen"><a href="#25" class="postlink">重要トピックとは何でしょうか?</a></span><br>
+      <span class="gen"><a href="#26" class="postlink">告知トピックとは何でしょうか?</a></span><br>
+      <span class="gen"><a href="#27" class="postlink">ロックトピックとは何でしょうか?</a></span><br>
+      <br>
+      <span class="gen"><b>ユーザーレベルとグループ</b></span><br>
+
+      <span class="gen"><a href="#28" class="postlink">管理者とは何でしょうか?</a></span><br>
+      <span class="gen"><a href="#29" class="postlink">モデレーターとは何でしょうか?</a></span><br>
+      <span class="gen"><a href="#30" class="postlink">ユーザーグループとは何でしょうか?</a></span><br>
+      <span class="gen"><a href="#31" class="postlink">どのようにグループに参加することができますか?</a></span><br>
+      <span class="gen"><a href="#32" class="postlink">どのようにグループのモデレーターになることができますか?</a></span><br>
+      <br>
+
+      <span class="gen"><b>PM(プライベートメッセージ)</b></span><br>
+      <span class="gen"><a href="#33" class="postlink">プライベートメッセージを送信できません。</a></span><br>
+      <span class="gen"><a href="#34" class="postlink">読みたくないPMを定期的に受信しています。</a></span><br>
+      <span class="gen"><a href="#35" class="postlink">この掲示板のユーザーによって、スパム等が自分のメールアドレスに送信されています。</a></span><br>
+      <br>
+      <span class="gen"><b>phpBB 2関連の情報</b></span><br>
+
+      <span class="gen"><a href="#36" class="postlink">phpBB 2を作成したのは誰でしょうか?</a></span><br>
+      <span class="gen"><a href="#37" class="postlink">必要な機能がありません。</a></span><br>
+      <span class="gen"><a href="#38" class="postlink">この掲示板に関連した不正・法的問題については誰に問い合わせればいいのでしょうか?</a></span><br>
+      <br>
+    </td>
+  </tr>
+  <tr>
+
+    <td class="catBottom" height="28">&nbsp;</td>
+  </tr>
+</tbody></table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq1.inc b/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq1.inc
new file mode 100644 (file)
index 0000000..98efcb7
--- /dev/null
@@ -0,0 +1,53 @@
+<table class="forumline" align="center" border="0" cellpadding="3" cellspacing="1" width="100%">
+  <tbody><tr>
+    <td class="catHead" align="center" height="28"><span class="cattitle">ログインと登録に関する問題</span></td>
+  </tr>
+  <tr>
+
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="0"></a><b>何故ログインできないのでしょうか?</b></span><br><span class="postbody">ユーザー登録は行いましたか?ログインするためにはユーザー登録を行う必要があります。あるいは掲示板の使用を禁止されていますか(禁止されている場合は画面に禁止されていると表示されます)? 使用を禁止されている場合は、管理者に何故禁止されたのかを問い合わせる必要があります。上記のことが原因でないにも関わらずログインができない場合は、ログイン時の名前とパスワードを確かめてください。通常はこれが問題であることが多いですが、これでもない場合は管理者に問い合わせてください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="1"></a><b>登録は必ずしなければいけないですか?</b></span><br><span class="postbody">掲示板の管理方針によっては、ログインしなくても投稿するできる場合がありますので、必ずしも登録する必要はありません。しかし、登録をすることでユーザー画像の使用、プライベートメッセージ(PM)の使用、仲間のユーザーへのメール送信、グループの参加など様々な機能にアクセスすることができるようになります。登録をしていないゲストユーザーの場合は、利用できる機能が登録ユーザーよりも少ないです。登録は数分で行うことができますので、掲示板をよく使う場合はユーザー登録することをお勧めします。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="2"></a><b>何故自動的にログオフしてしまうのでしょうか?</b></span><br><span class="postbody">「自動ログインを有効にする」のボックスをチェックしていない場合は、一時的にしかログインしません。 常にログイン状態でありたい場合は、このボックスをチェックしてからログインします。この自動ログイン機能は図書館、インターネット喫茶、大学などの共有されたコンピューター環境では利用しないことをお勧めします。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="3"></a><b>オンライン状態のユーザーとして名前をリストに表示されないようにするにはどうすればいいのでしょうか?</b></span><br><span class="postbody">ユーザー設定にある「オンラインステータスを隠す」を「はい」にすると、あなたのオンライン状態は管理人以外には表示されません。この場合は隠れユーザーとして数えられます。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="4"></a><b>パスワードが無くなってしまいました。</b></span><br><span class="postbody">無くしたパスワードを取り戻すことはできませんが、パスワードを再発行することができます。パスワードを再発行する場合は、ログイン画面に入って「パスワードを忘れてしまいました」を選択し、登録した名前とメールアドレスを入力して送信します。再発行されたパスワードは、入力したメールアドレスに送信されます。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="5"></a><b>登録したのにログインすることができません。</b></span><br><span class="postbody">まず最初に正しい名前とパスワードを入力しているかを確認してください。両方とも正しい場合は、次の2つが問題である可能性があります。1つ目は、掲示板がCOPPA(子供のオンライン・プライバシー保護法)の設定を有効にしている場合、13歳未満として登録しているユーザーは与えられた指示に従う必要があります。2つ目は、アカウントをアクティブにしたかを確認してください。掲示板の設定によっては、登録したアカウントのアクティベーションを行わないとアカウントが有効になりません。アクティベーションが必要かどうかは登録完了時に知らされます。アクティブ用のメールが送られているはずなので文章の指示に従ってアクティベーションを行ってください。メールが送信されていない場合は、登録時に正しいメールアドレスを入力したかを確認してください。アカウントのアクティベーション機能が使われている理由の一つとして、無作法なユーザーによる匿名性の乱用等を防ぐということが挙げられます。正しいメールアドレスを入力したにも関わらず登録できない場合は、掲示板の管理者に問い合わせてください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="6"></a><b>過去に登録したのにログインできません。</b></span><br><span class="postbody">最も可能性のある理由は、間違った名前とパスワードでログインしようとしているため(登録した時に送信されたメールに載っているアカウントを確認してください)、又は、管理者が何らかの理由であなたのアカウントを削除したためでしょう。後者が当てはまる人は、投稿した経験があるでしょうか?管理者によってはデータベースのサイズを小さくするために、登録してから全く投稿を行わないユーザーのアカウントを削除することがあります。この場合は再び登録をして、積極的に議論に参加しましょう。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+</tbody></table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq2.inc b/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq2.inc
new file mode 100644 (file)
index 0000000..95446c3
--- /dev/null
@@ -0,0 +1,53 @@
+<table class="forumline" align="center" border="0" cellpadding="3" cellspacing="1" width="100%">
+  <tbody><tr>
+    <td class="catHead" align="center" height="28"><span class="cattitle">ユーザー設定</span></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="7"></a><b>どのようにユーザー設定を変更できますか?</b></span><br><span class="postbody">全ての設定はデータベースに保管されています。ユーザー設定を変更する場合は、通常ページの上のの部分にあるメニューの「ユーザー設定」をクリックしてください。この画面で全てのユーザー設定を変更することができます。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="8"></a><b>時刻が正しくありません。</b></span><br><span class="postbody">設定しているタイムゾーンによって、時刻が正しく表示されていない場合があります。この場合は、ユーザー設定で時間が合うようにタイムゾーンを設定する必要があります。タイムゾーン等のユーザー設定は登録したユーザーしか行うことができないので注意してください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="9"></a><b>タイムゾーン設定を変更しても時刻が正しくありません。</b></span><br><span class="postbody">正しいタイムゾーン設定を行っても時刻が正しくない場合、その問題のほとんどがサマータイムによるものです。掲示板の時刻システムはサマータイムに対応していないので、正しい時刻を表示させたい場合は、タイムゾーン設定を1時間ずらす必要があります。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="10"></a><b>掲示板の言語に私の使用する言語がありません。</b></span><br><span class="postbody">使用したい言語がない理由は、その言語ファイルが掲示板に導入されていないか、誰も基本言語ファイル(基本言語は英語)をその言語に翻訳していないかのどちらかです。使用したい言語ファイルが存在する場合は、掲示板の管理者に導入してもらいます。もしも使用したい言語ファイルが存在しない場合は、是非とも翻訳して言語ファイルを作ってください。詳細はphpBB Groupのウェブサイトを見てください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="11"></a><b>どのように名前の下に画像を表示できますか?</b></span><br><span class="postbody">名前の下に表示される画像は2種類あります。一つは投稿数に応じたランクの画像です。もう一つはユーザー画像です。ユーザー画像は一般的に各ユーザーの好きな画像を選択することができます。掲示板の設定によって定められたユーザー画像しか使えなかったり、一切ユーザー画像が使えない場合があります。ユーザー画像を一切使用できない場合は、どうしてユーザー画像が使用できないかを管理者に問い合わせてください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="12"></a><b>どのようにランクを変更できますか?</b></span><br><span class="postbody">基本的にランクを変更することはできません。ほとんどの掲示板は、投稿数に応じたランク、管理者やモデレーター等の特定の権限を持つユーザーのみに表示されるランクを使用しています。ランクを上げるために掲示板に無駄な記事を投稿しないようにしてください。場合によっては、ランクを下げられたり、アカウントを削除される可能性があります。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="13"></a><b>メールアイコンを使ってユーザーにメールを送信しようとするとログイン画面が表示されます。</b></span><br><span class="postbody">残念ながら掲示板によるメール送信は登録ユーザーしか行うことができません(掲示板によるメール送信機能は掲示板の設定によって無効になっている場合があります)。これは匿名ユーザーによるメールを使った悪質な行為を防ぐためです。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+</tbody></table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq3.inc b/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq3.inc
new file mode 100644 (file)
index 0000000..40bd18d
--- /dev/null
@@ -0,0 +1,54 @@
+<table class="forumline" align="center" border="0" cellpadding="3" cellspacing="1" width="100%">
+  <tbody><tr>
+    <td class="catHead" align="center" height="28"><span class="cattitle">投稿に関する問題</span></td>
+
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="14"></a><b>どのようにトピックを投稿できますか?</b></span><br><span class="postbody">新規トピックのボタンをクリックすれば投稿することができます。掲示板の設定によっては、記事を投稿するために登録を行っている必要があります。フォーラム画面とトピック画面の右下に自分ができるアクションが表示されます。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="15"></a><b>どのように記事を削除/編集できますか?</b></span><br><span class="postbody">一般のユーザーは自分の記事の削除/編集しか行えません。編集を行う場合は、編集したい記事の編集ボタンをクリックします。その記事に返信がある場合は、編集後に記事に編集した回数が表示されます。返信のない記事を編集する場合や、モデレーターと管理者が編集する場合は編集回数は表示されません。削除に関しては、一般のユーザーは返信のある記事を削除することができませんので注意してください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="16"></a><b>どのように自分の記事にサインを追加できますか?</b></span><br><span class="postbody">サインを追加するためにはユーザー設定を行う必要があります。ユーザー設定画面の「サイン」の欄に追加したいサインを入力して設定します。そして投稿画面で「サインを有効にする」をチェックすれば、自分の記事の本文の一番下にサインを追加することができます。ユーザー設定画面の「サインを常に有効にする」を有効にしていれば、投稿画面の「サインを有効にする」は常にチェックされた状態になります(チェックを外せばサインは追加されません)。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="17"></a><b>どのように記事に投票を追加できますか?</b></span><br><span class="postbody">投票を追加する場合は、新規トピックを投稿するときに「投票の追加/編集」の欄を使います。ここで投票のお題と選択肢を最低2つ作ります(選択肢を作るときは「選択肢を追加」をクリックしてください)。投票期間を設けることもできますが、特に期間を設けない場合は0に設定してください。ちなみに選択肢の数は制限されています(数の上限は掲示板の設定によります)。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="18"></a><b>どのように投票の削除/編集を行うことができますか?</b></span><br><span class="postbody">投票の削除/編集は投票を作成したユーザー、モデレーター、管理者しか行うことができません。投票の削除/編集は、記事の編集ボタンをクリックし、投票関連の情報の削除/編集を行います。一票でもはいっている投票の編集/削除は行うことができませんので注意してください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="19"></a><b>何故フォーラムにアクセスできないのでしょうか?</b></span><br><span class="postbody">一部のフォーラムは特定のグループやユーザーしか観閲できないように制限がかかっていることがあります。これらのフォーラムを使う権限は、モデレーターと管理人しか与えることができないので、必要に応じて権限を与えてもらうようにしてください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="20"></a><b>何故投票が行えないのでしょうか?</b></span><br><span class="postbody">投票の混乱を招くような大量投稿などを防ぐため、登録ユーザーしか投票を行うことはできません。登録ユーザーなのに投票が行えない場合は、適切なアクセス権限が与えられていない可能性があります。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+
+  </tr>
+</tbody></table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq4.inc b/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq4.inc
new file mode 100644 (file)
index 0000000..4e6e9fb
--- /dev/null
@@ -0,0 +1,53 @@
+<table class="forumline" align="center" border="0" cellpadding="3" cellspacing="1" width="100%">
+  <tbody><tr>
+    <td class="catHead" align="center" height="28"><span class="cattitle">フォーマットとトピックの種類</span></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="21"></a><b>BBCodeとは何でしょうか?</b></span><br><span class="postbody">BBCodeとは特殊なHTMLの実行コードです。BBCodeの使用は管理者によって設定されていますので、設定でBBCodeが無効となっている場合は使うことができません。BBCodeが有効となっている場合でも、ユーザーは投稿画面でBBCodeを無効にすることができます。BBCodeはHTMLと似たスタイルをしていて、タグは&lt; &gt;ではなく[ ]が用いられます。使用するテンプレートによってBBCodeは記事内容投稿欄の上にBBCode用のボタンがあり、これ使うことで直接BBCodeタグを入力することなく挿入することができます。詳細は投稿画面のオプションにある「BBCode」のリンクをクリックしてください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="22"></a><b>HTMLを使うことはできますか?</b></span><br><span class="postbody">HTMLを使用できるかは掲示板の設定によって異なります。HTMLの使用が許可されている場合でも、全てのHTMLタグを使えるわけではありません。これは一部のHTMLタグを使用することで表示等において問題が生じてしまうのを防ぐ安全策です。HTMLを使用したくない場合は、投稿画面で「HTMLを無効にする」をチェックしてください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="23"></a><b>スマイリーとは何でしょうか?</b></span><br><span class="postbody">スマイリー(別称はエモーションアイコン)とは感情を表現するために用いられる小さな画像のことです。例えば、:) は嬉しい感情、:( は悲しい感情を表します。投稿画面にスマイリー一覧が載っています。投稿画面では複数の記号として表示されますが、記事ではスマイリー画像として表示されます。ただし、スマイリーが多くなると記事が読みづらくなりますので、スマイリーの乱用はしないでください。スマイリーを乱用した記事は、編集/削除/移動対象となる可能性があります。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="24"></a><b>記事の本文中に画像を載せることはできますか?</b></span><br><span class="postbody">本文中の画像を載せることはできます。しかし、画像を掲示板上にアップロードする機能はありません。そのため、インターネット上に存在する画像を利用する必要があります。サーバーでない限り、自分のコンピューター内にある画像にリンクしても掲示板では表示されません。また、アクセスにパスワード等が必要なサイト内の画像、HotmailやYahooのメールボックス内の画像等も利用できませんので注意してください。画像を表示させるには画像URLを<b>[img][/img]</b>で囲みます(HTMLの使用が許可されている場合はHTMLタグも使用できます)。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="25"></a><b>重要トピックとは何でしょうか?</b></span><br><span class="postbody">重要トピックは、掲示板利用者であればすぐに読むべき重要な情報が載っているトピックです。重要トピックはフォーラムの各ページの一番上に表示されます。重要トピックに返信を行えるかどうかはユーザーの権限によります。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="26"></a><b>告知トピックとは何でしょうか?</b></span><br><span class="postbody">告知トピックとは、最初のページの重要トピックの下(重要トピックがない場合は一番上)に表示されるトピックで、比較的重要な情報が含まれています。そのため、告知トピックは読めるときに読んでください。告知トピックに返信を行えるかどうかはユーザーの権限によります。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="27"></a><b>ロックトピックとは何でしょうか?</b></span><br><span class="postbody">ロックトピックとは返信が禁止されているトピック(投票がある場合は投票も禁止されています)です。様々な理由により、モデレーターや管理者によってトピックがロックされることがあります。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+</tbody></table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq5.inc b/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq5.inc
new file mode 100644 (file)
index 0000000..e11baa8
--- /dev/null
@@ -0,0 +1,39 @@
+<table class="forumline" align="center" border="0" cellpadding="3" cellspacing="1" width="100%">
+  <tbody><tr>
+    <td class="catHead" align="center" height="28"><span class="cattitle">ユーザーレベルとグループ</span></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="28"></a><b>管理者とは何でしょうか?</b></span><br><span class="postbody">管理者とは、掲示板における最高権限を持つ人のことです。管理者は、パーミッション設定、特定のユーザーの掲示板使用の禁止、グループやモデレーターの作成等掲示板における全ての設定と操作を行うことができます。もちろん管理者は、全てのフォーラムにおいて完全なモデレーター権限を持っています。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="29"></a><b>モデレーターとは何でしょうか?</b></span><br><span class="postbody">モデレーターとは、フォーラムの管理を行う人のことです。モデレーターは、他人の記事の削除/編集/ロック/移動等の権限を持っています。基本的にモデレーターの役割とは、フォーラムの趣旨を外れた投稿、規約に反する投稿などを削除等を行うことで、そのフォーラムの秩序を保つことです。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="30"></a><b>ユーザーグループとは何でしょうか?</b></span><br><span class="postbody">ユーザーグループとは、管理者がユーザーをグループ分けする方法の一つです。ユーザーグループはグループと呼ぶこともあります。各ユーザーは複数のグループに所属することができて、各グループには個々のアクセス権限が適用されます。これによって管理者は、複数のモデレーターをグループにいれることで管理することが容易になったり、特定のユーザーしか入れないフォーラムを提供することも容易になります。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="31"></a><b>どのようにグループに参加することができますか?</b></span><br><span class="postbody">グループに参加する場合は、ページの上の部分にある「グループ」をクリックしてください。グループ画面に入ると、全てのグループが表示されます。全てのグループが誰でも参加できるオープングループとは限らず、特定のユーザーしか受け入れないクローズドグループ、メンバーが一切表示されない隠れグループもあります。オープングループの場合は、正しい手順で参加の申請を行ってください。参加の申請がグループのモデレーターに承認されると、晴れてグループのメンバーとなることができます。場合によっては、グループに参加する理由をグループのモデレーターに問われることもあります。何らかの理由で参加の申請を却下された場合は、グループのモデレーターを問い詰めるようなことはしないでください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="32"></a><b>どのようにグループのモデレーターになることができますか?</b></span><br><span class="postbody">グループは管理者によって作られるものですが、その際に管理者はグループを管理する人間を任命します。これがグループのモデレーターです。一般的にグループの作成を申請した人がグループのモデレーターとなることが多いようです。新しいグループを作りたい場合は、PM(プライベートメッセージ)等を使って管理者にグループ作成に関して問い合わせてください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+</tbody></table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq6.inc b/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq6.inc
new file mode 100644 (file)
index 0000000..aa6f0b7
--- /dev/null
@@ -0,0 +1,26 @@
+<table class="forumline" align="center" border="0" cellpadding="3" cellspacing="1" width="100%">
+  <tbody><tr>
+    <td class="catHead" align="center" height="28"><span class="cattitle">PM(プライベートメッセージ)</span></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="33"></a><b>プライベートメッセージを送信できません。</b></span><br><span class="postbody">3つの理由があると考えられます。1つ目は登録ユーザーでないため、(PMは登録ユーザーしか使用できない機能です)。2つ目はその掲示板でPMの使用が許可されていないため、3つ目は管理者があなたのPMの使用を禁止しているためです。3つ目の場合は、管理者に何故PMの使用を禁止されたかを問い合わせてください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="34"></a><b>読みたくないPMを定期的に受信しています。</b></span><br><span class="postbody">次期バージョンでは、プライベートメッセージシステムに無視リスト機能を追加する予定です。現在のバージョンの対策は、管理者に報告して対処してもらうしかありません。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="35"></a><b>この掲示板のユーザーによって、スパム等が自分のメールアドレスに送信されています。</b></span><br><span class="postbody">まことに残念な出来事です。掲示板にはセーフガード機能があり、誰が掲示板を介してそのようなメールを送ったかを探知できます。今まで受信したスパム等のメールのコピーを管理者に送信してください。管理者に送信するコピーにはヘッダー情報が含まれていることを確認してください。これにより、管理者はこの問題に対処することができます。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+
+  </tr>
+</tbody></table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq7.inc b/trunk/NP_SubSilver/skins/subsilver/japanese-utf8/faq7.inc
new file mode 100644 (file)
index 0000000..b5c7f77
--- /dev/null
@@ -0,0 +1,26 @@
+<table class="forumline" align="center" border="0" cellpadding="3" cellspacing="1" width="100%">
+  <tbody><tr>
+    <td class="catHead" align="center" height="28"><span class="cattitle">phpBB 2関連の情報</span></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="36"></a><b>phpBB 2を作成したのは誰でしょうか?</b></span><br><span class="postbody">このソフトウェアは<a href="http://www.phpbb.com/" target="_blank">phpBB Group</a>によって作られたもので、著作権はphpBB Groupが有しています。phpBB 2は、GNU 一般公有使用許諾書に定められている条件に従って使用や配布が許諾されています。詳細については、phpBB Groupのサイトを見てください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+
+  </tr>
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row2" align="left" valign="top"><span class="postbody"><a name="37"></a><b>必要な機能がありません。</b></span><br><span class="postbody">このソフトウェアの作成を行ったのはphpBB Groupで、著作権はphpBB Groupが有しています。その機能が必要なものだと思う場合は、phpbb.comのサイトを訪れて、php Groupに提案してみてください。新機能の提案・要望は、決してphpbb.comの掲示板には書き込まないでください。新機能等の追加の作業はsourceforgeで行われています。フォラームをよく読み、既に提案しようとしている新機能の追加が決まっているかを確認してから、新機能の提案・要望の手順を行ってください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+
+  <tr>
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+  <tr>
+    <td class="row1" align="left" valign="top"><span class="postbody"><a name="38"></a><b>この掲示板に関連した不正・法的問題については誰に問い合わせればいいのでしょうか?</b></span><br><span class="postbody">この掲示板の管理者に問い合わせてください。管理者が誰か分からない場合は、モデレーターに管理者が誰なのかを尋ねてみてください。モデレーターから応答がない場合は、ドメインの管理者等に問い合わせてください(whois lookupを使って調べてみてください)。phpBB Groupには、誰が何処でどのようにこの掲示板が使用するかに干渉する権限は全くないということに注意してください。phpBB Groupの方に直接phpbb.comやphpBBのソフトウェアと関わりのない法的問題に関連することを問い合わせても無意味です。第三者によるphpBBの使用に関してphpBB Groupにメールで問い合わせても、回答は簡単なものか全くされないものと考えてください。<br><a class="postlink" href="#top">トップに移動</a></span></td>
+  </tr>
+  <tr>
+
+    <td class="spaceRow" height="1"><img src="templates/subSilver/images/spacer.gif" alt="" height="1" width="1"></td>
+  </tr>
+</tbody></table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/legend.inc b/trunk/NP_SubSilver/skins/subsilver/legend.inc
new file mode 100644 (file)
index 0000000..e0442e2
--- /dev/null
@@ -0,0 +1,59 @@
+<br />
+<%if(category)%>
+
+<table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
+  <tbody><tr>
+    <td align="left" valign="top"><table border="0" cellpadding="0" cellspacing="3">
+      <tbody><tr>
+        <td align="left" width="20"><img src="<%skinfile(images/folder_new.gif)%>" alt="新しい記事有り" height="18" width="19" /></td>
+        <td class="gensmall">新しい記事有り</td>
+        <td>&nbsp;&nbsp;</td>
+        <td align="center" width="20"><img src="<%skinfile(images/folder.gif)%>" alt="新しい記事無し" height="18" width="19" /></td>
+        <td class="gensmall">新しい記事無し</td>
+        <td>&nbsp;&nbsp;</td>
+        <td align="center" width="20"><img src="<%skinfile(images/folder_announce.gif)%>" alt="重要トピック" height="18" width="19" /></td>
+        <td class="gensmall">重要トピック</td>
+      </tr>
+      <tr>
+        <td align="center" width="20"><img src="<%skinfile(images/folder_new_hot.gif)%>" alt="新しい記事有り(人気)" height="18" width="19" /></td>
+        <td class="gensmall">新しい記事有り(人気)</td>
+        <td>&nbsp;&nbsp;</td>
+        <td align="center" width="20"><img src="<%skinfile(images/folder_hot.gif)%>" alt="新しい記事無し(人気)" height="18" width="19" /></td>
+        <td class="gensmall">新しい記事無し(人気)</td>
+        <td>&nbsp;&nbsp;</td>
+        <td align="center" width="20"><img src="<%skinfile(images/folder_sticky.gif)%>" alt="告知トピック" height="18" width="19" /></td>
+        <td class="gensmall">告知トピック</td>
+      </tr>
+      <tr>
+        <td class="gensmall"><img src="<%skinfile(images/folder_lock_new.gif)%>" alt="新しい記事有り(ロック)" height="18" width="19" /></td>
+        <td class="gensmall">新しい記事有り(ロック)</td>
+        <td>&nbsp;&nbsp;</td>
+        <td class="gensmall"><img src="<%skinfile(images/folder_lock.gif)%>" alt="新しい記事無し(ロック)" height="18" width="19" /></td>
+        <td class="gensmall">新しい記事無し(ロック)</td>
+      </tr>
+    </tbody></table></td>
+    <td align="right"><span class="gensmall">
+      新規投稿: <b><%if(subSilver,member,can=postnew)%>可<%else%>不可<%endif%></b><br />
+      返信: <b><%if(subSilver,member,can=reply)%>可<%else%>不可<%endif%></b><br />
+      自分の記事の編集: <b><%if(subSilver,member,can=editcomment)%>可<%else%>不可<%endif%></b><br />
+      自分の記事の削除: <b><%if(subSilver,member,can=editcomment)%>可<%else%>不可<%endif%></b><br />
+    </span></td>
+  </tr>
+</tbody></table>
+
+<%else%>
+
+<table cellspacing="3" border="0" align="center" cellpadding="0">
+  <tr>
+  <td width="20" align="center"><img src="<%skinfile(images/folder_new_big.gif)%>" alt="新しい記事有り" /></td>
+  <td><span class="gensmall">新しい記事有り</span></td>
+  <td>&nbsp;&nbsp;</td>
+  <td width="20" align="center"><img src="<%skinfile(images/folder_big.gif)%>" alt="新しい記事無し" /></td>
+  <td><span class="gensmall">新しい記事無し</span></td>
+  <td>&nbsp;&nbsp;</td>
+  <td width="20" align="center"><img src="<%skinfile(images/folder_locked_big.gif)%>" alt="ロック状態" /></td>
+  <td><span class="gensmall">ロック状態</span></td>
+  </tr>
+</table>
+
+<%endif%>
diff --git a/trunk/NP_SubSilver/skins/subsilver/loginform.inc b/trunk/NP_SubSilver/skins/subsilver/loginform.inc
new file mode 100644 (file)
index 0000000..5ea921a
--- /dev/null
@@ -0,0 +1,8 @@
+<table width="100%" cellpadding="3" cellspacing="1" border="0" class="forumline">
+  <tr>
+  <td class="catHead" height="28"><a name="login"></a><span class="cattitle">ログイン</span></td>
+  </tr>
+  <tr>
+  <td class="row1" align="center" valign="middle" height="28"><div class="gensmall"><%loginform%></div> </td>
+</tr>
+</table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/member.inc b/trunk/NP_SubSilver/skins/subsilver/member.inc
new file mode 100644 (file)
index 0000000..2ffabbe
--- /dev/null
@@ -0,0 +1,83 @@
+<table align="center" border="0" cellpadding="2" cellspacing="2" width="100%">
+  <tbody><tr>
+       <td align="left"><span class="nav"><a href="<%sitevar(url)%>" class="nav"><%sitevar(name)%> フォーラム一覧</a></span></td>
+
+  </tr>
+</tbody></table>
+
+<table class="forumline" align="center" border="0" cellpadding="3" cellspacing="1" width="100%">
+  <tbody><tr>
+       <th class="thHead" colspan="2" height="25" nowrap="nowrap">ユーザー情報 :: <%member(realname)%></th>
+  </tr>
+  <tr>
+       <td class="catLeft" align="center" height="28" width="40%"><b><span class="gen">ユーザー画像</span></b></td>
+
+       <td class="catRight" width="60%"><b><span class="gen"><a href="<%self%>?memberid=<%member(id)%>"><%member(realname)%></a>の詳細</span></b>
+          <%if(subSilver,member,position=ownerofpage)%>
+            <a href="<%adminurl%>?action=memberedit&amp;memberid=<%member(id)%>">
+            <img src="<%skinfile(images/lang_english/icon_edit.gif)%>" /></a>
+          <%endif%>
+        </td>
+  </tr>
+  <tr>
+       <td class="row1" align="center" height="6" valign="top"><br /><span class="postdetails">
+      <%if(subSilver,member,position=superadmin)%>Administrator
+      <%elseif(subSilver,member,position=blogadmin)%>Moderator
+      <%endif%>
+    </span></td>
+       <td class="row1" rowspan="3" valign="top"><table border="0" cellpadding="3" cellspacing="1" width="100%">
+               <tbody><tr>
+                 <td align="right" nowrap="nowrap" valign="middle"><span class="gen">登録日:&nbsp;</span></td>
+
+                 <td width="100%"><b><span class="gen"><%subSilver(member,regdate,subSilver/index)%> 頃</span></b></td>
+               </tr>
+               <tr>
+                 <td align="right" nowrap="nowrap" valign="top"><span class="gen">投稿数:&nbsp;</span></td>
+                 <td valign="top"><b><span class="gen"><%subSilver(member,replies)%></span></b><br /><span class="genmed">[全体の割合: <%subSilver(member,percent)%>% / 1日の投稿数: <%subSilver(member,repliesperday)%>]</span> <br /><span class="genmed"><a href="<%self%>?special=search&amp;search_author=<%member(realname)%>" class="genmed"><%member(realname)%>の投稿記事を全て検索</a></span></td>
+               </tr>
+
+               <tr>
+                 <td align="right" nowrap="nowrap" valign="middle"><%if(subSilver,member,has=url)%><span class="gen"><span style="white-space: nowrap;">ホームページ:&nbsp;</span></span><%endif%></td>
+                 <td><span class="gen"><b><%subSilver(member,url)%></b></span></td>
+
+               </tr>
+
+         </tbody></table>
+       </td>
+  </tr>
+  <tr>
+       <td class="catLeft" align="center" height="28"><b><span class="gen">連絡先: <%member(realname)%> </span></b></td>
+  </tr>
+  <tr>
+
+       <td class="row1" valign="top"><table border="0" cellpadding="3" cellspacing="1" width="100%">
+               <tbody><tr>
+                 <td align="right" nowrap="nowrap" valign="middle"><span class="gen">プライベートメッセージ:</span></td>
+                 <td class="row1" valign="middle">
+        <form method="post" action="">
+            <input type="image" name="subSilver_action" value="sendmessage" src="<%skinfile(images/lang_english/icon_pm.gif)%>" alt="メッセージを送信" title="メッセージを送信" />
+        </form></td>
+               </tr>
+         </tbody></table>
+       </td>
+  </tr>
+</tbody></table>
+
+<%if(subSilver,postVar,subSilver_action=sendmessage)%>
+<table width="100%" cellspacing="0" border="0" align="center" cellpadding="2">
+  <tr><td><span class="gensmall">&nbsp;</span></td></tr>
+</table>
+<table class="forumline" border="0" cellpadding="3" cellspacing="1" width="100%">
+       <tbody><tr>
+               <th class="thHead" colspan="2" height="25"><b>プライベートメッセージ</b></th>
+       </tr>
+       <tr>
+      <td  class="commentform">
+        <table align="center" border="0"><tr><td>
+          <%membermailform%>
+        </td></tr></table>
+      </td>
+       </tr>
+  </tbody>
+</table>
+<%endif%>
diff --git a/trunk/NP_SubSilver/skins/subsilver/memberlist.inc b/trunk/NP_SubSilver/skins/subsilver/memberlist.inc
new file mode 100644 (file)
index 0000000..fd82735
--- /dev/null
@@ -0,0 +1,45 @@
+<table align="center" border="0" cellpadding="2" cellspacing="2" width="100%">
+<tbody><tr>
+  <td class="nav" align="left" valign="middle" width="100%"><span class="nav">&nbsp;&nbsp;&nbsp;<a href="<%sitevar(url)%>" class="nav"><%sitevar(name)%> フォーラム一覧</a></span></td>
+  <td class="nav" align="right" nowrap="nowrap" valign="bottom">
+    <%ifnot(hasplugin,PageSwitch)%>
+    <%elseif(PageSwitch,limit,10)%>ページ移動
+    <%PageSwitch(prev,前へ)%>
+    <%PageSwitch(index,2)%>
+    <%PageSwitch(next,次へ)%>
+    <%endif%>
+  </td>
+</tr></tbody></table>
+
+<table class="forumline" border="0" cellpadding="3" cellspacing="1" width="100%">
+<tbody><tr>
+  <th class="thCornerL" height="25" nowrap="nowrap">
+    #&nbsp;<%subSilver(sortbutton,ソート,images/s_asc.png,id_asc,images/s_desc.png,id_desc)%>
+  </th>
+  <th class="thTop" nowrap="nowrap">&nbsp;</th>
+  <th class="thTop" nowrap="nowrap">
+    名前&nbsp;<%subSilver(sortbutton,ソート,images/s_asc.png,name_asc,images/s_desc.png,name_desc)%>
+  </th>
+  <th class="thTop" nowrap="nowrap">
+    登録日&nbsp;<%subSilver(sortbutton,ソート,images/s_asc.png,id_asc,images/s_desc.png,id_desc)%>
+  </th>
+  <th class="thTop" nowrap="nowrap"><span style="white-space: nowrap;">投稿記事</span></th>
+  <th class="thCornerR" nowrap="nowrap"><span style="white-space: nowrap;">ホームページ</span></th>
+</tr>
+
+<%if(hasplugin,PageSwitch)%>
+<%subSilver(memberlist,subSilver/index,10)%>
+<%else%>
+<%subSilver(memberlist,subSilver/index,10000)%>
+<%endif%>
+
+<tr>
+  <td class="catBottom" colspan="6" align="center" height="28" valign="middle">
+    <div class="genmed"><form method="get" action="<%self%>">
+      <input type="hidden" name="special" value="member" />
+      名前で検索: <input type="text" name="search_author" value="" />
+      <input type="submit" value="検索" />
+    </form></div>
+  </td>
+</tr>
+</tbody></table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/nucleus.css b/trunk/NP_SubSilver/skins/subsilver/nucleus.css
new file mode 100644 (file)
index 0000000..b44628e
--- /dev/null
@@ -0,0 +1,115 @@
+img {
+       border: none;
+} 
+
+/*-------------------------------------------------
+  Forms
+-------------------------------------------------*/
+.loginform, .searchform
+{
+       margin: 5px 0;
+}
+.commentform, .mailform
+{
+       margin-top: 10px;
+    padding: 10px;
+    background: #EEEEEE;
+    /* Rounded borders, for Mozilla browsers */
+    /* -moz-border-radius: 10px; */
+}
+.commentform img{
+    margin: 5px 0 0 0;
+}
+.formfield
+{
+       font-size: 11px;
+       background: white;
+       color: #494949;
+       border-top: 1px solid #868686;
+       border-left: 1px solid #868686;
+       border-bottom: 1px solid #D4D2CF;
+       border-right: 1px solid #D4D2CF;
+       margin: 1px 0 0 0;
+}
+.formbutton
+{
+       font-size: 11px;
+       background: white;
+       color: #494949;
+       border-top: 1px solid #D4D2CF;
+       border-left: 1px solid #D4D2CF;
+       border-bottom: 1px solid #868686;
+       border-right: 1px solid #868686;
+       margin: 1px 0 0 0;
+}
+.commentform .formfield, .commentform .formbutton {
+       display: block;
+}
+.searchform .formfield
+{
+       width: 130px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.searchform .formbutton
+{
+       width: 60px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+.loginform .formfield
+{
+       width: 130px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.loginform .formbutton
+{
+       width: 60px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+.mainform .formfield
+{
+       width: 280px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.mailform .formbutton
+{
+       width: 100px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+#nucleus_cf_title, #nucleus_cf_name, #nucleus_cf_mail, #nucleus_cf_email
+{
+    width: 700px;
+    font-family: Arial, Trebuchet MS, Verdana, sans-serif;
+}
+.commentform textarea, .commentform .formfield, .mailform textarea, .mailform .formfield
+{
+    width: 700px;
+}
+.commentform .formbutton
+{
+       width: 100px;
+       height: 22px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+}
+.error
+{
+       color: red;
+       font-weight: bold;
+}
+/* znSmiley, lines contain '>' */
+.znsm_re {
+       color: #090;
+}
+/* <img /> */
+.znsm_img {
+       vertical-align: middle;
+       border: none;
+}
diff --git a/trunk/NP_SubSilver/skins/subsilver/onlinedata.inc b/trunk/NP_SubSilver/skins/subsilver/onlinedata.inc
new file mode 100644 (file)
index 0000000..1838e6b
--- /dev/null
@@ -0,0 +1,26 @@
+<%ifnot(category)%>
+
+<table width="100%" cellpadding="3" cellspacing="1" border="0" class="forumline">
+  <tr>
+  <td class="catHead" colspan="2" height="28"><span class="cattitle"><a href="viewonline.php?sid=10078eb7dbbadbd85d2f386ceb800a0a" class="cattitle">オンライン管理</a></span></td>
+  </tr>
+  <tr>
+  <td class="row1" align="center" valign="middle" rowspan="2"><img src="<%skinfile(images/whosonline.gif)%>" alt="オンライン管理" /></td>
+  <td class="row1" align="left" width="100%"><span class="gensmall">ユーザーが投稿した記事の総数: <b><%subSilver(userdata,totalreplies)%></b><br />登録ユーザーの数: <b><%subSilver(userdata,number)%></b><br />一番新しい登録ユーザー: <b><a href="<%subSilver(userdata,newestlink)%>"><%subSilver(userdata,newest)%></a></b></span></td>
+  </tr>
+  <tr>
+  <td class="row1" align="left"><%if(hasplugin,OnlineUsers)%>
+    <span class="gensmall">オンライン状態のユーザーは<b><%OnlineUsers(online)%></b>人います :: 登録ユーザー(<%OnlineUsers(member)%>人), ゲストユーザー(<%OnlineUsers(guest)%>人) &nbsp; [ <span style="color:#FFA34F">Administrator</span> ] &nbsp; [ <span style="color:#006600">Moderator</span> ]<br />ユーザー数の記録は <%OnlineUsers(maxonlinenum)%>人 <b>(<%OnlineUsers(recorddate,subSilver/index)%>&nbsp;<%OnlineUsers(recordtime,subSilver/index)%>)</b><br />登録ユーザー: <%OnlineUsers(onlinelist)%></span>
+  <%endif%></td>
+  </tr>
+</table>
+<table width="100%" cellpadding="1" cellspacing="1" border="0">
+<tr>
+       <td align="left" valign="top"><span class="gensmall">
+      <%if(hasplugin,OnlineUsers)%>このデータは、過去<%OnlineUsers(howlong)%>分間の間にアクションを取ったユーザーに基づいたものです
+      <%else%>&nbsp;
+      <%endif%></span></td>
+</tr>
+</table>
+
+<%endif%>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/skins/subsilver/posting.inc b/trunk/NP_SubSilver/skins/subsilver/posting.inc
new file mode 100644 (file)
index 0000000..253393b
--- /dev/null
@@ -0,0 +1,21 @@
+<table align="center" border="0" cellpadding="2" cellspacing="2" width="100%">
+       <tbody><tr>
+               <td align="left"><span class="nav"><a href="<%sitevar(url)%>" class="nav"><%sitevar(name)%> フォーラム一覧</a>
+               -&gt; <a class="nav" href="<%self%>?blogid=<%blogsetting(id)%>&amp;catid=<%category(id)%>"><%category(name)%></a></span></td></span></td>
+       </tr>
+</tbody></table>
+
+<table class="forumline" border="0" cellpadding="3" cellspacing="1" width="100%">
+
+       <tbody><tr>
+               <th class="thHead" colspan="2" height="25"><b>トピックの新規投稿</b></th>
+       </tr>
+       <tr>
+      <td  class="commentform">
+        <table align="center" border="0"><tr><td>
+          <%subSilver(commentform)%>
+        </td></tr></table>
+      </td>
+       </tr>
+  </tbody>
+</table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/regconfirm.inc b/trunk/NP_SubSilver/skins/subsilver/regconfirm.inc
new file mode 100644 (file)
index 0000000..02547e9
--- /dev/null
@@ -0,0 +1,32 @@
+<table align="center" border="0" cellpadding="2" cellspacing="2" width="100%">
+<tbody><tr>
+  <td align="left"><span class="nav"><a class="nav" href="<%sitevar(url)%>"><%sitevar(name)%> フォーラム一覧</a></span></td>
+</tr>
+</tbody></table>
+
+<table class="forumline" border="0" cellpadding="3" cellspacing="1" width="100%">
+<tbody><tr>
+  <th class="thHead" height="25" valign="middle"><%sitevar(name)%> - 登録規約</th>
+</tr>
+<tr>
+  <td class="row1" align="center"><table align="center" border="0" cellpadding="2" cellspacing="2" width="80%">
+  <tbody><tr>
+    <td><span class="genmed"><br>掲示板の管理者とモデレーターは、不適切な記事を発見次第削除/編集するように心がけますが、全ての記事に目を通すことはできません。そのため、この掲示板に投稿される全ての記事はその投稿者の視点と意見を表現するものであり、掲示板管理者、モデレーター、サイト管理者の視点と意見を表現するものではなく、管理人は記事に対する責任を一切負いません(掲示板管理者、モデレーター、サイト管理者自身の記事は除く)。<br><br>口汚い記事、猥褻な言葉、品性を欠く記事、他人を中傷する記事、嫌悪感を与える記事、脅迫的な記事、性的差別につながる記事、法律を違反する記事の投稿は禁止します。この規約を破った場合は、対象ユーザーのアカウント停止が即座に行われます(場合によっては対象ユーザーのプロバイダーに報告されます)。このような処置を実行するために、全ての記事のIPアドレスが記録されています。掲示板管理者、モデレーター、サイト管理者は、自らの判断で掲示板の如何なる記事を削除、編集、移動、ロックする権限があります。あなたが掲示板上で入力した情報をデータベースに保管されます。あなたの同意がない限り、この情報は第三者に公開されることはありませんが、ハッキング等によるデータの損傷や盗難があった場合は掲示板管理者、モデレーター、サイト管理者はその責任を一切負いません。<br><br>この掲示板では、あなたのローカル・コンピューターに情報を保管するためにCookieを使用しています。このCookieは、掲示板の使い勝手の向上させるための情報しか含まれません。メールアドレスは、登録したアカウントの詳細とパスワードを確認するためにだけ使われます(現在のパスワードを忘れた場合、パスワードを再発行する場合にも使われます)。<br /><br />
+
+登録を続ける場合は、これらの規約に同意したものと見なされます。<br /><br /><br />
+
+<div align="center">
+<form method="POST" action="<%self%>?special=register">
+<input type="hidden" name="subSilver_action" value="register_agreed" />
+<input type="submit" value="私は13歳以上です。この規約に同意します。" />
+</form><br />
+<form method="GET" action="<%self%>">
+<input type="submit" value="この規約に同意しません。" />
+</form>
+</div>
+</span></td>
+
+  </tr>
+  </tbody></table></td>
+</tr>
+</tbody></table>
diff --git a/trunk/NP_SubSilver/skins/subsilver/regform.inc b/trunk/NP_SubSilver/skins/subsilver/regform.inc
new file mode 100644 (file)
index 0000000..f165df4
--- /dev/null
@@ -0,0 +1,39 @@
+<table align="center" border="0" cellpadding="2" cellspacing="2" width="100%">
+<tbody><tr>
+  <td align="left"><span class="nav"><a class="nav" href="<%sitevar(url)%>"><%sitevar(name)%> フォーラム一覧</a></span></td>
+</tr>
+</tbody></table>
+
+<form method="post" action="action.php">
+<input type="hidden" name="action" value="createaccount" />
+
+<table class="forumline" border="0" cellpadding="3" cellspacing="1" width="100%">
+<tbody><tr>
+  <th class="thHead" colspan="2" height="25" valign="middle">登録情報</th>
+</tr>
+<tr>
+  <td class="row2" colspan="2"><span class="gensmall">*がついている項目は必ず入力する必要があります</span></td>
+</tr>
+<tr>
+  <td class="row1" width="38%"><span class="gen">ユーザー名: *</span>&nbsp;&nbsp; <small>(only a-z, 0-9)</small></td>
+  <td class="row2"><input class="post" style="width: 400px;" name="name" size="20" maxlength="20" value="" type="text"></td>
+</tr>
+<tr>
+  <td class="row1" width="38%"><span class="gen">本名: *</span></td>
+  <td class="row2"><input class="post" style="width: 400px;" name="realname" size="40" maxlength="40" value="" type="text"></td>
+</tr>
+<tr>
+  <td class="row1" width="38%"><span class="gen">E-mail: *</span>&nbsp;&nbsp; <small>(利用可能なものを。パスワードはここに送信されます。)</small></td>
+  <td class="row2"><input class="post" style="width: 400px;" name="email" size="40" maxlength="40" value="" type="text"></td>
+</tr>
+<tr>
+  <td class="row1" width="38%"><span class="gen">URL:</span></td>
+  <td class="row2"><input class="post" style="width: 400px;" name="url" size="60" maxlength="60" value="" type="text"></td>
+</tr>
+
+<tr>
+  <td class="catSides" colspan="2" height="28"><div style="text-align:center;"><input type="submit" value="アカウントの作成" /></div></td>
+</tr>
+</tbody></table>
+
+</form>
diff --git a/trunk/NP_SubSilver/skins/subsilver/search.inc b/trunk/NP_SubSilver/skins/subsilver/search.inc
new file mode 100644 (file)
index 0000000..1e41af4
--- /dev/null
@@ -0,0 +1,41 @@
+<table align="center" border="0" cellpadding="2" cellspacing="2" width="100%">
+  <tbody><tr>
+    <td align="left" valign="bottom"><span class="maintitle">
+      <%ifnot(subSilver,requestVar,query=)%>"<%query%>"での検索結果
+      <%elseif(subSilver,requestVar,search_author_method=exactly)%><%subSilver(requestVar,search_author)%>の記事を含むトピック一覧
+      <%else%>著者が"<%subSilver(requestVar,search_author)%>"の記事を含むトピック一覧
+      <%endif%>
+      <%if(hasplugin,PageSwitch)%>: <%PageSwitch(found)%>件<%endif%>
+    </span><br /></td>
+  </tr>
+</tbody></table>
+
+<table width="100%" cellspacing="0" cellpadding="2" border="0" align="center">
+  <tr>
+  <td align="left" valign="bottom"><span class="nav"><a href="<%sitevar(url)%>" class="nav"><%sitevar(name)%> フォーラム一覧</a></span>
+  </td>
+  <td class="nav" align="right" nowrap="nowrap" valign="bottom">
+    <%ifnot(hasplugin,PageSwitch)%>
+    <%elseif(PageSwitch,limit,10)%>ページ移動
+    <%PageSwitch(prev,前へ)%>
+    <%PageSwitch(index,2)%>
+    <%PageSwitch(next,次へ)%>
+    <%endif%>
+  </td>
+  </tr>
+</table>
+
+<table class="forumline" border="0" cellpadding="4" cellspacing="1" width="100%">
+<tbody><tr>
+  <th class="thCornerL" height="25" nowrap="nowrap" width="4%">&nbsp;</th>
+  <th class="thTop" nowrap="nowrap">&nbsp;フォーラム&nbsp;</th>
+  <th class="thTop" nowrap="nowrap">&nbsp;<span style="white-space: nowrap;">トピック&nbsp;</span></th>
+  <th class="thTop" align="center" nowrap="nowrap" width="50">&nbsp;<span style="white-space: nowrap;">返信&nbsp;</span></th>
+  <th class="thTop" align="center" nowrap="nowrap" width="100">&nbsp;<span style="white-space: nowrap;">投稿者&nbsp;</span></th>
+  <th class="thTop" align="center" nowrap="nowrap" width="50">&nbsp;<span style="white-space: nowrap;">観閲&nbsp;</span></th>
+  <th class="thCornerR" align="center" nowrap="nowrap">&nbsp;<span style="white-space: nowrap;">最新記事&nbsp;</span></th>
+</tr>
+
+<%searchresults(subsilver/index,10)%>
+
+</tbody></table>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/skins/subsilver/searchform.inc b/trunk/NP_SubSilver/skins/subsilver/searchform.inc
new file mode 100644 (file)
index 0000000..8a9ca4b
--- /dev/null
@@ -0,0 +1,75 @@
+<%subSilver(form,javascript)%>
+
+<form method="get" action="">
+<input type="hidden" name="special" value="search" />
+
+<table class="forumline" border="0" cellpadding="4" cellspacing="1" width="100%">
+  <tbody><tr>
+    <th class="thHead" colspan="4" height="25">検索クエリ</th>
+
+  </tr>
+  <tr>
+    <td class="row1" colspan="2" width="50%"><span class="gen">キーワードを検索:</span><br /><span class="gensmall">検索では <u>AND</u>, <u>OR</u>, <u>NOT</u> を使用することができます。</span></td>
+    <td class="row2" colspan="2" valign="top"><span class="genmed"><input style="width: 300px;" class="post" name="query" size="30" type="text" /></span></td>
+
+  </tr>
+  <tr>
+    <td class="row1" colspan="2"><span class="gen">投稿者を検索:</span></td>
+    <td class="row2" colspan="2" valign="middle"><span class="genmed">
+      <input style="width: 300px;" class="post" name="search_author" size="30" type="text" /><br />
+      <input name="search_author_method" value="exactly" type="radio" /> 完全一致
+      <input name="search_author_method" value="match" type="radio" checked="checked" /> 部分一致
+    </span></td>
+  </tr>
+  <tr>
+    <th class="thHead" colspan="4" height="25">検索オプション</th>
+
+  </tr>
+  <tr>
+    <td class="row1" align="right"><span class="gen">フォーラム:&nbsp;</span></td>
+    <td class="row2"><span class="genmed"><select class="post" name="catid" id="subsilver_form_catid" onchange="
+if (this.value>0) document.getElementById('subsilver_form_blogid').value = subSilver_blogidFromCatid(this.value);
+"><option value="0">全て</option><%subSilver(form,categorylist)%></select></span></td>
+    <td class="row1" align="right" nowrap="nowrap"><span class="gen">特定期間内を検索:&nbsp;</span></td>
+    <td class="row2" valign="middle"><span class="genmed">
+      <select class="post" name="search_time">
+      <option value="0" selected="selected">全ての記事</option>
+      <option value="1">1日以内</option>
+      <option value="7">1週間以内</option>
+      <option value="14">2週間以内</option>
+      <option value="30">1ヶ月以内</option>
+      <option value="90">3ヶ月以内</option>
+      <option value="180">6ヶ月以内</option>
+      <option value="364">1年以内</option>
+      </select><br />
+      <input name="search_fields" value="all" checked="checked" type="radio" /> トピックの題名と本文を検索<br />
+      <input name="search_fields" value="msgonly" type="radio" /> 本文のみを検索<br />
+      <input name="search_fields" value="titleonly" type="radio" onclick="
+if (document.getElementById('subsilver_form_sort').value=='replies') document.getElementById('subsilver_form_sort').value='time';
+" /> トピックの題名のみを検索
+    </span></td>
+  </tr>
+  <tr>
+    <td class="row1" align="right"><span class="gen">カテゴリ:&nbsp;</span></td>
+    <td class="row2"><span class="genmed"><select class="post" name="blogid" id="subsilver_form_blogid" onchange="
+if (this.value!=subSilver_blogidFromCatid( document.getElementById('subsilver_form_catid').value )) 
+document.getElementById('subsilver_form_catid').value = 0;
+"><option value="0">全て</option><%subSilver(form,bloglist)%>
+    </select></span></td>
+    <td class="row1" align="right"><span class="gen">ソート方法:&nbsp;</span></td>
+    <td class="row2" nowrap="nowrap" valign="middle"><span class="genmed">
+      <select class="post" name="sort_by" id="subsilver_form_sort">
+      <option value="replies">検索語を含む記事の数</option>
+      <option value="time">投稿時間</option>
+      <option value="title">トピックの題名</option>
+      <option value="forum">フォーラム</option></select><br />
+      <input name="sort_dir" value="ASC" type="radio" /> 昇順<br />
+      <input name="sort_dir" value="DESC" checked="checked" type="radio" /> 降順</span>&nbsp;
+    </td>
+  </tr>
+  <tr>
+    <td class="catBottom" colspan="4" align="center" height="28"><input class="liteoption" value="検索" type="submit" /></td>
+  </tr>
+</tbody></table>
+
+</form>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/skins/subsilver/skinbackup.xml b/trunk/NP_SubSilver/skins/subsilver/skinbackup.xml
new file mode 100644 (file)
index 0000000..30f3974
--- /dev/null
@@ -0,0 +1,252 @@
+<nucleusskin>
+       <meta>
+               <skin name="subsilver" />
+               <template name="subsilver/index" />
+       </meta>
+
+
+       <skin name="subsilver" type="text/html" includeMode="skindir" includePrefix="subsilver/">
+               <description>subSilver skin ver 0.2.9.9</description>
+               <part name="error"><![CDATA[<%parsedinclude(head.inc)%>
+<%parsedinclude(header.inc)%>
+
+<h2>Error!</h2>
+</div>
+<%errormessage%><br /><br />
+<a href="javascript:history.go(-1);">Go back</a>
+
+<%parsedinclude(footer.inc)%>]]></part>
+
+               <part name="faq"><![CDATA[<%parsedinclude(head.inc)%>
+<%parsedinclude(header.inc)%>
+<%parsedinclude(faq.inc)%>
+<%parsedinclude(footer.inc)%>]]></part>
+
+               <part name="index"><![CDATA[<%parsedinclude(head.inc)%>
+<%parsedinclude(header.inc)%>
+
+<%ifnot(category)%>
+<%parsedinclude(index.inc)%>
+<%elseif(subSilver,postVar,subSilver_action=posting)%>
+<%parsedinclude(posting.inc)%>
+<%else%>
+<%parsedinclude(category.inc)%>
+<%endif%>
+
+<%parsedinclude(timezone.inc)%>
+<%parsedinclude(onlinedata.inc)%>
+<%parsedinclude(loginform.inc)%>
+<%parsedinclude(legend.inc)%>
+<%parsedinclude(footer.inc)%>]]></part>
+
+               <part name="item"><![CDATA[<%parsedinclude(head.inc)%>
+<%parsedinclude(header.inc)%>
+
+<%if(subSilver,postVar,subSilver_action=posting)%>
+<%parsedinclude(posting.inc)%>
+<%else%>
+<%parsedinclude(item.inc)%>
+<%endif%>
+
+<%parsedinclude(timezone.inc)%>
+<%parsedinclude(onlinedata.inc)%>
+<%parsedinclude(loginform.inc)%>
+<%parsedinclude(footer.inc)%>]]></part>
+
+               <part name="member"><![CDATA[<%parsedinclude(head.inc)%>
+<%parsedinclude(header.inc)%>
+<%if(subSilver,intGlobalVar,memberid=0)%>
+<%parsedinclude(memberlist.inc)%>
+<%else%>
+<%parsedinclude(member.inc)%>
+<%endif%>
+<%parsedinclude(footer.inc)%>]]></part>
+
+               <part name="register"><![CDATA[<%parsedinclude(head.inc)%>
+<%parsedinclude(header.inc)%>
+
+<%if(subSilver,postVar,subSilver_action=register_agreed)%>
+<%parsedinclude(regform.inc)%>
+<%else%>
+<%parsedinclude(regconfirm.inc)%>
+<%endif%>
+
+<%parsedinclude(footer.inc)%>]]></part>
+
+               <part name="search"><![CDATA[<%parsedinclude(head.inc)%>
+<%parsedinclude(header.inc)%>
+<%if(subSilver,getVar,query=)%>
+  <%if(subSilver,getVar,search_author=)%>
+    <%parsedinclude(searchform.inc)%>
+  <%else%>
+    <%parsedinclude(search.inc)%>
+  <%endif%>
+<%else%>
+<%parsedinclude(search.inc)%>
+<%endif%>
+<%parsedinclude(footer.inc)%>]]></part>
+
+       </skin>
+
+
+       <template name="subsilver/index">
+               <description>subSilver index template ver 0.2.9.9</description>
+               <part name="ARCHIVELIST_FOOTER"><![CDATA[<tr><td style="text-align:center;" colspan="6">
+"<b><%query%></b>"で検索しましたが、何も見つかりませんでした。
+</td></tr>]]></part>
+
+               <part name="ARCHIVELIST_LISTITEM"><![CDATA[<tr>
+  <td class="<%if(subSilver,every,col1=2)%>row2<%else%>row1<%endif%>" align="center">
+    <span class="gen">&nbsp;<%member(id)%>&nbsp;</span>
+  </td>
+  <td class="<%if(subSilver,every,col2=2)%>row2<%else%>row1<%endif%>">
+    <form method="post" action="<%self%>?memberid=<%member(id)%>" style="position:absolute;">
+      &nbsp;&nbsp;&nbsp;<input name="subSilver_action" value="sendmessage" src="http://localhost/petitforum/skins/subsilver/images/lang_english/icon_pm.gif" alt="メッセージを送信" title="メッセージを送信" type="image" />
+    </form>
+    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+  </td>
+  <td class="<%if(subSilver,every,col3=2)%>row2<%else%>row1<%endif%>" align="center">
+    <span class="gen"><a href="<%self%>?memberid=<%member(id)%>" class="gen"><%member(realname)%></a></span>
+  </td>
+  <td class="<%if(subSilver,every,col4=2)%>row2<%else%>row1<%endif%>" align="center" valign="middle">
+    <span class="gensmall"><%subSilver(member,regdate,subSilver/index)%></span>
+  </td>
+  <td class="<%if(subSilver,every,col5=2)%>row2<%else%>row1<%endif%>" align="center" valign="middle">
+    <span class="gen"><%subSilver(member,replies)%></span>
+  </td>
+  <td class="<%if(subSilver,every,col6=2)%>row2<%else%>row1<%endif%>" align="center">
+    &nbsp;<%if(subSilver,member,has=url)%><a href="<%subSilver(member,rawurl)%>" target="_userwww"><img src="<%skinfile(images/lang_english/icon_www.gif)%>" alt="ウェブサイトに移動" title="ウェブサイトに移動" /></a><%endif%>&nbsp;
+  </td>
+</tr>]]></part>
+
+               <part name="BLOGLIST_LISTITEM"><![CDATA[<tr>
+<td class="catLeft" colspan="2" height="28"><span class="cattitle"><a href="<%bloglink%>" class="cattitle"><%blogname%></a></span></td>
+<td class="rowpic" colspan="3" align="right">&nbsp;</td>
+</tr>
+<:categorylist:>]]></part>
+
+               <part name="CATLIST_LISTITEM"><![CDATA[<tr>
+<td class="row1" align="center" valign="middle" height="50"><img
+src="<:skinurl:><:categoryicon:<%catid%>:images/folder_new_big.gif:images/folder_big.gif:images/folder_locked_big.gif:>" width="46" height="25" 
+alt="<:categoryicon:<%catid%>:新しい記事有り:新しい記事無し:ロック状態:>" 
+title="<:categoryicon:<%catid%>:新しい記事有り:新しい記事無し:ロック状態:>" /></td>
+<td class="row1" width="100%" height="50"><span class="forumlink"><a href="<%catlink%>" class="forumlink"><%catname%></a><br />
+</span> <span class="genmed"><%catdesc%><br />
+</span><span class="gensmall">&nbsp; &nbsp;</span></td>
+<td class="row2" align="center" valign="middle" height="50"><span class="gensmall"><:topics:<%catid%>:></span></td>
+<td class="row2" align="center" valign="middle" height="50"><span class="gensmall"><:replies:<%catid%>:></span></td>
+<td class="row2" align="center" valign="middle" height="50" nowrap="nowrap"> <span class="gensmall"><:lastitem:date:<%catid%>:>&nbsp;<:lastitem:time:<%catid%>:><br /><a href="<:lastitem:authorlink:<%catid%>:>" onclick="return (this.href+'').indexOf('#')>=0?false:true;"><:lastitem:authorname:<%catid%>:></a> <a href="<:lastitem:link:<%catid%>:>"><img src="<:skinurl:>images/icon_latest_reply.gif" border="0" alt="最新の記事を表示1" title="最新の記事を表示1" /></a></span></td>
+</tr>]]></part>
+
+               <part name="COMMENTS_BODY"><![CDATA[<tr>
+  <td class="row1" align="left" valign="top" width="150"><a id="cid<%commentid%>"></a><span class="name"><a name="cid<%commentid%>"></a><b><%user(realname)%></b></span><br /><span class="postdetails"><%subSilver(member,position)%><br /><br /><br />登録日: <%subSilver(member,regdate,subSilver/index)%><br /><span style="white-space: nowrap;">投稿記事: <%subSilver(member,replies)%><br /></span></span><br /></td>
+
+  <td class="row1" height="28" valign="top" width="100%"><table border="0" cellpadding="0" cellspacing="0" width="100%">
+    <tbody><tr>
+      <td width="100%"><a href="?itemid=<%itemid%>&amp;cid=<%commentid%>#cid<%commentid%>"><img src="<%skinfile(images/icon_minipost.gif)%>" alt="投稿1" title="投稿1" border="0" height="9" width="12" /></a><span class="postdetails"><span style="white-space: nowrap;"><%date%> <%time%><span class="gen">&nbsp;</span></span></span></td>
+      <td nowrap="nowrap" valign="top"><input type="image" name="subSilver_action" value="commentform" src="<%skinfile(images/lang_english/icon_quote.gif)%>" alt="引用" title="引用" onclick="
+document.getElementById('subsilver_form_body').value=
+  '[quote=<%user(realname)%>]' + document.getElementById('commentbody_<%commentid%>').innerHTML + '[/quote]';
+document.getElementById('subsilver_form_dummy').name=this.name;
+document.getElementById('subsilver_form_dummy').value=this.value;
+return true;
+" />
+    <%subSilver(if,caneditcomment)%>
+      <a href="<%subSilver(adminurl)%>?action=commentedit&commentid=<%commentid%>" ><img src="<%skinfile(images/lang_english/icon_edit.gif)%>" alt="edit" title="edit" border="0" /></a>
+    <%subSilver(endif)%>
+    </td>
+    </tr>
+    <tr>
+      <td colspan="2"><hr /></td>
+
+    </tr>
+    <tr>
+      <td colspan="2"><span class="postbody" id="commentbody_<%commentid%>"><%body%></span><span class="gensmall"></span></td>
+    </tr>
+  </tbody></table></td>
+</tr>
+<tr>
+  <td class="row1" align="left" valign="middle" width="150"><span class="nav"><a href="#top" class="nav">トップに移動</a></span></td>
+
+  <td class="row1" height="28" nowrap="nowrap" valign="bottom" width="100%"><table border="0" cellpadding="0" cellspacing="0" width="18">
+    <tbody><tr>
+      <td nowrap="nowrap" valign="middle">
+        <%subSilver(if,authorismember)%><a href="<%userlinkraw%>"><img src="<%skinfile(images/lang_english/icon_profile.gif)%>" alt="ユーザー情報を表示" title="ユーザー情報を表示" border="0" /></a><%subSilver(endif)%>
+        <%subSilver(if,hasurl)%><a href="<%subSilver(member,rawurl)%>"><img src="<%skinfile(images/lang_english/icon_www.gif)%>" alt="ウェブサイトに移動" title="ウェブサイトに移動" border="0" /></a><%subSilver(endif)%>
+      </td><td>&nbsp;</td><td nowrap="nowrap" valign="top"><div style="position: relative;"><div style="position: absolute;"></div><div style="position: absolute; left: 3px; top: -1px;"></div></div><noscript></noscript></td>
+    </tr>
+  </tbody></table></td>
+</tr>
+
+<tr>
+  <td class="spaceRow" colspan="2" height="1"><img src="<%skinfile(images/spacer.gif)%>" alt="" height="1" width="1" /></td>
+</tr>]]></part>
+
+               <part name="COMMENTS_HEADER"><![CDATA[<tr>
+  <th class="thLeft" height="26" nowrap="nowrap" width="150"><span style="white-space: nowrap;">投稿者</span></th>
+  <th class="thRight" nowrap="nowrap">メッセージ</th>
+</tr>
+]]></part>
+
+               <part name="FORMAT_DATE"><![CDATA[%x]]></part>
+
+               <part name="FORMAT_TIME"><![CDATA[%X]]></part>
+
+               <part name="ITEM"><![CDATA[<tr>
+<td class="row1" align="center" valign="middle" width="20"><img src="<%skinfile(images/)%><%subSilver(itemicon,
+folder_new.gif,
+folder_new_hot.gif,
+folder_lock_new.gif,
+folder.gif,
+folder_hot.gif,
+folder_lock.gif,
+folder_announce.gif,
+folder_sticky.gif)%>"
+alt="<%subSilver(itemicon,
+新しい記事有り,
+新しい記事有り(人気),
+新しい記事有り(ロック),
+新しい記事無し,
+新しい記事無し(人気),
+新しい記事無し(ロック),
+重要トピック,
+告知トピック)%>"
+title="<%subSilver(itemicon,
+新しい記事有り,
+新しい記事有り(人気),
+新しい記事有り(ロック),
+新しい記事無し,
+新しい記事無し(人気),
+新しい記事無し(ロック),
+重要トピック,
+告知トピック)%>"
+height="18" width="19" /></td>
+<%subSilver(if,search)%>
+<td class="row2"><span class="topictitle"><a href="<%categorylink%>" class="topictitle"><%category%></a></span></td>
+<%subSilver(endif)%>
+<td class="row1" width="100%">
+<%subSilver(if,new)%>
+<a href="<%subSilver(lastReplyLink)%>"><img src="<%skinfile(images/icon_newest_reply.gif)%>" alt="最新の記事を表示" title="最新の記事を表示" /></a>
+<%subSilver(endif)%>
+<span class="topictitle"><a href="<%itemlink%>" class="topictitle"><%title%></a></span><span class="gensmall"><br />
+</span></td>
+<td class="row2" align="center" valign="middle"><span class="postdetails"><%subSilver(replynum)%></span></td>
+<td class="row3" align="center" valign="middle"><span class="name"><a href="<%subSilver(authorLink)%>"><%subSilver(authorName)%></a></span></td>
+<td class="row2" align="center" valign="middle"><span class="postdetails"><%subSilver(readnum)%></span></td>
+<td class="row3Right" align="center" nowrap="nowrap" valign="middle"><span class="postdetails"><%date%>&nbsp;<%time%><br /><a href="<%subSilver(lastReplyAuthorLink)%>"><%subSilver(lastReplyBy)%></a> <a href="<%subSilver(lastReplyLink)%>"><img src="<%skinfile(images/)%><%subSilver(if,new)%>icon_newest_reply.gif<%subSilver(else)%>icon_latest_reply.gif<%subSilver(endif)%>" alt="最新の記事を表示" title="最新の記事を表示" /></a></span></td>
+</tr>]]></part>
+
+               <part name="ITEM_FOOTER"><![CDATA[<%subSilver(endif)%>]]></part>
+
+               <part name="ITEM_HEADER"><![CDATA[<%subSilver(ifnot,sticky,andnot,showstickies,andnot,search)%>
+]]></part>
+
+               <part name="SEARCH_NOTHINGFOUND"><![CDATA[<tr><td style="text-align:center;" colspan="6">
+"<b><%query%></b>"で検索しましたが、何も見つかりませんでした。
+</td>
+<td colspan="4"></td></tr>]]></part>
+
+       </template>
+
+
+</nucleusskin>
\ No newline at end of file
diff --git a/trunk/NP_SubSilver/skins/subsilver/subSilver.css b/trunk/NP_SubSilver/skins/subsilver/subSilver.css
new file mode 100644 (file)
index 0000000..ba58268
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+  The original subSilver Theme for phpBB version 2+
+  Created by subBlue design
+  http://www.subBlue.com
+*/
+
+
+ /* General page style. The scroll bar colours only visible in IE5.5+ */
+body {
+       background-color: #E5E5E5;
+       scrollbar-face-color: #DEE3E7;
+       scrollbar-highlight-color: #FFFFFF;
+       scrollbar-shadow-color: #DEE3E7;
+       scrollbar-3dlight-color: #D1D7DC;
+       scrollbar-arrow-color:  #006699;
+       scrollbar-track-color: #EFEFEF;
+       scrollbar-darkshadow-color: #98AAB1;
+}
+
+/* General font families for common tags */
+font,th,td,p { font-family: Verdana, Arial, Helvetica, sans-serif }
+a:link,a:active,a:visited { color : #006699; }
+a:hover                { text-decoration: underline; color : #DD6900; }
+hr     { height: 0px; border: solid #D1D7DC 0px; border-top-width: 1px;}
+
+
+/* This is the border line & background colour round the entire page */
+.bodyline      { background-color: #FFFFFF; border: 1px #98AAB1 solid; }
+
+/* This is the outline round the main forum tables */
+.forumline     { background-color: #FFFFFF; border: 2px #006699 solid; }
+
+
+/* Main table cell colours and backgrounds */
+td.row1        { background-color: #EFEFEF; }
+td.row2        { background-color: #DEE3E7; }
+td.row3        { background-color: #D1D7DC; }
+
+
+/*
+  This is for the table cell above the Topics, Post & Last posts on the index.php page
+  By default this is the fading out gradiated silver background.
+  However, you could replace this with a bitmap specific for each forum
+*/
+td.rowpic {
+               background-color: #FFFFFF;
+               background-image: url(images/cellpic2.jpg);
+               background-repeat: repeat-y;
+}
+
+/* Header cells - the blue and silver gradient backgrounds */
+th     {
+       color: #FFA34F; font-size: 11px; font-weight : bold;
+       background-color: #006699; height: 25px;
+       background-image: url(images/cellpic3.gif);
+}
+
+td.cat,td.catHead,td.catSides,td.catLeft,td.catRight,td.catBottom {
+                       background-image: url(images/cellpic1.gif);
+                       background-color:#D1D7DC; border: #FFFFFF; border-style: solid; height: 28px;
+}
+
+
+/*
+  Setting additional nice inner borders for the main table cells.
+  The names indicate which sides the border will be on.
+  Don't worry if you don't understand this, just ignore it :-)
+*/
+td.cat,td.catHead,td.catBottom {
+       height: 29px;
+       border-width: 0px 0px 0px 0px;
+}
+th.thHead,th.thSides,th.thTop,th.thLeft,th.thRight,th.thBottom,th.thCornerL,th.thCornerR {
+       font-weight: bold; border: #FFFFFF; border-style: solid; height: 28px; }
+td.row3Right,td.spaceRow {
+       background-color: #D1D7DC; border: #FFFFFF; border-style: solid; }
+
+th.thHead,td.catHead { font-size: 12px; border-width: 1px 1px 0px 1px; }
+th.thSides,td.catSides,td.spaceRow      { border-width: 0px 1px 0px 1px; }
+th.thRight,td.catRight,td.row3Right     { border-width: 0px 1px 0px 0px; }
+th.thLeft,td.catLeft     { border-width: 0px 0px 0px 1px; }
+th.thBottom,td.catBottom  { border-width: 0px 1px 1px 1px; }
+th.thTop        { border-width: 1px 0px 0px 0px; }
+th.thCornerL { border-width: 1px 0px 0px 1px; }
+th.thCornerR { border-width: 1px 1px 0px 0px; }
+
+
+/* The largest text used in the index page title and toptic title etc. */
+.maintitle,h1,h2       {
+                       font-weight: bold; font-size: 22px; font-family: "Trebuchet MS",Verdana, Arial, Helvetica, sans-serif;
+                       text-decoration: none; line-height : 120%; color : #000000;
+}
+
+
+/* General text */
+.gen { font-size : 12px; }
+.genmed { font-size : 11px; }
+.gensmall { font-size : 10px; }
+.gen,.genmed,.gensmall { color : #000000; }
+a.gen,a.genmed,a.gensmall { color: #006699; text-decoration: none; }
+a.gen:hover,a.genmed:hover,a.gensmall:hover    { color: #DD6900; text-decoration: underline; }
+
+
+/* The register, login, search etc links at the top of the page */
+.mainmenu              { font-size : 11px; color : #000000 }
+a.mainmenu             { text-decoration: none; color : #006699;  }
+a.mainmenu:hover{ text-decoration: underline; color : #DD6900; }
+
+
+/* Forum category titles */
+.cattitle              { font-weight: bold; font-size: 12px ; letter-spacing: 1px; color : #006699}
+a.cattitle             { text-decoration: none; color : #006699; }
+a.cattitle:hover{ text-decoration: underline; }
+
+
+/* Forum title: Text and link to the forums used in: index.php */
+.forumlink             { font-weight: bold; font-size: 12px; color : #006699; }
+a.forumlink    { text-decoration: none; color : #006699; }
+a.forumlink:hover{ text-decoration: underline; color : #DD6900; }
+
+
+/* Used for the navigation text, (Page 1,2,3 etc) and the navigation bar when in a forum */
+.nav                   { font-weight: bold; font-size: 11px; color : #000000;}
+a.nav                  { text-decoration: none; color : #006699; }
+a.nav:hover            { text-decoration: underline; }
+
+
+/* titles for the topics: could specify viewed link colour too */
+.topictitle                    { font-weight: bold; font-size: 11px; color : #000000; }
+a.topictitle:link   { text-decoration: none; color : #006699; }
+a.topictitle:visited { text-decoration: none; color : #5493B4; }
+a.topictitle:hover     { text-decoration: underline; color : #DD6900; }
+
+
+/* Name of poster in viewmsg.php and viewtopic.php and other places */
+.name                  { font-size : 11px; color : #000000;}
+
+/* Location, number of posts, post date etc */
+.postdetails           { font-size : 10px; color : #000000; }
+
+
+/* The content of the posts (body of text) */
+.postbody { font-size : 12px;}
+a.postlink:link        { text-decoration: none; color : #006699 }
+a.postlink:visited { text-decoration: none; color : #5493B4; }
+a.postlink:hover { text-decoration: underline; color : #DD6900}
+
+
+/* Quote & Code blocks */
+.code {
+       font-family: Courier, 'Courier New', sans-serif; font-size: 11px; color: #006600;
+       background-color: #FAFAFA; border: #D1D7DC; border-style: solid;
+       border-left-width: 1px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px
+}
+
+.quote {
+       font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color: #444444; line-height: 125%;
+       background-color: #FAFAFA; border: #D1D7DC; border-style: solid;
+       border-left-width: 1px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px
+}
+
+
+/* Copyright and bottom info */
+.copyright             { font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; color: #444444; letter-spacing: -1px;}
+a.copyright            { color: #444444; text-decoration: none;}
+a.copyright:hover { color: #000000; text-decoration: underline;}
+
+
+/* Form elements */
+input,textarea, select {
+       color : #000000;
+       font: normal 11px Verdana, Arial, Helvetica, sans-serif;
+       border-color : #000000;
+}
+
+/* The text input fields background colour */
+input.post, textarea.post, select {
+       background-color : #FFFFFF;
+}
+
+input { text-indent : 2px; }
+
+/* The buttons used for bbCode styling in message post */
+input.button {
+       background-color : #EFEFEF;
+       color : #000000;
+       font-size: 11px; font-family: Verdana, Arial, Helvetica, sans-serif;
+}
+
+/* The main submit button option */
+input.mainoption {
+       background-color : #FAFAFA;
+       font-weight : bold;
+}
+
+/* None-bold submit button */
+input.liteoption {
+       background-color : #FAFAFA;
+       font-weight : normal;
+}
+
+/* This is the line in the posting page which shows the rollover
+  help line. This is actually a text box, but if set to be the same
+  colour as the background no one will know ;)
+*/
+.helpline { background-color: #DEE3E7; border-style: none; }
+
+
+/* Import the fancy styles for IE only (NS4.x doesn't use the @import function) */
+@import url("formIE.css");
diff --git a/trunk/NP_SubSilver/skins/subsilver/timezone.inc b/trunk/NP_SubSilver/skins/subsilver/timezone.inc
new file mode 100644 (file)
index 0000000..df57b0c
--- /dev/null
@@ -0,0 +1,7 @@
+<table width="100%" cellspacing="0" border="0" align="center" cellpadding="2">
+  <tr>
+       <td align="left">
+       </td>
+       <td align="right"><span class="gensmall">All times are <%subSilver(strftime,%Z)%></span></td>
+  </tr>
+</table>