Jump to content

Client Asset Register - Cant see it on clientarea.php


Recommended Posts

Hi all, i've made a client asset register for my installation. But i cannot get it to show on the clientarea.php in a tile/widget. I don't know where i'm going wrong. Please see my hooks.php attached as i think that's the issue. any help is appreicated.

<?php
if (!defined("WHMCS")) {
    die("This file cannot be accessed directly");
}

use WHMCS\Database\Capsule;
use WHMCS\Module\Addon\AssetManager\Models\Asset;
use WHMCS\Module\Addon\AssetManager\Models\TicketLink;

// Hook function for the Admin Area Client Summary Page
function asset_manager_admin_summary_hook($vars)
{
    try {
        $userId = (int)$vars['userid'];
        $perPage = isset($_REQUEST['assets_per_page']) ? $_REQUEST['assets_per_page'] : 10;
        $page = isset($_REQUEST['assets_page']) ? (int)$_REQUEST['assets_page'] : 1;
        $assetQuery = Asset::where('userid', $userId)->with('type');
        $totalResults = $assetQuery->count();
        if ($perPage !== 'all') {
            $assetQuery->skip(($page - 1) * $perPage)->take($perPage);
        }
        $assets = $assetQuery->get();
        $pagination = '';
        if ($perPage !== 'all' && $totalResults > 0) {
            $totalPages = ceil($totalResults / $perPage);
            if ($totalPages > 1) {
                $pagination .= '<ul class="pagination">';
                if ($page > 1) {
                    $prevPage = $page - 1;
                    $pagination .= '<li><a href="clientssummary.php?userid=' . $userId . '&assets_page=' . $prevPage . '&assets_per_page=' . $perPage . '">&laquo;</a></li>';
                }
                for ($i = 1; $i <= $totalPages; $i++) {
                    $active = ($i == $page) ? 'class="active"' : '';
                    $pagination .= '<li ' . $active . '><a href="clientssummary.php?userid=' . $userId . '&assets_page=' . $i . '&assets_per_page=' . $perPage . '">' . $i . '</a></li>';
                }
                if ($page < $totalPages) {
                    $nextPage = $page + 1;
                    $pagination .= '<li><a href="clientssummary.php?userid=' . $userId . '&assets_page=' . $nextPage . '&assets_per_page=' . $perPage . '">&raquo;</a></li>';
                }
                $pagination .= '</ul>';
            }
        }
        $smarty = new \Smarty();
        $smarty->assign('assets', $assets);
        $smarty->assign('userid', $userId);
        $smarty->assign('per_page', $perPage);
        $smarty->assign('pagination', $pagination);
        $templatePath = __DIR__ . '/templates/admin/client_summary_table.tpl';
        if (file_exists($templatePath)) {
            return $smarty->fetch($templatePath);
        }
        return '<div class="errorbox">Asset Manager Error: client_summary_table.tpl not found.</div>';
    } catch (\Exception $e) {
        return '<div class="errorbox">Asset Manager Error: ' . $e->getMessage() . '</div>';
    }
}

// Hook function for the Client Area Homepage Widget
function asset_manager_client_widget_hook($vars)
{
    if (!isset($vars['panels']) || is_null($vars['panels'])) {
        return;
    }
    $showInClientArea = Capsule::table('tbladdonmodules')->where('module', 'asset_manager')->where('setting', 'showInClientArea')->value('value');
    if ($showInClientArea !== 'on') {
        return;
    }
    $currentUser = new \WHMCS\Authentication\CurrentUser();
    $client = $currentUser->client();
    if (!$client) {
        return;
    }
    $assets = Asset::where('userid', $client->id)->orderBy('created_at', 'desc')->take(5)->get();
    $bodyHtml = '<div class="list-group">';
    if ($assets->count() > 0) {
        foreach ($assets as $asset) {
            $bodyHtml .= '<a href="index.php?m=asset_manager&action=view-asset&id=' . $asset->id . '" class="list-group-item">' . htmlspecialchars($asset->name) . '</a>';
        }
    } else {
        $bodyHtml .= '<div class="list-group-item">No assets found.</div>';
    }
    $bodyHtml .= '</div>';
    $vars['panels']->addChild('my-assets-panel', [
        'name' => 'My Assets',
        'label' => 'Recent Assets',
        'icon' => 'fa-hdd-o',
        'order' => 100,
        'bodyHtml' => $bodyHtml,
        'footerHtml' => '<a href="index.php?m=asset_manager" class="btn btn-default btn-block"><i class="fas fa-desktop"></i> View All Assets</a>'
    ]);
}

