/** * Handle on_dashboard_important_section event * * @param NamedList $items * @param User $user * @return null */ function invoicing_handle_on_dashboard_important_section(&$items, &$user) { $company = $user->getCompany(); // if user can manage invoices, list overdue invoices for all companies if ($user->getSystemPermission('can_manage_invoices')) { // if it's administrator list only overdue invoices if (($admin_overdue_invoices = Invoices::countOverdue()) > 0) { $items->add('admin_overdue_invoices', array('label' => $admin_overdue_invoices > 1 ? lang('<strong>:count</strong> overdue invoices for all companies', array('count' => $admin_overdue_invoices)) : lang('<strong>:count</strong> overdue invoice for all companies', array('count' => $admin_overdue_invoices)), 'class' => 'adminoverdue_invoices', 'icon' => get_image_url('important.gif'), 'url' => assemble_url('invoices'))); } // if } // if // if user is company manager or can manage invoices show outstanding and overdue invoices for his company if ($user->isCompanyManager($company) || $user->getSystemPermission('can_manage_invoices')) { // // Outstanding Invoices // $issued_invoices_count = Invoices::countOutstanding($company); if ($issued_invoices_count > 0) { if ($issued_invoices_count == 1) { // if there is only one outstanding invoice, then link should open that very same invoice $issued_invoices = Invoices::findOutstanding($company, array(INVOICE_STATUS_ISSUED)); $link_url = $issued_invoices[0]->getCompanyViewUrl(); $label = lang('<strong>1</strong> outstanding invoice for your company'); } else { // if there is multuple outstanding invoices, then link should open company invoices pages $link_url = assemble_url('people_company_invoices', array('company_id' => $company->getId())); $label = lang('<strong>:count</strong> outstanding invoices for your company', array('count' => $issued_invoices_count)); } // if $items->add('issued_invoices', array('label' => $label, 'class' => 'issued_invoices', 'icon' => get_image_url('icon_small.gif', INVOICING_MODULE), 'url' => $link_url)); } // if // // Overdue Invoices // $overdue_invoices_count = Invoices::countOverdue($company); if ($overdue_invoices_count > 0) { if ($overdue_invoices_count == 1) { // if there is only one overdue invoice, then link should open that very same invoice $overdue_invoices = Invoices::findOverdue($company, array(INVOICE_STATUS_ISSUED)); $link_url = $overdue_invoices[0]->getCompanyViewUrl(); $label = lang('<strong>1</strong> overdue invoice for your company'); } else { // if there is multuple overdue invoices, then link should open company invoices pages $link_url = assemble_url('people_company_invoices', array('company_id' => $company->getId())); $label = lang('<strong>:count</strong> overdue invoices for your company', array('count' => $overdue_invoices)); } // if $items->add('overdue_invoices', array('label' => $label, 'class' => 'overdue_invoices', 'icon' => get_image_url('important.gif'), 'url' => $link_url)); } // if } // if }
/** * Build menu * * @param Menu $menu * @param User $user * @return array */ function incoming_mail_handle_on_build_menu(&$menu, &$user) { if (($user->isAdministrator() || $user->getSystemPermission('can_use_incoming_mail_frontend')) && ($count_pending = IncomingMails::countPending()) > 0) { $menu->addToGroup(array(new MenuItem('incoming_mail', lang('Inbox'), assemble_url('incoming_mail'), get_image_url('icon_menu.gif', INCOMING_MAIL_MODULE), $count_pending)), 'main'); } // if }
/** * Add options to main menu * * @param Menu $menu * @param User $user * @return null */ function timetracking_handle_on_build_menu(&$menu, &$user) { if ($user->isAdministrator() || $user->getSystemPermission('use_time_reports')) { $menu->addToGroup(array(new MenuItem('time', lang('Time'), 'https://www.healingcrystals.com/admin/timeSheets.php', get_image_url('navigation/time.gif'))), 'main'); } // if }
/** * Build menu * * @param Menu $menu * @param User $user * @return array */ function documents_handle_on_build_menu(&$menu, &$user) { if ($user->isAdministrator() || $user->getSystemPermission('can_use_documents')) { $menu->addToGroup(array(new MenuItem('documents', lang('Docs'), assemble_url('documents'), get_image_url('icon.gif', DOCUMENTS_MODULE))), 'main'); } // if }
/** * Build menu * * @param Menu $menu * @param User $user * @return array */ function status_handle_on_build_menu(&$menu, &$user) { if ($user->isAdministrator() || $user->getSystemPermission('can_use_status_updates')) { $last_visit = UserConfigOptions::getValue('status_update_last_visited', $user); $menu->addToGroup(array(new MenuItem('status', lang('Status'), assemble_url('status_updates'), get_image_url('icon_menu.gif', STATUS_MODULE), StatusUpdates::countNewMessagesForUser($user, $last_visit))), 'main'); } // if }
/** * System module on_project_object_quick_options event handler * * @package activeCollab.modules.system * @subpackage handlers * @param NamedList $options * @param ProjectObject $object * @param User $user * @return null */ function system_handle_on_project_object_quick_options(&$options, $object, $user) { /** * Add a quick option which links to the list of commits related to the object */ if (instance_of($object, 'ProjectObject') && $object->getState() == STATE_DELETED && ($user->isAdministrator() || $user->getSystemPermission('manage_trash'))) { $options->add('project_object_delete', array('text' => lang('Permanently delete'), 'url' => assemble_url('project_object_delete', array('project_id' => $object->getProjectId(), 'object_id' => $object->getId())), 'method' => 'post', 'confirm' => lang('Are you sure that you wish to permanently remove this :type?', array('type' => $object->getVerboseType(true))))); } // if }
/** * Add options to main menu * * @param Menu $menu * @param User $user * @return null */ function invoicing_handle_on_build_menu(&$menu, &$user) { $company = $user->getCompany(); if ($user->getSystemPermission('can_manage_invoices')) { $menu->addToGroup(array(new MenuItem('invoicing', lang('Invoices'), assemble_url('invoices'), get_image_url('menu-icon.gif', INVOICING_MODULE), Invoices::countOverdue())), 'main'); } else { if ($user->isCompanyManager($company)) { $menu->addToGroup(array(new MenuItem('invoicing', lang('Invoices'), assemble_url('people_company_invoices', array('company_id' => $user->getCompanyId())), get_image_url('menu-icon.gif', INVOICING_MODULE), Invoices::countByCompany($user->getCompany(), array(INVOICE_STATUS_ISSUED)))), 'main'); } } // if }
/** * Constructor * * @param Request $request * @return ApplicationController */ function __construct($request) { parent::__construct($request); // Set detault layout for application pages $this->setLayout(array('module' => SYSTEM_MODULE, 'layout' => 'wireframe')); // Get Smarty instance... We need it $this->smarty =& Smarty::instance(); // Load and init owner company $this->owner_company = get_owner_company(); if (instance_of($this->owner_company, 'Company')) { cache_set('owner_company', $this->owner_company); } else { $this->httpError(HTTP_ERR_NOT_FOUND, 'Owner company is not defined'); } // if $this->application =& application(); $this->authentication =& Authentication::instance(); $this->logged_user =& $this->authentication->provider->getUser(); $this->wireframe =& Wireframe::instance(); $this->wireframe->page_company = $this->owner_company; $this->theme_name = instance_of($this->logged_user, 'User') ? UserConfigOptions::getValue('theme', $this->logged_user) : ConfigOptions::getValue('theme'); $this->smarty->assign(array('root_url' => ROOT_URL, 'assets_url' => ASSETS_URL)); // Maintenance mode if (ConfigOptions::getValue('maintenance_enabled')) { if (instance_of($this->logged_user, 'User') && $this->logged_user->isAdministrator()) { $this->wireframe->addPageMessage(lang('System is in maintenance mode and can be used by administrators only. <a href=":url">Click here</a> to turn off maintenance mode', array('url' => assemble_url('admin_settings_maintenance'))), 'warning'); } else { $additional_error_info = ConfigOptions::getValue('maintenance_message'); if ($additional_error_info) { $additional_error_info .= "\n\n"; } // if $additional_error_info .= lang('When system is in maintenance mode, administrators can log in and access the system') . ": " . assemble_url('login'); $this->smarty->assign('additional_error_info', $additional_error_info); if ($this->restrict_access_in_maintenance_mode) { $this->httpError(503); } // if } // if } // if // Check permissions if ($this->login_required && !instance_of($this->logged_user, 'User')) { // If async don't redirect to loging, just server proper HTTP code if ($this->request->isAsyncCall()) { $this->httpError(HTTP_ERR_UNAUTHORIZED, null, true, true); // Not async? Redirect to login with extracted route data... } else { $params = array(); if ($request->matched_route != 'login') { $params['re_route'] = $request->matched_route; foreach ($this->request->url_params as $k => $v) { if ($k == 'module' || $k == 'controller' || $k == 'action') { continue; } // if $params["re_{$k}"] = $v; } // foreach } // if $this->redirectTo($this->login_route, $params); } // if } // if if (instance_of($this->logged_user, 'User') && !$this->logged_user->getSystemPermission('system_access')) { $this->authentication->provider->logUserOut(); $this->httpError(HTTP_ERR_FORBIDDEN); } // if $loaded_modules = $this->application->getModules(); $assets_query_string = 'v=' . $this->application->version . '&modules='; foreach ($loaded_modules as $loaded_module) { $assets_query_string .= $loaded_module->getName() . ','; } // foreach $this->smarty->assign(array('api_status' => API_STATUS, 'application' => $this->application, 'owner_company' => $this->owner_company, 'authentication' => $this->authentication, 'logged_user' => $this->logged_user, 'request' => $this->request, 'theme_name' => $this->theme_name, 'request_time' => $this->request_time, 'loaded_modules' => $this->application->getModules(), 'captcha_url' => ROOT_URL . '/captcha.php?id=' . md5(time()), 'assets_query_string' => $assets_query_string, 'js_disabled_url' => assemble_url('js_disabled'))); $this->smarty->assign_by_ref('wireframe', $this->wireframe); js_assign(array('homepage_url' => ROOT_URL, 'assets_url' => ASSETS_URL, 'indicator_url' => get_image_url('indicator.gif'), 'big_indicator_url' => get_image_url('indicator_big.gif'), 'ok_indicator_url' => get_image_url('ok_indicator.gif'), 'warning_indicator_url' => get_image_url('warning_indicator.gif'), 'error_indicator_url' => get_image_url('error_indicator.gif'), 'pending_indicator_url' => get_image_url('pending_indicator.gif'), 'url_base' => URL_BASE, 'keep_alive_interval' => KEEP_ALIVE_INTERVAL, 'refresh_session_url' => assemble_url('refresh_session'), 'jump_to_project_url' => assemble_url('jump_to_project_widget'), 'quick_add_url' => assemble_url('quick_add'), 'path_info_through_query_string' => PATH_INFO_THROUGH_QUERY_STRING, 'image_picker_url' => assemble_url('image_picker'), 'copyright_removed' => LICENSE_COPYRIGHT_REMOVED, 'custom_tabs_manager' => assemble_url('custom_tabs_manager'), 'add_milestone_url' => assemble_url('project_milestones_add', array('project_id' => '--PROJECT_ID--')), 'add_checklist_url' => assemble_url('project_checklists_add', array('project_id' => '--PROJECT_ID--')), 'add_discussion_url' => assemble_url('project_discussions_add', array('project_id' => '--PROJECT_ID--')), 'add_file_url' => assemble_url('project_files_upload', array('project_id' => '--PROJECT_ID--')), 'add_page_url' => assemble_url('project_pages_add', array('project_id' => '--PROJECT_ID--')), 'add_ticket_url' => assemble_url('project_tickets_add', array('project_id' => '--PROJECT_ID--')), 'add_timerecord_url' => assemble_url('project_time_add', array('project_id' => '--PROJECT_ID--')), 'attachment_rename_url' => assemble_url('attachment_rename', array('project_id' => '--PROJECT_ID--', 'attachment_id' => '--ATTACHMENT_ID--')), 'attachment_copy_to_url' => assemble_url('attachment_copy_to', array('project_id' => '--PROJECT_ID--', 'attachment_id' => '--ATTACHMENT_ID--')), 'attachment_move_to_url' => assemble_url('attachment_move_to', array('project_id' => '--PROJECT_ID--', 'attachment_id' => '--ATTACHMENT_ID--')), 'image_uploader_url' => assemble_url('image_uploader'), 'render_comments_url' => assemble_url('render_comments'), 'move_task_url' => assemble_url('project_task_move', array('project_id' => '--PROJECT_ID--', 'task_id' => '--TASK_ID--')), 'get_collection_url' => assemble_url('collection'), 'quick_task_reminder_url' => assemble_url('project_task_quickreminder', array('project_id' => '--PROJECT_ID--', 'task_id' => '--TASK_ID--')), 'convert_to_ticket_url' => assemble_url('project_object_convert_to_ticket', array('project_id' => '--PROJECT_ID--', 'object_id' => '--OBJECT_ID--')), 'convert_to_milestone_url' => assemble_url('project_object_convert_to_milestone', array('project_id' => '--PROJECT_ID--', 'object_id' => '--OBJECT_ID--')), 'convert_to_page_url' => assemble_url('project_object_convert_to_page', array('project_id' => '--PROJECT_ID--', 'object_id' => '--OBJECT_ID--')), 'snooze_task_url' => assemble_url('project_task_snooze', array('project_id' => '--PROJECT_ID--', 'task_id' => '--TASK_ID--')))); if ($this->logged_user) { $link = mysql_connect(DB_HOST, DB_USER, DB_PASS); mysql_select_db(DB_NAME); if (!empty($_SESSION['pg_ttl'])) { mysql_query("update healingcrystals_user_visited_pages set title='" . mysql_real_escape_string($_SESSION['pg_ttl']) . "' where user_id='" . $this->logged_user->getId() . "' and access_time='" . date('Y-m-d H:i:s', $_SESSION['temp_time']) . "'"); } $current_url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; $pos = strpos($_SERVER['QUERY_STRING'], '%2F'); if ($pos !== false) { $max_pages_count_per_user = 50; //require_once SMARTY_PATH . '/plugins/function.page_title.php'; //$current_page_title = smarty_function_page_title(array('default' => 'Projects')); //$current_page_title = PageConstruction::getPageTitle(); $_SESSION['temp_time'] = time(); mysql_query("insert into healingcrystals_user_visited_pages (user_id, page_url, title, access_time) values ('" . $this->logged_user->getId() . "', '" . $current_url . "', '', '" . date('Y-m-d H:i:s', $_SESSION['temp_time']) . "')"); //mysql_query("insert into healingcrystals_user_visited_pages (user_id, page_url, title, access_time) values ('" . $this->logged_user->getId() . "', '" . $current_url . "', '', now())"); $query = "select count(*) as count from healingcrystals_user_visited_pages where user_id='" . $this->logged_user->getId() . "'"; $result = mysql_query($query); $info = mysql_fetch_assoc($result); $current_count = $info['count']; if ($current_count > $max_pages_count_per_user) { $querries = array(); $query = "select * from healingcrystals_user_visited_pages where user_id='" . $this->logged_user->getId() . "' order by access_time limit 0, " . ($current_count - $max_pages_count_per_user); $result = mysql_query($query); while ($info = mysql_fetch_assoc($result)) { $querries[] = "delete from healingcrystals_user_visited_pages where user_id='" . $this->logged_user->getId() . "' and page_url='" . $info['page_url'] . "' and access_time='" . $info['access_time'] . "'"; } } foreach ($querries as $query) { mysql_query($query); } } $_SESSION['pg_ttl'] = ''; mysql_close($link); } }
/** * Returns true if $user can add documents * * @param User $user * @return boolean */ function canAdd($user) { return $user->isAdministrator() || $user->getSystemPermission('can_add_documents') && (bool) DocumentCategories::findAll($user); }
/** * Returns true if $user can add payment to this invoice * * @param User $user * @return boolean */ function canAddPayment($user) { return $this->getStatus() == INVOICE_STATUS_ISSUED && $user->getSystemPermission('can_manage_invoices'); }
/** * Check if $user can add new project * * @param User $user * @return boolean */ function canAdd($user) { return $user->isAdministrator() || $user->isProjectManager() || $user->getSystemPermission('add_project'); }
/** * Returns true if $user can delete this payment * * @param User $user * @return boolean */ function canDelete($user) { $invoice = $this->getInvoice(); return ($invoice->isIssued() || $invoice->isBilled()) && $user->getSystemPermission('can_manage_invoices'); }
/** * Check if user can delete this filter * * @param User $user * @return boolean */ function canDelete($user) { if ($user->getSystemPermission('manage_assignment_filters')) { if (ConfigOptions::getValue('default_assignments_filter') == $this->getId()) { return false; // default filter cannot be deleted } // if if ($this->getIsPrivate()) { return $this->getCreatedById() == $user->getId(); } // if return $user->isAdministrator(); } else { return false; } // if }
/** * Returns true if $user can delete this time report * * @param User $user * @return boolean */ function canDelete($user) { if ($this->getIsDefault()) { return false; // Default time report cannot be deleted } // if return $user->isAdministrator() || $user->getSystemPermission('use_time_reports') && $user->getSystemPermission('manage_time_reports'); }