ふたりはララベル (Laravel PHP Framework)

PHPフレームワークのLaravelの体験記を書いていきます。こんなタイトルのブログですが萌え系アニメは一秒たりとも観たことがありません。

HumHubでアップロードする画像サイズを下げる

HumHub1.7で、ようやく画像リサイズ機能が実現されました。以前は自作していたよ…。

「protected/config/common.php」を開いて、「modules.file」を追記します。

追記するのは↓

'modules' => [
 'file' => [
  'imageMaxResolution' => '1920x1080',
  'imageJpegQuality' => 75,
  'imagePngCompressionLevel' => 9,
  'imageWebpQuality' => 75,
 ]
],

こんな感じになります。

$config = [
    'modules' => [
        'file' => [
            'imageMaxResolution' => '1920x1080',
            'imageJpegQuality' => 75,
            'imagePngCompressionLevel' => 9, 
            'imageWebpQuality' => 75, 
        ]
    ], 
    'name' => 'HumHub',
    'version' => '1.8.1',

詳細はここに↓あります。
docs.humhub.org

VmwareとWindowsに共有フォルダを作って、Windows側で編集

VmwareWindowsに共有フォルダを作って、Windows側で編集したときのメモ。共有フォルダにフォルダを移動して、シンボリックリンクを貼った。

インストール

シンボリックリンク

  • sudo mv /home/myuser/app /mnt/hgfs/app
  • sudo ln -s /mnt/hgfs/app /home/myuser/app

WindowsのXAMPP環境にMonicaをインストールする

WindowsのXAMPP環境にMonicaをインストールする。

phpが7.1以前の場合

phpが7.2以降の場合

  • sodiumが入らないので、諦めてcomposer.jsonから「web-token/jwt-signature-algorithm-eddsa」を削除する。
  • データベースmonicaを作る
  • php artisan key:generateを実行する
  • php artisan setup:production -vを実行する
  • 「admin@admin.com/admin0」でログインする

xampp環境でLaravel Backup

「spatie/laravel-backup」をxampp環境で使うときには、config/database.phpも編集する。

        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
            'dump' => [
                'dump_binary_path' => 'D:\xampp\mysql\bin' ←この行が必要になる。
            ]

Laravel Excelでエクスポート時にヘッダをつける

Laravel Excelでエクスポート時にヘッダをつけることができる。「WithHeadings」を追加してから、「headings()」メソッドに配列でヘッダの内容を書くだけです。

<?php

namespace App\Exports;

use App\Member;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings; #←追加

class MembersExport implements FromCollection, WithHeadings #←WithHeadingsを追加
{

    /**
     * @return \Illuminate\Support\Collection
     */
    public function collection()
    {
        return Member::all();
    }

    public function headings(): array
    {

        return [
            'name',
            'birthday',
        ];
    }

}

HumhubをSafariで使ったときの漢字確定のバグを解消する

HumhubをSafariで使うと、日本語入力でEnterキーを押すと必ず改行になる。これを解消するためにkeyCode = 229のチェックを追加した。

        function inOrNearComposition(view, event) {
          if (view.composing) { return true }
          // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.
          // On Japanese input method editors (IMEs), the Enter key is used to confirm character
          // selection. On Safari, when Enter is pressed, compositionend and keydown events are
          // emitted. The keydown event triggers newline insertion, which we don't want.
          // This method returns true if the keydown event should be ignored.
          // We only ignore it once, as pressing Enter a second time *should* insert a newline.
          // Furthermore, the keydown event timestamp must be close to the compositionEndedAt timestamp.
          // This guards against the case where compositionend is triggered without the keyboard
          // (e.g. character confirmation may be done with the mouse), and keydown is triggered
          // afterwards- we wouldn't want to ignore the keydown event in this case.
          if (result.safari && Math.abs(event.timeStamp - view.compositionEndedAt) < 500) {
            view.compositionEndedAt = -2e8;
            return true
          }
	    if (event.keyCode===229) { return true} #←これを追加する
          return false
        }

Humhubで日本語入力ができない件を解決する

HumhubのrichtextエディターはWebブラウザから日本語入力ができないんだけど、解決方法があった。

ファイル「protected\humhub\modules\content\resources\js\humhub.ui.richtext.prosemirror.js」の

    RichTextEditor.prototype.focus = function() {
        this.editor.view.focus();
    };

上記を全部消せば正常に動く。消したあとはキャッシュクリアを忘れずに実施してください。

Laravelで定数を使う

「constants.php」を適当な場所に置く。

#app/constants.php
<?php

define('ADMIN', 'administrator');

「bootstrap/app.php」の末尾で「constants.php」を読み込む。

require_once app_path() . '/constants.php'; # ←追記
return $app;

Humhubの「ハンドラが見つかりません」エラー

こういうエラーがたまにでる。

最後の操作を処理中にエラーが発生しました。 (ハンドラが見つかりません)。

これは「設定→Advanced→キャッシュ→保存してキャッシュクリア」で解決する。

HumHub 1.3リリース

HumHubが1.3になったんだけど、Cron設定がちょっと変わった。yii cronは一つになり、yii queueが増えた。

* * * * *  /usr/bin/php /path/to/humhub/protected/yii queue/run >/dev/null 2>&1
* * * * *  /usr/bin/php /path/to/humhub/protected/yii cron/run >/dev/null 2>&1

HumHubに投稿する画像のサイズを小さくする

HumHubは投稿画像を小さくしてくれないので、5MBの写真をアップするとそのままアップロードされる。

まず画像を小さくする関数を作って

<?php

namespace humhub\modules\mymodules\libs;

use humhub\modules\file\libs\ImageConverter;

class Reduce {

    public static function Resize($uploadedFile) {

	    $filepath = $uploadedFile->tempName;

	    $options = [
	        'width' => 400,
	        'height' => 400,
	        'mode' => 'max',
	    ];

	    ImageConverter::Resize($filepath, $filepath, $options);

	    $uploadedFile->size = filesize($filepath);

	    return $uploadedFile;
	}

}

humhub\modules\file\actions\UploadAction.php追記する。

    protected function handleFileUpload(UploadedFile $uploadedFile, $hideInStream = false)
    {

	$uploadedFile = \humhub\modules\mymodule\libs\Reduce::Resize($uploadedFile);

とりあえず応急処置。

HumHubでプロフィールを非表示にする

HumHubでは管理者画面で一個ずつプロフィールを非表示にできるんだけど、それを一挙にやる。このコードをどこかで実行すればいい。

$fields = \humhub\modules\user\models\ProfileField::find()->all();

$visibles = ['firstname', 'title']; # 非表示にしたくないプロフィールはここに記述

foreach ($fields as $field) {

  if (!in_array($field->internal_name, $visibles)) {

    $field->required = 0;

    $field->show_at_registration = 0;

    $field->editable = 0;

    $field->visible = 0;

    $field->searchable = 0;

    $field->save();
  }
}