Skip to content

Commit

Permalink
Merge pull request #5 from pickles2/develop
Browse files Browse the repository at this point in the history
2.0.21 リリース候補

- $conf->paths_proc_type の設定を、前方マッチから完全マッチに変更。 ディレクトリの指定等は、ワイルドカード `*` を使って表現する方針で統一。
- `PX=publish` に、パブリッシュ対象外のパスをコンフィグオプションで設定できる機能を追加。 (コマンドラインオプションで除外する方法は従来から存在していた)
- 公開キャッシュ と _sys/ram/* のディレクトリが存在しない場合に、作成を試みるように変更。
- path_publish_dir と contents_manifesto を設定しない場合 Notice が起こらないように変更。
- sitemaps ディレクトリが存在しない場合に Notice が起こらないように変更。
- サイトマップが最小構成の場合に、Noticeレベルのエラーが発生する不具合を修正。
- サイトマップ解析時に、Libre Office, Open Office 形式の一時ファイルを無視するように変更。
  • Loading branch information
tomk79 authored Jul 13, 2016
2 parents e82390f + f1f6bcb commit 37dbce3
Show file tree
Hide file tree
Showing 197 changed files with 4,149 additions and 2,462 deletions.
67 changes: 67 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,73 @@ $ chmod -R 777 ./caches
- safe_mode が無効に設定されていること


## 更新履歴 - Change log

### Pickles Framework 2.0.21 (2016年??月??日)

- `$conf->paths_proc_type` の設定を、前方マッチから完全マッチに変更。 ディレクトリの指定等は、ワイルドカード `*` を使って表現する方針で統一。
- `PX=publish` に、パブリッシュ対象外のパスをコンフィグオプションで設定できる機能を追加。 (コマンドラインオプションで除外する方法は従来から存在していた)
- 公開キャッシュ と `_sys/ram`/* のディレクトリが存在しない場合に、作成を試みるように変更。
- `path_publish_dir``contents_manifesto` を設定しない場合 Notice が起こらないように変更。
- sitemaps ディレクトリが存在しない場合に Notice が起こらないように変更。
- サイトマップが最小構成の場合に、Noticeレベルのエラーが発生する不具合を修正。
- サイトマップ解析時に、Libre Office, Open Office 形式の一時ファイルを無視するように変更。
- その他の細かい不具合修正。

### Pickles Framework 2.0.20 (2016年4月7日)

- サイトマップCSVの定義列がアスタリスク始まりではない(または空欄)の列がある場合、定義行が存在しないとみなしてしまう問題を修正。

### Pickles Framework 2.0.19 (2016年3月15日)

- コンフィグ項目 $conf->copyright を追加。

### Pickles Framework 2.0.18 (2016年2月22日)

- パブリッシュオプション paths_ignore に指定したパスが、パブリッシュディレクトリから削除されてしまう不具合を修正。

### Pickles Framework 2.0.17 (2016年2月18日)

- 範囲指定したパブリッシュのディレクトリスキャンにかかるパフォーマンスを改善。
- ?PX=publish のオプション paths_ignore を追加。

### Pickles Framework 2.0.16 (2016年1月2日)

- パブリッシュ実行中に、パブリッシュ先ディレクトリに都度コピーする機能が無効になる場合がある不具合を修正。
- その他、軽微な不具合の修正。

### Pickles Framework 2.0.15 (2015年11月9日)

- Actor機能追加。
- pickles.php と px.php を分離。テストを書きやすくするための配慮により。
- パブリッシュ時、サイトマップ上でプロトコル名、またはドメイン名から始まるリンク先の場合はスキップするように変更。

### Pickles Framework 2.0.14 (2015年10月23日)

- Markdownプロセッサーが、head と foot を処理しないように変更。
- .ignore を含むパスへのリクエストを、.htaccess で除外するように変更。

### Pickles Framework 2.0.13 (2015年9月4日)

- サイトマップキャッシュに SQLite を導入。ページ数の多いサイトの処理が高速化。
- デフォルトで bowl "foot" の定義を新たに追加。
- サイトマップに、サイト外のURLを組み込めるようになった。

### Pickles Framework 2.0.12 (2015年8月3日)

- $conf->path_files を追加。
- $conf->default_timezone を追加。
- $conf->path_phpini を追加。
- コマンドラインオプション --command-php, -c を追加。
- その他、不具合の修正など。

### Pickles Framework 2.0.11 (2015年7月2日)

- パブリッシュに時間が掛かり過ぎるときに、タイムアウトが発生して途中終了することがある不具合を修正。
- パブリッシュログに ファイルサイズ と ファイル個々にの処理にかかった時間(microtime) を記載するようになった。
- その他、軽微な不具合の修正など。


## 開発者向け情報 - for Developer


Expand Down
11 changes: 6 additions & 5 deletions common/contents_manifesto.ignore.php
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
<?php
/**
* Contents Manifesto
*
*
* このファイルは、コンテンツの制作環境を宣言します。
* モジュールを定義するCSSやJavaScriptファイルを読み込みます。
*
*
* このファイルを異なるテーマ間で共有することにより、テーマを取り替えても、
* コンテンツの表現を再現する前提を保証することができます。
*
*
* - テーマは、このパス (`/common/contents_manifesto.nopublish.inc.php`) を、
* headセクション内に `include()` します。
* - このファイルの中にPHPの記述を埋め込むことができるように読み込みます。
* - このファイルのスコープで `$px` を利用できるようにしてください。
*
*
* HTML上、コンテンツは `.contents` の中に置かれます。
* 従って、このファイルで定義される内容は、`.contents` の中にのみ影響するように実装されるべきです。
*
*
*/ ?>
<?php
//$pxがない(=直接アクセスされた)場合、ここで処理を抜ける。
Expand All @@ -27,3 +27,4 @@

