Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/job-board.corals.io/Corals/modules/Messaging/Hooks/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/job-board.corals.io/Corals/modules/Messaging/Hooks/Messagable.php
<?php

namespace Corals\Modules\Messaging\Hooks;

use Corals\Modules\Messaging\Models;
use Illuminate\Database\Eloquent\Builder;


Class Messagable
{

    protected $inboxStatuses = ['read', 'unread', 'important', 'star'];
    /* -----------------------------------------------------------------
     |  Relationships
     | -----------------------------------------------------------------
     */

    /**
     * @param null $status
     */
    public function discussions()
    {
        $inboxStatuses = $this->inboxStatuses;

        return function ($status = null, $params = []) use ($inboxStatuses) {


            $morphToMany = $this->morphToMany(
                Models\Discussion::class,
                'participable',
                'messaging_participations'
            );

            if ($status) {
                $morphToMany->wherePivot('status', $status);
            } else {
                $morphToMany->wherePivotIn('status', $inboxStatuses);
            }

            if (isset($params['getData']) && $params['getData']) {
                return $morphToMany->getResults();
            } else {
                return $morphToMany;

            }
        };
    }

    /**
     * Participations relationship.
     *
     */
    public function participations()
    {
        return function ($params = []) {

            $relation = $this->morphMany(
                Models\Participation::class,
                'participable'
            );
            if (isset($params['getData']) && $params['getData']) {
                return $relation->getResults();
            } else {
                return $relation;

            }
        };
    }

    /**
     * Message relationship.
     *
     */
    public function messages()
    {
        return function ($params = []) {
            $relation = $this->morphMany(
                Models\Message::class,
                'participable'
            );
            if (isset($params['getData']) && $params['getData']) {
                return $relation->getResults();
            } else {
                return $relation;

            }
        };
    }

    /* -----------------------------------------------------------------
     |  Main Methods
     | -----------------------------------------------------------------
     */

    /**
     * Returns the new messages count for user.
     *
     */
    public function newMessagesCount()
    {
        return function ($params = []) {

            return $this->discussionsWithNewMessages()->count();
        };
    }

    /**
     * Returns all discussions IDs with new messages.
     *
     */
    public function discussionsWithNewMessages()
    {
        return function ($params = []) {

            $participationsTable = 'messaging_participations';
            $discussionsTable = 'messaging_discussions';


            return $this->discussions()->where(function (Builder $query) use ($participationsTable, $discussionsTable) {
                $query->whereNull("$participationsTable.last_read");
                $query->orWhere(
                    "$discussionsTable.updated_at", '>', $this->getConnection()->raw("$participationsTable.last_read")
                );
            })->get();
        };
    }


}

Spamworldpro Mini