// Hook function for the Admin Ticket Page
function asset_manager_ticket_link_hook($vars)
{
    $ticketId = $vars['ticketid'];
    $userId = $vars['userid'];
    if (isset($_POST['link_asset_to_ticket'])) {
        $assetId = (int)$_POST['asset_id'];
        if ($assetId > 0) {
            TicketLink::updateOrCreate(['ticket_id' => $ticketId], ['asset_id' => $assetId]);
        } else {
            TicketLink::where('ticket_id', $ticketId)->delete();
        }
    }
    $linkedAsset = TicketLink::where('ticket_id', $ticketId)->first();
    $clientAssets = Asset::where('userid', $userId)->get();
    $options = '<option value="0">-- None --</option>';
    foreach ($clientAssets as $asset) {
        $selected = ($linkedAsset && $linkedAsset->asset_id == $asset->id) ? 'selected' : '';
        $options .= "<option value=\"{$asset->id}\" {$selected}>{$asset->name} ({$asset->serial_number})</option>";
    }
    return '
        <div class="ticket-asset-linking"><form method="post" action=""><div class="row"><div class="col-sm-12">
        <label for="asset_id">Linked Asset</label>
        <select name="asset_id" id="asset_id" class="form-control">' . $options . '</select>
        <button type="submit" name="link_asset_to_ticket" class="btn btn-primary btn-sm" style="margin-top:10px;">Link Asset</button>
        </div></div></form></div>';
}

// Hook function for Client Area CSS
function asset_manager_client_css_hook($vars)
{
    if (isset($vars['modulename']) && $vars['modulename'] == 'asset_manager') {
        return '<link rel="stylesheet" href="modules/addons/asset_manager/assets/css/client.css">';
    }
}

// Hook function for Admin Area CSS and JS
function asset_manager_admin_head_hook($vars)
{
    $script = '<script type="text/javascript">
        $(document).ready(function() {
            var targetContainer = $(\'#clientsummarycontainer\');
            var assetPanel = $(\'#assetManagerSummaryPanel\');
            if (assetPanel.length && targetContainer.length) {
                assetPanel.appendTo(targetContainer);
            }
        });
    </script>';
    return '<link rel="stylesheet" href="modules/addons/asset_manager/assets/css/summary.css">' . $script;
}

// Register all hooks
add_hook('AdminAreaClientSummaryPage', 1, 'asset_manager_admin_summary_hook');
add_hook('ClientAreaHomepagePanels', 1, 'asset_manager_client_widget_hook');
add_hook('AdminAreaViewTicketPage', 300, 'asset_manager_ticket_link_hook');
add_hook('ClientAreaHeadOutput', 1, 'asset_manager_client_css_hook');
add_hook('AdminAreaHeadOutput', 1, 'asset_manager_admin_head_hook');
Link to comment
Share on other sites

I'm having problems too with AdminAreaHeadOutput hooks since last update, using whmcs 8.13.1

Even a simple hook is not working:

<?php
add_hook('AdminAreaHeadOutput', 1, function($vars) {
    return <<<HTML
<script type="text/javascript">
console.log("hooked!");
</script>
HTML;

});

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use & Guidelines and understand your posts will initially be pre-moderated