<!-- Contents Stylesheets -->
<link rel="stylesheet" href="<?php print htmlspecialchars($px->href('/common/styles/contents.css')); ?>" type="text/css" />
<script src="<?php print htmlspecialchars($px->href('/common/scripts/contents.js')); ?>" type="text/javascript"></script>
4 changes: 4 additions & 0 deletions common/scripts/contents.js.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?php /*
JSにPHPを埋め込めるか?
*/ ?>
// contents.js
12 changes: 7 additions & 5 deletions px-files/_sys/php/commands/clearcache.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public function __construct( $px ){
$this->px = $px;
$this->path_homedir = $this->px->fs()->get_realpath( $this->px->get_path_homedir().'/' );
$this->path_docroot = $this->px->fs()->get_realpath( $this->px->get_path_docroot().$this->px->get_path_controot().'/' );
$this->path_public_caches = $this->px->fs()->get_realpath( $this->px->get_path_docroot().$this->px->get_path_controot().$this->px->conf()->public_cache_dir.'/' );
$this->path_public_caches = $this->px->fs()->get_realpath( $this->px->get_path_docroot().$this->px->get_path_controot().@$this->px->conf()->public_cache_dir.'/' );

$this->path_lockfile = $this->px->fs()->get_realpath( $this->px->get_path_homedir().'_sys/ram/publish/applock.txt' );
}
Expand Down Expand Up @@ -84,9 +84,11 @@ public function exec(){
print '-- cleaning "publish"'."\n";
print $this->cleanup_dir( $this->path_homedir.'_sys/ram/publish/' ).' items done.'."\n";
print "\n";
print '-- cleaning "public caches"'."\n";
print $this->cleanup_dir( $this->path_public_caches ).' items done.'."\n";
print "\n";
if( strlen( @$this->px->conf()->public_cache_dir ) ){
print '-- cleaning "public caches"'."\n";
print $this->cleanup_dir( $this->path_public_caches ).' items done.'."\n";
print "\n";
}
return true;
}

