*OpenPNE[Free SNS【ソーシャルネットワーキングサービス】] [#ne960ab9]

RIGHT:更新日 &lastmod();

**OpenPNEのインストール [#n76eb278]
OpenPNEはフリーのSNSでMySQL+PHPで実現でき携帯からもアクセスできるソフトである。そこでVine4.xにインストールしてみた。[[ここ:http://www.openpne.jp/]]からDownloadしてくる。使用するソフトはApache,php,MySQLなので以下のものが入っているかCheckし、インストールされていないときはrpmでインストールを行う

***事前準備 [#ob84e2f0]

 # apt-get install MySQL
 # apt-get install MySQL-client
 # apt-get install php5-apache2-5.2.5-0vl1

など

''php.ini''~

 [Vine]
 output_buffering = Off
 expose_php = Off
 ;;memory_limit = 32M  
 memory_limit = 128M
 variables_order = "GPCS"
 ;;default_charset = EUC-JP   <==コメントアウト
 extension_dir = /usr/lib/php5
 allow_url_include = Off
 sendmail_path = /usr/sbin/sendmail -t -i
 session.save_path = "/var/php5/session"
 session.use_only_cookies = On
 session.use_strict_mode = On
 session.entropy_file = /dev/urandom
 session.entropy_length = 32
 session.hash_function = 1
 ;;mbstring.language = Japanese   <==コメントアウト
 ;;mbstring.internal_encoding = EUC-JP   <==コメントアウト
 ;;mbstring.http_input = auto     <==コメントアウト
 ;;mbstring.http_output = pass    <==コメントアウト
 ;;mbstring.encoding_translation = On    <==コメントアウト
&color(red){とくに最後の5行をコメントアウトしないと日本語表示はできるが、日本語入力が繁栄されない};


MySQLのデフォルトをUTF-8に変更

''my.cnf''~

 [client]
 default-character-set = utf8
 #password       = your_password

 # The MySQL server
 [mysqld]
 default-character-set=utf8
 port            = 3306

 [mysql]
 default-character-set = utf8
 no-auto-rehash

***インストール [#ac2c2db4]

 # cd /var/www
 # tar zxvf /usr/local/src/OpenPNE-2.10.4.tar.gz
 # mv OpenPNE-2.10.4 OpenPNE
 # chown -R apache.apache OpenPNE
 # chmod -R 777 OpenPNE/var/

''MySQLの設定''

 # mysql -u root -p
 mysql> grant all privileges on openpne.* to openpne@localhost identified by '******';
 Query OK, 0 rows affected (0.03 sec)
 
 mysql> create database openpne CHARACTER SET UTF8;
 Query OK, 1 row affected (0.00 sec)

''openpneデータベース初期設定''

 # mysql -u openpne -p openpne \
 < /var/www/OpenPNE/setup/sql/mysql41/install/install-2.10-create_tables.sql
 
 # mysql -u openpne -p openpne \
 < /var/www/OpenPNE/setup/sql/mysql41/install/install-2.10-insert_data.sql

***pnebiz(グループウエア)の設定 [#b9816d5e]

ヘッダー部に「グループウェア機能はこちら →  施設予約  予定登録  グループ」を表示するには

 # mysql -u openpne -p openpne \
 < /var/www/OpenPNE/setup/sql/mysql41/option/pnebiz-header.sql

ただしこのときは設定画面で「SNS設定」でBIZ使用設定を使用するにしなとページが見つからないエラーが出る


***OpenPNEの設定 [#rc6c2a60]

 # cd OpenPNE/
 # cp config.php.sample config.php

ランダムな56桁の文字列を取得※OpenPNE設定ファイル編集で使用
 # apt-get install expect  (mkpasswdコマンドがない場合)
 # mkpasswd -l 56 
 8ramMdfTxykhprvytrfliesxzoyqwqyxfpqefkt@imqoc0unipdtypfa

''config.php''

&color(red){OPENPNE_URLとOPENPNE_SSL_URLをIPではなくhttp://abc.ne.jp/openpne/のように指定すると携帯でLoginできない(このバージョン2.10.4だけかもしれないが)};

 // Web上の絶対パス(URL)(最後にスラッシュを付ける)
 define('OPENPNE_URL', 'http://192.168.1.1/openpne/');
 
 // DBサーバ設定
 $GLOBALS['_OPENPNE_DSN_LIST']['main'] = array(
 'dsn'  => array(
     'phptype'  => 'mysql',
     'username' => 'openpne',   <==DB
     'password' => '******',
     'hostspec' => 'localhost',
     'database' => 'openpne',
     'new_link' => false,
     ),
 );
 
 // DB暗号化キー(56バイト以内のASCII文字列)
 define ('ENCRYPT_KEY', '8ramMdfTxykhprvytrfliesxzoyqwqyxfpqefkt@imqoc0unipdtypfa'); ← ランダムな56桁の文字列を指定
 
 // メールサーバードメイン
 // 携帯メール投稿の宛先などのドメイン名に使われる
 define('MAIL_SERVER_DOMAIN', 'mie-chukyo-u.ac.jp'); ← メールサーバードメイン名を指定
 
 //--- オプション設定
 
 // デバッグモード
 // 0: off ... エラー非表示、エラーログを記録する
 // 1: on  ... エラー表示、エラーログを記録しない
 // 2: on  ... 1 + Smartyデバッグコンソール
 // define('OPENPNE_DEBUGGING', 1);
 define('OPENPNE_DEBUGGING', 0);
 
 
 ///
 // SSL設定
 ///
 
 // 特定ページだけのSSLを使用するかどうか
 //define('OPENPNE_USE_PARTIAL_SSL', false);
 define('OPENPNE_USE_PARTIAL_SSL', true);
 
 
 // SSL用URL (Cookieの値を引き継ぐため、OPENPNE_URL と同一ドメイン・パスである必要があります)
 //define('OPENPNE_SSL_URL', 'https://sns.example.com/');
 define('OPENPNE_SSL_URL', 'https://192.168.1.1/openpne/');
 
 
 // SSLを使用することが必須であるアクションリスト
 $GLOBALS['_OPENPNE_SSL_REQUIRED'] = array(
 'admin' => array(     <==追加
     'page_login',     <==追加
 ),                    <==追加
 'pc' => array(
     'page_o_regist_prof',  'page_o_regist_prof_confirm', 'do_o_regist_prof',
 
 'ktai' => array( 
 //    'page_o_login', 'do_o_login', 'do_o_easy_login',
 //    'page_o_login2', 'do_o_update_ktai_address',
 //    'page_o_regist_pre', 'page_o_regist_input', 'do_o_insert_c_member',
 //    'page_o_regist_end',
 //    'page_o_password_query', 'do_o_password_query',
 //    'page_h_config_prof', 'do_h_config_prof_update_c_member',
 //    'page_h_config_easy_login', 'do_h_config_easy_login',
 //    'page_h_config_mail', 'do_h_config_mail_insert_c_ktai_address_pre',
 //    'page_h_pc_send', 'page_h_pc_send_confirm', 'do_h_pc_send_insert_c_pc_address_pre',
 //    'page_h_config_password_query', 'do_h_config_password_query_update_password_query',
 //    'page_h_config_password', 'do_h_config_password_update_password',
 //    'page_h_config', 'page_h_invite', 'do_h_invite_insert_c_invite',
 ));

&color(red){携帯(ktai)だけコメントアウトはSSLのおれおれ認証で、auなどが使用できない場合やsoftbankでlogoutでエラーするのでSSLを使用しない方法で回避ちょっとセキュリティは無視};

地図を利用するためGoogle Maps API keyを取得してconfig.phpの455行くらいにセット

 ///
 // Google Maps API key
 // http://www.google.com/apis/maps/ から取得
 ///
 define('GOOGLE_MAPS_API_KEY', 'ABQIAAAAlAldUyiDHCoKI_79WJEOoBQViC3-u1-ZYzSYkS3SvbWG7lPuqxQCcQ4hg6Tq_DXY_Id5sOw25uq1pg');


''OpenPNE用CRON登録''

 # crontab -e
 00   6 * * * /bin/sh /var/www/OpenPNE/bin/tool_send_dairy_news.cron     /var/www/OpenPNE/bin/ /usr/bin/php
 00   6 * * * /bin/sh /var/www/OpenPNE/bin/tool_send_birthday_mail.cron  /var/www/OpenPNE/bin/ /usr/bin/php
 00   6 * * * /bin/sh /var/www/OpenPNE/bin/tool_send_schedule_mail.cron  /var/www/OpenPNE/bin/ /usr/bin/php
 */20 * * * * /bin/sh /var/www/OpenPNE/bin/tool_rss_cache.cron           /var/www/OpenPNE/bin/ /usr/bin/php

''SNS管理者宛メールの転送設定''

/etc/postfix/aliases
 sns: webmaster

''メール投稿設定''(携帯電話からも使用する場合のみ)~
携帯電話からのメール投稿を受け付けるように設定~
&color(red){ただし、PCRE形式の正規表現が利用できるように以下のpostfix-pcreをインストールする必要がある。忘れると、メールを他のサーバから受信できなくなるので注意。};~
オプションの "pcre" マップタイプを使うと、\s は空白で \S は非空白文字といった、 PCRE 形式の表記法で正規表現が指定できるようになる。

 # apt-get install postfix-pcre
 
 準備中...                   ########################################### [100%]
    1:postfix-pcre           ########################################### [100%]
 Adding pcre map entry to /etc/postfix/dynamicmaps.cf

/etc/postfix/aliases.regexpを作成

 /^get(@.*)?$/ "|/usr/bin/php /var/www/OpenPNE/bin/mail.php"
 /^p[0-9]+-[0-9a-z]{12}(@.*)?$/ "|/usr/bin/php /var/www/OpenPNE/bin/mail.php"
 /^t[0-9]+-[0-9a-z]{12}(@.*)?$/ "|/usr/bin/php /var/www/OpenPNE/bin/mail.php"
 /^b[0-9]+-[0-9a-z]{12}(@.*)?$/ "|/usr/bin/php /var/www/OpenPNE/bin/mail.php"

/etc/postfix/main.cf

 alias_maps = hash:/etc/aliases, pcre:/etc/postfix/aliases.regexp
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^追加

 # /etc/rc.d/init.d/postfix restart

cronから余計なメールを出さないようにする

 # cd OpenPNE/bin

tool_send_dairy_news.cronを修正

 #! /bin/sh
 cd $1
 2 -f tool_send_daily_news.php > /dev/null
                              ^^^^^^^^^^^^追加
***Apache設定 [#o16d5aa4]
以下のファイルを作成し、OpenPNEのアクセスパスを指定する~
''/etc/apache2/conf.d/openpne.conf''~

 Alias /openpne /var/www/OpenPNE/public_html

 # /etc/rc.d/init.d/apache2 reload

**OpenPNE確認 [#i23c56fd]
***セットアップ [#seca712b]
 http://サーバー名/openpne/?m=setupへアクセス 


 必ず下記の設定をおこなってからセットアップを実行してください。
 
 setup/sql/mysql4x/install-2.10-create_tables.sql の実行 
 setup/sql/mysql4x/install-2.10-insert_data.sql の実行 
 config.php の設定 
 一度、セットアップを実行した後でこのページを表示することはできません。
 セットアップをやり直したい場合はデータベースを空にしてからこのページへアクセスしてください。

というメッセージが出るがすでにopenpneデータベース初期設定を行っているのでOK


login画面~
https://192.168.1.1/openpne/?m=pc

管理画面~
https://192.168.1.1/openpne/?m=admin&a=page_login

あとはGUI上から設定

***注意事項 [#aae166df]

''携帯から''~

「設定変更」で携帯からアクセスできるようにするには、携帯にメールを送り一度その携帯からloginしてからでないと単にhttp://(サーバ)/openpne/?m=ktaiでアクセスして携帯のアドレス、パスワードを入れてもloginできない。~
また、一度loginすると先の携帯メールを設定するページに削除画面が追加されるので確認できる

''簡単ログイン''~

SoftBankの3Gではどうも製造番号がOFFなので製造番号通知をONにする

以下のような[[ページ:http://bo.pne.jp/ticket/1921]]もあった。UIDを取得するらしいが、今回は設定しない。

 softbank3G携帯ではUIDが取得できるため、こちらを取得すればログインができるはずです。 
 
 試しに実装してみました webapp/lib/OpenPNE/KetaiID.phpの77行目 
 
         // SoftBank
         elseif (!strncmp($ua, 'SoftBank', 8)) {
             $pieces = explode('/', $ua);
             $piece_sn = explode(' ', $pieces[4]);
             $sn = array_shift($piece_sn);
 
             if (!strncmp($sn, 'SN', 2)) {
                 $id = $sn;
             }
         }
 を 
 
         // SoftBank
         elseif (!strncmp($ua, 'SoftBank', 8)) {
             $pieces = explode('/', $ua);
             $piece_sn = explode(' ', $pieces[4]);
             $sn = array_shift($piece_sn);
             if (!strncmp($sn, 'SN', 2)) {
                 $id = $sn;
            }else{
             // 固体番号が取得できない場合にUIDを取得
                 $headers = apache_request_headers();
                 if ($headers["x-jphone-uid"]) {
                     $id = $headers["x-jphone-uid"];
                 }
             }
         }

**ちょっと改造 [#k942b2c5]
***フリーページ [#gcad8533]
お知らせ->フリーページ管理でログイン前、ログイン後のHTMLページを作成できるがそのページへのリンクは

 <a href="./?m=pc&a=page_o_free_page&c_free_page_id=1" target="_blank">ほげほげ</A>

とする。idでページを区別する


***緯度・経度 [#z44d46f9]
Map表示設定時に緯度経度が必要なのでそのページを「コミュニティ設定変更」に追加

''webapp/modules/pc/templates/c_edit.tpl''~
305行前後

 <div class="padding_s">
 緯度:<input class="text" name="map_latitude" type="text" size="14" \
 value="({$c_commu.map_latitude})" id="lat">&nbsp;
                                   ^^^^^^^<==追加
 経度:<input class="text" name="map_longitude" type="text" size="14" \ 
 value="({$c_commu.map_longitude})" id="lng">&nbsp;
                                    ^^^^^^^<==追加
 拡大率:<input class="text" name="map_zoom" type="text" size="4" value="({$c_commu.map_zoom})" maxlength="2"><br>
 (以下のjavascriptを追加
 <script type="text/JavaScript">
 <!--
 function winOpen(theURL,winName,features) { //v2.0
   window.open(theURL,winName,features);
 }
 //-->
 </script>
 
 <A HREF="#" onclick="winOpen('/mapinput/input.php','newWindow', \
 'scrollbars=yes width=850,height=700')"> \
 ここ</A>から、緯度・経度を取得することができます。<BR> <==追加
 
 ※手動設定の場合は、都道府県の選択で「その他(手動設定)」を選んでください。
 </div>

/var/www/html/mapinput/input.phpのサンプルは添付
#ref("input.php")
です。

**バージョンアップ [#xf829aed]
***マイナーバージョンアップ [#q022946b]

+新しいバージョンを/var/wwwに展開して、config.phpとvarディレクトリを旧バージョンよりコピーする。
+変更を行ったphp等のファイルを同じように変更する
+旧バージョンをOpenPNE-X.Y.Zとりネームして、新しいバージョンをOpenPNEにリネームする
+一応Postfixをリロードを行う

**その他 [#zd280949]
「招待メールドメイン制限」に追加して招待メールを送りその後そのユーザが一度loginすればその後そのドメインを削除してもアカウントは有効だが、login前にそのどメンを制限すると登録ができなくなるのでloginできない (Ver. 2.10.4.2)

''コミュニティ管理者の交代''~
コミュニティ管理の譲渡は管理者が
+管理しているコミュニティを開きます。
+「コミュニティメンバー」が表示されている下部にある[メンバー管理]のリンクをクリックすると、コミュニティ参加者一覧が表示されます。
+管理権を譲渡したい人を探し、[管理権を渡す]をクリックします。
+管理人交代依頼を送信する画面が表示されるので、依頼する場合は[送信]をクリックします。
+管理権の交代依頼のメールを受けた人が、交代の承認をおこなえば管理人の交代完了です。

同じメニューで副管理者を任命することができる~

''副管理者について''~
-メンバーをコミュニティから退会させる権限はありません。
-承認が必要なコミュニティの場合は、入会依頼を副管理者権限で承認はできますが、拒否する権限はありません。
-コミニュニティを削除する権限はありません。

[[参考:http://agoria.jp/faq.html]]

***携帯からPCメールアドレスの設定 [#f4f71a9e]
携帯からPCメールアドレスを設定してもユーザが設定したメールアドレスを確認し、
設定確認をおこなわないと、管理者のメンバーリストのPCメールアドレスに表示しない~
この場合は''c_pc_address_pre''とい一時保管テーブルに入っている。

 mysql> select * from c_pc_address_pre;
 +--------------------+-------------+----------------------------------+--------
 --------------------------+---------------------+
 | c_pc_addess_pre_id | c_member_id | pc_address                       |
  session                          | r_datetime          |
 +--------------------+-------------+----------------------------------+--------
 --------------------------+---------------------+
 |                  2 |           4 | okada@abc-u.ac.jp |
 xxxxe0043xxx6d7dxx2cec09a5exxxxx | 2008-03-01 15:11:15 |
 +--------------------+-------------+----------------------------------+--------
 --------------------------+---------------------+
 1 row in set (0.00 sec)

また、確認時にPCアドレスを登録後PCでloginする前の状態
メールにきたURLから登録終了するとき
以下のエラーが出るようだがうまく登録できている
原因不明

 このURLは既に無効になっています。

また、確認後はパスワードやメールアドレス(携帯も含む)は以下のテーブルに保存される。(暗号化されている)

 c_member_secure

**smarty [#p5a88d6f]
デザインのテンプレート挿入では使用できるがSmartyテンプレート形式で記述する必要がある。あまりお勧ではないようだが、Smartyテンプレート形式はまだ勉強前なのでテンプレート中にphpの記述を行うことで逃げる。~
しかしながら、そのままではOpenPNEでは、テンプレート挿入時で、phpのテンプレートタグが無視され、さらに実行時も「PHPコードを実行せずにそのまま出力」となっているので、以下のファイルを3か所修正する。

''lib/include/Smarty/Smarty.class.php''

200行
 
      * @var integer
      */
 /*    var $php_handling    =  SMARTY_PHP_PASSTHRU; */
     var $php_handling    =  SMARTY_PHP_ALLOW;    <==ALLOWに変更
 
     /**


230行
      */
     var $security_settings  = array(
                                    /* 'PHP_HANDLING'    => false,*/
                                     'PHP_HANDLING'    => true, <=trueに変更
                                     'IF_FUNCS'        => array('array', 'list',
                                                                'isset', 'empty',
                                                               'count', 'sizeof' ,
                                                                 'in_array', 'is_array',
                                                                'true', 'false', 'null'),
                                     'INCLUDE_ANY'     => false,
                                    /* 'PHP_TAGS'        => false, */
                                     'PHP_TAGS'        => true, <=Trueに変更
                                     'MODIFIER_FUNCS'  => array('count'),
                                     'ALLOW_CONSTANTS'  => false
                                    );

''$php_handling''~
smartyのこの変数がテンプレートに埋め込まれた PHP コードの扱いを設定

-SMARTY_PHP_PASSTHRU - PHPコードを実行せずにそのまま出力します。 
-SMARTY_PHP_QUOTE - PHPコードをHTMLエンティティとして表示します。 
-SMARTY_PHP_REMOVE - PHPコードをテンプレートから除去します。 
-SMARTY_PHP_ALLOW - PHPコードを実行します。


''テンプレートのデリミタ''~
テンプレートタグは、デリミタによって囲まれ、デフォルトのデリミタはカーリブラケット { } ~
{php} {/php}

&color(red){Openpneでは デリミタが({ })};

({php}) ({/php})

''例''~
 ({php}) 
 
 echo "abc <br>";
 
 ({/php})

***SmartyのテンプレートでURLのデータ取得 [#zc334d97]

アクセスが
openpne/?m=pc&a=page_c_home&target_c_commu_id=1
のときテンプレートで

({$smarty.get.target_c_commu_id})とすると1を取得することができる

 ({if $smarty.get.target_c_commu_id eq '1'})
    OKです<BR>      <==target_c_commu_idが1の時
 ({elseif $smarty.get.target_c_commu_id eq '2'})
    ぼちぼち <BR>
 ({else})
    だめです <BR>
 ({/if})

***topページ(?m=pc&a=page_h_home)でユーザidを取得するには [#r3914fd6]

 ID = ({$c_member.c_member_id})

***プロフィール情報の取得 [#b2bc6406]
c_member_profileテーブルから、c_member_id と c_profile_idで所得できる

たとえばc_profile_idが9にセットされた情報の取得
 // DBのパラメータセット
        $db_host = $GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['hostspec'];
 
        $db_user = $GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['username'];
 
        $db_pass = $GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['password'];
 
        $db_name = $GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['database'];
 
        $u = $GLOBALS['AUTH']->uid();   //ユーザID
 
        $conn = mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
        mysql_select_db($db_name);
 //ユーザIDとプロフィールIDで選択
        $sqlcmd ="SELECT * FROM c_member_profile where c_member_id = $u and c_profile_id = 9" ;
 
        $result = mysql_query($sqlcmd);
        $count = mysql_num_rows($result);
 
        $r = mysql_fetch_array($result);
        $kubun = $r["value"];
 
 //複数ヒットするときの例
 //     $i = 0;
 //         while ($r = mysql_fetch_array($result)){
 //               $kubun[$i] = $r["value"];
 //               $i++;
 //       }
 
        echo "区分 $kubun <Br>";


**参考ページ [#ubbcffdd]

-http://fedorasrv.com/openpne.shtml
-[[smartyマニュアル:http://www.smarty.net/manual/ja/]]
-[[テーブル内容について:http://jisaku-sns.info/modules/pukiwiki/59.html]]

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS