Page tree
Skip to end of metadata
Go to start of metadata

When a member posts a comment, accepts invitation requests or likes an items, a message/email will be sent to owner to tell him about the status changed,
The service handles these message is Notification.

The following attachment describe a notification message about friend request acceptance.

!https://docs.phpfox.com/download/attachments/851993/notification-example.png?api=v2

Notification item is stored at phpfox_notification table, look in to the table, there are following columns

  • notification_id: notification identity, auto incrementation.
  • type_id: type if of relevant item
  • item_id: item id of relevant item
  • user_id: identity of the user who send the activate notification
  • owner_user_id: target owner's identity
  • is_seen: Notification is seen?
  • time_stamp: creation time

As same as Feed service, Developers do not insert data into this table, they use notification service instead.

Phpfox::getService('notification.process')->add($sType, $iItemId, $iOwnerUserId, $iSenderUserId = null, $force = false);

When others post comments, like, share a to do list item, phpFox will use callback mechanist to tell an application would to like
to send the owner a notification.

Following section show you how to integrate with comment, like, share.

Integration Feed Comment

Update Callback service, edit 2 following methods

    // this callback method is required by comment service
    public function addComment($aVals)
    {
        // update total comment
        $this->database()
            ->updateCounter('todolist_task', 'total_comment', 'task_id',
                $aVals['item_id']);

        // send notification
        if ($aVals['user_id'] != $aVals['comment_user_id']) {
            Phpfox::getService('notification.process')
                ->add('comment_todo', $aVals['item_id'], $aVals['user_id']);
        }
    }

    // this method is require to retry comment notification item
    public function getCommentNotification($aNotification)
    {
        // fetch item
        $aRow = $this->database()
            ->select('b.task_id, b.name, b.user_id, u.gender, u.full_name')
            ->from(Phpfox::getT('todolist_task'), 'b')
            ->join(Phpfox::getT('user'), 'u', 'u.user_id = b.user_id')
            ->where('b.task_id = ' . (int)$aNotification['item_id'])
            ->execute('getSlaveRow');

        // validate to do list item
        if (!isset($aRow['task_id'])) {
            return false;
        }

        // get user name
        $sUsers = Phpfox::getService('notification')->getUsers($aNotification);

        // to do list title
        $sTitle = $aRow['name'];

        // get translate message
        $sMessage = _p('user_comment_on_to_do_title', [
            'users'         => $sUsers,
            'title'         => $sTitle
        ]);

        // get link
        $url = Phpfox::getLib('url')
            ->permalink('to-do-list.view', $aRow['task_id'], $aRow['name']);

        return [
            'link'    => $url,
            'message' => $sMessage,
            'icon'    => '',
        ];
    }

In phrase.json, add following phrase:

"user_comment_on_to_do_title": "{users} commented on your todo \"{title}\""

Create another account, use new account to comment on to do list feed.

Logged in back to the account which posted to do item.
Click on notification panel, the result is similar to attachment.

Next Chapter

  • No labels