Expand Down Expand Up @@ -153,7 +155,7 @@ private function cleanup_dir( $path, $localpath = null ){

/**
* パブリッシュがロックされているか確認する。
*
*
* @return bool ロック中の場合に `true`、それ以外の場合に `false` を返します。
*/
private function is_publish_locked(){
Expand Down
108 changes: 94 additions & 14 deletions px-files/_sys/php/commands/publish.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ class publish{
*/
private $px;

/**
* プラグイン設定
*/
private $plugin_conf;

/**
* サイトオブジェクト
*/
Expand Down Expand Up @@ -52,26 +57,41 @@ class publish{
/**
* Before content function
* @param object $px Picklesオブジェクト
* @param object $json プラグイン設定
* ```
* {
* "paths_ignore": [
* // パブリッシュ対象から常に除外するパスを設定する。
* // (ここに設定されたパスは、動的なプレビューは可能)
* "/sample_pages/no_publish/*"
* ]
* }
* ```
*/
public static function register( $px ){
$px->pxcmd()->register('publish', function($px){
$pxcmd = $px->get_px_command();
$self = new self( $px );
if( @$pxcmd[1] == 'run' ){
$self->exec_publish();
}else{
$self->exec_home();
}
exit;
});
public static function register( $px, $json ){

// プラグイン設定の初期化
if( !is_object(@$json) ){
$json = json_decode('{}');
}
if( !is_array(@$json->paths_ignore) ){
$json->paths_ignore = array();
}
// var_dump($json);

$self = new self( $px, $json );

$px->pxcmd()->register('publish', array($self, 'exec_home'));
}

/**
* constructor
* @param object $px Picklesオブジェクト
* @param object $json プラグイン設定
*/
public function __construct( $px ){
public function __construct( $px, $json ){
$this->px = $px;
$this->plugin_conf = $json;

$this->path_tmp_publish = $px->fs()->get_realpath( $px->get_path_homedir().'_sys/ram/publish/' );
$this->path_lockfile = $this->path_tmp_publish.'applock.txt';
Expand Down Expand Up @@ -122,7 +142,9 @@ private function cli_header(){
print 'publish directory: '.$this->path_publish_dir."\n";
print 'domain: '.$this->domain."\n";
print 'docroot directory: '.$this->path_docroot."\n";
print 'ignore: '.join(', ', $this->plugin_conf->paths_ignore)."\n";
print 'region: '.$this->path_region."\n";
print 'ignore (tmp): '.join(', ', $this->paths_ignore)."\n";
print '------------'."\n";
flush();
return ob_get_clean();
Expand Down Expand Up @@ -151,8 +173,16 @@ private function cli_report(){

/**
* execute home
* @param object $px Picklesオブジェクト
*/
private function exec_home(){
public function exec_home( $px ){
$pxcmd = $this->px->get_px_command();
if( @$pxcmd[1] == 'run' ){
// 命令が publish.run の場合、実行する。
$this->exec_publish( $px );
exit;
}

if( $this->px->req()->is_cmd() ){
header('Content-type: text/plain;');
print $this->cli_header();
Expand Down Expand Up @@ -268,8 +298,9 @@ function cont_EditPublishTargetPathApply(formElm){

/**
* execute publish
* @param object $px Picklesオブジェクト
*/
private function exec_publish(){
private function exec_publish( $px ){
header('Content-type: text/plain;');
print $this->cli_header();

Expand Down Expand Up @@ -770,6 +801,10 @@ private function add_queue( $path ){
// 対象外
return false;
}
if( $this->is_ignore_path( $path ) ){
// パブリッシュ対象外
return false;
}
if( !$this->is_region_path( $path ) ){
// 範囲外
return false;
Expand All @@ -787,6 +822,51 @@ private function add_queue( $path ){
return true;
}

/**
* パブリッシュ対象か調べる
* @param string $path 対象のパス
* @return bool 真偽
*/
private function is_ignore_path( $path ){
static $rtn = array();
if( is_null($path) ){
return true;
}
$path = $this->px->fs()->get_realpath( '/'.$path );
if( is_dir('./'.$path) ){
$path .= '/'.$this->px->get_directory_index_primary();
}
if( preg_match('/(?:\/|\\\\)$/', $path) ){
$path .= $this->px->get_directory_index_primary();
}
$path = $this->px->fs()->normalize_path($path);

if( @is_bool($rtn[$path]) ){
return $rtn[$path];
}

foreach( $this->plugin_conf->paths_ignore as $row ){
if(!is_string($row)){continue;}
$preg_pattern = preg_quote($this->px->fs()->normalize_path($this->px->fs()->get_realpath($row)), '/');
if( preg_match('/\*/',$preg_pattern) ){
// ワイルドカードが使用されている場合
$preg_pattern = preg_quote($row,'/');
$preg_pattern = preg_replace('/'.preg_quote('\*','/').'/','(?:.*?)',$preg_pattern);//ワイルドカードをパターンに反映
$preg_pattern = $preg_pattern.'$';//前方・後方一致
}elseif(is_dir($row)){
$preg_pattern = preg_quote($this->px->fs()->normalize_path($this->px->fs()->get_realpath($row)).'/','/');
}elseif(is_file($row)){
$preg_pattern = preg_quote($this->px->fs()->normalize_path($this->px->fs()->get_realpath($row)),'/');
}
if( preg_match( '/^'.$preg_pattern.'$/s' , $path ) ){
$rtn[$path] = true;
return $rtn[$path];
}
}
$rtn[$path] = false;// <- default
return $rtn[$path];
}// is_ignore_path()

/**
* パブリッシュ範囲内か調べる
* @param string $path 対象のパス
Expand Down
Loading

0 comments on commit 37dbce3

Please sign in to comment.