アプリ開発ためのメモ
2021年4月27日火曜日
さくらインターネットVPS設定
2021年3月2日火曜日
fancy product designerにおけるSVGファイルにlinearGradient情報なくなる対応
linearGradient情報含まれるSVGファイルをfancy product designerに取り込むと、その情報がなくなった。原因はSVG各objectのfillを処理する際のバグ?か
ソースコードの6018行目あたり、objectのfillは、色のHexかtransparentとなるが、linearGradientの場合、fillがobjectになっている。
var color = objects[i].fill.length > 0 ? tinycolor(objects[i].fill).toHexString() : 'transparent';
params.colors.push(color);
対応するには、下記のように変更
if(typeof(objects[i].fill) !== "object") {
var color = objects[i].fill.length > 0 ? tinycolor(objects[i].fill).toHexString() : 'transparent';
params.colors.push(color);
} else {
params.colors.push('');
}
さらに、6070行目あたり
//if no default colors are set, use the initial path colors
else if(!fabricParams.fill && !fabricParams.svgFill) {
if(objects) {
params.colors = [];
for(var i=0; i < objects.length; ++i) {
if(typeof(objects[i].fill) !== "object") {
var color = objects[i].fill.length > 0 ? tinycolor(objects[i].fill).toHexString() : 'transparent';
params.colors.push(color);
} else {
params.colors.push('');
}
}
params.svgFill = params.colors;
}
fabricParams.svgFill = params.svgFill;
}
最後、7540行目あたり
//path groups (svg)
else if(element.type == FPDPathGroupName && typeof hex == 'object') {
for(var i=0; i < hex.length; ++i) {
if(element.getObjects()[i] && hex[i] !== '') {
element.getObjects()[i].set('fill', hex[i]);
}
}
fancy product designerの内容をdownload時SVG対応
fancy product designerの内容をsvgとしてdownload際、画像のsrcがリンクの場合、リンク形式で保存され、AIで開くと参照ファイルがないため、表示できない。
fancy product designerが使うfabricjsのメソッドをoverwriteする必要ある。画像のsrcがbase64形式の場合そのまま、リンクの場合DataURLとして保存する
fabric.Image.prototype.getSvgSrc = function() {
return this.toDataURLforSVG();
};
fabric.Image.prototype.toDataURLforSVG = function(options) {
var src = this._element.src;
var imageParts = src.split('.');
//base64 encodedかどうか
if(imageParts.length == 1) {
return imageParts[0];
}
// base64ではない場合、リンクの場合、base64を返す
var el = fabric.util.createCanvasElement();
el.width = this._element.naturalWidth || this._element.width;
el.height = this._element.naturalHeight || this._element.height;
el.getContext("2d").drawImage(this._element, 0, 0);
var data = el.toDataURL(options);
return data;
};
fancy product designerローカルSVG画像使用時正しく表示されない対応
fancy product designer(https://fancyproductdesigner.com/) jqueryバージョンの最新有料版を使っていますが、ローカルSVGをdesignerに入れると、正しく表示されない。
ソースには、ローカル画像をstageに入れる場合、FileReaderを使用する。
reader.readAsDataURL(file);
ここで、SVGでもDataURL形式で読み込まれる。
addElement functionで、読み込まれた結果をSVGかどうかの判断がありますが、DataURL形式のため、ただしく認識できない。
if(source.search('<svg') !== -1)
解決するには、SVGから変換されたDataURL形式なら、もとのテキストファイルに戻す。
ソースコードの5937行の後に下記追加
if(source.search(/data:image\/svg\+xml;base64,/) >= 0) {
source = atob(source.replace(/^data:image\/svg\+xml;base64,/, ''));
}
2020年12月23日水曜日
メールサーバーをサクラVPS上構築
Postfix のインストール
さくらVPSのCentOSイメージには初期インストールされているので不要。更新を行う
# yum -y update postfix
Dovecot のインストール
# yum install dovecot dovecot-mysqlpostfixadminインストール
# cd /usr/local/src# wget http://nchc.dl.sourceforge.net/sourceforge/postfixadmin/postfixadmin-3.2.tar.gz
# tar xzvf postfixadmin-3.2.tar.gz
# mv postfixadmin-3.2 /var/www/html/postfixadmin
# cd /var/www/html/postfixadmin
# chown apache:apache -R /var/www/html/postfixadmin
# ln -s /var/www/html/postfixadmin/public /var/www/html/mySite/public/postfixadmin
/postfixadmin にアクセスできるように /var/www/html/mySite/public/.htaccess rewrite ruleに下記追加(laravel使用しているため)
RewriteCond %{REQUEST_URI} !^/postfixadmin.*$
postfixadminためのDB設定
postfixadmin設定
postfixadmin setup
mail user用意
postfix設定用ファイル作成
postfix設定
/etc/postfix/main.cfを編集
/etc/postfix/master.cfを編集
postfix再起動(もともと起動されている)
dovecot設定
/etc/dovecot/dovecot.confを編集
/etc/dovecot/conf.d/10-mail.confを編集
/etc/dovecot/conf.d/10-auth.confを編集
/etc/dovecot/conf.d/auth-sql.conf.ext 以下のようになっているか確認
/etc/dovecot/dovecot-sql.conf.extを作成
/etc/dovecot/conf.d/10-master.confを編集
/etc/dovecot/conf.d/10-ssl.conf 編集
Dovecotの起動と自動起動設定
2020年11月18日水曜日
laravel user password reset際、登録済みemailのチェック条件
laravelデフォルトuser table softdelete以外のemailですでに登録済みユーザーかどうか判断する。追加条件で登録済みユーザーを判断したい場面もでてくる。その際、sendResetLinkEmail functionをoverwriteすれば良い。
下記のように、app\Http\Controllers\Auth\ForgotPasswordController.php はtrait SendsPasswordResetEmails(vendor\laravel\framework\src\Illuminate\Foundation\Auth\SendsPasswordResetEmails.php)を使用している。
use SendsPasswordResetEmails
登録済みのemailかどうかについて、sendResetLinkEmail functionの中で行っている。
/**
* overwrite SendsPasswordResetEmails function in ForgotPasswordController.php
*/
public function sendResetLinkEmail(Request $request)
{
$this->validateEmail($request);
$request->merge(['type' => 0]); // 条件追加:type 0のユーザーのみ登録済みかどうか判断
$response = $this->broker()->sendResetLink(
$request->only('email', 'type') // ここでemail以外、type値も追加
);
return $response == Password::RESET_LINK_SENT
? $this->sendResetLinkResponse($request, $response)
: $this->sendResetLinkFailedResponse($request, $response);
}
2020年10月28日水曜日
git remote
git remote add origin https://アカウント名@gitlab.com/アカウント名/プロジェクト名.git
git remote rm origin // 関連性を削除