Пример #1
0
 /**
  * 書き込む(元の実装に忠実?)
  * @global type $adminname
  * @return type
  */
 function set($str, $keeptimestamp)
 {
     global $adminname;
     if ($this->auth_users == array()) {
         return;
     }
     // 管理人の設定は省く
     unset($this->auth_users[$adminname]);
     $lines[] = '<?php';
     $lines[] = 'use PukiWiki\\Auth\\Auth;';
     $lines[] = 'return array(';
     $lines[] = "\t" . '$adminname	=> array($adminpass, Auth::ROLE_ADMIN),';
     // 管理人は、ここでハードコーディング
     foreach ($this->auth_users as $user => $val) {
         $line = "\t" . '\'' . $user . '\' => array(' . "\n" . $val[0];
         for ($i = 1; $i < count($val); $i++) {
             if (!empty($val[$i])) {
                 $line .= ',' . $val[$i];
             }
         }
         $line .= "),";
         $lines[] = $line;
     }
     $lines[] = ');';
     parent::set($lines);
 }
Пример #2
0
 /**
  * 書き込み
  * @global boolean $notify
  * @global boolean $notify_diff_only
  * @param string $str
  */
 public function set($diffdata = '', $keeptimestamp = false)
 {
     global $notify, $notify_diff_only, $notify_subject;
     // 差分を作成
     //$diff = new Diff(WikiFactory::Wiki($this->page)->source(true), explode("\n",$postdata));
     //$str = $diff->getDiff();
     if ($notify) {
         $str = $notify_diff_only ? preg_replace('/^[^-+].*\\n/m', '', $diffdata) : $diffdata;
         $summary = array('ACTION' => 'Page update', 'PAGE' => &$page, 'URI' => Router::get_script_uri() . '?' . rawurlencode($page), 'USER_AGENT' => TRUE, 'REMOTE_ADDR' => TRUE);
         Mailer::notify($notify_subject, $str, $summary) or Utility::dieMessage('Mailer::notify(): Failed');
     }
     parent::set($diffdata);
 }
Пример #3
0
 /**
  * ログ記入
  * @param $value 未使用(何も入れないこと)
  * @param $keeptimestamp 未使用(何も入れないこと)
  */
 public function set($value = '', $keeptimestamp = false)
 {
     // 設定
     $config = $this->config[$this->kind];
     // ログを取らない場合書き込まない
     if (!$config['use']) {
         return;
     }
     // 書き込むデーターを取得
     $rc = self::log_common_check();
     // ない場合終了
     if (empty($rc)) {
         return;
     }
     // ログを読み込む
     $data = parent::get(false);
     // 行数
     $count = count($data);
     // 更新するキーを取得
     if (!empty($config['updtkey'])) {
         // 最低限記録するキー
         $mustkey = isset($config['mustkey']) ? $config['mustkey'] : 0;
         // 保存するキーを定義から取得
         $_key = explode(':', $config['updtkey']);
         // 設定項目名を取得
         $name = self::set_fieldname();
         // 更新フラグ
         $set = false;
         // 行の分解
         for ($i = 0; $i < $count; $i++) {
             // ログの1行を配列に変換した後、項目名を付与する
             // $line = array(
             //     'ts' => 000000,
             //     'ip' => 127.0.0.1
             //     ...
             // );
             // みたいな感じになる
             $line = self::line2field($data[$i], $name);
             if (isset($line['ts']) && $line['ts'] <= UTIME - self::LOG_LIFE_TIME) {
                 // 一定期間過ぎたエントリは削除
                 continue;
             }
             // 行書き換えフラグ
             $sw_update = true;
             // 列の分解
             foreach ($_key as $idx) {
                 // 書き込む前のデーターと異なっていた場合
                 if (isset($rc[$idx]) && isset($line[$idx]) && $rc[$idx] != $line[$idx]) {
                     $sw_update = false;
                     break;
                 }
                 /*
                 					if (empty($rc[$idx]) || empty($line[$idx])) {
                 						$sw_update = false;
                 						break;
                 					}
                 					if ($rc[$idx] !== $line[$idx]) {
                 						$sw_update = false;
                 						break;
                 					}
                 */
             }
             if ($sw_update) {
                 // 書き換え
                 $data[$i] = self::array2table($rc);
                 $set = true;
                 break;
             }
         }
         unset($i);
         // 追記するデーター
         if (!$set) {
             if ($mustkey) {
                 if (self::log_mustkey_check($_key, $data)) {
                     $data[] = self::array2table($rc);
                 }
             } else {
                 $data[] = self::array2table($rc);
             }
         }
     } else {
         // 新規データー
         $data[] = self::array2table($rc);
     }
     // 配列の長さ制限
     if ($count > self::LOG_MAX_ENTRIES) {
         $i = 0;
         // 古いエントリから削除するため配列を反転
         foreach (array_reverse($data) as $line) {
             if ($i > self::LOG_MAX_ENTRIES) {
                 break;
             }
             $ret[] = $line;
             $i++;
         }
         // 戻す
         $data = array_reverse($ret);
     }
     // 保存(空行は削除)
     parent::set($data);
 }
Пример #4
0
 /**
  * write()
  * バックアップファイルに書き込む
  * TODO:gzとbz2圧縮がスレッドセーフでない
  * @access    private
  * @param     String    $content 文字列
  *
  * @return    Boolean   FALSE:失敗 その他:書き込んだバイト数
  */
 public function set($data = '', $keeptimestamp = false)
 {
     // 古いバックアップを削除(追記する実装でないため)
     $this->remove();
     $file = $this->name . $this->ext;
     // 書き込み
     touch($file);
     $bytes = '';
     switch ($this->ext) {
         case '.txt':
             $bytes = parent::set($data);
             break;
         case '.gz':
             $handle = gzopen($file, 'w');
             if ($handle) {
                 $bytes = gzwrite($handle, $data);
                 gzclose($handle);
             } else {
                 return false;
             }
             break;
         case '.bz2':
             $handle = bzopen($file, 'w');
             if ($handle) {
                 $bytes = bzwrite($handle, $data);
                 bzclose($handle);
             } else {
                 return false;
             }
             break;
         case '.lzf':
             $bytes = parent::set(lzf_compress($data), false);
             break;
     }
     return $bytes;
 }