Răsfoiți Sursa

Ticket #4726 - Jobs.

AntonLV 2 ani în urmă
părinte
comite
0038c541b3
54 a modificat fișierele cu 3895 adăugiri și 0 ștergeri
  1. 21 0
      modules/boonex/jobs/classes/BxJobsAlertsResponse.php
  2. 22 0
      modules/boonex/jobs/classes/BxJobsCmts.php
  3. 312 0
      modules/boonex/jobs/classes/BxJobsConfig.php
  4. 25 0
      modules/boonex/jobs/classes/BxJobsConnectionFans.php
  5. 22 0
      modules/boonex/jobs/classes/BxJobsCronPruning.php
  6. 23 0
      modules/boonex/jobs/classes/BxJobsDb.php
  7. 24 0
      modules/boonex/jobs/classes/BxJobsFormEntry.php
  8. 22 0
      modules/boonex/jobs/classes/BxJobsFormPrice.php
  9. 22 0
      modules/boonex/jobs/classes/BxJobsFormQuestion.php
  10. 23 0
      modules/boonex/jobs/classes/BxJobsFormsEntryHelper.php
  11. 21 0
      modules/boonex/jobs/classes/BxJobsGridAdministration.php
  12. 21 0
      modules/boonex/jobs/classes/BxJobsGridBans.php
  13. 21 0
      modules/boonex/jobs/classes/BxJobsGridCommon.php
  14. 21 0
      modules/boonex/jobs/classes/BxJobsGridConnections.php
  15. 21 0
      modules/boonex/jobs/classes/BxJobsGridInvites.php
  16. 22 0
      modules/boonex/jobs/classes/BxJobsGridPricesManage.php
  17. 22 0
      modules/boonex/jobs/classes/BxJobsGridPricesView.php
  18. 22 0
      modules/boonex/jobs/classes/BxJobsGridQuestionsManage.php
  19. 24 0
      modules/boonex/jobs/classes/BxJobsMenu.php
  20. 25 0
      modules/boonex/jobs/classes/BxJobsMenuManageTools.php
  21. 67 0
      modules/boonex/jobs/classes/BxJobsMenuSnippetMeta.php
  22. 25 0
      modules/boonex/jobs/classes/BxJobsMenuView.php
  23. 29 0
      modules/boonex/jobs/classes/BxJobsMenuViewActions.php
  24. 70 0
      modules/boonex/jobs/classes/BxJobsMenuViewActionsAll.php
  25. 25 0
      modules/boonex/jobs/classes/BxJobsMenuViewMeta.php
  26. 39 0
      modules/boonex/jobs/classes/BxJobsModule.php
  27. 24 0
      modules/boonex/jobs/classes/BxJobsPageBrowse.php
  28. 42 0
      modules/boonex/jobs/classes/BxJobsPageEntriesInContext.php
  29. 35 0
      modules/boonex/jobs/classes/BxJobsPageEntry.php
  30. 24 0
      modules/boonex/jobs/classes/BxJobsPageJoinedEntries.php
  31. 24 0
      modules/boonex/jobs/classes/BxJobsPageListEntry.php
  32. 22 0
      modules/boonex/jobs/classes/BxJobsPrivacy.php
  33. 21 0
      modules/boonex/jobs/classes/BxJobsPrivacyNotifications.php
  34. 22 0
      modules/boonex/jobs/classes/BxJobsPrivacyPost.php
  35. 22 0
      modules/boonex/jobs/classes/BxJobsRecommendationFans.php
  36. 243 0
      modules/boonex/jobs/classes/BxJobsSearchResult.php
  37. 24 0
      modules/boonex/jobs/classes/BxJobsTemplate.php
  38. 21 0
      modules/boonex/jobs/classes/BxJobsUploaderCoverCrop.php
  39. 21 0
      modules/boonex/jobs/classes/BxJobsUploaderPictureCrop.php
  40. 152 0
      modules/boonex/jobs/install/config.php
  41. 20 0
      modules/boonex/jobs/install/installer.php
  42. 529 0
      modules/boonex/jobs/install/langs/en.xml
  43. 66 0
      modules/boonex/jobs/install/sql/disable.sql
  44. 752 0
      modules/boonex/jobs/install/sql/enable.sql
  45. 591 0
      modules/boonex/jobs/install/sql/install.sql
  46. 64 0
      modules/boonex/jobs/install/sql/uninstall.sql
  47. 30 0
      modules/boonex/jobs/js/entry.js
  48. 16 0
      modules/boonex/jobs/js/invite_popup.js
  49. 43 0
      modules/boonex/jobs/js/main.js
  50. 21 0
      modules/boonex/jobs/js/manage_tools.js
  51. 20 0
      modules/boonex/jobs/js/prices.js
  52. 18 0
      modules/boonex/jobs/request.php
  53. 13 0
      modules/boonex/jobs/template/images/icons/std-icon.svg
  54. 24 0
      modules/boonex/jobs/template/images/no-picture.svg

+ 21 - 0
modules/boonex/jobs/classes/BxJobsAlertsResponse.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsAlertsResponse extends BxBaseModGroupsAlertsResponse
+{
+    public function __construct()
+    {
+    	$this->MODULE = 'bx_jobs';
+        parent::__construct();
+    }
+}
+
+/** @} */

+ 22 - 0
modules/boonex/jobs/classes/BxJobsCmts.php

@@ -0,0 +1,22 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsCmts extends BxBaseModGroupsCmts
+{
+    function __construct($sSystem, $iId, $iInit = 1)
+    {
+    	$this->_sModule = 'bx_jobs';
+
+        parent::__construct($sSystem, $iId, $iInit);
+    }
+}
+
+/** @} */

+ 312 - 0
modules/boonex/jobs/classes/BxJobsConfig.php

@@ -0,0 +1,312 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsConfig extends BxBaseModGroupsConfig
+{
+    function __construct($aModule)
+    {
+        parent::__construct($aModule);
+
+        $this->_aMenuItems2MethodsActions = array_merge($this->_aMenuItems2MethodsActions, array(
+            'view-job-profile' => 'checkAllowedView',
+            'edit-job-profile' => 'checkAllowedEdit',
+            'edit-job-cover' => 'checkAllowedChangeCover',
+            'invite-to-job' => 'checkAllowedInvite',
+            'delete-job-profile' => 'checkAllowedDelete',
+            'approve-job-profile' => 'checkAllowedApprove',
+        ));
+
+        $this->CNF = array (
+
+            // module icon
+            'ICON' => 'business-time col-green2',
+
+            // database tables
+            'TABLE_ENTRIES' => $aModule['db_prefix'] . 'data',
+            'TABLE_ENTRIES_FULLTEXT' => 'search_fields',
+            'TABLE_ADMINS' => $aModule['db_prefix'] . 'admins',
+            'TABLE_INVITES' => $aModule['db_prefix'] . 'invites',
+            'TABLE_PRICES' => $aModule['db_prefix'] . 'prices',
+            'TABLE_QUESTIONS' => $aModule['db_prefix'] . 'qnr_questions',
+            'TABLE_ANSWERS' => $aModule['db_prefix'] . 'qnr_answers',
+
+            // database fields
+            'FIELD_ID' => 'id',
+            'FIELD_AUTHOR' => 'author',
+            'FIELD_ADDED' => 'added',
+            'FIELD_CHANGED' => 'changed',
+            'FIELD_NAME' => 'name',
+            'FIELD_TITLE' => 'name',
+            'FIELD_TEXT' => 'desc',
+            'FIELD_CATEGORY' => 'cat',
+            'FIELD_PICTURE' => 'picture',
+            'FIELD_COVER' => 'cover',
+            'FIELD_COVER_POSITION' => 'cover_data',
+            'FIELD_DATE_START' => 'date_start',
+            'FIELD_DATE_END' => 'date_end',
+            'FIELD_TIMEZONE' => 'timezone',
+            'FIELD_PAY_TOTAL' => 'pay_total',
+            'FIELD_PAY_HOURLY' => 'pay_hourly',
+            'FIELD_JOIN_CONFIRMATION' => 'join_confirmation',
+            'FIELD_ALLOW_VIEW_TO' => 'allow_view_to',
+            'FIELD_ALLOW_POST_TO' => 'allow_post_to',
+            'FIELD_CF' => 'cf',
+            'FIELD_VIEWS' => 'views',
+            'FIELD_VOTES' => 'votes',
+            'FIELD_STATUS' => 'status',
+            'FIELD_STATUS_ADMIN' => 'status_admin',
+            'FIELD_COMMENTS' => 'comments',
+            'FIELDS_QUICK_SEARCH' => array('name'),
+            'FIELD_LOCATION' => 'location',
+            'FIELD_LOCATION_PREFIX' => 'location',
+            'FIELD_LABELS' => 'labels',
+            'FIELDS_WITH_KEYWORDS' => 'auto', // can be 'auto', array of fields or comma separated string of field names, works only when OBJECT_METATAGS is specified
+
+            'FIELD_PRICE_ROLE_ID' => 'role_id',
+            'FIELD_PRICE_NAME' => 'name',
+
+            // page URIs
+            'URI_VIEW_ENTRY' => 'view-job-profile',
+            'URI_VIEW_MEMBERS' => 'job-fans',
+            'URI_EDIT_ENTRY' => 'edit-job-profile',
+            'URI_JOIN_ENTRY' => 'join-job-profile',
+            'URI_JOINED_ENTRIES' => 'joined-jobs',
+            'URI_FOLLOWED_ENTRIES' => 'followed-jobs',
+            'URI_ENTRIES_BY_CONTEXT' => 'jobs-context',
+            'URI_MANAGE_COMMON' => 'jobs-manage',
+            'URI_FAVORITES_LIST' => 'jobs-favorites',
+
+            'URL_HOME' => 'page.php?i=jobs-home',
+            'URL_ENTRY_FANS' => 'page.php?i=job-fans',
+            'URL_ENTRY_MANAGE' => 'page.php?i=job-manage',
+            'URL_MANAGE_COMMON' => 'page.php?i=jobs-manage',
+            'URL_MANAGE_ADMINISTRATION' => 'page.php?i=jobs-administration',
+
+            'PARAM_AUTO_APPROVE' => 'bx_jobs_enable_auto_approve',
+            'PARAM_NUM_RSS' => 'bx_jobs_num_rss',
+            'PARAM_NUM_CONNECTIONS_QUICK' => 'bx_jobs_num_connections_quick',
+
+            'PARAM_SEARCHABLE_FIELDS' => 'bx_jobs_searchable_fields',
+            'PARAM_PER_PAGE_BROWSE_SHOWCASE' => 'bx_jobs_per_page_browse_showcase',
+            'PARAM_PER_PAGE_BROWSE_RECOMMENDED' => 'bx_jobs_per_page_browse_recommended',
+
+            'PARAM_MMODE' => 'bx_jobs_members_mode',
+            'PARAM_PAID_JOIN_ENABLED' => true,
+            'PARAM_RECURRING_RESERVE' => 3, // 3 days for recurring payment to be registered
+            'PARAM_SBS_WO_JOIN' => 'bx_jobs_enable_subscribe_wo_join',
+            'PARAM_PER_PAGE_FOR_FAVORITES_LISTS' => 'bx_jobs_per_page_for_favorites_lists',
+            'PARAM_USE_IN' => 'bx_jobs_internal_notifications',
+            
+            // objects
+            'OBJECT_STORAGE' => 'bx_jobs_pics',
+            'OBJECT_STORAGE_COVER' => 'bx_jobs_pics',
+            'OBJECT_IMAGES_TRANSCODER_THUMB' => 'bx_jobs_thumb',
+            'OBJECT_IMAGES_TRANSCODER_ICON' => 'bx_jobs_icon',
+            'OBJECT_IMAGES_TRANSCODER_AVATAR' => 'bx_jobs_avatar',
+            'OBJECT_IMAGES_TRANSCODER_AVATAR_BIG' => 'bx_jobs_avatar_big',
+            'OBJECT_IMAGES_TRANSCODER_PICTURE' => 'bx_jobs_picture',
+            'OBJECT_IMAGES_TRANSCODER_COVER' => 'bx_jobs_cover',
+            'OBJECT_IMAGES_TRANSCODER_COVER_THUMB' => 'bx_jobs_cover_thumb',
+            'OBJECT_IMAGES_TRANSCODER_GALLERY' => 'bx_jobs_gallery',
+            'OBJECT_VIEWS' => 'bx_jobs',
+            'OBJECT_VOTES' => 'bx_jobs',
+            'OBJECT_SCORES' => 'bx_jobs',
+            'OBJECT_FAVORITES' => 'bx_jobs',
+            'OBJECT_FEATURED' => 'bx_jobs',
+            'OBJECT_COMMENTS' => 'bx_jobs',
+            'OBJECT_NOTES' => 'bx_jobs_notes',
+            'OBJECT_REPORTS' => 'bx_jobs',
+            'OBJECT_METATAGS' => 'bx_jobs',
+            'OBJECT_CATEGORY' => 'bx_jobs_cats',
+            'OBJECT_FORM_ENTRY' => 'bx_job',
+            'OBJECT_FORM_ENTRY_DISPLAY_VIEW' => 'bx_job_view',
+            'OBJECT_FORM_ENTRY_DISPLAY_VIEW_FULL' => 'bx_job_view_full', // for "info" tab on view job page
+            'OBJECT_FORM_ENTRY_DISPLAY_ADD' => 'bx_job_add',
+            'OBJECT_FORM_ENTRY_DISPLAY_EDIT' => 'bx_job_edit',
+            'OBJECT_FORM_ENTRY_DISPLAY_EDIT_COVER' => 'bx_job_edit_cover',
+            'OBJECT_FORM_ENTRY_DISPLAY_DELETE' => 'bx_job_delete',
+            'OBJECT_FORM_ENTRY_DISPLAY_INVITE' => 'bx_job_invite',
+            'OBJECT_FORM_QUESTION' => 'bx_jobs_question',
+            'OBJECT_FORM_QUESTION_DISPLAY_ADD' => 'bx_jobs_question_add',
+            'OBJECT_FORM_QUESTION_DISPLAY_EDIT' => 'bx_jobs_question_edit',
+            'OBJECT_FORM_PRICE' => 'bx_jobs_price',
+            'OBJECT_FORM_PRICE_DISPLAY_ADD' => 'bx_jobs_price_add',
+            'OBJECT_FORM_PRICE_DISPLAY_EDIT' => 'bx_jobs_price_edit',
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY' => 'bx_jobs_view_actions', // actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY_MORE' => 'bx_jobs_view_actions_more', // actions menu on view entry page for "more" popup
+            'OBJECT_MENU_ACTIONS_VIEW_ENTRY_ALL' => 'bx_jobs_view_actions_all', // all actions menu on view entry page
+            'OBJECT_MENU_ACTIONS_MY_ENTRIES' => 'bx_jobs_my', // actions menu on profile entries page
+            'OBJECT_MENU_SUBMENU' => 'bx_jobs_submenu', // main module submenu
+            'OBJECT_MENU_SUBMENU_VIEW_ENTRY' => 'bx_jobs_view_submenu',  // view entry submenu
+            'OBJECT_MENU_SUBMENU_VIEW_ENTRY_MAIN_SELECTION' => 'jobs-home', // first item in view entry submenu from main module submenu
+            'OBJECT_MENU_MANAGE_VIEW_ENTRY' => '',
+            'OBJECT_MENU_VIEW_ENTRY_META' => 'bx_jobs_view_meta', // meta menu on view entry page
+            'OBJECT_MENU_SNIPPET_META' => 'bx_jobs_snippet_meta', // menu for snippet meta info
+            'OBJECT_MENU_MANAGE_TOOLS' => 'bx_jobs_menu_manage_tools', //manage menu in content administration tools
+            'OBJECT_PAGE_VIEW_ENTRY' => 'bx_jobs_view_profile',
+            'OBJECT_PAGE_VIEW_ENTRY_CLOSED' => 'bx_jobs_view_profile_closed',
+            'OBJECT_PRIVACY_VIEW' => 'bx_jobs_allow_view_to',
+            'OBJECT_PRIVACY_LIST_VIEW' => 'bx_jobs_allow_view_favorite_list',
+            'OBJECT_PRIVACY_VIEW_NOTIFICATION_EVENT' => 'bx_jobs_allow_view_notification_to',
+            'OBJECT_PRIVACY_POST' => 'bx_jobs_allow_post_to',
+            'OBJECT_GRID_ADMINISTRATION' => 'bx_jobs_administration',
+            'OBJECT_GRID_COMMON' => 'bx_jobs_common',
+            'OBJECT_GRID_CONNECTIONS' => 'bx_jobs_fans',
+            'OBJECT_GRID_INVITES' => 'bx_jobs_invites',
+            'OBJECT_GRID_BANS' => 'bx_jobs_bans',
+            'OBJECT_GRID_QUESTIONS_MANAGE' => 'bx_jobs_questions_manage',
+            'OBJECT_GRID_PRICES_MANAGE' => 'bx_jobs_prices_manage',
+            'OBJECT_GRID_PRICES_VIEW' => 'bx_jobs_prices_view',
+            'OBJECT_CONNECTIONS' => 'bx_jobs_fans',
+            'OBJECT_RECOMMENDATIONS_FANS' => 'bx_jobs_fans',
+            'OBJECT_UPLOADERS_COVER' => array('bx_jobs_cover_crop'),
+            'OBJECT_UPLOADERS_PICTURE' => array('bx_jobs_picture_crop'),
+            'OBJECT_PRE_LIST_ROLES' => 'bx_jobs_roles',
+            'OBJECT_PRE_LIST_PERIOD_UNITS' => 'bx_jobs_period_units',
+            
+            'BADGES_AVALIABLE' => true,
+            'INVITES_KEYS_LIFETIME' => 86400,
+            'ENABLE_FOR_CONTEXT_IN_MODULES' => array('bx_events', 'bx_groups', 'bx_spaces'),
+
+            'EMAIL_INVITATION' => 'bx_jobs_invitation',
+            'EMAIL_JOIN_REQUEST' => 'bx_jobs_join_request',
+            'EMAIL_JOIN_CONFIRM' => 'bx_jobs_join_confirm',
+            'EMAIL_FAN_BECOME_ADMIN' => 'bx_jobs_fan_become_admin',
+            'EMAIL_ADMIN_BECOME_FAN' => 'bx_jobs_admin_become_fan',
+            'EMAIL_FAN_SET_ROLE' => 'bx_jobs_set_role',
+            'EMAIL_FAN_REMOVE' => 'bx_jobs_fan_remove',
+            'EMAIL_JOIN_REJECT' => 'bx_jobs_join_reject',
+
+            'TRIGGER_MENU_PROFILE_VIEW_SUBMENU' => 'trigger_group_view_submenu',
+            'TRIGGER_MENU_PROFILE_SNIPPET_META' => 'trigger_group_snippet_meta',
+            'TRIGGER_MENU_PROFILE_VIEW_ACTIONS' => 'trigger_group_view_actions',
+        	'TRIGGER_PAGE_VIEW_ENTRY' => 'trigger_page_group_view_entry',
+
+            // menu items which visibility depends on custom visibility checking
+            'MENU_ITEM_TO_METHOD' => array (
+                'bx_jobs_view_actions' => $this->_aMenuItems2MethodsActions,
+                'bx_jobs_view_actions_more' => $this->_aMenuItems2MethodsActions,
+                'bx_jobs_view_actions_all' => $this->_aMenuItems2MethodsActions,
+            ),
+
+            // informer messages
+            'INFORMERS' => array (
+                'status' => array (
+                    'name' => 'bx-jobs-status-not-active',
+                    'map' => array (
+                        BX_PROFILE_STATUS_PENDING => '_bx_jobs_txt_account_pending',
+                        BX_PROFILE_STATUS_SUSPENDED => '_bx_jobs_txt_account_suspended',
+                    ),
+                ),
+                'approving' => array (
+                    'name' => 'bx-jobs-approving',
+                    'map' => array (
+                        'pending' => array('msg' => '_bx_jobs_txt_account_pending', 'type' => BX_INFORMER_ALERT),
+                        'hidden' => array('msg' => '_bx_jobs_txt_status_hidden', 'type' => BX_INFORMER_ERROR),
+                    ),
+                ),
+            ),
+
+            // some language keys
+            'T' => array (
+                'txt_sample_single' => '_bx_jobs_txt_sample_single',
+                'txt_sample_single_with_article' => '_bx_jobs_txt_sample_single_with_article',
+                'txt_sample_comment_single' => '_bx_jobs_txt_sample_comment_single',
+                'txt_sample_vote_single' => '_bx_jobs_txt_sample_vote_single',
+                'txt_sample_score_up_single' => '_bx_jobs_txt_sample_score_up_single',
+                'txt_sample_score_down_single' => '_bx_jobs_txt_sample_score_down_single',
+                'txt_private_group' => '_bx_jobs_txt_private_job',
+                'txt_N_fans' => '_bx_jobs_txt_N_fans',
+                'txt_ntfs_join_invitation' => '_bx_jobs_txt_ntfs_join_invitation',
+                'txt_ntfs_join_request' => '_bx_jobs_txt_ntfs_join_request',
+                'txt_ntfs_fan_added' => '_bx_jobs_txt_ntfs_fan_added',
+                'txt_ntfs_timeline_post_common' => '_bx_jobs_txt_ntfs_timeline_post_common',
+                'option_members_mode_multi_roles' => '_bx_jobs_option_members_mode_multi_roles',
+                'form_field_author' => '_bx_jobs_form_entry_input_author',
+                'menu_item_title_befriend_sent' => '_bx_jobs_menu_item_title_befriend_sent',
+                'menu_item_title_unfriend_cancel_request' => '_bx_jobs_menu_item_title_unfriend_cancel_request',
+                'menu_item_title_befriend_confirm' => '_bx_jobs_menu_item_title_befriend_confirm',
+                'menu_item_title_unfriend_reject_request' => '_bx_jobs_menu_item_title_unfriend_reject_request',
+                'menu_item_title_befriend' => '_bx_jobs_menu_item_title_befriend',
+                'menu_item_title_unfriend' => '_bx_jobs_menu_item_title_unfriend',
+                'grid_action_err_delete' => '_bx_jobs_grid_action_err_delete',
+                'grid_txt_account_manager' => '_bx_jobs_grid_txt_account_manager',
+                'filter_item_active' => '_bx_jobs_grid_filter_item_title_adm_active',
+                'filter_item_hidden' => '_bx_jobs_grid_filter_item_title_adm_hidden',
+                'filter_item_pending' => '_bx_jobs_grid_filter_item_title_adm_pending',
+                'filter_item_suspended' => '_bx_jobs_grid_filter_item_title_adm_suspended',
+                'filter_item_select_one_filter1' => '_bx_jobs_grid_filter_item_title_adm_select_one_filter1',
+                'filter_item_select_one_filter2' => '_bx_jobs_grid_filter_item_title_adm_select_one_filter2',
+                'menu_item_manage_my' => '_bx_jobs_menu_item_title_manage_my',
+                'menu_item_manage_all' => '_bx_jobs_menu_item_title_manage_all',
+                'menu_item_title_sm_join' => '_bx_jobs_menu_item_title_become_fan',
+                'menu_item_title_sm_join_requested' => '_bx_jobs_menu_item_title_become_fan_sent',
+                'menu_item_title_sm_leave' => '_bx_jobs_menu_item_title_leave_job',
+                'menu_item_title_sm_leave_cancel' => '_bx_jobs_menu_item_title_leave_job_cancel_request',
+                'txt_all_entries_in' => '_bx_jobs_txt_all_entries_in',
+                'txt_all_entries_by_author' => '_bx_jobs_page_title_browse_by_author',
+                'txt_all_entries_by_context' => '_bx_jobs_page_title_browse_by_context',
+                'txt_invitation_popup_title' => '_bx_jobs_txt_invite_popup_title',
+                'txt_invitation_popup_text' => '_bx_jobs_txt_invite_popup_text',
+                'txt_invitation_popup_accept_button' => '_bx_jobs_txt_invite_popup_button_accept',
+                'txt_invitation_popup_decline_button' => '_bx_jobs_txt_invite_popup_button_decline',
+                'txt_invitation_popup_error_invitation_absent' => '_bx_jobs_txt_invite_popup_error_invitation_absent',
+                'txt_invitation_popup_error_wrong_user' => '_bx_jobs_txt_invite_popup_error_invitation_wrong_user',
+                'txt_n_unit' => '_bx_jobs_txt_n_unit',
+                'txt_buy_title' => '_bx_jobs_grid_action_title_buy_title',
+                'txt_cart_item_title' => '_bx_jobs_txt_cart_item_title',
+                'txt_cart_item_title_lifetime' => '_bx_jobs_txt_cart_item_title_lifetime',
+                'txt_subscribe_title' => '_bx_jobs_grid_action_title_subscribe_title',
+                'form_qnr_field_qn_err' => '_bx_jobs_form_questionnaire_input_question_err',
+                'popup_title_questionnaire' => '_bx_jobs_popup_title_questionnaire',
+                'popup_title_question_add' => '_bx_jobs_popup_title_qn_add',
+                'popup_title_question_edit' => '_bx_jobs_popup_title_qn_edit',
+                'popup_title_price_add' => '_bx_jobs_popup_title_price_add',
+                'popup_title_price_edit' => '_bx_jobs_popup_title_price_edit',
+                'msg_performed' => '_bx_jobs_msg_performed',
+                'err_period_unit' => '_bx_jobs_form_price_input_err_period_unit',
+                'err_price_duplicate' => '_bx_jobs_err_price_duplicate',
+                'err_cannot_perform' => '_bx_jobs_err_cannot_perform',
+            ),
+
+        );
+
+        $this->_aJsClasses = array(
+            'main' => 'BxJobsMain',
+            'entry' => 'BxJobsEntry',
+            'manage_tools' => 'BxJobsManageTools',
+            'invite_popup' => 'BxJobsInvitePopup',
+            'prices' => 'BxJobsPrices'
+        );
+
+        $this->_aJsObjects = array(
+            'main' => 'oBxJobsMain',
+            'entry' => 'oBxJobsEntry',
+            'manage_tools' => 'oBxJobsManageTools',
+            'invite_popup' => 'oBxJobsInvitePopup',
+            'prices' => 'oBxJobsPrices'
+        );
+
+        $this->_aGridObjects = array(
+            'common' => $this->CNF['OBJECT_GRID_COMMON'],
+            'administration' => $this->CNF['OBJECT_GRID_ADMINISTRATION'],
+        );
+
+        $sHtmlPrefix = str_replace('_', '-', $this->_sName);
+        $this->_aHtmlIds = array_merge($this->_aHtmlIds, [
+            'popup_question' => $sHtmlPrefix . '-popup-question',
+            'popup_questionnaire' => $sHtmlPrefix . '-popup-questionnaire'
+        ]);
+    }
+
+}
+
+/** @} */

+ 25 - 0
modules/boonex/jobs/classes/BxJobsConnectionFans.php

@@ -0,0 +1,25 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsConnectionFans extends BxBaseModGroupsConnectionFans
+{
+    public function __construct($aObject)
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct($aObject);
+
+        $this->_bBan = true;
+        $this->_bQuestionnaire = true;
+    }
+}
+
+/** @} */

+ 22 - 0
modules/boonex/jobs/classes/BxJobsCronPruning.php

@@ -0,0 +1,22 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsCronPruning extends BxBaseModGroupsCronPruning
+{
+    public function __construct()
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct();
+    }
+}
+
+/** @} */

+ 23 - 0
modules/boonex/jobs/classes/BxJobsDb.php

@@ -0,0 +1,23 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * Jobs module database queries
+ */
+class BxJobsDb extends BxBaseModGroupsDb
+{
+    public function __construct(&$oConfig)
+    {
+        parent::__construct($oConfig);
+    }
+}
+
+/** @} */

+ 24 - 0
modules/boonex/jobs/classes/BxJobsFormEntry.php

@@ -0,0 +1,24 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * Create/Edit Group Form.
+ */
+class BxJobsFormEntry extends BxBaseModGroupsFormEntry
+{
+    public function __construct($aInfo, $oTemplate = false)
+    {
+        $this->MODULE = 'bx_jobs';
+        parent::__construct($aInfo, $oTemplate);
+    }
+}
+
+/** @} */

+ 22 - 0
modules/boonex/jobs/classes/BxJobsFormPrice.php

@@ -0,0 +1,22 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsFormPrice extends BxBaseModGroupsFormPrice
+{
+    public function __construct($aInfo, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct($aInfo, $oTemplate);
+    }
+}
+
+/** @} */

+ 22 - 0
modules/boonex/jobs/classes/BxJobsFormQuestion.php

@@ -0,0 +1,22 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsFormQuestion extends BxBaseModGroupsFormQuestion
+{
+    public function __construct($aInfo, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct($aInfo, $oTemplate);
+    }
+}
+
+/** @} */

+ 23 - 0
modules/boonex/jobs/classes/BxJobsFormsEntryHelper.php

@@ -0,0 +1,23 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * Group profile forms functions
+ */
+class BxJobsFormsEntryHelper extends BxBaseModGroupsFormsEntryHelper
+{
+    public function __construct($oModule)
+    {
+        parent::__construct($oModule);
+    }
+}
+
+/** @} */

+ 21 - 0
modules/boonex/jobs/classes/BxJobsGridAdministration.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ * 
+ * @{
+ */
+
+class BxJobsGridAdministration extends BxBaseModGroupsGridAdministration
+{
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+    	$this->MODULE = 'bx_jobs';
+        parent::__construct ($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 21 - 0
modules/boonex/jobs/classes/BxJobsGridBans.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ * 
+ * @{
+ */
+
+class BxJobsGridBans extends BxBaseModGroupsGridBans
+{
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        $this->_sContentModule = 'bx_jobs';
+        parent::__construct ($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 21 - 0
modules/boonex/jobs/classes/BxJobsGridCommon.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ * 
+ * @{
+ */
+
+class BxJobsGridCommon extends BxBaseModGroupsGridCommon
+{
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+    	$this->MODULE = 'bx_jobs';
+        parent::__construct ($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 21 - 0
modules/boonex/jobs/classes/BxJobsGridConnections.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ * 
+ * @{
+ */
+
+class BxJobsGridConnections extends BxBaseModGroupsGridConnections
+{
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        $this->_sContentModule = 'bx_jobs';
+        parent::__construct ($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 21 - 0
modules/boonex/jobs/classes/BxJobsGridInvites.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ * 
+ * @{
+ */
+
+class BxJobsGridinvites extends BxBaseModGroupsGridInvites
+{
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        $this->_sContentModule = 'bx_jobs';
+        parent::__construct ($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 22 - 0
modules/boonex/jobs/classes/BxJobsGridPricesManage.php

@@ -0,0 +1,22 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsGridPricesManage extends BxBaseModGroupsGridPricesManage
+{
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct ($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 22 - 0
modules/boonex/jobs/classes/BxJobsGridPricesView.php

@@ -0,0 +1,22 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsGridPricesView extends BxBaseModGroupsGridPricesView
+{
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct ($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 22 - 0
modules/boonex/jobs/classes/BxJobsGridQuestionsManage.php

@@ -0,0 +1,22 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsGridQuestionsManage extends BxBaseModGroupsGridQuestionsManage
+{
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct ($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 24 - 0
modules/boonex/jobs/classes/BxJobsMenu.php

@@ -0,0 +1,24 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * General class for module menu.
+ */
+class BxJobsMenu extends BxBaseModGeneralMenuView
+{
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->MODULE = 'bx_jobs';
+        parent::__construct($aObject, $oTemplate);
+    }
+}
+
+/** @} */

+ 25 - 0
modules/boonex/jobs/classes/BxJobsMenuManageTools.php

@@ -0,0 +1,25 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * 'Jobs manage tools' menu.
+ */
+class BxJobsMenuManageTools extends BxBaseModGroupsMenuManageTools
+{
+
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->MODULE = 'bx_jobs';
+        parent::__construct($aObject, $oTemplate);
+    }
+}
+
+/** @} */

+ 67 - 0
modules/boonex/jobs/classes/BxJobsMenuSnippetMeta.php

@@ -0,0 +1,67 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsMenuSnippetMeta extends BxBaseModGroupsMenuSnippetMeta
+{
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct($aObject, $oTemplate);
+
+        unset($this->_aConnectionToFunctionCheck['sys_profiles_friends']);
+    }
+
+    protected function _getMenuItemDateStart($aItem)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if ($this->_aContentInfo[$CNF['FIELD_DATE_START']])
+            return $this->getUnitMetaItemText(bx_time_js($this->_aContentInfo[$CNF['FIELD_DATE_START']], BX_FORMAT_DATE_TIME, true));
+        else
+            return false;
+    }
+    
+    protected function _getMenuItemBudget($aItem)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if ($this->_aContentInfo[$CNF['FIELD_DATE_START']])
+            return $this->getUnitMetaItemText(bx_time_js($this->_aContentInfo[$CNF['FIELD_DATE_START']], BX_FORMAT_DATE_TIME, true));
+        else
+            return false;
+    }
+
+    protected function _getMenuItemDateEnd($aItem)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $sCurrencySign = BxDolPayments::getInstance()->getCurrencySign((int)$this->_aContentInfo[$CNF['FIELD_AUTHOR']]);
+        
+        $sResult = '';
+        if(($sKey = $CNF['FIELD_PAY_TOTAL']) && !empty($this->_aContentInfo[$sKey]))
+            $sResult .= _t('_bx_jobs_menu_item_title_sm_budget_total', _t_format_currency_ext((float)$this->_aContentInfo[$sKey], [
+                'sign' => $sCurrencySign
+            ]));
+
+        if(($sKey = $CNF['FIELD_PAY_HOURLY']) && !empty($this->_aContentInfo[$sKey]))
+            $sResult .= ($sResult ? ', ' : '') . _t('_bx_jobs_menu_item_title_sm_budget_hourly', _t_format_currency_ext((float)$this->_aContentInfo[$sKey], [
+                'sign' => $sCurrencySign
+            ]));
+
+        if(!$sResult)
+            $sResult = _t('_bx_jobs_menu_item_title_sm_budget_open');
+
+        return $this->getUnitMetaItemText($sResult);
+    }
+}
+
+/** @} */

+ 25 - 0
modules/boonex/jobs/classes/BxJobsMenuView.php

@@ -0,0 +1,25 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * 'View group' menu.
+ */
+class BxJobsMenuView extends BxBaseModGroupsMenuView
+{
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct($aObject, $oTemplate);
+    }
+}
+
+/** @} */

+ 29 - 0
modules/boonex/jobs/classes/BxJobsMenuViewActions.php

@@ -0,0 +1,29 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * 'View group' actions menu.
+ */
+class BxJobsMenuViewActions extends BxBaseModGroupsMenuViewActions
+{
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->MODULE = 'bx_jobs';
+
+        parent::__construct($aObject, $oTemplate);
+
+        $this->addMarkers([
+            'js_object_entry' => $this->_oModule->_oConfig->getJsObject('entry')
+        ]);
+    }
+}
+
+/** @} */

+ 70 - 0
modules/boonex/jobs/classes/BxJobsMenuViewActionsAll.php

@@ -0,0 +1,70 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * View entry all actions menu
+ */
+class BxJobsMenuViewActionsAll extends BxBaseModGroupsMenuViewActionsAll
+{
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct($aObject, $oTemplate);
+    }
+
+    protected function _getMenuItemJoinJobProfile($aItem)
+    {
+        return $this->_getMenuItemByNameActions($aItem);
+    }
+
+    protected function _getMenuItemEditJobCover($aItem)
+    {
+        return $this->_getMenuItemByNameActionsMore($aItem);
+    }
+
+    protected function _getMenuItemEditJobProfile($aItem)
+    {
+        return $this->_getMenuItemByNameActionsMore($aItem);
+    }
+
+    protected function _getMenuItemJobQuestionnaire($aItem)
+    {
+        return $this->_getMenuItemByNameActionsMore($aItem);
+    }
+
+    protected function _getMenuItemJobPricing($aItem)
+    {
+        return $this->_getMenuItemByNameActionsMore($aItem);
+    }
+
+    protected function _getMenuItemInviteToJob($aItem)
+    {
+        return $this->_getMenuItemByNameActionsMore($aItem);
+    }
+
+    protected function _getMenuItemDeleteJobProfile($aItem)
+    {
+        return $this->_getMenuItemByNameActionsMore($aItem);
+    }
+
+    protected function _getMenuItemApproveJobProfile($aItem)
+    {
+        return $this->_getMenuItemByNameActionsMore($aItem);
+    }
+
+    protected function _getMenuItemProfileSetBadges($aItem)
+    {
+        return $this->_getMenuItemByNameActions($aItem);
+    }
+}
+
+/** @} */

+ 25 - 0
modules/boonex/jobs/classes/BxJobsMenuViewMeta.php

@@ -0,0 +1,25 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * View entry meta menu
+ */
+class BxJobsMenuViewMeta extends BxBaseModGroupsMenuViewMeta
+{
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct($aObject, $oTemplate);
+    }
+}
+
+/** @} */

+ 39 - 0
modules/boonex/jobs/classes/BxJobsModule.php

@@ -0,0 +1,39 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * Jobs profiles module.
+ */
+class BxJobsModule extends BxBaseModGroupsModule
+{
+    public function __construct(&$aModule)
+    {
+        parent::__construct($aModule);
+
+        $CNF = &$this->_oConfig->CNF;
+
+        $this->_aSearchableNamesExcept = array_merge($this->_aSearchableNamesExcept, [
+            $CNF['FIELD_TIMEZONE'],
+            $CNF['FIELD_JOIN_CONFIRMATION'],
+        ]);
+    }
+
+    public function serviceGetSafeServices()
+    {
+        $a = parent::serviceGetSafeServices();
+
+        return array_merge($a, [
+            'BrowseRecommendationsFans' => '',
+        ]);
+    }
+}
+
+/** @} */

+ 24 - 0
modules/boonex/jobs/classes/BxJobsPageBrowse.php

@@ -0,0 +1,24 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * Browse entries pages.
+ */
+class BxJobsPageBrowse extends BxBaseModGroupsPageBrowse
+{
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->MODULE = 'bx_jobs';
+        parent::__construct($aObject, $oTemplate);
+    }
+}
+
+/** @} */

+ 42 - 0
modules/boonex/jobs/classes/BxJobsPageEntriesInContext.php

@@ -0,0 +1,42 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * Entries user joined to.
+ */
+class BxJobsPageEntriesInContext extends BxBaseModGroupsPageJoinedEntries
+{
+    protected $_sModule;
+    protected $_oModule;
+
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_jobs';
+        $this->_oModule = BxDolModule::getInstance($this->_sModule);
+
+        parent::__construct($aObject, $oTemplate);
+    }
+    
+    public function getCode ()
+    {
+        $iProfileId = bx_process_input(bx_get('profile_id'), BX_DATA_INT);
+        if ($iProfileId) {
+            if (!$this->_oModule->serviceIsEnableForContext($iProfileId)){
+                $this->_oTemplate->displayPageNotFound();
+                return;
+            }
+        }
+
+        return parent::getCode();
+    }
+}
+
+/** @} */

+ 35 - 0
modules/boonex/jobs/classes/BxJobsPageEntry.php

@@ -0,0 +1,35 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * Profile create/edit/delete pages.
+ */
+class BxJobsPageEntry extends BxBaseModGroupsPageEntry
+{
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->MODULE = 'bx_jobs';
+
+        parent::__construct($aObject, $oTemplate);
+    }
+    
+    public function getCode ()
+    {
+        $sResult = parent::getCode();
+        if(!empty($sResult))
+            $sResult .= $this->_oModule->_oTemplate->getJsCode('entry');
+
+        $this->_oModule->_oTemplate->addJs(['modules/base/groups/js/|entry.js', 'entry.js']);
+        return $sResult;
+    }
+}
+
+/** @} */

+ 24 - 0
modules/boonex/jobs/classes/BxJobsPageJoinedEntries.php

@@ -0,0 +1,24 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * Entries user joined to.
+ */
+class BxJobsPageJoinedEntries extends BxBaseModGroupsPageJoinedEntries
+{
+    public function __construct($aObject, $oTemplate = false)
+    {
+        parent::__construct($aObject, $oTemplate);
+    }
+
+}
+
+/** @} */

+ 24 - 0
modules/boonex/jobs/classes/BxJobsPageListEntry.php

@@ -0,0 +1,24 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * List entry page
+ */
+class BxJobsPageListEntry extends BxBaseModGroupsPageListEntry
+{    
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->MODULE = 'bx_jobs';
+        parent::__construct($aObject, $oTemplate);
+    }
+}
+
+/** @} */

+ 22 - 0
modules/boonex/jobs/classes/BxJobsPrivacy.php

@@ -0,0 +1,22 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsPrivacy extends BxBaseModGroupsPrivacy
+{
+    public function __construct($aOptions, $oTemplate = false)
+    {
+        $this->MODULE = 'bx_jobs';
+
+        parent::__construct($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 21 - 0
modules/boonex/jobs/classes/BxJobsPrivacyNotifications.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsPrivacyNotifications extends BxBaseModGroupsPrivacyNotifications
+{
+    function __construct($aOptions, $oTemplate = false)
+    {
+    	$this->MODULE = 'bx_jobs';
+        parent::__construct($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 22 - 0
modules/boonex/jobs/classes/BxJobsPrivacyPost.php

@@ -0,0 +1,22 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsPrivacyPost extends BxBaseModGroupsPrivacyPost
+{
+    public function __construct($aOptions, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 22 - 0
modules/boonex/jobs/classes/BxJobsRecommendationFans.php

@@ -0,0 +1,22 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsRecommendationFans extends BxBaseModGroupsRecommendationFans
+{
+    public function __construct ($aOptions, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_jobs';
+
+        parent::__construct ($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 243 - 0
modules/boonex/jobs/classes/BxJobsSearchResult.php

@@ -0,0 +1,243 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsSearchResult extends BxBaseModGroupsSearchResult
+{
+    function __construct($sMode = '', $aParams = false)
+    {
+        parent::__construct($sMode, $aParams); 
+
+        $this->aCurrent =  array(
+            'name' => 'bx_jobs',
+            'module_name' => 'bx_jobs',
+            'object_metatags' => 'bx_jobs',
+            'title' => _t('_bx_jobs_page_title_browse'),
+            'table' => 'sys_profiles',
+            'tableSearch' => 'bx_jobs_data',
+            'ownFields' => array(),
+            'searchFields' => array(),
+            'restriction' => array(
+                'account_id' => array('value' => '', 'field' => 'account_id', 'operator' => '='),
+                'perofileStatus' => array('value' => 'active', 'field' => 'status', 'operator' => '='),
+                'perofileType' => array('value' => 'bx_jobs', 'field' => 'type', 'operator' => '='),
+                'owner' => array('value' => '', 'field' => 'author', 'operator' => '=', 'table' => 'bx_jobs_data'),
+                'featured' => array('value' => '', 'field' => 'featured', 'operator' => '<>', 'table' => 'bx_jobs_data'),
+                'status' => array('value' => 'active', 'field' => 'status', 'operator' => '=', 'table' => 'bx_jobs_data'),
+                'statusAdmin' => array('value' => 'active', 'field' => 'status_admin', 'operator' => '=', 'table' => 'bx_jobs_data'),
+            ),
+            'join' => array (
+                'profile' => array(
+                    'type' => 'INNER',
+                    'table' => 'bx_jobs_data',
+                    'mainField' => 'content_id',
+                    'onField' => 'id',
+                    'joinFields' => array('id', 'name', 'desc', 'picture', 'cover', 'cover_data', 'added', 'author', 'allow_view_to'),
+                ),
+                'account' => array(
+                    'type' => 'INNER',
+                    'table' => 'sys_accounts',
+                    'mainField' => 'account_id',
+                    'onField' => 'id',
+                    'joinFields' => array(),
+                ),
+            ),
+            'paginate' => array('perPage' => getParam('bx_jobs_per_page_browse'), 'start' => 0, 'on_top' => true, 'on_bottom' => true),
+            'sorting' => 'last',
+            'rss' => array(
+                'title' => '',
+                'link' => '',
+                'image' => '',
+                'profile' => 0,
+                'fields' => array (
+                    'Guid' => 'link',
+                    'Link' => 'link',
+                    'Title' => 'name',
+                    'DateTimeUTS' => 'added',
+                    'Desc' => 'name',
+                    'Image' => 'picture',
+                ),
+            ),
+            'ident' => 'id'
+        );
+
+        $this->sFilterName = 'bx_jobs_data_filter';
+        $this->oModule = $this->getMain();
+
+        $CNF = &$this->oModule->_oConfig->CNF;
+
+        $sSearchFields = getParam($CNF['PARAM_SEARCHABLE_FIELDS']);
+        $this->aCurrent['searchFields'] = !empty($sSearchFields) ? explode(',', $sSearchFields) : '';
+
+        $oJoinedProfile = null;
+        $bProcessConditionsForPrivateContent = true;
+        switch ($sMode) {
+            case 'created_entries':
+                if(!$this->_setAuthorConditions($sMode, $aParams, $oJoinedProfile))
+                    $this->isError = true;
+                break;
+
+            case 'context':
+                $oProfileContext = null;
+                if(!$this->_updateCurrentForContext($sMode, $aParams, $oProfileContext))
+                    $this->isError = true;
+                break;
+
+            case 'joined_entries':
+                $oJoinedProfile = BxDolProfile::getInstance((int)$aParams['joined_profile']);
+                if (!$oJoinedProfile) {
+                    $this->isError = true;
+                    break;
+                }
+
+                $bProcessConditionsForPrivateContent = false;
+
+                $this->aCurrent['join']['fans'] = array(
+                    'type' => 'INNER',
+                    'table' => 'bx_jobs_fans',
+                    'mainField' => 'id',
+                    'onField' => 'content',
+                    'joinFields' => array('initiator'),
+                );
+
+                $this->aCurrent['restriction']['fans'] = array('value' => $oJoinedProfile->id(), 'field' => 'initiator', 'operator' => '=', 'table' => 'bx_jobs_fans');
+
+                $this->sBrowseUrl = 'page.php?i=' . $CNF['URI_JOINED_ENTRIES'] . '&profile_id={profile_id}';
+                $this->aCurrent['title'] = _t('_bx_jobs_page_title_joined_entries');
+                $this->aCurrent['rss']['link'] = 'modules/?r=jobs/rss/' . $sMode . '/' . $oJoinedProfile->id();
+                break;
+                
+                
+            case 'followed_entries':
+                $oJoinedProfile = BxDolProfile::getInstance((int)$aParams['followed_profile']);
+                if (!$oJoinedProfile) {
+                    $this->isError = true;
+                    break;
+                }
+
+                $bProcessConditionsForPrivateContent = false;
+
+                $this->aCurrent['join']['followed'] = array(
+                    'type' => 'INNER',
+                    'table' => 'sys_profiles_conn_subscriptions',
+                    'mainField' => 'id',
+                    'onField' => 'content',
+                    'joinFields' => array('initiator'),
+                );
+
+                $this->aCurrent['restriction']['followed'] = array('value' => $oJoinedProfile->id(), 'field' => 'initiator', 'operator' => '=', 'table' => 'sys_profiles_conn_subscriptions');
+
+                $this->sBrowseUrl = 'page.php?i=' . $CNF['URI_FOLLOWED_ENTRIES'] . '&profile_id={profile_id}';
+                $this->aCurrent['title'] = _t('_bx_jobs_page_title_followed_entries');
+                $this->aCurrent['rss']['link'] = 'modules/?r=jobs/rss/' . $sMode . '/' . $oJoinedProfile->id();
+                break;
+
+            case 'connections':
+                if ($this->_setConnectionsConditions($aParams)) {
+                    $bProcessConditionsForPrivateContent = false;
+                    $oProfile = BxDolProfile::getInstance($aParams['profile']);
+                    $oProfile2 = isset($aParams['profile2']) ? BxDolProfile::getInstance($aParams['profile2']) : null;
+
+                    if (isset($aParams['type']) && $aParams['type'] == 'common' && $oProfile && $oProfile2)
+                        $this->aCurrent['title'] = _t('_bx_jobs_page_title_browse_connections_mutual', $oProfile->getDisplayName(), $oProfile2->getDisplayName());
+                    elseif ((!isset($aParams['type']) || $aParams['type'] != 'common') && $oProfile)
+                        $this->aCurrent['title'] = _t('_bx_jobs_page_title_browse_connections', $oProfile->getDisplayName());
+
+                    $this->aCurrent['rss']['link'] = 'modules/?r=jobs/rss/' . $sMode . '/' . $aParams['object'] . '/' . $aParams['type'] . '/' . (int)$aParams['profile'] . '/' . (int)$aParams['profile2'] . '/' . (int)$aParams['mutual'];
+                }
+                break;
+
+            case 'favorite':
+                if(!$this->_setFavoriteConditions($sMode, $aParams, $oJoinedProfile)) {
+                    $this->isError = true;
+                    break;
+                }
+                break;
+
+            case 'recent':
+                $this->aCurrent['rss']['link'] = 'modules/?r=jobs/rss/' . $sMode;
+                $this->aCurrent['title'] = _t('_bx_jobs_page_title_browse_recent');
+                $this->aCurrent['sorting'] = 'last';
+                $this->sBrowseUrl = 'page.php?i=jobs-home';
+                break;
+
+            case 'featured':
+                $this->sBrowseUrl = BxDolPermalinks::getInstance()->permalink($CNF['URL_HOME']);
+                $this->aCurrent['title'] = _t('_bx_jobs_page_title_browse_featured');
+                $this->aCurrent['restriction']['featured']['value'] = '0';
+                $this->aCurrent['rss']['link'] = 'modules/?r=jobs/rss/' . $sMode;
+                $this->aCurrent['sorting'] = 'featured';
+                break;
+
+            case 'recommended':
+                $this->sBrowseUrl = BxDolPermalinks::getInstance()->permalink($CNF['URL_HOME']);
+                $this->aCurrent['title'] = _t('_bx_jobs_page_title_browse_recommended');
+                $this->aCurrent['restriction']['featured']['value'] = '0';
+                $this->aCurrent['rss']['link'] = 'modules/?r=jobs/rss/' . $sMode;
+                $this->aCurrent['sorting'] = 'recommended';
+                $this->_setConditionsForRecommended();
+                break;    
+                
+            case 'top':
+                $this->aCurrent['rss']['link'] = 'modules/?r=jobs/rss/' . $sMode;
+                $this->aCurrent['title'] = _t('_bx_jobs_page_title_browse_top');
+                $this->aCurrent['sorting'] = 'top';
+                $this->sBrowseUrl = 'page.php?i=jobs-top';
+                break;
+
+            case '': // search results
+                $this->sBrowseUrl = BX_DOL_SEARCH_KEYWORD_PAGE;
+                $this->aCurrent['title'] = _t('_bx_jobs');
+                unset($this->aCurrent['paginate']['perPage'], $this->aCurrent['rss']);
+                break;
+
+            default:
+                $this->isError = true;
+        }
+
+        if ($bProcessConditionsForPrivateContent) {
+            $this->addConditionsForPrivateContent($CNF, $oJoinedProfile);
+
+            $this->addCustomConditions($CNF, $oJoinedProfile, $sMode, $aParams);
+        }
+
+        $this->sCenterContentUnitSelector = false;
+    }
+
+    function getAlterOrder()
+    {
+        switch ($this->aCurrent['sorting']) {
+        case 'featured':
+            return array('order' => ' ORDER BY `bx_jobs_data`.`featured` DESC ');
+        case 'recommended':
+            return array('order' => ' ORDER BY RAND() ');
+        case 'none':
+            return array();
+        case 'top':
+            return array('order' => ' ORDER BY `bx_jobs_data`.`views` DESC ');
+        case 'last':
+        default:                        
+            return array('order' => ' ORDER BY `bx_jobs_data`.`added` DESC ');
+        }
+    }
+
+    function _getPseud ()
+    {
+        return array(
+            'id' => 'id',
+            'name' => 'name',
+            'added' => 'added',
+            'author' => 'author',
+            'picture' => 'picture',
+        );
+    }
+}
+
+/** @} */

+ 24 - 0
modules/boonex/jobs/classes/BxJobsTemplate.php

@@ -0,0 +1,24 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/*
+ * Jobs module representation.
+ */
+class BxJobsTemplate extends BxBaseModGroupsTemplate
+{
+    function __construct(&$oConfig, &$oDb)
+    {
+        $this->MODULE = 'bx_jobs';
+        parent::__construct($oConfig, $oDb);
+    }
+}
+
+/** @} */

+ 21 - 0
modules/boonex/jobs/classes/BxJobsUploaderCoverCrop.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsUploaderCoverCrop extends BxBaseModGroupsUploaderCoverCrop
+{
+    public function __construct ($aObject, $sStorageObject, $sUniqId, $oTemplate)
+    {
+        $this->_oModule = BxDolModule::getInstance('bx_jobs');
+        parent::__construct($aObject, $sStorageObject, $sUniqId, $oTemplate);
+    }
+}
+
+/** @} */

+ 21 - 0
modules/boonex/jobs/classes/BxJobsUploaderPictureCrop.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsUploaderPictureCrop extends BxBaseModGroupsUploaderPictureCrop
+{
+    public function __construct ($aObject, $sStorageObject, $sUniqId, $oTemplate)
+    {
+        $this->_oModule = BxDolModule::getInstance('bx_jobs');
+        parent::__construct($aObject, $sStorageObject, $sUniqId, $oTemplate);
+    }
+}
+
+/** @} */

+ 152 - 0
modules/boonex/jobs/install/config.php

@@ -0,0 +1,152 @@
+<?php
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_jobs',
+    'title' => 'Jobs',
+    'note' => 'Basic jobs functionality.',
+    'version' => '14.0.0.DEV',
+    'vendor' => 'UNA INC',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '14.0.x'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/jobs/',
+    'home_uri' => 'jobs',
+
+    'db_prefix' => 'bx_jobs_',
+    'class_prefix' => 'BxJobs',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Jobs',
+
+    /**
+     * Connections.
+     */
+    'connections' => array(
+    	'sys_profiles_friends' => array ('type' => 'profiles'),
+        'sys_profiles_subscriptions' => array ('type' => 'profiles'),
+    ),
+
+    /**
+     * Menu triggers.
+     */
+    'menu_triggers' => array(
+    	'trigger_profile_view_submenu',
+        'trigger_group_view_submenu',
+        'trigger_group_snippet_meta',
+        'trigger_group_view_actions',
+    ),
+
+    /**
+     * Page triggers.
+     */
+    'page_triggers' => array (
+    	'trigger_page_group_view_entry', 
+    ),
+
+    /**
+     * Storage objects to automatically delete files from upon module uninstallation.
+     * Note. Don't add storage objects used in transcoder objects.
+     */
+    'storages' => array(
+    	'bx_jobs_pics'
+    ),
+
+	/**
+     * Transcoders.
+     */
+    'transcoders' => array(
+    	'bx_jobs_icon', 
+    	'bx_jobs_thumb', 
+    	'bx_jobs_avatar', 
+        'bx_jobs_avatar_big', 
+    	'bx_jobs_picture', 
+    	'bx_jobs_cover', 
+    	'bx_jobs_cover_thumb',
+        'bx_jobs_gallery'
+    ),
+
+    /**
+     * Extended Search Forms.
+     */
+    'esearches' => array(
+        'bx_jobs',
+    	'bx_jobs_cmts',
+    ),
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 1,
+        'update_languages' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'uninstall' => array (
+    	'process_esearches' => 1,
+        'execute_sql' => 1,
+        'update_languages' => 1,
+    	'process_connections' => 1,
+        'process_deleted_profiles' => 1,
+    	'update_relations' => 1,        
+        'clear_db_cache' => 1,
+    ),
+    'enable' => array(
+        'execute_sql' => 1,
+    	'update_relations' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'enable_success' => array(
+    	'process_menu_triggers' => 1,
+    	'process_page_triggers' => 1,
+    	'process_esearches' => 1,
+    	'register_transcoders' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable' => array (
+        'execute_sql' => 1,
+        'unregister_transcoders' => 1,
+        'update_relations' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable_failed' => array (
+    	'register_transcoders' => 1,
+    	'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Dependencies Section
+     */
+    'dependencies' => array(),
+
+    /**
+     * Connections Section
+     */
+    'relations' => array(
+        'bx_timeline',
+        'bx_notifications',
+    ),
+);
+
+/** @} */

+ 20 - 0
modules/boonex/jobs/install/installer.php

@@ -0,0 +1,20 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxJobsInstaller extends BxBaseModGroupsInstaller
+{
+    public function __construct($aConfig)
+    {
+        parent::__construct($aConfig);
+    }
+}
+
+/** @} */

+ 529 - 0
modules/boonex/jobs/install/langs/en.xml

@@ -0,0 +1,529 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+    <string name="_bx_jobs"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_cmts"><![CDATA[Jobs' Comments]]></string>
+
+    <string name="_bx_jobs_option_enable_auto_approve"><![CDATA[Auto approve a job after creation]]></string>
+    <string name="_bx_jobs_option_num_connections_quick"><![CDATA[Number of items in friends block]]></string>
+    <string name="_bx_jobs_option_per_page_browse"><![CDATA[Number of items per page]]></string>
+    <string name="_bx_jobs_option_num_rss"><![CDATA[Number of items in RSS feed]]></string>
+    <string name="_bx_jobs_option_searchable_fields"><![CDATA[Searchable fields]]></string>
+    <string name="_bx_jobs_option_members_mode"><![CDATA[Special mode for job performers]]></string>
+    <string name="_bx_jobs_option_members_mode_multi_roles"><![CDATA[Multi Roles]]></string>
+    <string name="_bx_jobs_option_per_page_for_favorites_lists"><![CDATA[Number of favorite lists per page]]></string>
+    <string name="_bx_jobs_option_enable_subscribe_wo_join"><![CDATA[Allow to follow without join]]></string>
+    <string name="_bx_jobs_option_internal_notifications"><![CDATA[Use internal notifications]]></string>
+
+    <string name="_bx_jobs_form_profile"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_form_profile_display_add"><![CDATA[Add Job]]></string>
+    <string name="_bx_jobs_form_profile_display_edit"><![CDATA[Edit Job]]></string>
+    <string name="_bx_jobs_form_profile_display_edit_cover"><![CDATA[Edit Cover]]></string>
+    <string name="_bx_jobs_form_profile_display_delete"><![CDATA[Delete Job]]></string>
+    <string name="_bx_jobs_form_profile_display_view"><![CDATA[View Job]]></string>
+    <string name="_bx_jobs_form_profile_display_view_full"><![CDATA[Full View Job]]></string>
+    <string name="_bx_jobs_form_profile_display_invite"><![CDATA[Invite to Job]]></string>
+    <string name="_bx_jobs_form_entry_input_author"><![CDATA[Author]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_do_submit"><![CDATA[Submit]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_join_confirm"><![CDATA[Join confirmation]]></string>
+    <string name="_bx_jobs_form_profile_input_join_confirm"><![CDATA[Approval required to join]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_allow_view_to"><![CDATA[Visible to]]></string>
+    <string name="_bx_jobs_form_profile_input_allow_view_to"><![CDATA[Visible to]]></string>
+    <string name="_bx_jobs_form_profile_input_allow_view_favorite_list"><![CDATA[Visibility]]></string>
+    <string name="_bx_jobs_form_profile_input_allow_view_to_desc"><![CDATA[Closed - anyone can find the job and see who's in it, only performers can see posts. Secret - only performers can find the job and see posts.]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_allow_post_to"><![CDATA[Who can post]]></string>
+    <string name="_bx_jobs_form_profile_input_allow_post_to"><![CDATA[Who can post]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_initial_members"><![CDATA[Invite Performers]]></string>
+    <string name="_bx_jobs_form_profile_input_initial_members"><![CDATA[Invite Performers]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_name"><![CDATA[Job Name]]></string>
+    <string name="_bx_jobs_form_profile_input_name"><![CDATA[Job Name]]></string>
+    <string name="_bx_jobs_form_profile_input_name_err"><![CDATA[Field must contain 1 - 80 characters.]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_desc"><![CDATA[Description]]></string>
+    <string name="_bx_jobs_form_profile_input_desc"><![CDATA[Description]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_cat"><![CDATA[Category]]></string>
+    <string name="_bx_jobs_form_profile_input_cat"><![CDATA[Category]]></string>
+    <string name="_bx_jobs_form_profile_input_cat_err"><![CDATA[Category field is mandatory]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_picture"><![CDATA[Job Picture]]></string>
+    <string name="_bx_jobs_form_profile_input_picture"><![CDATA[Upload New Job Picture]]></string>
+    <string name="_bx_jobs_form_profile_input_picture_err"><![CDATA[Job picture is mandatory.]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_cover"><![CDATA[Cover Picture]]></string>
+    <string name="_bx_jobs_form_profile_input_cover"><![CDATA[Upload New Cover Picture]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_delete_confirm"><![CDATA[Delete confirmation]]></string>
+    <string name="_bx_jobs_form_profile_input_delete_confirm"><![CDATA[I am sure I want to delete this job]]></string>
+    <string name="_bx_jobs_form_profile_input_delete_confirm_info"><![CDATA[This action can not be undone.]]></string>
+    <string name="_bx_jobs_form_profile_input_delete_confirm_error"><![CDATA[Please check this checkbox if you really want to delete job.]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_date_start"><![CDATA[Date start]]></string>
+    <string name="_bx_jobs_form_profile_input_date_start"><![CDATA[Date start]]></string>
+    <string name="_bx_jobs_form_profile_input_date_start_err"><![CDATA[Start date is mandatory]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_date_end"><![CDATA[Date end]]></string>
+    <string name="_bx_jobs_form_profile_input_date_end"><![CDATA[Date end]]></string>    
+    <string name="_bx_jobs_form_profile_input_date_end_err"><![CDATA[End date is mandatory]]></string>
+    <string name="_bx_jobs_form_profile_input_date_end_invalid_err"><![CDATA[End date must be greater than start date]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_timezone"><![CDATA[Timezone]]></string>
+    <string name="_bx_jobs_form_profile_input_timezone"><![CDATA[Timezone]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_time"><![CDATA[Time]]></string>
+    <string name="_bx_jobs_form_profile_input_time"><![CDATA[Time]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_pay_hourly"><![CDATA[Hourly Rate]]></string>
+    <string name="_bx_jobs_form_profile_input_pay_hourly"><![CDATA[Hourly Rate]]></string>
+    <string name="_bx_jobs_form_profile_input_sys_pay_total"><![CDATA[Total Budget]]></string>
+    <string name="_bx_jobs_form_profile_input_pay_total"><![CDATA[Total Budget]]></string>    
+
+    <string name="_bx_jobs_form_question"><![CDATA[Question]]></string>
+    <string name="_bx_jobs_form_question_display_add"><![CDATA[Add Question]]></string>
+    <string name="_bx_jobs_form_question_display_edit"><![CDATA[Edit Question]]></string>
+    <string name="_bx_jobs_form_question_input_sys_action"><![CDATA[Action]]></string>
+    <string name="_bx_jobs_form_question_input_sys_question"><![CDATA[Question]]></string>
+    <string name="_bx_jobs_form_question_input_question"><![CDATA[Question]]></string>
+    <string name="_bx_jobs_form_question_input_question_err"><![CDATA[Question is mandatory.]]></string>
+    <string name="_bx_jobs_form_question_input_sys_answer"><![CDATA[Answer]]></string>
+    <string name="_bx_jobs_form_question_input_sys_controls"><![CDATA[Controls]]></string>
+    <string name="_bx_jobs_form_question_input_sys_do_submit"><![CDATA[Submit]]></string>
+    <string name="_bx_jobs_form_question_input_do_submit"><![CDATA[Submit]]></string>
+    <string name="_bx_jobs_form_question_input_sys_do_cancel"><![CDATA[Cancel]]></string>
+    <string name="_bx_jobs_form_question_input_do_cancel"><![CDATA[Cancel]]></string>
+    <string name="_bx_jobs_form_questionnaire_input_question_err"><![CDATA[Please, answer the question.]]></string>
+
+    <string name="_bx_jobs_form_price"><![CDATA[Price]]></string>
+    <string name="_bx_jobs_form_price_display_add"><![CDATA[Add]]></string>
+    <string name="_bx_jobs_form_price_display_edit"><![CDATA[Edit]]></string>
+    <string name="_bx_jobs_form_price_input_sys_id"><![CDATA[ID]]></string>
+    <string name="_bx_jobs_form_price_input_sys_role_id"><![CDATA[Role ID]]></string>
+    <string name="_bx_jobs_form_price_input_sys_name"><![CDATA[Name]]></string>
+    <string name="_bx_jobs_form_price_input_name"><![CDATA[Name]]></string>
+    <string name="_bx_jobs_form_price_input_inf_name"><![CDATA[Unique value which will be used in back end and API calls]]></string>
+    <string name="_bx_jobs_form_price_input_err_name"><![CDATA[You need to enter a unique value here]]></string>
+    <string name="_bx_jobs_form_price_input_sys_period"><![CDATA[Period]]></string>
+    <string name="_bx_jobs_form_price_input_period"><![CDATA[Period]]></string>
+    <string name="_bx_jobs_form_price_input_inf_period"><![CDATA[Use 0 for lifetime]]></string>
+    <string name="_bx_jobs_form_price_input_sys_period_unit"><![CDATA[Period unit]]></string>
+    <string name="_bx_jobs_form_price_input_period_unit"><![CDATA[Period unit]]></string>
+    <string name="_bx_jobs_form_price_input_inf_period_unit"><![CDATA[Leave empty for lifetime level.]]></string>
+    <string name="_bx_jobs_form_price_input_err_period_unit"><![CDATA[You need to select a period unit here.]]></string>
+    <string name="_bx_jobs_form_price_input_sys_price"><![CDATA[Price]]></string>
+    <string name="_bx_jobs_form_price_input_price"><![CDATA[Price]]></string>
+    <string name="_bx_jobs_form_price_input_inf_price"><![CDATA[Use 0 or leave empty to create free level.]]></string>
+    <string name="_bx_jobs_form_price_input_sys_do_submit"><![CDATA[Submit]]></string>
+    <string name="_bx_jobs_form_price_input_do_submit"><![CDATA[Submit]]></string>
+    <string name="_bx_jobs_form_price_input_sys_do_cancel"><![CDATA[Cancel]]></string>
+    <string name="_bx_jobs_form_price_input_do_cancel"><![CDATA[Cancel]]></string>
+
+    <string name="_bx_jobs_acl_action_create_profile"><![CDATA[Create Job]]></string>
+    <string name="_bx_jobs_acl_action_use_paid_join"><![CDATA[Use paid join]]></string>
+    <string name="_bx_jobs_acl_action_delete_profile"><![CDATA[Delete Job]]></string>
+    <string name="_bx_jobs_acl_action_view_profile"><![CDATA[View Job]]></string>
+    <string name="_bx_jobs_acl_action_edit_any_profile"><![CDATA[Edit Any Job]]></string>
+    <string name="_bx_jobs_acl_action_delete_any_profile"><![CDATA[Delete Any Job]]></string>
+    <string name="_bx_jobs_acl_action_delete_invites"><![CDATA[Delete Invites]]></string>
+
+    <string name="_bx_jobs_page_title_sys_entries_in_context"><![CDATA[Jobs in context]]></string>
+    <string name="_bx_jobs_page_title_entries_in_context"><![CDATA[Jobs in {display_name}]]></string>
+    <string name="_bx_jobs_page_title_sys_joined_entries"><![CDATA[Profile Jobs]]></string>
+    <string name="_bx_jobs_page_title_joined_entries"><![CDATA[Profile Jobs]]></string>
+    <string name="_bx_jobs_page_title_sys_create_profile"><![CDATA[Create Job]]></string>
+    <string name="_bx_jobs_page_title_create_profile"><![CDATA[Create Job]]></string>
+    <string name="_bx_jobs_page_title_sys_edit_profile"><![CDATA[Edit Job]]></string>
+    <string name="_bx_jobs_page_title_edit_profile"><![CDATA[Edit Job]]></string>
+    <string name="_bx_jobs_page_title_sys_edit_profile_cover"><![CDATA[Edit Job Cover]]></string>
+    <string name="_bx_jobs_page_title_edit_profile_cover"><![CDATA[Edit Cover]]></string>
+    <string name="_bx_jobs_page_title_sys_questionnaire"><![CDATA[Questionnaire]]></string>
+    <string name="_bx_jobs_page_title_questionnaire"><![CDATA[Questionnaire]]></string>
+    <string name="_bx_jobs_page_title_manage_profile"><![CDATA[Manage]]></string>
+    <string name="_bx_jobs_page_title_sys_manage_profile"><![CDATA[Manage]]></string>
+    <string name="_bx_jobs_page_title_sys_delete_profile"><![CDATA[Delete Job]]></string>
+    <string name="_bx_jobs_page_title_delete_profile"><![CDATA[Delete Job]]></string>
+    <string name="_bx_jobs_page_title_sys_join_profile"><![CDATA[Join Job]]></string>
+    <string name="_bx_jobs_page_title_join_profile"><![CDATA[Join Job]]></string>
+    <string name="_bx_jobs_page_title_sys_view_profile_closed"><![CDATA[View Closed Job]]></string>
+    <string name="_bx_jobs_page_title_sys_view_profile"><![CDATA[View Job]]></string>
+    <string name="_bx_jobs_page_title_view_profile"><![CDATA[{display_name}]]></string>
+    <string name="_bx_jobs_page_title_browse"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_page_title_browse_by_author"><![CDATA[Jobs of {display_name}]]></string>
+    <string name="_bx_jobs_page_title_browse_by_context"><![CDATA[Jobs in {display_name}]]></string>
+    <string name="_bx_jobs_page_title_browse_featured"><![CDATA[Featured Jobs]]></string>
+    <string name="_bx_jobs_page_title_browse_top"><![CDATA[Top Jobs]]></string>
+    <string name="_bx_jobs_page_title_browse_recent"><![CDATA[New Jobs]]></string>
+    <string name="_bx_jobs_page_title_browse_connections"><![CDATA[{0} connections]]></string>
+    <string name="_bx_jobs_page_title_browse_connections_mutual"><![CDATA[{0} and {1} mutual connections]]></string>
+    <string name="_bx_jobs_page_title_sys_profile_friends"><![CDATA[Friends]]></string>
+    <string name="_bx_jobs_page_title_profile_friends"><![CDATA[Friends]]></string>
+    <string name="_bx_jobs_page_title_sys_job_fans"><![CDATA[Performers]]></string>
+    <string name="_bx_jobs_page_title_job_fans"><![CDATA[Performers]]></string>
+    <string name="_bx_jobs_page_title_sys_profile_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_jobs_page_block_title_entry_reports"><![CDATA[Reports]]></string>
+    <string name="_bx_jobs_page_title_profile_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_jobs_page_title_sys_profile_info"><![CDATA[Job Info]]></string>
+    <string name="_bx_jobs_page_title_profile_info"><![CDATA[Info about {display_name}]]></string>
+    <string name="_bx_jobs_page_title_sys_profile_pricing"><![CDATA[Pricing]]></string>
+    <string name="_bx_jobs_page_title_profile_pricing"><![CDATA[Pricing]]></string>
+    <string name="_bx_jobs_page_title_sys_recent"><![CDATA[New Jobs]]></string>
+    <string name="_bx_jobs_page_title_recent"><![CDATA[New Jobs]]></string>
+    <string name="_bx_jobs_page_title_sys_manage"><![CDATA[Manage Own Jobs]]></string>
+    <string name="_bx_jobs_page_title_sys_manage_administration"><![CDATA[Manage All Jobs]]></string>
+    <string name="_bx_jobs_page_title_manage"><![CDATA[Manage Jobs]]></string>
+    <string name="_bx_jobs_page_title_sys_top"><![CDATA[Top Jobs]]></string>
+    <string name="_bx_jobs_page_title_top"><![CDATA[Top Jobs]]></string>
+    <string name="_bx_jobs_page_title_sys_joined"><![CDATA[Joined Jobs]]></string>
+    <string name="_bx_jobs_page_title_sys_followed"><![CDATA[Jobs I follow]]></string>
+    <string name="_bx_jobs_page_title_joined"><![CDATA[Joined Jobs]]></string>
+    <string name="_bx_jobs_page_title_followed"><![CDATA[Jobs I follow]]></string>
+    <string name="_bx_jobs_page_title_sys_invite_to_job"><![CDATA[Invite Performers to the Job]]></string>
+    <string name="_bx_jobs_page_title_invite_to_job"><![CDATA[Invite Performers to the Job]]></string>
+    <string name="_bx_jobs_page_title_sys_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_jobs_page_title_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_jobs_page_title_sys_entries_favorites"><![CDATA[Favorites Jobs]]></string>
+    <string name="_bx_jobs_page_title_entries_favorites"><![CDATA[Favorites Jobs]]></string>
+
+    <string name="_bx_jobs_page_block_title_sys_entries_actions"><![CDATA[Jobs actions]]></string>
+    <string name="_bx_jobs_page_block_title_entries_actions"><![CDATA[Jobs actions]]></string>
+    <string name="_bx_jobs_page_block_title_sys_favorites_entries"><![CDATA[Favorite List]]></string>
+    <string name="_bx_jobs_page_block_title_favorites_entries"><![CDATA["{title}" List]]></string>
+    <string name="_bx_jobs_page_block_title_favorites_entries_info"><![CDATA[Info]]></string>
+    <string name="_bx_jobs_page_block_title_favorites_entries_actions"><![CDATA[Favorites List Actions]]></string>
+    <string name="_bx_jobs_page_block_title_sys_entries_of_author"><![CDATA[Jobs of author]]></string>
+    <string name="_bx_jobs_page_block_title_entries_of_author"><![CDATA[Jobs by {display_name}]]></string>
+    <string name="_bx_jobs_page_block_title_favorites_of_author"><![CDATA[Favorite Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_sys_favorites_of_author"><![CDATA[Favorite Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_entries_in_context_link"><![CDATA[Jobs in <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_jobs_page_block_title_entries_in_context"><![CDATA[Jobs in context]]></string>
+    <string name="_bx_jobs_page_block_title_sys_entries_in_context"><![CDATA[Jobs in context]]></string>
+    <string name="_bx_jobs_page_block_title_sys_joined_entries"><![CDATA[Joined Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_joined_entries"><![CDATA[Joined Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_sys_followed_entries"><![CDATA[Jobs I follow]]></string>
+    <string name="_bx_jobs_page_block_title_followed_entries"><![CDATA[Jobs I follow]]></string>
+    <string name="_bx_jobs_page_block_title_create_profile"><![CDATA[Create Job]]></string>
+    <string name="_bx_jobs_page_block_title_edit_profile"><![CDATA[Edit Job]]></string>
+    <string name="_bx_jobs_page_block_title_edit_profile_cover"><![CDATA[Edit Cover]]></string>
+    <string name="_bx_jobs_page_block_title_edit_questionnaire"><![CDATA[Questionnaire]]></string>
+    <string name="_bx_jobs_page_block_title_delete_profile"><![CDATA[Delete Job]]></string>
+    <string name="_bx_jobs_page_block_title_join_profile"><![CDATA[Join Job]]></string>
+    <string name="_bx_jobs_page_block_title_profile_info_link"><![CDATA[About <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_jobs_page_block_title_profile_info"><![CDATA[Info]]></string>
+    <string name="_bx_jobs_page_block_title_system_profile_info"><![CDATA[Info]]></string>
+    <string name="_bx_jobs_page_block_title_system_profile_pricing"><![CDATA[Pricing]]></string>
+    <string name="_bx_jobs_page_block_title_profile_pricing"><![CDATA[Pricing]]></string>
+    <string name="_bx_jobs_page_block_title_profile_pricing_link"><![CDATA[Pricing of <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_jobs_page_block_title_profile_description"><![CDATA[Description]]></string>
+    <string name="_bx_jobs_page_block_title_profile_friends_link"><![CDATA[Friends of <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_jobs_page_block_title_profile_friends"><![CDATA[Friends]]></string>
+    <string name="_bx_jobs_page_block_title_system_profile_friends"><![CDATA[Friends]]></string>
+    <string name="_bx_jobs_page_block_title_entry_context"><![CDATA[Posted in]]></string>
+    <string name="_bx_jobs_page_block_title_admins"><![CDATA[Administrators]]></string>
+    <string name="_bx_jobs_page_block_title_fans_link"><![CDATA[Performers of <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_jobs_page_block_title_fans"><![CDATA[Performers]]></string>
+    <string name="_bx_jobs_page_block_title_system_fans"><![CDATA[Performers]]></string>
+    <string name="_bx_jobs_page_block_title_system_fans_manage"><![CDATA[Manage performers]]></string>
+    <string name="_bx_jobs_page_block_title_invites"><![CDATA[Invites]]></string>
+    <string name="_bx_jobs_page_block_title_system_invites_manage"><![CDATA[Invites]]></string>
+    <string name="_bx_jobs_page_block_title_bans"><![CDATA[Bans]]></string>
+    <string name="_bx_jobs_page_block_title_system_bans_manage"><![CDATA[Bans]]></string>
+    <string name="_bx_jobs_page_block_title_profile_location"><![CDATA[Location]]></string>
+    <string name="_bx_jobs_page_block_title_profile_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_jobs_page_block_title_profile_comments_link"><![CDATA[Comments to <a href="{entry_link}">{title}</a>]]></string>
+    <string name="_bx_jobs_page_block_title_profile_actions"><![CDATA[Actions]]></string>
+    <string name="_bx_jobs_page_block_title_featured_profiles"><![CDATA[Featured Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_latest_profiles"><![CDATA[New Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_system_manage"><![CDATA[Manage Own Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_system_manage_administration"><![CDATA[Manage All Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_manage"><![CDATA[Manage Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_top_profiles"><![CDATA[Top Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_joined_profiles"><![CDATA[Joined Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_entry_all_actions"><![CDATA[All Actions]]></string>
+    <string name="_bx_jobs_page_block_title_entry_social_sharing"><![CDATA[Share]]></string>
+    <string name="_bx_jobs_page_block_title_categories"><![CDATA[Jobs Categories]]></string>
+    <string name="_bx_jobs_page_block_title_invite_to_job"><![CDATA[Invite Performers to the Job]]></string>
+    <string name="_bx_jobs_page_block_title_search_form"><![CDATA[Search Form]]></string>
+    <string name="_bx_jobs_page_block_title_search_results"><![CDATA[Search Results]]></string>
+    <string name="_bx_jobs_page_block_title_search_form_cmts"><![CDATA[Comments Search Form]]></string>
+    <string name="_bx_jobs_page_block_title_search_results_cmts"><![CDATA[Comments Search Results]]></string>
+    <string name="_bx_jobs_page_block_title_sys_featured_entries_view_showcase"><![CDATA[Featured Jobs (Showcase View)]]></string>
+    <string name="_bx_jobs_page_block_title_featured_entries_view_showcase"><![CDATA[Featured Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_sys_recommended_entries_view_showcase"><![CDATA[Recommended Jobs (Showcase View)]]></string>
+    <string name="_bx_jobs_page_block_title_recommended_entries_view_showcase"><![CDATA[Recommended Jobs]]></string>
+    <string name="_bx_jobs_page_block_title_sys_labels_tree"><![CDATA[Labels tree]]></string>
+    <string name="_bx_jobs_page_block_title_labels_tree"><![CDATA[Labels tree]]></string>
+    <string name="_bx_jobs_page_block_title_sys_jobs_browse_by_label"><![CDATA[Browse by label]]></string>
+    <string name="_bx_jobs_page_block_title_jobs_browse_by_label"><![CDATA[Browse by label]]></string>
+    <string name="_bx_jobs_page_block_title_sys_labels_breadcrumbs"><![CDATA[Labels breadcrumbs]]></string>
+    <string name="_bx_jobs_page_block_title_labels_breadcrumbs"><![CDATA[Labels breadcrumbs]]></string>
+    <string name="_bx_jobs_page_block_title_sys_cover_block"><![CDATA[Cover]]></string>
+    <string name="_bx_jobs_page_block_title_cover_block"><![CDATA[Cover]]></string>
+    <string name="_bx_jobs_page_block_title_sys_recom_fans"><![CDATA[Recommended jobs (Join)]]></string>
+    <string name="_bx_jobs_page_block_title_recom_fans"><![CDATA[Job Suggestions]]></string>
+
+
+    <string name="_bx_jobs_menu_title_submenu"><![CDATA[Jobs Submenu]]></string>
+    <string name="_bx_jobs_menu_set_title_submenu"><![CDATA[Jobs Submenu]]></string>
+    <string name="_bx_jobs_menu_set_title_view_profile_actions"><![CDATA[Job Actions]]></string>
+    <string name="_bx_jobs_menu_title_view_profile_actions"><![CDATA[Job Actions]]></string>
+    <string name="_bx_jobs_menu_set_title_view_profile_actions_more"><![CDATA[Job More Actions]]></string>
+    <string name="_bx_jobs_menu_title_view_profile_actions_more"><![CDATA[Job More Actions]]></string>
+    <string name="_bx_jobs_menu_title_view_profile_meta"><![CDATA[Job Meta]]></string>
+    <string name="_bx_jobs_menu_set_title_view_profile_meta"><![CDATA[Job Meta]]></string>
+    <string name="_bx_jobs_menu_item_title_system_sm_members"><![CDATA[Performers]]></string>
+    <string name="_bx_jobs_menu_item_title_sm_members"><![CDATA[{0} performers]]></string>
+    <string name="_bx_jobs_menu_set_title_view_profile_submenu"><![CDATA[View Job Submenu]]></string>
+    <string name="_bx_jobs_menu_title_view_profile_submenu"><![CDATA[View Job Submenu]]></string>
+    <string name="_bx_jobs_menu_title_entries_my"><![CDATA[Profile Jobs Action Menu]]></string>
+    <string name="_bx_jobs_menu_set_title_entries_my"><![CDATA[Profile Jobs Menu]]></string>
+    <string name="_bx_jobs_menu_set_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_jobs_menu_title_manage_tools"><![CDATA[Manage Tools Submenu]]></string>
+    <string name="_bx_jobs_menu_item_title_system_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_jobs_menu_item_title_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_jobs_menu_item_title_system_delete_with_content"><![CDATA[Delete With Content]]></string>
+    <string name="_bx_jobs_menu_item_title_delete_with_content"><![CDATA[Delete With Content]]></string>
+    <string name="_bx_jobs_menu_item_title_system_clear_reports"><![CDATA[Clear reports]]></string>
+    <string name="_bx_jobs_menu_item_title_clear_reports"><![CDATA[Clear reports]]></string>
+    <string name="_bx_jobs_menu_item_title_system_edit_cover"><![CDATA[Edit Cover]]></string>
+    <string name="_bx_jobs_menu_item_title_edit_cover"><![CDATA[Edit Cover]]></string>
+    <string name="_bx_jobs_menu_item_title_system_edit_questionnaire"><![CDATA[Questionnaire]]></string>
+    <string name="_bx_jobs_menu_item_title_edit_questionnaire"><![CDATA[Questionnaire]]></string>
+    <string name="_bx_jobs_menu_item_title_system_edit_pricing"><![CDATA[Edit Pricing]]></string>
+    <string name="_bx_jobs_menu_item_title_edit_pricing"><![CDATA[Edit Pricing]]></string>
+    <string name="_bx_jobs_menu_item_title_system_edit_profile"><![CDATA[Edit Job]]></string>
+    <string name="_bx_jobs_menu_item_title_edit_profile"><![CDATA[Edit Job]]></string>
+    <string name="_bx_jobs_menu_item_title_system_delete_profile"><![CDATA[Delete Job]]></string>
+    <string name="_bx_jobs_menu_item_title_delete_profile"><![CDATA[Delete Job]]></string>
+    <string name="_bx_jobs_menu_item_title_system_delete_account"><![CDATA[Delete Account]]></string>
+    <string name="_bx_jobs_menu_item_title_delete_account"><![CDATA[Delete Account]]></string>
+    <string name="_bx_jobs_menu_item_title_system_profile_type"><![CDATA[Job]]></string>
+    <string name="_bx_jobs_menu_item_title_profile_type"><![CDATA[Job]]></string>
+    <string name="_bx_jobs_menu_item_title_system_create_profile"><![CDATA[Job]]></string>
+    <string name="_bx_jobs_menu_item_title_create_profile"><![CDATA[Job]]></string>
+    <string name="_bx_jobs_menu_item_title_system_view_profile_friends"><![CDATA[Friends]]></string>
+    <string name="_bx_jobs_menu_item_title_view_profile_friends"><![CDATA[Friends]]></string>
+    <string name="_bx_jobs_menu_item_title_system_view_entries_in_context"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_view_entries_in_context"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_system_view_joined_jobs"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_view_joined_jobs"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_system_view_fans"><![CDATA[Performers]]></string>
+    <string name="_bx_jobs_menu_item_title_view_fans"><![CDATA[Performers]]></string>
+    <string name="_bx_jobs_menu_item_title_system_view_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_jobs_menu_item_title_view_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_jobs_menu_item_title_system_view_profile_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_jobs_menu_item_title_view_profile_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_jobs_menu_item_title_system_view_profile_info"><![CDATA[Info]]></string>
+    <string name="_bx_jobs_menu_item_title_view_profile_info"><![CDATA[Info]]></string>
+    <string name="_bx_jobs_menu_item_title_system_view_profile_view"><![CDATA[Job]]></string>
+    <string name="_bx_jobs_menu_item_title_view_profile_view"><![CDATA[Job]]></string>
+    <string name="_bx_jobs_menu_item_title_system_view_profile_more_auto"><![CDATA[More]]></string>
+    <string name="_bx_jobs_menu_item_title_view_profile_more_auto"><![CDATA[More]]></string>
+    <string name="_bx_jobs_menu_item_title_system_invite"><![CDATA[Invite]]></string>
+    <string name="_bx_jobs_menu_item_title_invite"><![CDATA[Invite]]></string>
+
+    <string name="_bx_jobs_menu_item_title_system_befriend"><![CDATA[Add friend]]></string>
+    <string name="_bx_jobs_menu_item_title_befriend"><![CDATA[Add friend]]></string>
+    <string name="_bx_jobs_menu_item_title_befriend_sent"><![CDATA[Add friend (requested)]]></string>
+    <string name="_bx_jobs_menu_item_title_befriend_confirm"><![CDATA[Accept friend request]]></string>
+    <string name="_bx_jobs_menu_item_title_system_unfriend"><![CDATA[Unfriend]]></string>
+    <string name="_bx_jobs_menu_item_title_unfriend"><![CDATA[Unfriend]]></string>
+    <string name="_bx_jobs_menu_item_title_unfriend_cancel_request"><![CDATA[Cancel friend request]]></string>
+    <string name="_bx_jobs_menu_item_title_unfriend_reject_request"><![CDATA[Reject friend request]]></string>
+
+    <string name="_bx_jobs_menu_item_title_system_become_fan"><![CDATA[Apply]]></string>
+    <string name="_bx_jobs_menu_item_title_become_fan"><![CDATA[Apply]]></string>
+    <string name="_bx_jobs_menu_item_title_become_fan_sent"><![CDATA[Apply (requested)]]></string>
+    <string name="_bx_jobs_menu_item_title_become_fan_confirm"><![CDATA[Assign]]></string>
+    <string name="_bx_jobs_menu_item_title_system_leave_job"><![CDATA[Quit]]></string>
+    <string name="_bx_jobs_menu_item_title_leave_job"><![CDATA[Quit]]></string>
+    <string name="_bx_jobs_menu_item_title_leave_job_cancel_request"><![CDATA[Cancel]]></string>
+    <string name="_bx_jobs_menu_item_title_leave_job_reject_request"><![CDATA[Reject]]></string>
+
+    <string name="_bx_jobs_menu_item_title_system_pay_and_join"><![CDATA[Pay & Apply]]></string>
+    <string name="_bx_jobs_menu_item_title_pay_and_join"><![CDATA[Pay & Apply]]></string>
+
+    <string name="_bx_jobs_menu_item_title_system_subscribe"><![CDATA[Follow]]></string>
+    <string name="_bx_jobs_menu_item_title_subscribe"><![CDATA[Follow]]></string>
+    <string name="_bx_jobs_menu_item_title_system_unsubscribe"><![CDATA[Unfollow]]></string>
+    <string name="_bx_jobs_menu_item_title_unsubscribe"><![CDATA[Unfollow]]></string>
+    <string name="_bx_jobs_menu_item_title_system_more_actions"><![CDATA[More Actions]]></string>
+    <string name="_bx_jobs_menu_item_title_more_actions"><![CDATA[]]></string>
+    <string name="_bx_jobs_menu_item_title_system_friends"><![CDATA[Friends]]></string>
+    <string name="_bx_jobs_menu_item_title_friends"><![CDATA[Friends]]></string>
+    <string name="_bx_jobs_menu_item_title_system_manage_my_jobs"><![CDATA[My jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_manage_my_jobs"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_system_followings"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_followings"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_system_entries_recent"><![CDATA[New]]></string>
+    <string name="_bx_jobs_menu_item_title_entries_recent"><![CDATA[New]]></string>
+    <string name="_bx_jobs_menu_item_title_system_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_jobs_menu_item_title_entries_search"><![CDATA[Search]]></string>
+    <string name="_bx_jobs_menu_item_title_system_entries_joined"><![CDATA[Joined]]></string>
+    <string name="_bx_jobs_menu_item_title_entries_joined"><![CDATA[Joined]]></string>
+    <string name="_bx_jobs_menu_item_title_system_entries_followed"><![CDATA[Following]]></string>
+    <string name="_bx_jobs_menu_item_title_entries_followed"><![CDATA[Following]]></string>
+    <string name="_bx_jobs_menu_item_title_system_entries_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_jobs_menu_item_title_entries_manage"><![CDATA[Manage]]></string>
+    <string name="_bx_jobs_menu_item_title_system_entries_home"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_entries_home"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_system_admt_jobs"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_admt_jobs"><![CDATA[Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_manage_my"><![CDATA[My Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_manage_all"><![CDATA[All Jobs]]></string>
+    <string name="_bx_jobs_menu_item_title_system_entries_top"><![CDATA[Top]]></string>
+    <string name="_bx_jobs_menu_item_title_entries_top"><![CDATA[Top]]></string>
+    <string name="_bx_jobs_menu_item_title_system_sm_privacy"><![CDATA[Privacy]]></string>
+    <string name="_bx_jobs_menu_item_title_sm_privacy"><![CDATA[Privacy]]></string>
+    <string name="_bx_jobs_menu_item_title_system_sm_date_start"><![CDATA[Date start]]></string>
+    <string name="_bx_jobs_menu_item_title_sm_date_start"><![CDATA[Date start]]></string>
+    <string name="_bx_jobs_menu_item_title_system_sm_date_end"><![CDATA[Date end]]></string>
+    <string name="_bx_jobs_menu_item_title_sm_date_end"><![CDATA[Date end]]></string>
+    <string name="_bx_jobs_menu_item_title_system_sm_budget"><![CDATA[Budget]]></string>
+    <string name="_bx_jobs_menu_item_title_sm_budget_total"><![CDATA[{0}]]></string>
+    <string name="_bx_jobs_menu_item_title_sm_budget_hourly"><![CDATA[{0}/hr]]></string>
+    <string name="_bx_jobs_menu_item_title_sm_budget_open"><![CDATA[Open budget]]></string>
+
+    <string name="_bx_jobs_grid_filter_item_title_adm_select_one_filter1"><![CDATA[All Statuses]]></string>
+    <string name="_bx_jobs_grid_filter_item_title_adm_select_one_filter2"><![CDATA[Any Audience]]></string>
+    <string name="_bx_jobs_grid_filter_item_title_adm_active"><![CDATA[Active]]></string>
+    <string name="_bx_jobs_grid_filter_item_title_adm_hidden"><![CDATA[Hidden]]></string>
+    <string name="_bx_jobs_grid_filter_item_title_adm_pending"><![CDATA[Pending]]></string>
+    <string name="_bx_jobs_grid_filter_item_title_adm_suspended"><![CDATA[Suspended]]></string>
+    <string name="_bx_jobs_grid_column_title_adm_active"><![CDATA[Active]]></string>
+    <string name="_bx_jobs_grid_column_title_adm_name"><![CDATA[Name]]></string>
+    <string name="_bx_jobs_grid_column_title_adm_added"><![CDATA[Created]]></string>
+    <string name="_bx_jobs_grid_column_title_adm_account"><![CDATA[Account]]></string>
+    <string name="_bx_jobs_grid_action_title_adm_audit_context"><![CDATA[Audit actions in context]]></string>
+    <string name="_bx_jobs_grid_action_title_adm_audit_content"><![CDATA[Audit actions with context]]></string>
+    <string name="_bx_jobs_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_jobs_grid_action_title_adm_delete_with_content"><![CDATA[Delete With Content]]></string>
+    <string name="_bx_jobs_grid_action_title_adm_clear_reports"><![CDATA[Clear reports]]></string>
+    <string name="_bx_jobs_grid_action_title_adm_more_actions"><![CDATA[More Actions]]></string>
+    <string name="_bx_jobs_grid_action_err_delete"><![CDATA[Cannot delete the selected job(s).]]></string>
+    <string name="_bx_jobs_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
+
+    <string name="_bx_jobs_grid_column_title_qn_question"><![CDATA[Question]]></string>
+    <string name="_bx_jobs_grid_action_title_qn_add"><![CDATA[Add]]></string>
+    <string name="_bx_jobs_grid_action_title_qn_edit"><![CDATA[Edit]]></string>
+    <string name="_bx_jobs_grid_action_title_qn_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_jobs_popup_title_qn_add"><![CDATA[Add Question]]></string>
+    <string name="_bx_jobs_popup_title_qn_edit"><![CDATA[Edit Question]]></string>
+    <string name="_bx_jobs_popup_title_questionnaire"><![CDATA[Application Questions]]></string>
+
+    <string name="_bx_jobs_grid_column_title_name"><![CDATA[Name]]></string>
+    <string name="_bx_jobs_grid_column_title_role_id"><![CDATA[Role]]></string>
+    <string name="_bx_jobs_grid_column_title_period"><![CDATA[Period]]></string>
+    <string name="_bx_jobs_grid_column_title_price"><![CDATA[Price]]></string>
+    <string name="_bx_jobs_grid_action_title_add"><![CDATA[Add]]></string>
+    <string name="_bx_jobs_grid_action_title_edit"><![CDATA[Edit]]></string>
+    <string name="_bx_jobs_grid_action_title_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_jobs_grid_action_title_buy"><![CDATA[Buy]]></string>
+    <string name="_bx_jobs_grid_action_title_buy_title"><![CDATA[One-time payment]]></string>
+    <string name="_bx_jobs_grid_action_title_subscribe"><![CDATA[Subscribe]]></string>
+    <string name="_bx_jobs_grid_action_title_subscribe_title"><![CDATA[Create a subscription with recurring billing]]></string>
+    <string name="_bx_jobs_grid_action_title_choose"><![CDATA[Choose]]></string>
+    <string name="_bx_jobs_grid_action_title_choose_title"><![CDATA[Switch to the level for free]]></string>
+    <string name="_bx_jobs_popup_title_price_add"><![CDATA[Add Pricing Plan]]></string>
+    <string name="_bx_jobs_popup_title_price_edit"><![CDATA[Edit Pricing Plan]]></string>
+
+    <string name="_bx_jobs_chart_growth"><![CDATA[Jobs: Growth]]></string>
+    <string name="_bx_jobs_chart_growth_speed"><![CDATA[Jobs: Growth Speed]]></string>
+
+    <string name="_bx_jobs_search_extended"><![CDATA[Jobs Search]]></string>
+    <string name="_bx_jobs_search_extended_cmts"><![CDATA[Jobs Comments Search]]></string>
+
+    <string name="_bx_jobs_txt_all_entries_in"><![CDATA[<a href="{0}">All Jobs in {1} ({2})</a>]]></string>
+    <string name="_bx_jobs_txt_account_pending"><![CDATA[This job is pending approval, please wait until it is activated.]]></string>
+    <string name="_bx_jobs_txt_account_suspended"><![CDATA[This job is suspended.]]></string>
+    <string name="_bx_jobs_txt_status_hidden"><![CDATA[This job was hidden.]]></string>
+    <string name="_bx_jobs_txt_N_fans"><![CDATA[{0} performers]]></string>
+    <string name="_bx_jobs_txt_ban_added"><![CDATA[Banned]]></string>
+    <string name="_bx_jobs_txt_role"><![CDATA[Role]]></string>
+    <string name="_bx_jobs_txt_role_added"><![CDATA[Added]]></string>
+    <string name="_bx_jobs_txt_role_expired"><![CDATA[Expires]]></string>
+    <string name="_bx_jobs_txt_sample_single"><![CDATA[job]]></string>
+    <string name="_bx_jobs_txt_sample_single_with_article"><![CDATA[a job]]></string>
+    <string name="_bx_jobs_txt_sample_comment_single"><![CDATA[comment to job]]></string>
+    <string name="_bx_jobs_txt_sample_vote_single"><![CDATA[vote to job]]></string>
+    <string name="_bx_jobs_txt_sample_score_up_single"><![CDATA[score up vote to job]]></string>
+    <string name="_bx_jobs_txt_sample_score_down_single"><![CDATA[score down vote to job]]></string>
+    <string name="_bx_jobs_txt_accept"><![CDATA[Assign]]></string>
+    <string name="_bx_jobs_txt_set_role"><![CDATA[Set Role]]></string>
+    <string name="_bx_jobs_txt_view_answers"><![CDATA[View application]]></string>
+    <string name="_bx_jobs_txt_delete"><![CDATA[Reject]]></string>
+    <string name="_bx_jobs_txt_delete_and_ban"><![CDATA[Reject and ban]]></string>
+    <string name="_bx_jobs_txt_private_job"><![CDATA[Private job]]></string>
+    <string name="_bx_jobs_txt_invite_popup_text"><![CDATA[You have been invited to a job. Click the button below to accept the invitation.]]></string>
+    <string name="_bx_jobs_txt_invite_popup_title"><![CDATA[Invitation to a job]]></string>
+    <string name="_bx_jobs_txt_invite_popup_button_accept"><![CDATA[Accept]]></string>
+    <string name="_bx_jobs_txt_invite_popup_button_decline"><![CDATA[Decline]]></string>
+    <string name="_bx_jobs_txt_invite_popup_error_invitation_absent"><![CDATA[Sorry, an error has occurred. You can not join this job. The invitation is expired or deleted.]]></string>
+    <string name="_bx_jobs_txt_invite_popup_error_invitation_wrong_user"><![CDATA[Sorry, an error has occurred. You can not join this job. This invitation cannot be used by you.]]></string>
+    <string name="_bx_jobs_txt_n_unit"><![CDATA[{0} ({1})]]></string>
+    <string name="_bx_jobs_txt_cart_item_title"><![CDATA[{0}: {1} ({2} {3})]]></string>
+    <string name="_bx_jobs_txt_cart_item_title_lifetime"><![CDATA[{0}: {1} (lifetime)]]></string>    
+
+    <string name="_bx_jobs_msg_performed"><![CDATA[The action was successfully performed.]]></string>
+    <string name="_bx_jobs_err_price_duplicate"><![CDATA[Similar pricing plan is already exists.]]></string>
+    <string name="_bx_jobs_err_cannot_perform"><![CDATA[An error appeared. Please report.]]></string>
+
+    <string name="_bx_jobs_alert_action_fan_added"><![CDATA[performer joined]]></string>
+    <string name="_bx_jobs_txt_ntfs_fan_added"><![CDATA[Job <b class="bx-ntfs-content-profile">{owner_name}</b> has got a performer <b class="bx-ntfs-content-entry">{subentry_sample}</b>]]></string>
+    <string name="_bx_jobs_alert_action_join_invitation_notif"><![CDATA[join invitation]]></string>
+    <string name="_bx_jobs_alert_action_join_request"><![CDATA[join request]]></string>
+    <string name="_bx_jobs_txt_ntfs_join_invitation"><![CDATA[<b class="bx-ntfs-content-profile">{owner_name}</b> job's representative invites <b class="bx-ntfs-content-entry">{subentry_sample}</b> to join job]]></string>
+    <string name="_bx_jobs_txt_ntfs_join_request"><![CDATA[Job <b class="bx-ntfs-content-profile">{owner_name}</b> has a join request from <b class="bx-ntfs-content-entry">{subentry_sample}</b>]]></string>
+    <string name="_bx_jobs_txt_ntfs_timeline_post_common"><![CDATA[New post <b class="bx-ntfs-content-entry">{subentry_sample}</b> in <b class="bx-ntfs-content-profile">{owner_name}</b> job timeline]]></string>
+
+    <string name="_bx_jobs_pre_lists_cats"><![CDATA[Job categories]]></string>
+    <string name="_bx_jobs_cat_General"><![CDATA[General]]></string>
+    <string name="_bx_jobs_cat_Business"><![CDATA[Business]]></string>
+    <string name="_bx_jobs_cat_Uncategorised"><![CDATA[Uncategorised]]></string>
+    
+    <string name="_bx_jobs_pre_lists_roles"><![CDATA[Job roles]]></string>
+    <string name="_bx_jobs_role_regular"><![CDATA[Regular]]></string>
+    <string name="_bx_jobs_role_administrator"><![CDATA[Administrator]]></string>
+    <string name="_bx_jobs_role_moderator"><![CDATA[Moderator]]></string>
+
+    <string name="_bx_jobs_pre_lists_period_units"><![CDATA[Billing Interval]]></string>
+    <string name="_bx_jobs_period_unit_day"><![CDATA[day]]></string>
+    <string name="_bx_jobs_period_unit_week"><![CDATA[week]]></string>
+    <string name="_bx_jobs_period_unit_month"><![CDATA[month]]></string>
+    <string name="_bx_jobs_period_unit_year"><![CDATA[year]]></string>
+
+    <string name="_bx_jobs_email_join_request"><![CDATA[Job join request]]></string>
+    <string name="_bx_jobs_email_join_request_subject"><![CDATA[Request to join your job]]></string>
+    <string name="_bx_jobs_email_join_request_body"><![CDATA[{email_header}
+<p>New request to join <a href="{EntryUrl}">{EntryTitle}</a> job from <a href="{NewMemberUrl}">{NewMemberDisplayName}</a></p>
+{email_footer}]]></string>
+
+    <string name="_bx_jobs_email_join_reject"><![CDATA[Job join request was rejected]]></string>
+    <string name="_bx_jobs_email_join_reject_subject"><![CDATA[Request to join a job was rejected]]></string>
+    <string name="_bx_jobs_email_join_reject_body"><![CDATA[{email_header}
+<p>Your request to join <a href="{EntryUrl}">{EntryTitle}</a> job was rejected by job admin.</p>
+{email_footer}]]></string>
+
+    <string name="_bx_jobs_email_join_confirm"><![CDATA[Job join request was confirmed]]></string>
+    <string name="_bx_jobs_email_join_confirm_subject"><![CDATA[Your request to join a job was confirmed]]></string>
+    <string name="_bx_jobs_email_join_confirm_body"><![CDATA[{email_header}
+<p>Your request to join <a href="{EntryUrl}">{EntryTitle}</a> job was confirmed by the job admin.</p>
+{email_footer}]]></string>
+
+    <string name="_bx_jobs_email_fan_remove"><![CDATA[Profile was removed from job fans]]></string>
+    <string name="_bx_jobs_email_fan_remove_subject"><![CDATA[Your profile was removed from the job]]></string>
+    <string name="_bx_jobs_email_fan_remove_body"><![CDATA[{email_header}
+<p>Your profile was removed from <a href="{EntryUrl}">{EntryTitle}</a> job by the job admin.</p>
+{email_footer}]]></string>
+
+    <string name="_bx_jobs_email_fan_become_admin"><![CDATA[Job admin status was granted]]></string>
+    <string name="_bx_jobs_email_fan_become_admin_subject"><![CDATA[You are a job admin now]]></string>
+    <string name="_bx_jobs_email_fan_become_admin_body"><![CDATA[{email_header}
+<p>You are an admin of <a href="{EntryUrl}">{EntryTitle}</a> job now.</p>
+{email_footer}]]></string>
+
+    <string name="_bx_jobs_email_admin_become_fan"><![CDATA[Job admin status was revoked]]></string>
+    <string name="_bx_jobs_email_admin_become_fan_subject"><![CDATA[Your job admin status was revoked]]></string>
+    <string name="_bx_jobs_email_admin_become_fan_body"><![CDATA[{email_header}
+<p>Your admin status was revoked from <a href="{EntryUrl}">{EntryTitle}</a> job.</p>
+{email_footer}]]></string>
+
+    <string name="_bx_jobs_email_set_role"><![CDATA[Job performer status was changed]]></string>
+    <string name="_bx_jobs_email_set_role_subject"><![CDATA[Your job status was changed]]></string>
+    <string name="_bx_jobs_email_set_role_body"><![CDATA[{email_header}
+<p>Your status in <a href="{EntryUrl}">{EntryTitle}</a> job was changed to <b>{Role}</b>.</p>
+{email_footer}]]></string>
+
+    <string name="_bx_jobs_email_invitation"><![CDATA[Invitation to job]]></string>
+    <string name="_bx_jobs_email_invitation_subject"><![CDATA[Invitation to "{EntryTitle}" job]]></string>
+    <string name="_bx_jobs_email_invitation_body"><![CDATA[{email_header}
+<p><a href="{InviterUrl}">{InviterDisplayName}</a> invited you to <a href="{EntryUrl}">{EntryTitle} job</a>.</p>
+{email_footer}]]></string>
+</resources>

+ 66 - 0
modules/boonex/jobs/install/sql/disable.sql

@@ -0,0 +1,66 @@
+
+-- SETTINGS
+SET @iTypeId = (SELECT `ID` FROM `sys_options_types` WHERE `name` = 'bx_jobs' LIMIT 1);
+SET @iCategId = (SELECT `ID` FROM `sys_options_categories` WHERE `type_id` = @iTypeId LIMIT 1);
+DELETE FROM `sys_options` WHERE `category_id` = @iCategId;
+DELETE FROM `sys_options_categories` WHERE `type_id` = @iTypeId;
+DELETE FROM `sys_options_types` WHERE `id` = @iTypeId;
+
+-- PAGES
+DELETE FROM `sys_objects_page` WHERE `module` = 'bx_jobs';
+DELETE FROM `sys_pages_blocks` WHERE `module` = 'bx_jobs' OR `object` IN('bx_jobs_create_profile', 'bx_jobs_delete_profile', 'bx_jobs_context', 'bx_jobs_join_profile', 'bx_jobs_edit_profile', 'bx_jobs_edit_profile_cover', 'bx_jobs_invite', 'bx_jobs_view_profile', 'bx_jobs_view_profile_closed', 'bx_jobs_profile_info', 'bx_jobs_profile_pricing', 'bx_jobs_profile_comments', 'bx_jobs_home', 'bx_jobs_fans', 'bx_jobs_manage_item', 'bx_jobs_joined', 'bx_jobs_favorites', 'bx_jobs_top', 'bx_jobs_search', 'bx_jobs_manage', 'bx_jobs_administration');
+
+-- MENU
+DELETE FROM `sys_objects_menu` WHERE `module` = 'bx_jobs';
+DELETE FROM `sys_menu_sets` WHERE `module` = 'bx_jobs';
+DELETE FROM `sys_menu_items` WHERE `module` = 'bx_jobs' OR `set_name` IN('bx_jobs_view_submenu', 'bx_jobs_submenu', 'bx_jobs_view_actions', 'bx_jobs_view_actions_more', 'bx_jobs_view_actions_all', 'bx_jobs_view_meta', 'bx_jobs_my', 'bx_jobs_snippet_meta', 'bx_jobs_menu_manage_tools');
+
+-- ACL
+DELETE `sys_acl_actions`, `sys_acl_matrix` FROM `sys_acl_actions`, `sys_acl_matrix` WHERE `sys_acl_matrix`.`IDAction` = `sys_acl_actions`.`ID` AND `sys_acl_actions`.`Module` = 'bx_jobs';
+DELETE FROM `sys_acl_actions` WHERE `Module` = 'bx_jobs';
+
+-- METATAGS
+DELETE FROM `sys_objects_metatags` WHERE `object` = 'bx_jobs';
+
+-- CATEGORY
+DELETE FROM `sys_objects_category` WHERE `object` = 'bx_jobs_cats';
+
+-- SEARCH
+DELETE FROM `sys_objects_search` WHERE `ObjectName` = 'bx_jobs';
+
+-- CONNECTIONS
+DELETE FROM `sys_objects_connection` WHERE `object` = 'bx_jobs_fans';
+
+-- RECOMMENDATIONS
+SET @iRecFans = (SELECT `id` FROM `sys_objects_recommendation` WHERE `name`='bx_jobs_fans' LIMIT 1);
+DELETE FROM `sys_objects_recommendation` WHERE `id`=@iRecFans;
+DELETE FROM `sys_recommendation_criteria` WHERE `object_id`=@iRecFans AND `name` IN ('by_friends', 'by_subscriptions', 'by_fans');
+DELETE FROM `sys_recommendation_data` WHERE `object_id`=@iRecFans;
+
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_jobs%';
+
+-- CHARTS
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_jobs%';
+
+-- GRIDS
+DELETE FROM `sys_objects_grid` WHERE `object` IN ('bx_jobs_administration', 'bx_jobs_common', 'bx_jobs_fans', 'bx_jobs_bans', 'bx_jobs_invites', 'bx_jobs_questions_manage', 'bx_jobs_prices_manage', 'bx_jobs_prices_view');
+DELETE FROM `sys_grid_fields` WHERE `object` IN ('bx_jobs_administration', 'bx_jobs_common', 'bx_jobs_fans', 'bx_jobs_bans', 'bx_jobs_invites', 'bx_jobs_questions_manage', 'bx_jobs_prices_manage', 'bx_jobs_prices_view');
+DELETE FROM `sys_grid_actions` WHERE `object` IN ('bx_jobs_administration', 'bx_jobs_common', 'bx_jobs_fans', 'bx_jobs_bans', 'bx_jobs_invites', 'bx_jobs_questions_manage', 'bx_jobs_prices_manage', 'bx_jobs_prices_view');
+
+-- ALERTS
+SET @iHandler := (SELECT `id` FROM `sys_alerts_handlers` WHERE `name` = 'bx_jobs' LIMIT 1);
+DELETE FROM `sys_alerts` WHERE `handler_id` = @iHandler;
+DELETE FROM `sys_alerts_handlers` WHERE `id` = @iHandler;
+
+-- PRIVACY 
+DELETE FROM `sys_objects_privacy` WHERE `object` IN ('bx_jobs_allow_view_to', 'bx_jobs_allow_view_notification_to', 'bx_jobs_allow_post_to', 'bx_jobs_allow_view_favorite_list');
+
+-- EMAIL TEMPLATES
+DELETE FROM `sys_email_templates` WHERE `Module` = 'bx_jobs';
+
+-- UPLOADERS
+DELETE FROM `sys_objects_uploader` WHERE `object` IN ('bx_jobs_cover_crop', 'bx_jobs_picture_crop');
+
+-- CRON
+DELETE FROM `sys_cron_jobs` WHERE `name` IN ('bx_jobs_pruning');

+ 752 - 0
modules/boonex/jobs/install/sql/enable.sql

@@ -0,0 +1,752 @@
+
+-- SETTINGS
+
+SET @iTypeOrder = (SELECT MAX(`order`) FROM `sys_options_types` WHERE `group` = 'modules');
+INSERT INTO `sys_options_types`(`group`, `name`, `caption`, `icon`, `order`) VALUES 
+('modules', 'bx_jobs', '_bx_jobs', 'bx_jobs@modules/boonex/jobs/|std-icon.svg', IF(ISNULL(@iTypeOrder), 1, @iTypeOrder + 1));
+SET @iTypeId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options_categories` (`type_id`, `name`, `caption`, `order`)
+VALUES (@iTypeId, 'bx_jobs', '_bx_jobs', 1);
+SET @iCategId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+('bx_jobs_enable_auto_approve', 'on', @iCategId, '_bx_jobs_option_enable_auto_approve', 'checkbox', '', '', '', 0),
+('bx_jobs_num_connections_quick', '6', @iCategId, '_bx_jobs_option_num_connections_quick', 'digit', '', '', '', 10),
+('bx_jobs_per_page_browse', '24', @iCategId, '_bx_jobs_option_per_page_browse', 'digit', '', '', '', 11),
+('bx_jobs_num_rss', '10', @iCategId, '_bx_jobs_option_num_rss', 'digit', '', '', '', 12),
+('bx_jobs_per_page_browse_showcase', '32', @iCategId, '_sys_option_per_page_browse_showcase', 'digit', '', '', '', 15),
+('bx_jobs_per_page_browse_recommended', '10', @iCategId, '_sys_option_per_page_browse_recommended', 'digit', '', '', '', 16),
+('bx_jobs_per_page_for_favorites_lists', '5', @iCategId, '_bx_jobs_option_per_page_for_favorites_lists', 'digit', '', '', '', 17),
+('bx_jobs_searchable_fields', 'name,desc', @iCategId, '_bx_jobs_option_searchable_fields', 'list', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:21:"get_searchable_fields";}', '', '', 30),
+('bx_jobs_members_mode', '', @iCategId, '_bx_jobs_option_members_mode', 'select', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:24:"get_options_members_mode";}', '', '', 40),
+('bx_jobs_enable_subscribe_wo_join', '', @iCategId, '_bx_jobs_option_enable_subscribe_wo_join', 'checkbox', '', '', '', 45),
+('bx_jobs_internal_notifications', '', @iCategId, '_bx_jobs_option_internal_notifications', 'checkbox', '', '', '', 50);
+
+-- PAGES
+
+-- PAGE: create profile
+
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_create_profile', 'create-job-profile', '_bx_jobs_page_title_sys_create_profile', '_bx_jobs_page_title_create_profile', 'bx_jobs', 5, 2147483647, 1, 'page.php?i=create-job-profile', '', '', '', 0, 1, 0, '', '');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_jobs_create_profile', 1, 'bx_jobs', '_bx_jobs_page_block_title_create_profile', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:13:"entity_create";}', 0, 1, 1);
+
+-- PAGE: view profile
+
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_view_profile', 'view-job-profile', '_bx_jobs_page_title_sys_view_profile', '_bx_jobs_page_title_view_profile', 'bx_jobs', 10, 2147483647, 1, 'page.php?i=view-job-profile', '', '', '', 0, 1, 0, 'BxJobsPageEntry', 'modules/boonex/jobs/classes/BxJobsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES
+('bx_jobs_view_profile', 1, 'bx_jobs', '', '_bx_jobs_page_block_title_entry_social_sharing', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:21:"entity_social_sharing";}', 0, 0, 0, 0),
+('bx_jobs_view_profile', 1, 'bx_jobs', '', '_bx_jobs_page_block_title_entry_all_actions', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:18:"entity_all_actions";}', 0, 0, 0, 0),
+('bx_jobs_view_profile', 2, 'bx_jobs', '', '_bx_jobs_page_block_title_profile_info', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:11:"entity_info";}', 0, 0, 1, 0),
+('bx_jobs_view_profile', 3, 'bx_jobs', '', '_bx_jobs_page_block_title_profile_location', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:15:"entity_location";}', 0, 0, 0, 0),
+('bx_jobs_view_profile', 3, 'bx_jobs', '', '_bx_jobs_page_block_title_entry_context', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:14:"entity_context";}', 0, 0, 1, 1),
+('bx_jobs_view_profile', 3, 'bx_jobs', '', '_bx_jobs_page_block_title_fans', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:4:"fans";}', 0, 0, 1, 2),
+('bx_jobs_view_profile', 3, 'bx_jobs', '', '_bx_jobs_page_block_title_admins', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:6:"admins";}', 0, 0, 1, 3),
+('bx_jobs_view_profile', 3, 'bx_jobs', '', '_bx_jobs_page_block_title_profile_location', 3, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:13:"locations_map";s:6:"params";a:2:{i:0;s:7:"bx_jobs";i:1;s:12:"{content_id}";}s:5:"class";s:20:"TemplServiceMetatags";}', 0, 0, 1, 4),
+('bx_jobs_view_profile', 4, 'bx_jobs', '', '_bx_jobs_page_block_title_profile_description', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:17:"entity_text_block";}', 0, 0, 1, 0),
+('bx_jobs_view_profile', 4, 'bx_jobs', '', '_bx_jobs_page_block_title_profile_comments', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:15:"entity_comments";}', 0, 0, 0, 0),
+('bx_jobs_view_profile', 2, 'bx_jobs', '', '_bx_jobs_page_block_title_entry_reports', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:14:"entity_reports";}', 0, 0, 1, 6);
+
+
+-- PAGE: view closed profile 
+
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_view_profile_closed', 'view-job-profile-closed', '_bx_jobs_page_title_sys_view_profile_closed', '_bx_jobs_page_title_view_profile', 'bx_jobs', 10, 2147483647, 1, 'page.php?i=view-job-profile', '', '', '', 0, 1, 0, 'BxJobsPageEntry', 'modules/boonex/jobs/classes/BxJobsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_jobs_view_profile_closed', 2, 'bx_jobs', '', '_bx_jobs_page_block_title_profile_info', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:11:"entity_info";}', 0, 0, 1, 0),
+('bx_jobs_view_profile_closed', 3, 'bx_jobs', '', '_bx_jobs_page_block_title_fans', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:4:"fans";}', 0, 0, 1, 0);
+
+-- PAGE: edit profile
+
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_edit_profile', 'edit-job-profile', '_bx_jobs_page_title_sys_edit_profile', '_bx_jobs_page_title_edit_profile', 'bx_jobs', 5, 2147483647, 1, 'page.php?i=edit-job-profile', '', '', '', 0, 1, 0, 'BxJobsPageEntry', 'modules/boonex/jobs/classes/BxJobsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_jobs_edit_profile', 1, 'bx_jobs', '_bx_jobs_page_block_title_edit_profile', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:11:"entity_edit";}', 0, 0, 0);
+
+-- PAGE: questionnaire (join)
+
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_questionnaire', 'job-questionnaire', '_bx_jobs_page_title_sys_questionnaire', '_bx_jobs_page_title_questionnaire', 'bx_jobs', 5, 2147483647, 1, 'page.php?i=job-questionnaire', '', '', '', 0, 1, 0, 'BxJobsPageEntry', 'modules/boonex/jobs/classes/BxJobsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_jobs_questionnaire', 1, 'bx_jobs', '_bx_jobs_page_block_title_edit_questionnaire', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:25:"entity_edit_questionnaire";}', 0, 0, 0);
+
+-- PAGE: invite members
+
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_invite', 'invite-to-job', '_bx_jobs_page_title_sys_invite_to_job', '_bx_jobs_page_title_invite_to_job', 'bx_jobs', 5, 2147483647, 1, 'page.php?i=invite-to-job', '', '', '', 0, 1, 0, 'BxJobsPageEntry', 'modules/boonex/jobs/classes/BxJobsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_jobs_invite', 1, 'bx_jobs', '_bx_jobs_page_block_title_invite_to_job', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:13:"entity_invite";}', 0, 0, 0);
+
+-- PAGE: delete profile
+
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_delete_profile', 'delete-job-profile', '_bx_jobs_page_title_sys_delete_profile', '_bx_jobs_page_title_delete_profile', 'bx_jobs', 5, 2147483647, 1, 'page.php?i=delete-job-profile', '', '', '', 0, 1, 0, 'BxJobsPageEntry', 'modules/boonex/jobs/classes/BxJobsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_jobs_delete_profile', 1, 'bx_jobs', '_bx_jobs_page_block_title_delete_profile', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:13:"entity_delete";}', 0, 0, 0);
+
+-- PAGE: join profile
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_join_profile', 'join-job-profile', '_bx_jobs_page_title_sys_join_profile', '_bx_jobs_page_title_join_profile', 'bx_jobs', 5, 2147483647, 1, 'page.php?i=join-job-profile', '', '', '', 0, 1, 0, 'BxJobsPageEntry', 'modules/boonex/jobs/classes/BxJobsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_jobs_join_profile', 1, 'bx_jobs', '_bx_jobs_page_block_title_join_profile', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:11:"entity_join";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 0, 0);
+
+-- PAGE: profile info
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_profile_info', 'job-profile-info', '_bx_jobs_page_title_sys_profile_info', '_bx_jobs_page_title_profile_info', 'bx_jobs', 5, 2147483647, 1, 'page.php?i=job-profile-info', '', '', '', 0, 1, 0, 'BxJobsPageEntry', 'modules/boonex/jobs/classes/BxJobsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_jobs_profile_info', 1, 'bx_jobs', '_bx_jobs_page_block_title_system_profile_info', '_bx_jobs_page_block_title_profile_info_link', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:16:"entity_info_full";}', 0, 0, 1, 1),
+('bx_jobs_profile_info', 1, 'bx_jobs', '', '_bx_jobs_page_block_title_profile_description', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:17:"entity_text_block";}', 0, 0, 1, 2);
+
+-- PAGE: manage profile pricing
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_profile_pricing', 'job-pricing', '_bx_jobs_page_title_sys_profile_pricing', '_bx_jobs_page_title_profile_pricing', 'bx_jobs', 5, 2147483647, 1, 'page.php?i=job-pricing', '', '', '', 0, 1, 0, 'BxJobsPageEntry', 'modules/boonex/jobs/classes/BxJobsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_jobs_profile_pricing', 1, 'bx_jobs', '_bx_jobs_page_block_title_system_profile_pricing', '_bx_jobs_page_block_title_profile_pricing_link', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:14:"entity_pricing";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 0, 1, 1);
+
+-- PAGE: job fans
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_fans', 'job-fans', '_bx_jobs_page_title_sys_job_fans', '_bx_jobs_page_title_job_fans', 'bx_jobs', 5, 2147483647, 1, 'page.php?i=job-fans', '', '', '', 0, 1, 0, 'BxJobsPageEntry', 'modules/boonex/jobs/classes/BxJobsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_jobs_fans', 1, 'bx_jobs', '_bx_jobs_page_block_title_system_fans', '_bx_jobs_page_block_title_fans_link', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:14:"browse_members";s:6:"params";a:2:{i:0;s:12:"{profile_id}";i:1;a:2:{s:13:"empty_message";b:1;s:13:"ajax_paginate";b:0;}}}', 0, 0, 1, 1);
+
+-- PAGE: job manage
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_manage_item', 'job-manage', '_bx_jobs_page_title_sys_manage_profile', '_bx_jobs_page_title_manage_profile', 'bx_jobs', 5, 2147483647, 1, 'page.php?i=manage', '', '', '', 0, 1, 0, 'BxJobsPageEntry', 'modules/boonex/jobs/classes/BxJobsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_jobs_manage_item', 1, 'bx_jobs', '_bx_jobs_page_block_title_system_fans_manage', '_bx_jobs_page_block_title_fans_link', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:10:"fans_table";}', 0, 0, 1, 1),
+('bx_jobs_manage_item', 1, 'bx_jobs', '_bx_jobs_page_block_title_system_invites_manage', '_bx_jobs_page_block_title_invites', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:13:"invites_table";}', 0, 0, 1, 2),
+('bx_jobs_manage_item', 1, 'bx_jobs', '_bx_jobs_page_block_title_system_bans_manage', '_bx_jobs_page_block_title_bans', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:10:"bans_table";}', 0, 0, 1, 3);
+
+-- PAGE: view entry comments
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_profile_comments', '_bx_jobs_page_title_sys_profile_comments', '_bx_jobs_page_title_profile_comments', 'bx_jobs', 5, 2147483647, 1, 'job-profile-comments', '', '', '', '', 0, 1, 0, 'BxJobsPageEntry', 'modules/boonex/jobs/classes/BxJobsPageEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_jobs_profile_comments', 1, 'bx_jobs', '_bx_jobs_page_block_title_profile_comments', '_bx_jobs_page_block_title_profile_comments_link', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:15:"entity_comments";}', 0, 0, 0, 1);
+
+-- PAGE: module home
+
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_home', '_bx_jobs_page_title_sys_recent', '_bx_jobs_page_title_recent', 'bx_jobs', 5, 2147483647, 1, 'jobs-home', 'page.php?i=jobs-home', '', '', '', 0, 1, 0, 'BxJobsPageBrowse', 'modules/boonex/jobs/classes/BxJobsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
+('bx_jobs_home', 1, 'bx_jobs', '_bx_jobs_page_block_title_featured_profiles', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:15:"browse_featured";s:6:"params";a:1:{i:0;s:7:"gallery";}}', 0, 1, 0),
+('bx_jobs_home', 1, 'bx_jobs', '_bx_jobs_page_block_title_latest_profiles', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:22:"browse_recent_profiles";s:6:"params";a:1:{i:0;b:1;}}', 0, 1, 1);
+
+-- PAGE: top profiles
+
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_top', '_bx_jobs_page_title_sys_top', '_bx_jobs_page_title_top', 'bx_jobs', 5, 2147483647, 1, 'jobs-top', 'page.php?i=jobs-top', '', '', '', 0, 1, 0, 'BxJobsPageBrowse', 'modules/boonex/jobs/classes/BxJobsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_jobs_top', 1, 'bx_jobs', '_bx_jobs_page_block_title_top_profiles', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:19:"browse_top_profiles";s:6:"params";a:1:{i:0;b:1;}}', 0, 1, 0);
+
+-- PAGE: search for entries
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_search', '_bx_jobs_page_title_sys_entries_search', '_bx_jobs_page_title_entries_search', 'bx_jobs', 5, 2147483647, 1, 'jobs-search', 'page.php?i=jobs-search', '', '', '', 0, 1, 0, 'BxJobsPageBrowse', 'modules/boonex/jobs/classes/BxJobsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_jobs_search', 1, 'bx_jobs', '_bx_jobs_page_block_title_search_form', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:8:"get_form";s:6:"params";a:1:{i:0;a:1:{s:6:"object";s:7:"bx_jobs";}}s:5:"class";s:27:"TemplSearchExtendedServices";}', 0, 1, 1, 1),
+('bx_jobs_search', 1, 'bx_jobs', '_bx_jobs_page_block_title_search_results', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:11:"get_results";s:6:"params";a:1:{i:0;a:2:{s:6:"object";s:7:"bx_jobs";s:10:"show_empty";b:1;}}s:5:"class";s:27:"TemplSearchExtendedServices";}', 0, 1, 1, 2),
+('bx_jobs_search', 1, 'bx_jobs', '_bx_jobs_page_block_title_search_form_cmts', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:8:"get_form";s:6:"params";a:1:{i:0;a:1:{s:6:"object";s:12:"bx_jobs_cmts";}}s:5:"class";s:27:"TemplSearchExtendedServices";}', 0, 1, 0, 3),
+('bx_jobs_search', 1, 'bx_jobs', '_bx_jobs_page_block_title_search_results_cmts', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:11:"get_results";s:6:"params";a:1:{i:0;a:2:{s:6:"object";s:12:"bx_jobs_cmts";s:10:"show_empty";b:1;}}s:5:"class";s:27:"TemplSearchExtendedServices";}', 0, 1, 0, 4);
+
+-- PAGE: entries in context
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_context', 'jobs-context', '_bx_jobs_page_title_sys_entries_in_context', '_bx_jobs_page_title_entries_in_context', 'bx_jobs', 5, 2147483647, 1, '', '', '', '', 0, 1, 0, 'BxJobsPageEntriesInContext', 'modules/boonex/jobs/classes/BxJobsPageEntriesInContext.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
+('bx_jobs_context', 1, 'bx_jobs', '_bx_jobs_page_block_title_sys_entries_in_context', '_bx_jobs_page_block_title_entries_in_context_link', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:14:"browse_context";}', 0, 0, 1, 1);
+
+-- PAGE: joined profiles
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_joined_jobs', '_bx_jobs_page_title_sys_joined', '_bx_jobs_page_title_joined', 'bx_jobs', 5, 2147483647, 1, 'jobs-joined', 'page.php?i=jobs-joined', '', '', '', 0, 1, 0, 'BxJobsPageBrowse', 'modules/boonex/jobs/classes/BxJobsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_joined_jobs', 1, 'bx_jobs', '_bx_jobs_page_block_title_joined_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:21:"browse_joined_entries";s:6:"params";a:2:{i:0;s:12:"{profile_id}";i:1;b:1;}}', 0, 1, 0);
+
+-- PAGE: followed profiles
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_followed_jobs', '_bx_jobs_page_title_sys_followed', '_bx_jobs_page_title_followed', 'bx_jobs', 5, 2147483647, 1, 'jobs-followed', 'page.php?i=jobs-followed', '', '', '', 0, 1, 0, 'BxJobsPageBrowse', 'modules/boonex/jobs/classes/BxJobsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_followed_jobs', 1, 'bx_jobs', '_bx_jobs_page_block_title_followed_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:23:"browse_followed_entries";s:6:"params";a:2:{i:0;s:12:"{profile_id}";i:1;b:1;}}', 0, 1, 0);
+
+-- PAGE: module manage own
+
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_manage', '_bx_jobs_page_title_sys_manage', '_bx_jobs_page_title_manage', 'bx_jobs', 5, 2147483647, 1, 'jobs-manage', 'page.php?i=jobs-manage', '', '', '', 0, 1, 0, 'BxJobsPageBrowse', 'modules/boonex/jobs/classes/BxJobsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_jobs_manage', 1, 'bx_jobs', '_bx_jobs_page_block_title_system_manage', '_bx_jobs_page_block_title_manage', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:12:"manage_tools";}}', 0, 1, 0);
+
+-- PAGE: module manage all
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_administration', '_bx_jobs_page_title_sys_manage_administration', '_bx_jobs_page_title_manage', 'bx_jobs', 5, 192, 1, 'jobs-administration', 'page.php?i=jobs-administration', '', '', '', 0, 1, 0, 'BxJobsPageBrowse', 'modules/boonex/jobs/classes/BxJobsPageBrowse.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_jobs_administration', 1, 'bx_jobs', '_bx_jobs_page_block_title_system_manage_administration', '_bx_jobs_page_block_title_manage', 11, 192, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:12:"manage_tools";s:6:"params";a:1:{i:0;s:14:"administration";}}', 0, 1, 0);
+
+-- PAGE: user's jobs
+INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_joined', 'joined-jobs', '_bx_jobs_page_title_sys_joined_entries', '_bx_jobs_page_title_joined_entries', 'bx_jobs', 5, 2147483647, 1, '', '', '', '', 0, 1, 0, 'BxJobsPageJoinedEntries', 'modules/boonex/jobs/classes/BxJobsPageJoinedEntries.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES
+('bx_jobs_joined', 1, 'bx_jobs', '_bx_jobs_page_block_title_sys_entries_actions', '_bx_jobs_page_block_title_entries_actions', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:18:"my_entries_actions";}', 0, 0, 1, 1),
+('bx_jobs_joined', 1, 'bx_jobs', '_bx_jobs_page_block_title_sys_entries_of_author', '_bx_jobs_page_block_title_sys_entries_of_author', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:21:"browse_favorite_lists";s:6:"params";a:2:{s:10:"profile_id";s:12:"{profile_id}";s:6:"params";a:3:{s:9:"unit_view";s:8:"showcase";s:13:"empty_message";b:0;s:13:"ajax_paginate";b:0;}}}', 0, 1, 1, 2),
+('bx_jobs_joined', 1, 'bx_jobs', '_bx_jobs_page_block_title_sys_favorites_of_author', '_bx_jobs_page_block_title_favorites_of_author', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:15:"browse_favorite";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 1, 1, 3),
+('bx_jobs_joined', 1, 'bx_jobs', '_bx_jobs_page_block_title_sys_joined_entries', '_bx_jobs_page_block_title_joined_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:21:"browse_joined_entries";s:6:"params";a:2:{i:0;i:0;i:1;b:1;}}', 0, 0, 1, 4);
+
+
+-- PAGE: favorites by list
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_favorites', '_bx_jobs_page_title_sys_entries_favorites', '_bx_jobs_page_title_entries_favorites', 'bx_jobs', 12, 2147483647, 1, 'jobs-favorites', 'page.php?i=jobs-favorites', '', '', '', 0, 1, 0, 'BxJobsPageListEntry', 'modules/boonex/jobs/classes/BxJobsPageListEntry.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_jobs_favorites', 2, 'bx_jobs', '_bx_jobs_page_block_title_sys_favorites_entries', '_bx_jobs_page_block_title_favorites_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:15:"browse_favorite";s:6:"params";a:2:{s:10:"profile_id";s:12:"{profile_id}";s:6:"params";a:3:{s:9:"unit_view";s:7:"gallery";s:13:"empty_message";b:0;s:13:"ajax_paginate";b:0;}}}', 0, 1, 1),
+('bx_jobs_favorites', 3, 'bx_jobs', '', '_bx_jobs_page_block_title_favorites_entries_info', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:19:"favorites_list_info";}', 0, 0, 0),
+('bx_jobs_favorites', 3, 'bx_jobs', '', '_bx_jobs_page_block_title_favorites_entries_actions', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:22:"favorites_list_actions";}', 0, 0, 1);
+
+
+-- PAGE: add block to homepage
+SET @iBlockOrder = (SELECT `order` FROM `sys_pages_blocks` WHERE `object` = 'sys_home' AND `cell_id` = 1 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES
+('sys_home', 1, 'bx_jobs', '', '_bx_jobs_page_block_title_latest_profiles', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:22:"browse_recent_profiles";}', 1, 0, 0, IFNULL(@iBlockOrder, 0) + 1),
+('sys_home', 0, 'bx_jobs', '_bx_jobs_page_block_title_sys_recommended_entries_view_showcase', '_bx_jobs_page_block_title_recommended_entries_view_showcase', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:18:"browse_recommended";}', 1, 0, 0, IFNULL(@iBlockOrder, 0) + 2);
+
+
+-- PAGE: service blocks
+SET @iBlockOrder = (SELECT `order` FROM `sys_pages_blocks` WHERE `object` = '' AND `cell_id` = 0 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES
+('', 0, 'bx_jobs', '', '_bx_jobs_page_block_title_categories', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:15:"categories_list";s:6:"params";a:2:{i:0;s:12:"bx_jobs_cats";i:1;a:2:{s:10:"show_empty";b:1;s:21:"show_empty_categories";b:1;}}s:5:"class";s:20:"TemplServiceCategory";}', 1, 1, 1, IFNULL(@iBlockOrder, 0) + 1),
+('', 0, 'bx_jobs', '_bx_jobs_page_block_title_sys_featured_entries_view_showcase', '_bx_jobs_page_block_title_featured_entries_view_showcase', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:15:"browse_featured";s:6:"params";a:3:{s:9:"unit_view";s:8:"showcase";s:13:"empty_message";b:0;s:13:"ajax_paginate";b:0;}}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 2),
+('', 0, 'bx_jobs', '_bx_jobs_page_block_title_sys_recommended_entries_view_showcase', '_bx_jobs_page_block_title_recommended_entries_view_showcase', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:18:"browse_recommended";s:6:"params";a:3:{s:9:"unit_view";s:8:"showcase";s:13:"empty_message";b:0;s:13:"ajax_paginate";b:0;}}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 3),
+('', 0, 'bx_jobs', '_bx_jobs_page_block_title_sys_labels_tree', '_bx_jobs_page_block_title_labels_tree', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:15:"get_lables_tree";}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 4),
+('', 0, 'bx_jobs', '_bx_jobs_page_block_title_sys_jobs_browse_by_label', '_bx_jobs_page_block_title_jobs_browse_by_label', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:15:"browse_by_label";}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 5),
+('', 0, 'bx_jobs', '_bx_jobs_page_block_title_sys_labels_breadcrumbs', '_bx_jobs_page_block_title_labels_breadcrumbs', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:22:"get_lables_breadcrumbs";}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 6),
+('', 0, 'bx_jobs', '_bx_jobs_page_block_title_sys_cover_block', '_bx_jobs_page_block_title_cover_block', 3, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:12:"entity_cover";}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 7),
+('', 0, 'bx_jobs', '_bx_jobs_page_block_title_sys_recom_fans', '_bx_jobs_page_block_title_recom_fans', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:27:"browse_recommendations_fans";}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 8);
+
+ -- PAGES: add page block to profiles modules (trigger* page objects are processed separately upon modules enable/disable)
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`, `active`) VALUES
+('trigger_page_group_view_entry', 4, 'bx_jobs', '_bx_jobs_page_block_title_entries_in_context', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:14:"browse_context";s:6:"params";a:1:{s:10:"context_id";s:12:"{profile_id}";}}', 0, 0, 1, 0);
+
+
+-- MENU
+
+-- MENU: add to site menu
+
+SET @iSiteMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 'sys_site' AND `active` = 1 AND `order` < 9999 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_site', 'bx_jobs', 'jobs-home', '_bx_jobs_menu_item_title_system_entries_home', '_bx_jobs_menu_item_title_entries_home', 'page.php?i=jobs-home', '', '', 'business-time col-green2', 'bx_jobs_submenu', 2147483647, 1, 1, IFNULL(@iSiteMenuOrder, 0) + 1);
+
+-- MENU: add to homepage menu
+
+SET @iHomepageMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 'sys_homepage' AND `active` = 1 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_homepage', 'bx_jobs', 'jobs-home', '_bx_jobs_menu_item_title_system_entries_home', '_bx_jobs_menu_item_title_entries_home', 'page.php?i=jobs-home', '', '', 'business-time col-green2', 'bx_jobs_submenu', 2147483647, 1, 1, IFNULL(@iHomepageMenuOrder, 0) + 1);
+
+-- MENU: add to "add content" menu
+
+SET @iAddMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 'sys_add_content_links' AND `active` = 1 ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_add_content_links', 'bx_jobs', 'create-job-profile', '_bx_jobs_menu_item_title_system_create_profile', '_bx_jobs_menu_item_title_create_profile', 'page.php?i=create-job-profile', '', '', 'business-time col-green2', '', 2147483647, 1, 1, IFNULL(@iAddMenuOrder, 0) + 1);
+
+-- MENU: view actions
+
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_view_actions', '_bx_jobs_menu_title_view_profile_actions', 'bx_jobs_view_actions', 'bx_jobs', 9, 0, 1, 'BxJobsMenuViewActions', 'modules/boonex/jobs/classes/BxJobsMenuViewActions.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_jobs_view_actions', 'bx_jobs', '_bx_jobs_menu_set_title_view_profile_actions', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `submenu_popup`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `editable`, `order`) VALUES 
+('bx_jobs_view_actions', 'bx_jobs', 'join-job-profile', '_bx_jobs_menu_item_title_system_pay_and_join', '_bx_jobs_menu_item_title_pay_and_join', 'page.php?i=join-job-profile&profile_id={profile_id}', '', '', 'sign-in-alt', '', 0, 2147483647, 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:22:"is_paid_join_avaliable";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 1, 0, 0, 5),
+('bx_jobs_view_actions', 'bx_jobs', 'profile-fan-add', '_bx_jobs_menu_item_title_system_become_fan', '{title_add_fan}', 'javascript:void(0)', '{onclick_add_fan}', '', 'sign-in-alt', '', 0, 2147483647, 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:22:"is_free_join_avaliable";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 1, 0, 0, 10),
+('bx_jobs_view_actions', 'bx_jobs', 'profile-fan-remove', '_bx_jobs_menu_item_title_system_leave_job', '{title_remove_fan}', 'javascript:void(0)', 'bx_conn_action(this, \'bx_jobs_fans\', \'remove\', \'{profile_id}\')', '', 'sign-out-alt', '', 0, 2147483647, '', 1, 0, 1, 11),
+('bx_jobs_view_actions', 'bx_jobs', 'profile-subscribe-add', '_bx_jobs_menu_item_title_system_subscribe', '_bx_jobs_menu_item_title_subscribe', 'javascript:void(0)', 'bx_conn_action(this, \'sys_profiles_subscriptions\', \'add\', \'{profile_id}\')', '', 'check', '', 0, 2147483647, '', 1, 0, 1, 20),
+('bx_jobs_view_actions', 'bx_jobs', 'profile-subscribe-remove', '_bx_jobs_menu_item_title_system_unsubscribe', '_bx_jobs_menu_item_title_unsubscribe', 'javascript:void(0)', 'bx_conn_action(this, \'sys_profiles_subscriptions\', \'remove\', \'{profile_id}\')', '', 'check', '', 0, 2147483647, '', 1, 0, 1, 21),
+('bx_jobs_view_actions', 'bx_jobs', 'profile-set-badges', '_sys_menu_item_title_system_set_badges', '_sys_menu_item_title_set_badges', 'javascript:void(0)', 'bx_menu_popup(''sys_set_badges'', window, {}, {module: ''bx_jobs'', content_id: {content_id}});', '', 'check-circle', '', 0, 192, 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:19:"is_badges_avaliable";}', 1, 0, 1, 30),
+('bx_jobs_view_actions', 'bx_jobs', 'profile-actions-more', '_bx_jobs_menu_item_title_system_more_actions', '_bx_jobs_menu_item_title_more_actions', 'javascript:void(0)', 'bx_menu_popup(''bx_jobs_view_actions_more'', this, {}, {profile_id:{profile_id}});', '', 'cog', 'bx_jobs_view_actions_more', 1, 2147483647, '', 1, 0, 1, 9999);
+
+-- MENU: view actions more
+
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_view_actions_more', '_bx_jobs_menu_title_view_profile_actions_more', 'bx_jobs_view_actions_more', 'bx_jobs', 6, 0, 1, 'BxJobsMenuViewActions', 'modules/boonex/jobs/classes/BxJobsMenuViewActions.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_jobs_view_actions_more', 'bx_jobs', '_bx_jobs_menu_set_title_view_profile_actions_more', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `order`) VALUES 
+('bx_jobs_view_actions_more', 'bx_jobs', 'job-manage', '_bx_jobs_menu_item_title_system_view_manage', '_bx_jobs_menu_item_title_view_manage', 'page.php?i=job-manage&profile_id={profile_id}', '', '', 'business-time', '', 2147483647, '', 1, 0, 10),
+('bx_jobs_view_actions_more', 'bx_jobs', 'notes', '_sys_menu_item_title_system_va_notes', '_sys_menu_item_title_va_notes', 'javascript:void(0)', 'javascript:bx_get_notes(this,  ''{module_uri}'', {content_id});', '', 'exclamation-triangle', '', 192, '', 1, 0, 20),
+('bx_jobs_view_actions_more', 'bx_jobs', 'audit', '_sys_menu_item_title_system_va_audit', '_sys_menu_item_title_va_audit', 'page.php?i=dashboard-audit&module=bx_jobs&content_id={content_id}', '', '', 'history', '', 192, '', 1, 0, 30),
+('bx_jobs_view_actions_more', 'bx_jobs', 'edit-job-profile', '_bx_jobs_menu_item_title_system_edit_profile', '_bx_jobs_menu_item_title_edit_profile', 'page.php?i=edit-job-profile&id={content_id}', '', '', 'pencil-alt', '', 2147483647, '', 1, 0, 40),
+('bx_jobs_view_actions_more', 'bx_jobs', 'job-questionnaire', '_bx_jobs_menu_item_title_system_edit_questionnaire', '_bx_jobs_menu_item_title_edit_questionnaire', 'page.php?i=job-questionnaire&profile_id={profile_id}', '', '', 'check-double', '', 2147483647, '', 1, 0, 41),
+('bx_jobs_view_actions_more', 'bx_jobs', 'job-pricing', '_bx_jobs_menu_item_title_system_edit_pricing', '_bx_jobs_menu_item_title_edit_pricing', 'page.php?i=job-pricing&profile_id={profile_id}', '', '', 'money-check-alt', '', 2147483647, 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:20:"is_pricing_avaliable";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 1, 0, 41),
+('bx_jobs_view_actions_more', 'bx_jobs', 'invite-to-job', '_bx_jobs_menu_item_title_system_invite', '_bx_jobs_menu_item_title_invite', 'page.php?i=invite-to-job&id={content_id}', '', '', 'user-friends', '', 2147483647, '', 1, 0, 42),
+('bx_jobs_view_actions_more', 'bx_jobs', 'delete-job-profile', '_bx_jobs_menu_item_title_system_delete_profile', '_bx_jobs_menu_item_title_delete_profile', 'page.php?i=delete-job-profile&id={content_id}', '', '', 'remove', '', 2147483647, '', 1, 0, 50),
+('bx_jobs_view_actions_more', 'bx_jobs', 'approve-job-profile', '_sys_menu_item_title_system_va_approve', '_sys_menu_item_title_va_approve', 'javascript:void(0)', 'javascript:bx_approve(this, ''{module_uri}'', {content_id});', '', 'check', '', 2147483647, '', 1, 0, 60);
+
+-- MENU: all actions menu for view entry 
+
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `persistent`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_view_actions_all', '_sys_menu_title_view_actions', 'bx_jobs_view_actions_all', 'bx_jobs', 15, 1, 0, 1, 'BxJobsMenuViewActionsAll', 'modules/boonex/jobs/classes/BxJobsMenuViewActionsAll.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_jobs_view_actions_all', 'bx_jobs', '_sys_menu_set_title_view_actions', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `submenu_popup`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `order`) VALUES 
+('bx_jobs_view_actions_all', 'bx_jobs', 'join-job-profile', '_bx_jobs_menu_item_title_system_pay_and_join', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 5),
+('bx_jobs_view_actions_all', 'bx_jobs', 'profile-fan-add', '_bx_jobs_menu_item_title_system_become_fan', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 10),
+('bx_jobs_view_actions_all', 'bx_jobs', 'profile-fan-remove', '_bx_jobs_menu_item_title_system_leave_job', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 20),
+('bx_jobs_view_actions_all', 'bx_jobs', 'profile-subscribe-add', '_bx_jobs_menu_item_title_system_subscribe', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 30),
+('bx_jobs_view_actions_all', 'bx_jobs', 'profile-subscribe-remove', '_bx_jobs_menu_item_title_system_unsubscribe', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 40),
+('bx_jobs_view_actions_all', 'bx_jobs', 'profile-set-badges', '_sys_menu_item_title_system_set_badges', '', '', '', '', '', '', '', 0, 192, 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:19:"is_badges_avaliable";}', 1, 0, 50),
+('bx_jobs_view_actions_all', 'bx_jobs', 'comment', '_sys_menu_item_title_system_va_comment', '', '', '', '', '', '', '', 0, 2147483647, '', 0, 0, 200),
+('bx_jobs_view_actions_all', 'bx_jobs', 'view', '_sys_menu_item_title_system_va_view', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 210),
+('bx_jobs_view_actions_all', 'bx_jobs', 'vote', '_sys_menu_item_title_system_va_vote', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 220),
+('bx_jobs_view_actions_all', 'bx_jobs', 'score', '_sys_menu_item_title_system_va_score', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 230),
+('bx_jobs_view_actions_all', 'bx_jobs', 'favorite', '_sys_menu_item_title_system_va_favorite', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 240),
+('bx_jobs_view_actions_all', 'bx_jobs', 'feature', '_sys_menu_item_title_system_va_feature', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 250),
+('bx_jobs_view_actions_all', 'bx_jobs', 'repost', '_sys_menu_item_title_system_va_repost', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 260),
+('bx_jobs_view_actions_all', 'bx_jobs', 'report', '_sys_menu_item_title_system_va_report', '', '', '', '', '', '', '', 0, 2147483647, '', 1, 0, 270),
+('bx_jobs_view_actions_all', 'bx_jobs', 'social-sharing', '_sys_menu_item_title_system_social_sharing', '_sys_menu_item_title_social_sharing', 'javascript:void(0)', 'oBxDolPage.share(this, \'{url_encoded}\')', '', 'share', '', '', 0, 2147483647, '', 1, 0, 300),
+('bx_jobs_view_actions_all', 'bx_jobs', 'more-auto', '_sys_menu_item_title_system_va_more_auto', '_sys_menu_item_title_va_more_auto', 'javascript:void(0)', '', '', 'ellipsis-v', '', '', 0, 2147483647, '', 1, 0, 9999);
+
+-- MENU: meta (counters) menu for view entry
+
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_view_meta', '_bx_jobs_menu_title_view_profile_meta', 'bx_jobs_view_meta', 'bx_jobs', 15, 0, 1, 'BxJobsMenuViewMeta', 'modules/boonex/jobs/classes/BxJobsMenuViewMeta.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_jobs_view_meta', 'bx_jobs', '_bx_jobs_menu_set_title_view_profile_meta', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `submenu_popup`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `order`) VALUES 
+('bx_jobs_view_meta', 'bx_jobs', 'members', '_bx_jobs_menu_item_title_system_sm_members', '_bx_jobs_menu_item_title_sm_members', '', '', '', '', '', 0, 2147483647, '', 1, 0, 10),
+('bx_jobs_view_meta', 'bx_jobs', 'subscribers', '_sys_menu_item_title_system_sm_subscribers', '_sys_menu_item_title_sm_subscribers', '', '', '', '', '', 0, 2147483647, '', 1, 0, 20),
+('bx_jobs_view_meta', 'bx_jobs', 'views', '_sys_menu_item_title_system_sm_views', '_sys_menu_item_title_sm_views', '', '', '', '', '', 0, 2147483647, '', 1, 0, 30),
+('bx_jobs_view_meta', 'bx_jobs', 'votes', '_sys_menu_item_title_system_sm_votes', '_sys_menu_item_title_sm_votes', '', '', '', '', '', 0, 2147483647, '', 1, 0, 40),
+('bx_jobs_view_meta', 'bx_jobs', 'comments', '_sys_menu_item_title_system_sm_comments', '_sys_menu_item_title_sm_comments', '', '', '', '', '', 0, 2147483647, '', 1, 0, 50);
+
+-- MENU: actions menu for my entries
+
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_my', '_bx_jobs_menu_title_entries_my', 'bx_jobs_my', 'bx_jobs', 9, 0, 1, 'BxJobsMenu', 'modules/boonex/jobs/classes/BxJobsMenu.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_jobs_my', 'bx_jobs', '_bx_jobs_menu_set_title_entries_my', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('bx_jobs_my', 'bx_jobs', 'create-job-profile', '_bx_jobs_menu_item_title_system_create_profile', '_bx_jobs_menu_item_title_create_profile', 'page.php?i=create-job-profile', '', '', 'plus', '', 2147483647, 1, 0, 0);
+
+-- MENU: module sub-menu
+
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_submenu', '_bx_jobs_menu_title_submenu', 'bx_jobs_submenu', 'bx_jobs', 8, 0, 1, '', '');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_jobs_submenu', 'bx_jobs', '_bx_jobs_menu_set_title_submenu', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('bx_jobs_submenu', 'bx_jobs', 'jobs-home', '_bx_jobs_menu_item_title_system_entries_recent', '_bx_jobs_menu_item_title_entries_recent', 'page.php?i=jobs-home', '', '', '', '', 2147483647, 1, 1, 1),
+('bx_jobs_submenu', 'bx_jobs', 'jobs-top', '_bx_jobs_menu_item_title_system_entries_top', '_bx_jobs_menu_item_title_entries_top', 'page.php?i=jobs-top', '', '', '', '', 2147483647, 1, 1, 2),
+('bx_jobs_submenu', 'bx_jobs', 'jobs-search', '_bx_jobs_menu_item_title_system_entries_search', '_bx_jobs_menu_item_title_entries_search', 'page.php?i=jobs-search', '', '', '', '', 2147483647, 1, 1, 3),
+('bx_jobs_submenu', 'bx_jobs', 'jobs-joined', '_bx_jobs_menu_item_title_system_entries_joined', '_bx_jobs_menu_item_title_entries_joined', 'page.php?i=jobs-joined', '', '', '', '', 2147483647, 1, 1, 4),
+('bx_jobs_submenu', 'bx_jobs', 'jobs-followed', '_bx_jobs_menu_item_title_system_entries_followed', '_bx_jobs_menu_item_title_entries_followed', 'page.php?i=jobs-followed', '', '', '', '', 2147483647, 1, 1, 5),
+('bx_jobs_submenu', 'bx_jobs', 'jobs-manage', '_bx_jobs_menu_item_title_system_entries_manage', '_bx_jobs_menu_item_title_entries_manage', 'page.php?i=jobs-manage', '', '', '', '', 2147483646, 1, 1, 6);
+
+-- MENU: view submenu
+
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_view_submenu', '_bx_jobs_menu_title_view_profile_submenu', 'bx_jobs_view_submenu', 'bx_jobs', 18, 0, 1, 'BxJobsMenuView', 'modules/boonex/jobs/classes/BxJobsMenuView.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_jobs_view_submenu', 'bx_jobs', '_bx_jobs_menu_set_title_view_profile_submenu', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `submenu_popup`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('bx_jobs_view_submenu', 'bx_jobs', 'view-job-profile', '_bx_jobs_menu_item_title_system_view_profile_view', '_bx_jobs_menu_item_title_view_profile_view', 'page.php?i=view-job-profile&id={content_id}', '', '', 'business-time col-green2', '', '', 0, 2147483647, 1, 0, 1),
+('bx_jobs_view_submenu', 'bx_jobs', 'job-profile-info', '_bx_jobs_menu_item_title_system_view_profile_info', '_bx_jobs_menu_item_title_view_profile_info', 'page.php?i=job-profile-info&id={content_id}', '', '', 'info-circle col-gray', '', '', 0, 2147483647, 1, 0, 2),
+('bx_jobs_view_submenu', 'bx_jobs', 'job-profile-comments', '_bx_jobs_menu_item_title_system_view_profile_comments', '_bx_jobs_menu_item_title_view_profile_comments', 'page.php?i=job-profile-comments&id={content_id}', '', '', '', '', '', 0, 2147483647, 0, 0, 3),
+('bx_jobs_view_submenu', 'bx_jobs', 'job-fans', '_bx_jobs_menu_item_title_system_view_fans', '_bx_jobs_menu_item_title_view_fans', 'page.php?i=job-fans&profile_id={profile_id}', '', '', 'business-time col-green2', '', '', 0, 2147483647, 1, 0, 4),
+('bx_jobs_view_submenu', 'bx_jobs', 'more-auto', '_bx_jobs_menu_item_title_system_view_profile_more_auto', '_bx_jobs_menu_item_title_view_profile_more_auto', 'javascript:void(0)', '', '', 'ellipsis-v', '', '', 0, 2147483647, 1, 0, 9999);
+
+-- MENU: custom menu for snippet meta info
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_snippet_meta', '_sys_menu_title_snippet_meta', 'bx_jobs_snippet_meta', 'bx_jobs', 15, 0, 1, 'BxJobsMenuSnippetMeta', 'modules/boonex/jobs/classes/BxJobsMenuSnippetMeta.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_jobs_snippet_meta', 'bx_jobs', '_sys_menu_set_title_snippet_meta', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `visibility_custom`, `hidden_on_cxt`, `active`, `copyable`, `editable`, `order`) VALUES
+('bx_jobs_snippet_meta', 'bx_jobs', 'privacy', '_bx_jobs_menu_item_title_system_sm_privacy', '_bx_jobs_menu_item_title_sm_privacy', '', '', '', '', '', 2147483647, '', '', 1, 0, 1, 0),
+('bx_jobs_snippet_meta', 'bx_jobs', 'date', '_sys_menu_item_title_system_sm_date', '_sys_menu_item_title_sm_date', '', '', '', '', '', 2147483647, '', '', 0, 0, 1, 1),
+('bx_jobs_snippet_meta', 'bx_jobs', 'date-start', '_bx_jobs_menu_item_title_system_sm_date_start', '_bx_jobs_menu_item_title_sm_date_start', '', '', '', '', '', 2147483647, '', '', 0, 0, 1, 2),
+('bx_jobs_snippet_meta', 'bx_jobs', 'date-end', '_bx_jobs_menu_item_title_system_sm_date_end', '_bx_jobs_menu_item_title_sm_date_end', '', '', '', '', '', 2147483647, '', '', 0, 0, 1, 3),
+('bx_jobs_snippet_meta', 'bx_jobs', 'budget', '_bx_jobs_menu_item_title_system_sm_budget', '_bx_jobs_menu_item_title_sm_budget', '', '', '', '', '', 2147483647, '', '', 0, 0, 1, 4),
+('bx_jobs_snippet_meta', 'bx_jobs', 'category', '_sys_menu_item_title_system_sm_category', '_sys_menu_item_title_sm_category', '', '', '', '', '', 2147483647, '', '', 0, 0, 1, 5),
+('bx_jobs_snippet_meta', 'bx_jobs', 'tags', '_sys_menu_item_title_system_sm_tags', '_sys_menu_item_title_sm_tags', '', '', '', '', '', 2147483647, '', '', 0, 0, 1, 10),
+('bx_jobs_snippet_meta', 'bx_jobs', 'views', '_sys_menu_item_title_system_sm_views', '_sys_menu_item_title_sm_views', '', '', '', '', '', 2147483647, '', '', 0, 0, 1, 15),
+('bx_jobs_snippet_meta', 'bx_jobs', 'comments', '_sys_menu_item_title_system_sm_comments', '_sys_menu_item_title_sm_comments', '', '', '', '', '', 2147483647, '', '', 0, 0, 1, 20),
+('bx_jobs_snippet_meta', 'bx_jobs', 'members', '_sys_menu_item_title_system_sm_members', '_sys_menu_item_title_sm_members', '', '', '', '', '', 2147483647, '', '', 1, 0, 1, 25),
+('bx_jobs_snippet_meta', 'bx_jobs', 'subscribers', '_sys_menu_item_title_system_sm_subscribers', '_sys_menu_item_title_sm_subscribers', '', '', '', '', '', 2147483647, '', '', 0, 0, 1, 30),
+('bx_jobs_snippet_meta', 'bx_jobs', 'nl', '_sys_menu_item_title_system_sm_nl', '_sys_menu_item_title_sm_nl', '', '', '', '', '', 2147483647, '', '', 1, 0, 1, 35),
+('bx_jobs_snippet_meta', 'bx_jobs', 'join-paid', '_sys_menu_item_title_system_sm_join_paid', '_sys_menu_item_title_sm_join_paid', '', '', '', '', '', 2147483647, 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:33:"is_paid_join_avaliable_by_content";s:6:"params";a:1:{i:0;s:12:"{content_id}";}}', '', 1, 0, 1, 40),
+('bx_jobs_snippet_meta', 'bx_jobs', 'join', '_sys_menu_item_title_system_sm_join', '_sys_menu_item_title_sm_join', '', '', '', '', '', 2147483647, 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:33:"is_free_join_avaliable_by_content";s:6:"params";a:1:{i:0;s:12:"{content_id}";}}', '', 1, 0, 1, 45),
+('bx_jobs_snippet_meta', 'bx_jobs', 'leave', '_sys_menu_item_title_system_sm_leave', '_sys_menu_item_title_sm_leave', '', '', '', '', '', 2147483647, '', 'recom_jobs_fans', 0, 0, 1, 50),
+('bx_jobs_snippet_meta', 'bx_jobs', 'subscribe', '_sys_menu_item_title_system_sm_subscribe', '_sys_menu_item_title_sm_subscribe', '', '', '', '', '', 2147483647, '', 'recom_jobs_fans', 0, 0, 1, 55),
+('bx_jobs_snippet_meta', 'bx_jobs', 'unsubscribe', '_sys_menu_item_title_system_sm_unsubscribe', '_sys_menu_item_title_sm_unsubscribe', '', '', '', '', '', 2147483647, '', 'recom_jobs_fans', 0, 0, 1, 60),
+('bx_jobs_snippet_meta', 'bx_jobs', 'ignore-join', '_sys_menu_item_title_system_sm_ignore', '_sys_menu_item_title_sm_ignore', '', '', '', '', '', 2147483647, '', 'all!recom_jobs_fans', 1, 0, 1, 70);
+
+-- MENU: profile stats
+SET @iNotifMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name` = 'sys_profile_stats' AND `active` = 1 LIMIT 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES
+('sys_profile_stats', 'bx_jobs', 'profile-stats-my-jobs', '_bx_jobs_menu_item_title_system_manage_my_jobs', '_bx_jobs_menu_item_title_manage_my_jobs', 'page.php?i=joined-jobs&profile_id={member_id}', '', '_self', 'business-time col-green2', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:41:"get_menu_addon_manage_tools_profile_stats";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 2);
+
+-- MENU: profile followings
+SET @iFollowingsMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name`='sys_profile_followings' LIMIT 1);
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `collapsed`, `active`, `copyable`, `order`) VALUES 
+('sys_profile_followings', 'bx_jobs', 'jobs', '_bx_jobs_menu_item_title_system_followings', '_bx_jobs_menu_item_title_followings', 'javascript:void(0)', '', '_self', 'business-time col-green2', '', '', 2147483647, 0, 1, 0, @iFollowingsMenuOrder + 1);
+
+-- MENU: manage tools submenu
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_menu_manage_tools', '_bx_jobs_menu_title_manage_tools', 'bx_jobs_menu_manage_tools', 'bx_jobs', 6, 0, 1, 'BxJobsMenuManageTools', 'modules/boonex/jobs/classes/BxJobsMenuManageTools.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_jobs_menu_manage_tools', 'bx_jobs', '_bx_jobs_menu_set_title_manage_tools', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('bx_jobs_menu_manage_tools', 'bx_jobs', 'clear-reports', '_bx_jobs_menu_item_title_system_clear_reports', '_bx_jobs_menu_item_title_clear_reports', 'javascript:void(0)', 'javascript:{js_object}.onClickClearReports({content_id});', '_self', 'eraser', '', 2147483647, 1, 0, 1),
+('bx_jobs_menu_manage_tools', 'bx_jobs', 'delete', '_bx_jobs_menu_item_title_system_delete', '_bx_jobs_menu_item_title_delete', 'javascript:void(0)', 'javascript:{js_object}.onClickDelete({content_id});', '_self', 'far trash-alt', '', 2147483647, 1, 0, 2),
+('bx_jobs_menu_manage_tools', 'bx_jobs', 'delete-with-content', '_bx_jobs_menu_item_title_system_delete_with_content', '_bx_jobs_menu_item_title_delete_with_content', 'javascript:void(0)', 'javascript:{js_object}.onClickDeleteWithContent({content_id});', '_self', 'far trash-alt', '', 2147483647, 0, 0, 3);
+
+-- MENU: dashboard manage tools
+SET @iManageMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name`='sys_account_dashboard_manage_tools' LIMIT 1);
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_account_dashboard_manage_tools', 'bx_jobs', 'jobs-administration', '_bx_jobs_menu_item_title_system_admt_jobs', '_bx_jobs_menu_item_title_admt_jobs', 'page.php?i=jobs-administration', '', '_self', 'business-time', 'a:2:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:27:"get_menu_addon_manage_tools";}', '', 192, 1, 0, @iManageMenuOrder + 1);
+
+-- MENU: add menu item to profiles modules (trigger* menu sets are processed separately upon modules enable/disable)
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `order`) VALUES 
+('trigger_profile_view_submenu', 'bx_jobs', 'joined-jobs', '_bx_jobs_menu_item_title_system_view_joined_jobs', '_bx_jobs_menu_item_title_view_joined_jobs', 'page.php?i=joined-jobs&profile_id={profile_id}', '', '', 'business-time col-green2', '', 2147483647, '', 1, 0, 0),
+('trigger_group_view_submenu', 'bx_jobs', 'jobs-context', '_bx_jobs_menu_item_title_system_view_entries_in_context', '_bx_jobs_menu_item_title_view_entries_in_context', 'page.php?i=jobs-context&profile_id={profile_id}', '', '', 'business-time col-green2', '', 2147483647, 'a:3:{s:6:"module";s:7:"bx_jobs";s:6:"method";s:21:"is_enable_for_context";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 1, 0, 0);
+
+-- ACL
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+('bx_jobs', 'create entry', NULL, '_bx_jobs_acl_action_create_profile', '', 1, 1);
+SET @iIdActionProfileCreate = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+('bx_jobs', 'use paid join', NULL, '_bx_jobs_acl_action_use_paid_join', '', 1, 1);
+SET @iIdActionUsePaidJoin = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+('bx_jobs', 'delete entry', NULL, '_bx_jobs_acl_action_delete_profile', '', 1, 1);
+SET @iIdActionProfileDelete = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+('bx_jobs', 'view entry', NULL, '_bx_jobs_acl_action_view_profile', '', 1, 0);
+SET @iIdActionProfileView = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+('bx_jobs', 'edit any entry', NULL, '_bx_jobs_acl_action_edit_any_profile', '', 1, 3);
+SET @iIdActionProfileEditAny = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+('bx_jobs', 'delete any entry', NULL, '_bx_jobs_acl_action_delete_any_profile', '', 1, 3);
+SET @iIdActionProfileDeleteAny = LAST_INSERT_ID();
+
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+('bx_jobs', 'delete invites', NULL, '_bx_jobs_acl_action_delete_invites', '', 1, 3);
+SET @iIdActionProfileDeleteInvites = LAST_INSERT_ID();
+
+SET @iUnauthenticated = 1;
+SET @iAccount = 2;
+SET @iStandard = 3;
+SET @iUnconfirmed = 4;
+SET @iPending = 5;
+SET @iSuspended = 6;
+SET @iModerator = 7;
+SET @iAdministrator = 8;
+SET @iPremium = 9;
+
+INSERT INTO `sys_acl_matrix` (`IDLevel`, `IDAction`) VALUES
+
+-- profile create
+(@iAccount, @iIdActionProfileCreate),
+(@iStandard, @iIdActionProfileCreate),
+(@iUnconfirmed, @iIdActionProfileCreate),
+(@iPending, @iIdActionProfileCreate),
+(@iModerator, @iIdActionProfileCreate),
+(@iAdministrator, @iIdActionProfileCreate),
+(@iPremium, @iIdActionProfileCreate),
+
+-- use paid join
+(@iStandard, @iIdActionUsePaidJoin),
+(@iModerator, @iIdActionUsePaidJoin),
+(@iAdministrator, @iIdActionUsePaidJoin),
+(@iPremium, @iIdActionUsePaidJoin),
+
+-- profile delete
+(@iAccount, @iIdActionProfileDelete),
+(@iStandard, @iIdActionProfileDelete),
+(@iUnconfirmed, @iIdActionProfileDelete),
+(@iPending, @iIdActionProfileDelete),
+(@iModerator, @iIdActionProfileDelete),
+(@iAdministrator, @iIdActionProfileDelete),
+(@iPremium, @iIdActionProfileDelete),
+
+-- profile view
+(@iUnauthenticated, @iIdActionProfileView),
+(@iAccount, @iIdActionProfileView),
+(@iStandard, @iIdActionProfileView),
+(@iUnconfirmed, @iIdActionProfileView),
+(@iPending, @iIdActionProfileView),
+(@iModerator, @iIdActionProfileView),
+(@iAdministrator, @iIdActionProfileView),
+(@iPremium, @iIdActionProfileView),
+
+-- any profile edit
+(@iModerator, @iIdActionProfileEditAny),
+(@iAdministrator, @iIdActionProfileEditAny),
+
+-- any profile delete
+(@iAdministrator, @iIdActionProfileDeleteAny),
+
+-- any invites edit
+(@iModerator, @iIdActionProfileDeleteInvites),
+(@iAdministrator, @iIdActionProfileDeleteInvites);
+
+
+-- METATAGS
+INSERT INTO `sys_objects_metatags` (`object`, `module`, `table_keywords`, `table_locations`, `table_mentions`, `override_class_name`, `override_class_file`) VALUES
+('bx_jobs', 'bx_jobs', 'bx_jobs_meta_keywords', 'bx_jobs_meta_locations', 'bx_jobs_meta_mentions', '', '');
+
+-- CATEGORY
+INSERT INTO `sys_objects_category` (`object`, `module`, `search_object`, `form_object`, `list_name`, `table`, `field`, `join`, `where`, `override_class_name`, `override_class_file`) VALUES
+('bx_jobs_cats', 'bx_jobs', 'bx_jobs', 'bx_job', 'bx_jobs_cats', 'bx_jobs_data', 'cat', 'INNER JOIN `sys_profiles` ON (`sys_profiles`.`content_id` = `bx_jobs_data`.`id` AND `sys_profiles`.`type` = ''bx_jobs'')', 'AND `sys_profiles`.`status` = ''active''', '', '');
+
+-- SEARCH
+SET @iSearchOrder = (SELECT IFNULL(MAX(`Order`), 0) FROM `sys_objects_search`);
+INSERT INTO `sys_objects_search` (`ObjectName`, `Title`, `Order`, `ClassName`, `ClassPath`) VALUES
+('bx_jobs', '_bx_jobs', @iSearchOrder + 1, 'BxJobsSearchResult', 'modules/boonex/jobs/classes/BxJobsSearchResult.php');
+
+-- CONNECTIONS
+INSERT INTO `sys_objects_connection` (`object`, `table`, `profile_initiator`, `profile_content`, `type`, `override_class_name`, `override_class_file`) VALUES
+('bx_jobs_fans', 'bx_jobs_fans', 1, 1, 'mutual', 'BxJobsConnectionFans', 'modules/boonex/jobs/classes/BxJobsConnectionFans.php');
+
+-- RECOMMENDATIONS
+INSERT INTO `sys_objects_recommendation` (`name`, `module`, `connection`, `content_info`, `countable`, `active`, `class_name`, `class_file`) VALUES
+('bx_jobs_fans', 'system', 'bx_jobs_fans', '', 1, 0, 'BxJobsRecommendationFans', 'modules/boonex/jobs/classes/BxJobsRecommendationFans.php');
+SET @iRecFans = LAST_INSERT_ID();
+
+INSERT INTO `sys_recommendation_criteria` (`object_id`, `name`, `source_type`, `source`, `params`, `weight`, `active`) VALUES
+(@iRecFans, 'by_friends', 'sql', 'SELECT `tgf`.`content` AS `id`, SUM({points}) AS `value` FROM `sys_profiles_conn_friends` AS `tf` INNER JOIN `bx_jobs_fans` AS `tgf` ON `tf`.`content`=`tgf`.`initiator` AND `tgf`.`content` NOT IN (SELECT `content` FROM `bx_jobs_fans` WHERE `initiator`={profile_id}) AND `tgf`.`mutual`=''1'' WHERE `tf`.`initiator`={profile_id} AND `tf`.`mutual`=''1'' GROUP BY `id`', 'a:1:{s:6:"points";i:2;}', 0.5, 1),
+(@iRecFans, 'by_subscriptions', 'sql', 'SELECT `tgf`.`content` AS `id`, SUM({points}) AS `value` FROM `sys_profiles_conn_subscriptions` AS `ts` INNER JOIN `sys_profiles` AS `tp` ON `ts`.`content`=`tp`.`id` AND `tp`.`type` IN ({profile_types}) AND `tp`.`status`=''active'' INNER JOIN `bx_jobs_fans` AS `tgf` ON `ts`.`content`=`tgf`.`initiator` AND `tgf`.`content` NOT IN (SELECT `content` FROM `bx_jobs_fans` WHERE `initiator`={profile_id}) AND `tgf`.`mutual`=''1'' WHERE `ts`.`initiator`={profile_id} GROUP BY `id`', 'a:2:{s:6:"points";i:2;s:13:"profile_types";s:0:"";}', 0.2, 1),
+(@iRecFans, 'by_fans', 'sql', 'SELECT `tg2`.`content` AS `id`, SUM({points}) AS `value` FROM `bx_jobs_fans` AS `tg1` INNER JOIN `bx_jobs_fans` AS `tm` ON `tg1`.`content`=`tm`.`content` AND `tm`.`initiator`<>{profile_id} AND `tm`.`mutual`=''1'' INNER JOIN `bx_jobs_fans` AS `tg2` ON `tm`.`initiator`=`tg2`.`initiator` AND `tg2`.`mutual`=''1'' AND `tg2`.`content` NOT IN (SELECT `content` FROM `bx_jobs_fans` WHERE `initiator`={profile_id})  WHERE `tg1`.`initiator`={profile_id} AND `tg1`.`mutual`=''1'' GROUP BY `id`', 'a:1:{s:6:"points";i:1;}', 0.2, 1),
+(@iRecFans, 'featured', 'sql', 'SELECT `tp`.`id` AS `id`, {points} AS `value` FROM `bx_jobs_data` AS `tg` INNER JOIN `sys_profiles` AS `tp` ON `tg`.`id`=`tp`.`content_id` AND `tp`.`type`=''bx_jobs'' WHERE `tg`.`featured`<>''0'' AND `tg`.`status`=''active'' AND `tg`.`status_admin`=''active'' AND `tp`.`id` NOT IN (SELECT `content` FROM `bx_jobs_fans` WHERE `initiator`={profile_id})', 'a:1:{s:6:"points";i:0;}', 0.1, 1);
+
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_jobs', 'bx_jobs', '_bx_jobs', 'page.php?i=jobs-home', 'business-time col-green2', 'SELECT COUNT(*) FROM `bx_jobs_data` AS `td` LEFT JOIN `sys_profiles` AS `tp` ON `td`.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_jobs'' WHERE 1 AND `tp`.`status`=''active''', @iMaxOrderStats + 1);
+
+-- CHARTS
+SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_jobs_growth', '_bx_jobs_chart_growth', 'bx_jobs_data', 'added', '', '', 'SELECT {field_date_formatted} AS `period`, COUNT(*) AS {object} FROM {table} LEFT JOIN `sys_profiles` AS `tp` ON {table}.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_jobs'' WHERE 1 AND `tp`.`status`=''active'' {where_inteval} GROUP BY `period` ORDER BY {table}.{field_date} ASC', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_jobs_growth_speed', '_bx_jobs_chart_growth_speed', 'bx_jobs_data', 'added', '', '', 'SELECT {field_date_formatted} AS `period`, COUNT(*) AS {object} FROM {table} LEFT JOIN `sys_profiles` AS `tp` ON {table}.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_jobs'' WHERE 1 AND `tp`.`status`=''active'' {where_inteval} GROUP BY `period` ORDER BY {table}.{field_date} ASC', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
+
+-- GRID: connections
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `responsive`, `override_class_name`, `override_class_file`) VALUES
+('bx_jobs_fans', 'Sql', 'SELECT `p`.`id`, `c`.`added`, `c`.`mutual` FROM `sys_profiles` AS `p` INNER JOIN `sys_accounts` AS `a` ON (`a`.`id` = `p`.`account_id`) {join_connections}', 'sys_profiles', 'id', 'c`.`added', '', '', 10, NULL, 'start', '', 'name,email', '', 'auto', '', '', 2147483647, 1, 'BxJobsGridConnections', 'modules/boonex/jobs/classes/BxJobsGridConnections.php');
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `params`, `order`) VALUES
+('bx_jobs_fans', 'name', '_sys_name', '40%', '', 10),
+('bx_jobs_fans', 'role', '_bx_jobs_txt_role', '10%', '', 15),
+('bx_jobs_fans', 'role_added', '_bx_jobs_txt_role_added', '10%', '', 16),
+('bx_jobs_fans', 'role_expired', '_bx_jobs_txt_role_expired', '10%', '', 17),
+('bx_jobs_fans', 'actions', '', '30%', '', 20);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
+('bx_jobs_fans', 'single', 'questionnaire', '_bx_jobs_txt_view_answers', 'check-double', 1, 0, 5),
+('bx_jobs_fans', 'single', 'accept', '_bx_jobs_txt_accept', '', 0, 0, 10),
+('bx_jobs_fans', 'single', 'set_role', '_bx_jobs_txt_set_role', '', 0, 0, 20),
+('bx_jobs_fans', 'single', 'set_role_submit', '', '', 0, 0, 21),
+('bx_jobs_fans', 'single', 'delete', '_bx_jobs_txt_delete', 'remove', 1, 1, 40),
+('bx_jobs_fans', 'single', 'delete_and_ban', '_bx_jobs_txt_delete_and_ban', 'user-slash', 1, 1, 41);
+
+-- GRID: bans
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `responsive`, `override_class_name`, `override_class_file`) VALUES
+('bx_jobs_bans', 'Sql', 'SELECT `p`.`id`, `c`.`added` FROM `sys_profiles` AS `p` INNER JOIN `sys_accounts` AS `a` ON (`a`.`id` = `p`.`account_id`) {join_connections}', 'sys_profiles', 'id', 'c`.`added', '', '', 10, NULL, 'start', '', 'name,email', '', 'auto', '', '', 2147483647, 1, 'BxJobsGridBans', 'modules/boonex/jobs/classes/BxJobsGridBans.php');
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `params`, `order`) VALUES
+('bx_jobs_bans', 'name', '_sys_name', '70%', '', 10),
+('bx_jobs_bans', 'added', '_bx_jobs_txt_ban_added', '10%', '', 20),
+('bx_jobs_bans', 'actions', '', '20%', '', 30);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
+('bx_jobs_bans', 'single', 'delete', '', 'remove', 1, 1, 10);
+
+
+-- GRID: invites
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `responsive`, `override_class_name`, `override_class_file`) VALUES
+('bx_jobs_invites', 'Sql', 'SELECT `bx_jobs_invites`.`id`, `bx_jobs_invites`.`invited_profile_id`, `bx_jobs_invites`.`added`, `bx_jobs_invites`.`author_profile_id` FROM `bx_jobs_invites` INNER JOIN `sys_profiles` AS `p` ON `bx_jobs_invites`.`invited_profile_id` = `p`.`id` INNER JOIN `sys_accounts` AS `a` ON (`a`.`id` = `p`.`account_id`) ', 'bx_jobs_invites', 'id', 'bx_jobs_invites`.`added', '', '', 10, NULL, 'start', '', 'name,email', '', 'auto', '', '', 2147483647, 0, 'BxJobsGridInvites', 'modules/boonex/jobs/classes/BxJobsGridInvites.php');
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `params`, `order`) VALUES
+('bx_jobs_invites', 'name', '_sys_name', '33%', '', 10),
+('bx_jobs_invites', 'added', '_sys_added', '33%', '', 20),
+('bx_jobs_invites', 'actions', '', '34%', '', 30);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `confirm`, `order`) VALUES
+('bx_jobs_invites', 'single', 'delete', '', 'remove', 1, 10);
+
+
+-- GRIDS: administration
+
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
+('bx_jobs_administration', 'Sql', 'SELECT `td`.*, `td`.`name` AS `name`, `ta`.`email` AS `account`, `td`.`added` AS `added_ts`, `tp`.`status` AS `status_profile` FROM `bx_jobs_data` AS `td` LEFT JOIN `sys_profiles` AS `tp` ON `td`.`id`=`tp`.`content_id` AND `tp`.`type`=''bx_jobs'' LEFT JOIN `sys_accounts` AS `ta` ON `tp`.`account_id`=`ta`.`id` WHERE 1 ', 'bx_jobs_data', 'id', 'added', 'status_admin', '', 20, NULL, 'start', '', 'name', '', 'like', 'reports', '', 192, 'BxJobsGridAdministration', 'modules/boonex/jobs/classes/BxJobsGridAdministration.php'),
+('bx_jobs_common', 'Sql', 'SELECT `td`.*, `td`.`name` AS `name`, `ta`.`email` AS `account`, `td`.`added` AS `added_ts`, `tp`.`status` AS `status_profile` FROM `bx_jobs_data` AS `td` LEFT JOIN `sys_profiles` AS `tp` ON `td`.`id`=`tp`.`content_id` AND `tp`.`type`=''bx_jobs'' LEFT JOIN `sys_accounts` AS `ta` ON `tp`.`account_id`=`ta`.`id` WHERE 1 ', 'bx_jobs_data', 'id', 'added', 'status', '', 20, NULL, 'start', '', 'name', '', 'like', '', '', 2147483647, 'BxJobsGridCommon', 'modules/boonex/jobs/classes/BxJobsGridCommon.php');
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `order`) VALUES
+('bx_jobs_administration', 'checkbox', '_sys_select', '2%', 0, '', '', 1),
+('bx_jobs_administration', 'switcher', '_bx_jobs_grid_column_title_adm_active', '8%', 0, '', '', 2),
+('bx_jobs_administration', 'reports', '_sys_txt_reports_title', '5%', 0, '', '', 3),
+('bx_jobs_administration', 'name', '_bx_jobs_grid_column_title_adm_name', '25%', 0, '', '', 4),
+('bx_jobs_administration', 'added_ts', '_bx_jobs_grid_column_title_adm_added', '20%', 1, '25', '', 5),
+('bx_jobs_administration', 'account', '_bx_jobs_grid_column_title_adm_account', '20%', 0, '25', '', 6),
+('bx_jobs_administration', 'actions', '', '20%', 0, '', '', 7),
+
+('bx_jobs_common', 'checkbox', '_sys_select', '2%', 0, '', '', 1),
+('bx_jobs_common', 'switcher', '_bx_jobs_grid_column_title_adm_active', '8%', 0, '', '', 2),
+('bx_jobs_common', 'name', '_bx_jobs_grid_column_title_adm_name', '40%', 0, '', '', 3),
+('bx_jobs_common', 'added_ts', '_bx_jobs_grid_column_title_adm_added', '30%', 1, '25', '', 4),
+('bx_jobs_common', 'actions', '', '20%', 0, '', '', 5);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `active`, `order`) VALUES
+('bx_jobs_administration', 'bulk', 'clear_reports', '_bx_jobs_grid_action_title_adm_clear_reports', '', 0, 1, 1, 1),
+('bx_jobs_administration', 'bulk', 'delete', '_bx_jobs_grid_action_title_adm_delete', '', 0, 1, 1, 2),
+('bx_jobs_administration', 'bulk', 'delete_with_content', '_bx_jobs_grid_action_title_adm_delete_with_content', '', 0, 1, 0, 3),
+('bx_jobs_administration', 'single', 'settings', '_bx_jobs_grid_action_title_adm_more_actions', 'cog', 1, 0, 1, 2),
+('bx_jobs_administration', 'single', 'audit_content', '_bx_jobs_grid_action_title_adm_audit_content', 'search', 1, 0, 1, 3),
+('bx_jobs_administration', 'single', 'audit_context', '_bx_jobs_grid_action_title_adm_audit_context', 'search-location', 1, 0, 1, 4),
+
+('bx_jobs_common', 'bulk', 'delete', '_bx_jobs_grid_action_title_adm_delete', '', 0, 1, 1, 1),
+('bx_jobs_common', 'bulk', 'delete_with_content', '_bx_jobs_grid_action_title_adm_delete_with_content', '', 0, 1, 0, 2),
+('bx_jobs_common', 'single', 'settings', '_bx_jobs_grid_action_title_adm_more_actions', 'cog', 1, 0, 1, 1);
+
+-- GRIDS: questionnaire
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
+('bx_jobs_questions_manage', 'Sql', 'SELECT * FROM `bx_jobs_qnr_questions` WHERE 1 ', 'bx_jobs_qnr_questions', 'id', 'order', '', '', 100, NULL, 'start', '', 'question', '', 'like', '', '', 2147483647, 'BxJobsGridQuestionsManage', 'modules/boonex/jobs/classes/BxJobsGridQuestionsManage.php');
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `order`) VALUES
+('bx_jobs_questions_manage', 'checkbox', '_sys_select', '1%', 0, '', '', 1),
+('bx_jobs_questions_manage', 'order', '', '1%', 0, '', '', 2),
+('bx_jobs_questions_manage', 'question', '_bx_jobs_grid_column_title_qn_question', '78%', 0, 64, '', 3),
+('bx_jobs_questions_manage', 'actions', '', '20%', 0, '', '', 4);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
+('bx_jobs_questions_manage', 'independent', 'add', '_bx_jobs_grid_action_title_qn_add', '', 0, 0, 1),
+('bx_jobs_questions_manage', 'single', 'edit', '_bx_jobs_grid_action_title_qn_edit', 'pencil-alt', 1, 0, 1),
+('bx_jobs_questions_manage', 'single', 'delete', '_bx_jobs_grid_action_title_qn_delete', 'remove', 1, 1, 2),
+('bx_jobs_questions_manage', 'bulk', 'delete', '_bx_jobs_grid_action_title_qn_delete', '', 0, 1, 1);
+
+-- GRIDS: Pricing
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
+('bx_jobs_prices_manage', 'Sql', 'SELECT * FROM `bx_jobs_prices` WHERE 1 ', 'bx_jobs_prices', 'id', 'order', '', '', 100, NULL, 'start', '', 'period,period_unit,price', '', 'like', '', '', 2147483647, 'BxJobsGridPricesManage', 'modules/boonex/jobs/classes/BxJobsGridPricesManage.php'),
+('bx_jobs_prices_view', 'Sql', 'SELECT * FROM `bx_jobs_prices` WHERE 1 ', 'bx_jobs_prices', 'id', 'order', '', '', 100, NULL, 'start', '', 'period,period_unit,price', '', 'like', '', '', 2147483647, 'BxJobsGridPricesView', 'modules/boonex/jobs/classes/BxJobsGridPricesView.php');
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `order`) VALUES
+('bx_jobs_prices_manage', 'checkbox', '_sys_select', '1%', 0, '', '', 1),
+('bx_jobs_prices_manage', 'order', '', '1%', 0, '', '', 2),
+('bx_jobs_prices_manage', 'name', '_bx_jobs_grid_column_title_name', '38%', 0, 32, '', 3),
+('bx_jobs_prices_manage', 'price', '_bx_jobs_grid_column_title_price', '20%', 0, 16, '', 4),
+('bx_jobs_prices_manage', 'period', '_bx_jobs_grid_column_title_period', '20%', 0, 16, '', 5),
+('bx_jobs_prices_manage', 'actions', '', '20%', 0, '', '', 6),
+
+('bx_jobs_prices_view', 'role_id', '_bx_jobs_grid_column_title_role_id', '40%', 0, 32, '', 1),
+('bx_jobs_prices_view', 'price', '_bx_jobs_grid_column_title_price', '20%', 0, 16, '', 2),
+('bx_jobs_prices_view', 'period', '_bx_jobs_grid_column_title_period', '20%', 0, 16, '', 3),
+('bx_jobs_prices_view', 'actions', '', '20%', 0, '', '', 4);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
+('bx_jobs_prices_manage', 'independent', 'add', '_bx_jobs_grid_action_title_add', '', 0, 0, 1),
+('bx_jobs_prices_manage', 'single', 'edit', '_bx_jobs_grid_action_title_edit', 'pencil-alt', 1, 0, 1),
+('bx_jobs_prices_manage', 'single', 'delete', '_bx_jobs_grid_action_title_delete', 'remove', 1, 1, 2),
+('bx_jobs_prices_manage', 'bulk', 'delete', '_bx_jobs_grid_action_title_delete', '', 0, 1, 1),
+
+('bx_jobs_prices_view', 'single', 'buy', '_bx_jobs_grid_action_title_buy', 'cart-plus', 0, 0, 1),
+('bx_jobs_prices_view', 'single', 'subscribe', '_bx_jobs_grid_action_title_subscribe', 'credit-card', 0, 0, 2),
+('bx_jobs_prices_view', 'single', 'choose', '_bx_jobs_grid_action_title_choose', 'far check-square', 0, 0, 3);
+
+
+-- ALERTS
+
+INSERT INTO `sys_alerts_handlers` (`name`, `class`, `file`, `service_call`) VALUES 
+('bx_jobs', 'BxJobsAlertsResponse', 'modules/boonex/jobs/classes/BxJobsAlertsResponse.php', '');
+SET @iHandler := LAST_INSERT_ID();
+
+INSERT INTO `sys_alerts` (`unit`, `action`, `handler_id`) VALUES
+('system', 'save_setting', @iHandler),
+('bx_timeline', 'post_common', @iHandler),
+('bx_jobs_pics', 'file_deleted', @iHandler),
+('bx_jobs_fans', 'connection_added', @iHandler),
+('bx_jobs_fans', 'connection_removed', @iHandler),
+('profile', 'delete', @iHandler),
+('bx_jobs', 'fan_added', @iHandler),
+('bx_jobs', 'join_invitation', @iHandler),
+('bx_jobs', 'join_request', @iHandler),
+('bx_jobs', 'join_request_accepted', @iHandler),
+('bx_jobs', 'timeline_view', @iHandler),
+('bx_jobs', 'timeline_post', @iHandler),
+('bx_jobs', 'timeline_delete', @iHandler),
+('bx_jobs', 'timeline_comment', @iHandler),
+('bx_jobs', 'timeline_vote', @iHandler),
+('bx_jobs', 'timeline_score', @iHandler),
+('bx_jobs', 'timeline_report', @iHandler),
+('bx_jobs', 'timeline_repost', @iHandler),
+('bx_jobs', 'timeline_pin', @iHandler),
+('bx_jobs', 'timeline_promote', @iHandler);
+
+-- PRIVACY 
+
+INSERT INTO `sys_objects_privacy` (`object`, `module`, `action`, `title`, `default_group`, `spaces`, `table`, `table_field_id`, `table_field_author`, `override_class_name`, `override_class_file`) VALUES
+('bx_jobs_allow_view_to', 'bx_jobs', 'view', '_bx_jobs_form_profile_input_allow_view_to', '3', 'bx_events,bx_groups,bx_spaces', 'bx_jobs_data', 'id', 'author', 'BxJobsPrivacy', 'modules/boonex/jobs/classes/BxJobsPrivacy.php'),
+('bx_jobs_allow_view_notification_to', 'bx_jobs', 'view_event', '_bx_jobs_form_profile_input_allow_view_notification_to', '3', '', 'bx_notifications_events', 'id', 'object_owner_id', 'BxJobsPrivacyNotifications', 'modules/boonex/jobs/classes/BxJobsPrivacyNotifications.php'),
+('bx_jobs_allow_post_to', 'bx_jobs', 'post', '_bx_jobs_form_profile_input_allow_post_to', 'p', '', 'bx_jobs_data', 'id', 'author', 'BxJobsPrivacyPost', 'modules/boonex/jobs/classes/BxJobsPrivacyPost.php'),
+('bx_jobs_allow_view_favorite_list', 'bx_jobs', 'view_favorite_list', '_bx_jobs_form_profile_input_allow_view_favorite_list', '3', '', 'bx_jobs_favorites_lists', 'id', 'author_id', 'BxJobsPrivacy', 'modules/boonex/jobs/classes/BxJobsPrivacy.php');
+-- EMAIL TEMPLATES
+
+INSERT INTO `sys_email_templates` (`Module`, `NameSystem`, `Name`, `Subject`, `Body`) VALUES
+('bx_jobs', '_bx_jobs_email_join_request', 'bx_jobs_join_request', '_bx_jobs_email_join_request_subject', '_bx_jobs_email_join_request_body'),
+('bx_jobs', '_bx_jobs_email_join_reject', 'bx_jobs_join_reject', '_bx_jobs_email_join_reject_subject', '_bx_jobs_email_join_reject_body'),
+('bx_jobs', '_bx_jobs_email_join_confirm', 'bx_jobs_join_confirm', '_bx_jobs_email_join_confirm_subject', '_bx_jobs_email_join_confirm_body'),
+('bx_jobs', '_bx_jobs_email_fan_remove', 'bx_jobs_fan_remove', '_bx_jobs_email_fan_remove_subject', '_bx_jobs_email_fan_remove_body'),
+('bx_jobs', '_bx_jobs_email_fan_become_admin', 'bx_jobs_fan_become_admin', '_bx_jobs_email_fan_become_admin_subject', '_bx_jobs_email_fan_become_admin_body'),
+('bx_jobs', '_bx_jobs_email_admin_become_fan', 'bx_jobs_admin_become_fan', '_bx_jobs_email_admin_become_fan_subject', '_bx_jobs_email_admin_become_fan_body'),
+('bx_jobs', '_bx_jobs_email_set_role', 'bx_jobs_set_role', '_bx_jobs_email_set_role_subject', '_bx_jobs_email_set_role_body'),
+('bx_jobs', '_bx_jobs_email_invitation', 'bx_jobs_invitation', '_bx_jobs_email_invitation_subject', '_bx_jobs_email_invitation_body');
+
+-- UPLOADERS
+
+INSERT INTO `sys_objects_uploader` (`object`, `active`, `override_class_name`, `override_class_file`) VALUES
+('bx_jobs_cover_crop', 1, 'BxJobsUploaderCoverCrop', 'modules/boonex/jobs/classes/BxJobsUploaderCoverCrop.php'),
+('bx_jobs_picture_crop', 1, 'BxJobsUploaderPictureCrop', 'modules/boonex/jobs/classes/BxJobsUploaderPictureCrop.php');
+
+
+-- CRON
+INSERT INTO `sys_cron_jobs` (`name`, `time`, `class`, `file`, `service_call`) VALUES
+('bx_jobs_pruning', '0 0 * * *', 'BxJobsCronPruning', 'modules/boonex/jobs/classes/BxJobsCronPruning.php', '');

+ 591 - 0
modules/boonex/jobs/install/sql/install.sql

@@ -0,0 +1,591 @@
+SET @sStorageEngine = (SELECT `value` FROM `sys_options` WHERE `name` = 'sys_storage_default');
+
+-- TABLE: PROFILES
+CREATE TABLE IF NOT EXISTS `bx_jobs_data` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `author` int(10) unsigned NOT NULL,
+  `added` int(11) NOT NULL,
+  `changed` int(11) NOT NULL,
+  `picture` int(11) NOT NULL,
+  `cover` int(11) NOT NULL,
+  `cover_data` varchar(50) NOT NULL,
+  `name` varchar(255) NOT NULL,
+  `cat` int(11) NOT NULL,
+  `desc` text NOT NULL,
+  `date_start` int(11) DEFAULT NULL,
+  `date_end` int(11) DEFAULT NULL,
+  `timezone` varchar(255) DEFAULT NULL,
+  `pay_hourly` float NOT NULL default '0',
+  `pay_total` float NOT NULL default '0',
+  `labels` text NOT NULL,
+  `location` text NOT NULL,
+  `views` int(11) NOT NULL default '0',
+  `rate` float NOT NULL default '0',
+  `votes` int(11) NOT NULL default '0',
+  `score` int(11) NOT NULL default '0',
+  `sc_up` int(11) NOT NULL default '0',
+  `sc_down` int(11) NOT NULL default '0',
+  `favorites` int(11) NOT NULL default '0',
+  `comments` int(11) NOT NULL default '0',
+  `reports` int(11) NOT NULL default '0',
+  `featured` int(11) NOT NULL default '0',
+  `cf` int(11) NOT NULL default '1',
+  `join_confirmation` tinyint(4) NOT NULL DEFAULT '0',
+  `allow_view_to` varchar(16) NOT NULL DEFAULT '3',
+  `allow_post_to` varchar(16) NOT NULL DEFAULT '3',
+  `status` enum('active','awaiting','hidden') NOT NULL DEFAULT 'active',
+  `status_admin` enum('active','hidden','pending') NOT NULL DEFAULT 'active',
+  PRIMARY KEY (`id`),
+  FULLTEXT KEY `search_fields` (`name`, `desc`)
+);
+
+-- TABLE: QUESTIONS
+CREATE TABLE IF NOT EXISTS `bx_jobs_qnr_questions` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `content_id` int(10) unsigned NOT NULL DEFAULT '0',
+  `added` int(10) NOT NULL DEFAULT '0',
+  `action` varchar(16) NOT NULL DEFAULT 'add',
+  `question` varchar(255) NOT NULL DEFAULT '',
+  `answer` varchar(16) NOT NULL DEFAULT 'text',
+  `extra` text NOT NULL,
+  `order` int(11) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`)
+);
+
+-- TABLE: ANSWERS
+CREATE TABLE IF NOT EXISTS `bx_jobs_qnr_answers` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `question_id` int(10) unsigned NOT NULL DEFAULT '0',
+  `profile_id` int(10) unsigned NOT NULL DEFAULT '0',
+  `added` int(10) NOT NULL DEFAULT '0',
+  `answer` varchar(255) NOT NULL DEFAULT '',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `answer` (`question_id`, `profile_id`)
+);
+
+-- TABLE: STORAGES & TRANSCODERS
+CREATE TABLE IF NOT EXISTS `bx_jobs_pics` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `profile_id` int(10) unsigned NOT NULL,
+  `remote_id` varchar(128) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `file_name` varchar(255) NOT NULL,
+  `mime_type` varchar(128) NOT NULL,
+  `ext` varchar(32) NOT NULL,
+  `size` bigint(20) NOT NULL,
+  `dimensions` varchar(12) NOT NULL,
+  `added` int(11) NOT NULL,
+  `modified` int(11) NOT NULL,
+  `private` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `remote_id` (`remote_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_jobs_pics_resized` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `profile_id` int(10) unsigned NOT NULL,
+  `remote_id` varchar(128) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `file_name` varchar(255) NOT NULL,
+  `mime_type` varchar(128) NOT NULL,
+  `ext` varchar(32) NOT NULL,
+  `size` bigint(20) NOT NULL,
+  `added` int(11) NOT NULL,
+  `modified` int(11) NOT NULL,
+  `private` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `remote_id` (`remote_id`)
+);
+
+-- TABLE: comments
+CREATE TABLE IF NOT EXISTS `bx_jobs_cmts` (
+  `cmt_id` int(11) NOT NULL AUTO_INCREMENT,
+  `cmt_parent_id` int(11) NOT NULL DEFAULT '0',
+  `cmt_vparent_id` int(11) NOT NULL DEFAULT '0',
+  `cmt_object_id` int(11) NOT NULL DEFAULT '0',
+  `cmt_author_id` int(11) NOT NULL DEFAULT '0',
+  `cmt_level` int(11) NOT NULL DEFAULT '0',
+  `cmt_text` text NOT NULL,
+  `cmt_mood` tinyint(4) NOT NULL DEFAULT '0',
+  `cmt_rate` int(11) NOT NULL DEFAULT '0',
+  `cmt_rate_count` int(11) NOT NULL DEFAULT '0',
+  `cmt_time` int(11) unsigned NOT NULL DEFAULT '0',
+  `cmt_replies` int(11) NOT NULL DEFAULT '0',
+  `cmt_pinned` int(11) NOT NULL default '0',
+  `cmt_cf` int(11) NOT NULL default '1',
+  PRIMARY KEY (`cmt_id`),
+  KEY `cmt_object_id` (`cmt_object_id`,`cmt_parent_id`),
+  FULLTEXT KEY `search_fields` (`cmt_text`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_jobs_cmts_notes` (
+  `cmt_id` int(11) NOT NULL AUTO_INCREMENT,
+  `cmt_parent_id` int(11) NOT NULL DEFAULT '0',
+  `cmt_vparent_id` int(11) NOT NULL DEFAULT '0',
+  `cmt_object_id` int(11) NOT NULL DEFAULT '0',
+  `cmt_author_id` int(11) NOT NULL DEFAULT '0',
+  `cmt_level` int(11) NOT NULL DEFAULT '0',
+  `cmt_text` text NOT NULL,
+  `cmt_mood` tinyint(4) NOT NULL DEFAULT '0',
+  `cmt_rate` int(11) NOT NULL DEFAULT '0',
+  `cmt_rate_count` int(11) NOT NULL DEFAULT '0',
+  `cmt_time` int(11) unsigned NOT NULL DEFAULT '0',
+  `cmt_replies` int(11) NOT NULL DEFAULT '0',
+  `cmt_pinned` int(11) NOT NULL default '0',
+  PRIMARY KEY (`cmt_id`),
+  KEY `cmt_object_id` (`cmt_object_id`,`cmt_parent_id`),
+  FULLTEXT KEY `search_fields` (`cmt_text`)
+);
+
+-- TABLE: VIEWS
+CREATE TABLE IF NOT EXISTS `bx_jobs_views_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `viewer_id` int(11) NOT NULL default '0',
+  `viewer_nip` int(11) unsigned NOT NULL default '0',
+  `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `id` (`object_id`,`viewer_id`,`viewer_nip`)
+);
+
+-- TABLE: VOTES
+CREATE TABLE IF NOT EXISTS `bx_jobs_votes` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `count` int(11) NOT NULL default '0',
+  `sum` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `object_id` (`object_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_jobs_votes_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `author_nip` int(11) unsigned NOT NULL default '0',
+  `value` tinyint(4) NOT NULL default '0',
+  `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `vote` (`object_id`, `author_nip`)
+);
+
+-- TABLE: REPORTS
+CREATE TABLE IF NOT EXISTS `bx_jobs_reports` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `count` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `object_id` (`object_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_jobs_reports_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `author_nip` int(11) unsigned NOT NULL default '0',
+  `type` varchar(32) NOT NULL default '',
+  `text` text NOT NULL default '',
+  `date` int(11) NOT NULL default '0',
+  `checked_by` int(11) NOT NULL default '0',
+  `status` tinyint(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `report` (`object_id`, `author_nip`)
+);
+
+-- TABLE: metas
+CREATE TABLE IF NOT EXISTS `bx_jobs_meta_keywords` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(10) unsigned NOT NULL,
+  `keyword` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `object_id` (`object_id`),
+  KEY `keyword` (`keyword`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_jobs_meta_locations` (
+  `object_id` int(10) unsigned NOT NULL,
+  `lat` double NOT NULL,
+  `lng` double NOT NULL,
+  `country` varchar(2) NOT NULL,
+  `state` varchar(255) NOT NULL,
+  `city` varchar(255) NOT NULL,
+  `zip` varchar(255) NOT NULL,
+  `street` varchar(255) NOT NULL,
+  `street_number` varchar(255) NOT NULL,
+  PRIMARY KEY (`object_id`),
+  KEY `country_state_city` (`country`,`state`(8),`city`(8))
+);
+
+CREATE TABLE IF NOT EXISTS `bx_jobs_meta_mentions` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(10) unsigned NOT NULL,
+  `profile_id` int(10) unsigned NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `object_id` (`object_id`),
+  KEY `profile_id` (`profile_id`)
+);
+
+-- TABLE: fans
+CREATE TABLE IF NOT EXISTS `bx_jobs_fans` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `initiator` int(11) NOT NULL,
+  `content` int(11) NOT NULL,
+  `mutual` tinyint(4) NOT NULL,
+  `added` int(10) unsigned NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `initiator` (`initiator`,`content`),
+  KEY `content` (`content`)
+);
+
+-- TABLE: admins
+CREATE TABLE IF NOT EXISTS `bx_jobs_admins` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `group_profile_id` int(10) unsigned NOT NULL,
+  `fan_id` int(10) unsigned NOT NULL,
+  `role` int(10) unsigned NOT NULL default '0',
+  `order` varchar(32) NOT NULL default '',
+  `added` int(11) unsigned NOT NULL default '0',
+  `expired` int(11) unsigned NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `admin` (`group_profile_id`,`fan_id`)
+);
+
+-- TABLE: favorites
+CREATE TABLE IF NOT EXISTS `bx_jobs_favorites_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `list_id` int(11) NOT NULL default '0',
+  `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `id` (`object_id`,`author_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_jobs_favorites_lists` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `title` varchar(255) NOT NULL,
+  `author_id` int(11) NOT NULL default '0',
+  `date` int(11) NOT NULL default '0',
+  `allow_view_favorite_list_to` varchar(16) NOT NULL DEFAULT '3',
+   PRIMARY KEY (`id`)
+);
+
+
+-- TABLE: scores
+CREATE TABLE IF NOT EXISTS `bx_jobs_scores` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `count_up` int(11) NOT NULL default '0',
+  `count_down` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `object_id` (`object_id`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_jobs_scores_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `author_nip` int(11) unsigned NOT NULL default '0',
+  `type` varchar(8) NOT NULL default '',
+  `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `vote` (`object_id`, `author_nip`)
+);
+
+CREATE TABLE IF NOT EXISTS `bx_jobs_invites` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `key` varchar(128) NOT NULL default '0',
+  `group_profile_id` int(11) NOT NULL default '0',
+  `author_profile_id` int(11) NOT NULL default '0',
+  `invited_profile_id` int(11) NOT NULL default '0',
+  `added` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`)
+);
+
+-- TABLE: Pricing
+CREATE TABLE IF NOT EXISTS `bx_jobs_prices` (
+  `id` int(11) NOT NULL auto_increment,
+  `profile_id` int(11) NOT NULL default '0',
+  `role_id` int(11) unsigned NOT NULL default '0',
+  `name` varchar(128) NOT NULL default '',
+  `period` int(11) unsigned NOT NULL default '1',
+  `period_unit` varchar(32) NOT NULL default '',
+  `price` float unsigned NOT NULL default '1',
+  `order` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `name` (`name`),
+  UNIQUE KEY `type` (`profile_id`, `role_id`,`period`, `period_unit`)
+);
+
+-- STORAGES & TRANSCODERS
+INSERT INTO `sys_objects_storage` (`object`, `engine`, `params`, `token_life`, `cache_control`, `levels`, `table_files`, `ext_mode`, `ext_allow`, `ext_deny`, `quota_size`, `current_size`, `quota_number`, `current_number`, `max_file_size`, `ts`) VALUES
+('bx_jobs_pics', @sStorageEngine, '', 360, 2592000, 3, 'bx_jobs_pics', 'allow-deny', '{image}', '', 0, 0, 0, 0, 0, 0),
+('bx_jobs_pics_resized', @sStorageEngine, '', 360, 2592000, 3, 'bx_jobs_pics_resized', 'allow-deny', '{image}', '', 0, 0, 0, 0, 0, 0);
+
+INSERT INTO `sys_objects_transcoder` (`object`, `storage_object`, `source_type`, `source_params`, `private`, `atime_tracking`, `atime_pruning`, `ts`) VALUES 
+('bx_jobs_icon', 'bx_jobs_pics_resized', 'Storage', 'a:1:{s:6:"object";s:12:"bx_jobs_pics";}', 'no', '1', '2592000', '0'),
+('bx_jobs_thumb', 'bx_jobs_pics_resized', 'Storage', 'a:1:{s:6:"object";s:12:"bx_jobs_pics";}', 'no', '1', '2592000', '0'),
+('bx_jobs_avatar', 'bx_jobs_pics_resized', 'Storage', 'a:1:{s:6:"object";s:12:"bx_jobs_pics";}', 'no', '1', '2592000', '0'),
+('bx_jobs_avatar_big', 'bx_jobs_pics_resized', 'Storage', 'a:1:{s:6:"object";s:12:"bx_jobs_pics";}', 'no', '1', '2592000', '0'),
+('bx_jobs_picture', 'bx_jobs_pics_resized', 'Storage', 'a:1:{s:6:"object";s:12:"bx_jobs_pics";}', 'no', '1', '2592000', '0'),
+('bx_jobs_cover', 'bx_jobs_pics_resized', 'Storage', 'a:1:{s:6:"object";s:12:"bx_jobs_pics";}', 'no', '1', '2592000', '0'),
+('bx_jobs_cover_thumb', 'bx_jobs_pics_resized', 'Storage', 'a:1:{s:6:"object";s:12:"bx_jobs_pics";}', 'no', '1', '2592000', '0'),
+('bx_jobs_gallery', 'bx_jobs_pics_resized', 'Storage', 'a:1:{s:6:"object";s:12:"bx_jobs_pics";}', 'no', '1', '2592000', '0');
+
+INSERT INTO `sys_transcoder_filters` (`transcoder_object`, `filter`, `filter_params`, `order`) VALUES 
+('bx_jobs_icon', 'Resize', 'a:3:{s:1:"w";s:2:"30";s:1:"h";s:2:"30";s:13:"square_resize";s:1:"1";}', '0'),
+('bx_jobs_thumb', 'Resize', 'a:3:{s:1:"w";s:2:"50";s:1:"h";s:2:"50";s:13:"square_resize";s:1:"1";}', '0'),
+('bx_jobs_avatar', 'Resize', 'a:3:{s:1:"w";s:3:"100";s:1:"h";s:3:"100";s:13:"square_resize";s:1:"1";}', '0'),
+('bx_jobs_avatar_big', 'Resize', 'a:3:{s:1:"w";s:3:"200";s:1:"h";s:3:"200";s:13:"square_resize";s:1:"1";}', '0'),
+('bx_jobs_picture', 'Resize', 'a:3:{s:1:"w";s:4:"1024";s:1:"h";s:4:"1024";s:13:"square_resize";s:1:"0";}', '0'),
+('bx_jobs_cover', 'Resize', 'a:1:{s:1:"w";s:4:"1200";}', '0'),
+('bx_jobs_cover_thumb', 'Resize', 'a:3:{s:1:"w";s:2:"48";s:1:"h";s:2:"48";s:13:"square_resize";s:1:"1";}', '0'),
+('bx_jobs_gallery', 'Resize', 'a:1:{s:1:"w";s:3:"500";}', '0');
+
+-- FORMS
+INSERT INTO `sys_objects_form`(`object`, `module`, `title`, `action`, `form_attrs`, `table`, `key`, `uri`, `uri_title`, `submit_name`, `params`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_job', 'bx_jobs', '_bx_jobs_form_profile', '', 'a:1:{s:7:\"enctype\";s:19:\"multipart/form-data\";}', 'bx_jobs_data', 'id', '', '', 'do_submit', '', 0, 1, 'BxJobsFormEntry', 'modules/boonex/jobs/classes/BxJobsFormEntry.php');
+
+INSERT INTO `sys_form_displays`(`object`, `display_name`, `module`, `view_mode`, `title`) VALUES 
+('bx_job', 'bx_job_add', 'bx_jobs', 0, '_bx_jobs_form_profile_display_add'),
+('bx_job', 'bx_job_delete', 'bx_jobs', 0, '_bx_jobs_form_profile_display_delete'),
+('bx_job', 'bx_job_edit', 'bx_jobs', 0, '_bx_jobs_form_profile_display_edit'),
+('bx_job', 'bx_job_edit_cover', 'bx_jobs', 0, '_bx_jobs_form_profile_display_edit_cover'),
+('bx_job', 'bx_job_view', 'bx_jobs', 1, '_bx_jobs_form_profile_display_view'),
+('bx_job', 'bx_job_view_full', 'bx_jobs', 1, '_bx_jobs_form_profile_display_view_full'),
+('bx_job', 'bx_job_invite', 'bx_jobs', 0, '_bx_jobs_form_profile_display_invite');
+
+INSERT INTO `sys_form_inputs`(`object`, `module`, `name`, `value`, `values`, `checked`, `type`, `caption_system`, `caption`, `info`, `required`, `collapsed`, `html`, `attrs`, `attrs_tr`, `attrs_wrapper`, `checker_func`, `checker_params`, `checker_error`, `db_pass`, `db_params`, `editable`, `deletable`) VALUES 
+('bx_job', 'bx_jobs', 'cf', '1', '#!sys_content_filter', 0, 'select', '_sys_form_entry_input_sys_cf', '_sys_form_entry_input_cf', '', 0, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
+('bx_job', 'bx_jobs', 'allow_view_to', 3, '', 0, 'custom', '_bx_jobs_form_profile_input_sys_allow_view_to', '_bx_jobs_form_profile_input_allow_view_to', '_bx_jobs_form_profile_input_allow_view_to_desc', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_job', 'bx_jobs', 'allow_post_to', 3, '', 0, 'custom', '_bx_jobs_form_profile_input_sys_allow_post_to', '_bx_jobs_form_profile_input_allow_post_to', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_job', 'bx_jobs', 'date_start', 0, '', 0, 'datetime', '_bx_jobs_form_profile_input_sys_date_start', '_bx_jobs_form_profile_input_date_start', '', 0, 0, 0, '', '', '', '', '', '_bx_jobs_form_profile_input_date_start_err', 'DateTimeUtc', '', 1, 0),
+('bx_job', 'bx_jobs', 'date_end', 0, '', 0, 'datetime', '_bx_jobs_form_profile_input_sys_date_end', '_bx_jobs_form_profile_input_date_end', '', 0, 0, 0, '', '', '', '', '', '_bx_jobs_form_profile_input_date_end_err', 'DateTimeUtc', '', 1, 0),
+('bx_job', 'bx_jobs', 'pay_hourly', '', '', 0, 'price', '_bx_jobs_form_profile_input_sys_pay_hourly', '_bx_jobs_form_profile_input_pay_hourly', '', 0, 0, 0, '', '', '', '', '', '', 'Float', '', 1, 0),
+('bx_job', 'bx_jobs', 'pay_total', '', '', 0, 'price', '_bx_jobs_form_profile_input_sys_pay_total', '_bx_jobs_form_profile_input_pay_total', '', 0, 0, 0, '', '', '', '', '', '', 'Float', '', 1, 0),
+('bx_job', 'bx_jobs', 'delete_confirm', 1, '', 0, 'checkbox', '_bx_jobs_form_profile_input_sys_delete_confirm', '_bx_jobs_form_profile_input_delete_confirm', '_bx_jobs_form_profile_input_delete_confirm_info', 1, 0, 0, '', '', '', 'avail', '', '_bx_jobs_form_profile_input_delete_confirm_error', '', '', 1, 0),
+('bx_job', 'bx_jobs', 'do_submit', '_sys_form_account_input_submit', '', 0, 'submit', '_bx_jobs_form_profile_input_sys_do_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_job', 'bx_jobs', 'desc', '', '', 0, 'textarea', '_bx_jobs_form_profile_input_sys_desc', '_bx_jobs_form_profile_input_desc', '', 0, 0, 2, '', '', '', '', '', '', 'XssHtml', '', 1, 1),
+('bx_job', 'bx_jobs', 'cat', '', '#!bx_jobs_cats', 0, 'select', '_bx_jobs_form_profile_input_sys_cat', '_bx_jobs_form_profile_input_cat', '', 1, 0, 0, '', '', '', 'avail', '', '_bx_jobs_form_profile_input_cat_err', 'Xss', '', 1, 1),
+('bx_job', 'bx_jobs', 'name', '', '', 0, 'text', '_bx_jobs_form_profile_input_sys_name', '_bx_jobs_form_profile_input_name', '', 1, 0, 0, '', '', '', 'Length', 'a:2:{s:3:"min";i:1;s:3:"max";i:80;}', '_bx_jobs_form_profile_input_name_err', 'Xss', '', 1, 0),
+('bx_job', 'bx_jobs', 'initial_members', '', '', 0, 'custom', '_bx_jobs_form_profile_input_sys_initial_members', '_bx_jobs_form_profile_input_initial_members', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 1),
+('bx_job', 'bx_jobs', 'join_confirmation', 1, '', 1, 'switcher', '_bx_jobs_form_profile_input_sys_join_confirm', '_bx_jobs_form_profile_input_join_confirm', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 1, 0),
+('bx_job', 'bx_jobs', 'cover', 'a:1:{i:0;s:18:"bx_jobs_cover_crop";}', 'a:1:{s:18:"bx_jobs_cover_crop";s:24:"_sys_uploader_crop_title";}', 0, 'files', '_bx_jobs_form_profile_input_sys_cover', '_bx_jobs_form_profile_input_cover', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_job', 'bx_jobs', 'picture', 'a:1:{i:0;s:20:"bx_jobs_picture_crop";}', 'a:1:{s:20:"bx_jobs_picture_crop";s:24:"_sys_uploader_crop_title";}', 0, 'files', '_bx_jobs_form_profile_input_sys_picture', '_bx_jobs_form_profile_input_picture', '', 0, 0, 0, '', '', '', '', '', '_bx_jobs_form_profile_input_picture_err', '', '', 1, 0),
+('bx_job', 'bx_jobs', 'location', '', '', 0, 'location', '_sys_form_input_sys_location', '_sys_form_input_location', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_job', 'bx_jobs', 'labels', '', '', 0, 'custom', '_sys_form_input_sys_labels', '_sys_form_input_labels', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0);
+
+INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for_levels`, `active`, `order`) VALUES 
+('bx_job_add', 'initial_members', 2147483647, 1, 1),
+('bx_job_add', 'name', 2147483647, 1, 2),
+('bx_job_add', 'cat', 2147483647, 1, 3),
+('bx_job_add', 'desc', 2147483647, 1, 4),
+('bx_job_add', 'location', 2147483647, 1, 5),
+('bx_job_add', 'date_start', 2147483647, 1, 6),
+('bx_job_add', 'date_end', 2147483647, 1, 7),
+('bx_job_add', 'timezone', 2147483647, 1, 8),
+('bx_job_add', 'pay_hourly', 2147483647, 1, 9),
+('bx_job_add', 'pay_total', 2147483647, 1, 10),
+('bx_job_add', 'join_confirmation', 2147483647, 1, 11),
+('bx_job_add', 'allow_view_to', 2147483647, 1, 12),
+('bx_job_add', 'allow_post_to', 2147483647, 1, 13),
+('bx_job_add', 'cf', 2147483647, 1, 14),
+('bx_job_add', 'do_submit', 2147483647, 1, 15),
+
+('bx_job_invite', 'initial_members', 2147483647, 1, 1),
+('bx_job_invite', 'do_submit', 2147483647, 1, 2),
+
+('bx_job_delete', 'delete_confirm', 2147483647, 1, 1),
+('bx_job_delete', 'do_submit', 2147483647, 1, 2),
+
+('bx_job_edit', 'name', 2147483647, 1, 1),
+('bx_job_edit', 'cat', 2147483647, 1, 2),
+('bx_job_edit', 'desc', 2147483647, 1, 3),
+('bx_job_edit', 'location', 2147483647, 1, 4),
+('bx_job_edit', 'date_start', 2147483647, 1, 5),
+('bx_job_edit', 'date_end', 2147483647, 1, 6),
+('bx_job_edit', 'timezone', 2147483647, 1, 7),
+('bx_job_edit', 'pay_hourly', 2147483647, 1, 8),
+('bx_job_edit', 'pay_total', 2147483647, 1, 9),
+('bx_job_edit', 'join_confirmation', 2147483647, 1, 10),
+('bx_job_edit', 'allow_view_to', 2147483647, 1, 11),
+('bx_job_edit', 'allow_post_to', 2147483647, 1, 12),
+('bx_job_edit', 'cf', 2147483647, 1, 13),
+('bx_job_edit', 'do_submit', 2147483647, 1, 14),
+
+('bx_job_edit_cover', 'cover', 2147483647, 1, 1),
+('bx_job_edit_cover', 'do_submit', 2147483647, 1, 2),
+
+('bx_job_view', 'name', 2147483647, 1, 1),
+('bx_job_view', 'cat', 2147483647, 1, 2),
+('bx_job_view', 'date_start', 2147483647, 1, 3),
+('bx_job_view', 'date_end', 2147483647, 1, 4),
+('bx_job_view', 'time', 2147483647, 1, 5),
+('bx_job_view', 'timezone', 2147483647, 1, 6),
+('bx_job_view', 'pay_hourly', 2147483647, 1, 7),
+('bx_job_view', 'pay_total', 2147483647, 1, 8),
+
+('bx_job_view_full', 'name', 2147483647, 1, 1),
+('bx_job_view_full', 'cat', 2147483647, 1, 2),
+('bx_job_view_full', 'date_start', 2147483647, 1, 3),
+('bx_job_view_full', 'date_end', 2147483647, 1, 4),
+('bx_job_view_full', 'time', 2147483647, 1, 5),
+('bx_job_view_full', 'timezone', 2147483647, 1, 6),
+('bx_job_view_full', 'pay_hourly', 2147483647, 1, 7),
+('bx_job_view_full', 'pay_total', 2147483647, 1, 8),
+('bx_job_view_full', 'desc', 2147483647, 1, 9);
+
+-- FORMS: Question
+INSERT INTO `sys_objects_form`(`object`, `module`, `title`, `action`, `form_attrs`, `table`, `key`, `uri`, `uri_title`, `submit_name`, `params`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_jobs_question', 'bx_jobs', '_bx_jobs_form_question', '', 'a:1:{s:7:\"enctype\";s:19:\"multipart/form-data\";}', 'bx_jobs_qnr_questions', 'id', '', '', 'do_submit', '', 0, 1, 'BxJobsFormQuestion', 'modules/boonex/jobs/classes/BxJobsFormQuestion.php');
+
+INSERT INTO `sys_form_displays`(`object`, `display_name`, `module`, `view_mode`, `title`) VALUES 
+('bx_jobs_question', 'bx_jobs_question_add', 'bx_jobs', 0, '_bx_jobs_form_question_display_add'),
+('bx_jobs_question', 'bx_jobs_question_edit', 'bx_jobs', 0, '_bx_jobs_form_question_display_edit');
+
+INSERT INTO `sys_form_inputs`(`object`, `module`, `name`, `value`, `values`, `checked`, `type`, `caption_system`, `caption`, `info`, `required`, `collapsed`, `html`, `attrs`, `attrs_tr`, `attrs_wrapper`, `checker_func`, `checker_params`, `checker_error`, `db_pass`, `db_params`, `editable`, `deletable`) VALUES 
+('bx_jobs_question', 'bx_jobs', 'action', 'add', '', 0, 'hidden', '_bx_jobs_form_question_input_sys_action', '', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 0, 0),
+('bx_jobs_question', 'bx_jobs', 'question', '', '', 0, 'text', '_bx_jobs_form_question_input_sys_question', '_bx_jobs_form_question_input_question', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_jobs_form_question_input_question_err', 'Xss', '', 1, 0),
+('bx_jobs_question', 'bx_jobs', 'answer', 'text', '', 0, 'hidden', '_bx_jobs_form_question_input_sys_answer', '', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 0, 0),
+('bx_jobs_question', 'bx_jobs', 'controls', '_bx_jobs_form_question_input_sys_controls', 'do_submit,do_cancel', 0, 'input_set', '', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_jobs_question', 'bx_jobs', 'do_submit', '_bx_jobs_form_question_input_do_submit', '', 0, 'submit', '_bx_jobs_form_question_input_sys_do_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_jobs_question', 'bx_jobs', 'do_cancel', '_bx_jobs_form_question_input_do_cancel', '', 0, 'button', '_bx_jobs_form_question_input_sys_do_cancel', '', '', 0, 0, 0, 'a:2:{s:7:"onclick";s:45:"$(''.bx-popup-applied:visible'').dolPopupHide()";s:5:"class";s:22:"bx-def-margin-sec-left";}', '', '', '', '', '', '', '', 1, 0);
+
+INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for_levels`, `active`, `order`) VALUES 
+('bx_jobs_question_add', 'action', 2147483647, 1, 1),
+('bx_jobs_question_add', 'question', 2147483647, 1, 2),
+('bx_jobs_question_add', 'answer', 2147483647, 1, 3),
+('bx_jobs_question_add', 'controls', 2147483647, 1, 4),
+('bx_jobs_question_add', 'do_submit', 2147483647, 1, 5),
+('bx_jobs_question_add', 'do_cancel', 2147483647, 1, 6),
+
+('bx_jobs_question_edit', 'action', 2147483647, 1, 1),
+('bx_jobs_question_edit', 'question', 2147483647, 1, 2),
+('bx_jobs_question_edit', 'answer', 2147483647, 1, 3),
+('bx_jobs_question_edit', 'controls', 2147483647, 1, 4),
+('bx_jobs_question_edit', 'do_submit', 2147483647, 1, 5),
+('bx_jobs_question_edit', 'do_cancel', 2147483647, 1, 6);
+
+-- FORMS: Price
+INSERT INTO `sys_objects_form` (`object`, `module`, `title`, `action`, `form_attrs`, `submit_name`, `table`, `key`, `uri`, `uri_title`, `params`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES
+('bx_jobs_price', 'bx_jobs', '_bx_jobs_form_price', '', '', 'do_submit', 'bx_jobs_prices', 'id', '', '', '', 0, 1, 'BxJobsFormPrice', 'modules/boonex/jobs/classes/BxJobsFormPrice.php');
+
+INSERT INTO `sys_form_displays` (`display_name`, `module`, `object`, `title`, `view_mode`) VALUES
+('bx_jobs_price_add', 'bx_jobs', 'bx_jobs_price', '_bx_jobs_form_price_display_add', 0),
+('bx_jobs_price_edit', 'bx_jobs', 'bx_jobs_price', '_bx_jobs_form_price_display_edit', 0);
+
+INSERT INTO `sys_form_inputs` (`object`, `module`, `name`, `value`, `values`, `checked`, `type`, `caption_system`, `caption`, `info`, `required`, `collapsed`, `html`, `attrs`, `attrs_tr`, `attrs_wrapper`, `checker_func`, `checker_params`, `checker_error`, `db_pass`, `db_params`, `editable`, `deletable`) VALUES
+('bx_jobs_price', 'bx_jobs', 'id', '', '', 0, 'hidden', '_bx_jobs_form_price_input_sys_id', '', '', 1, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
+('bx_jobs_price', 'bx_jobs', 'role_id', '', '', 0, 'hidden', '_bx_jobs_form_price_input_sys_role_id', '', '', 1, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
+('bx_jobs_price', 'bx_jobs', 'name', '', '', 0, 'text', '_bx_jobs_form_price_input_sys_name', '_bx_jobs_form_price_input_name', '_bx_jobs_form_price_input_inf_name', 1, 0, 0, '', '', '', 'Avail', '', '_bx_jobs_form_price_input_err_name', 'Xss', '', 1, 0),
+('bx_jobs_price', 'bx_jobs', 'period', '', '', 0, 'text', '_bx_jobs_form_price_input_sys_period', '_bx_jobs_form_price_input_period', '_bx_jobs_form_price_input_inf_period', 1, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
+('bx_jobs_price', 'bx_jobs', 'period_unit', '', '#!bx_jobs_period_units', 0, 'select', '_bx_jobs_form_price_input_sys_period_unit', '_bx_jobs_form_price_input_period_unit', '_bx_jobs_form_price_input_inf_period_unit', 1, 0, 0, '', '', '', '', '', '', 'Xss', '', 1, 0),
+('bx_jobs_price', 'bx_jobs', 'price', '', '', 0, 'price', '_bx_jobs_form_price_input_sys_price', '_bx_jobs_form_price_input_price', '_bx_jobs_form_price_input_inf_price', 1, 0, 0, '', '', '', '', '', '', 'Float', '', 1, 0),
+('bx_jobs_price', 'bx_jobs', 'controls', '', 'do_submit,do_cancel', 0, 'input_set', '', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_jobs_price', 'bx_jobs', 'do_submit', '_bx_jobs_form_price_input_do_submit', '', 0, 'submit', '_bx_jobs_form_price_input_sys_do_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_jobs_price', 'bx_jobs', 'do_cancel', '_bx_jobs_form_price_input_do_cancel', '', 0, 'button', '_bx_jobs_form_price_input_sys_do_cancel', '', '', 0, 0, 0, 'a:2:{s:7:"onclick";s:45:"$(''.bx-popup-applied:visible'').dolPopupHide()";s:5:"class";s:22:"bx-def-margin-sec-left";}', '', '', '', '', '', '', '', 1, 0);
+
+INSERT INTO `sys_form_display_inputs` (`display_name`, `input_name`, `visible_for_levels`, `active`, `order`) VALUES
+('bx_jobs_price_add', 'id', 2147483647, 0, 1),
+('bx_jobs_price_add', 'role_id', 2147483647, 1, 2),
+('bx_jobs_price_add', 'name', 2147483647, 1, 3),
+('bx_jobs_price_add', 'price', 2147483647, 1, 4),
+('bx_jobs_price_add', 'period', 2147483647, 1, 5),
+('bx_jobs_price_add', 'period_unit', 2147483647, 1, 6),
+('bx_jobs_price_add', 'controls', 2147483647, 1, 7),
+('bx_jobs_price_add', 'do_submit', 2147483647, 1, 8),
+('bx_jobs_price_add', 'do_cancel', 2147483647, 1, 9),
+
+('bx_jobs_price_edit', 'id', 2147483647, 1, 1),
+('bx_jobs_price_edit', 'role_id', 2147483647, 1, 2),
+('bx_jobs_price_edit', 'name', 2147483647, 1, 3),
+('bx_jobs_price_edit', 'price', 2147483647, 1, 4),
+('bx_jobs_price_edit', 'period', 2147483647, 1, 5),
+('bx_jobs_price_edit', 'period_unit', 2147483647, 1, 6),
+('bx_jobs_price_edit', 'controls', 2147483647, 1, 7),
+('bx_jobs_price_edit', 'do_submit', 2147483647, 1, 8),
+('bx_jobs_price_edit', 'do_cancel', 2147483647, 1, 9);
+
+-- PRE-VALUES
+INSERT INTO `sys_form_pre_lists`(`key`, `title`, `module`, `use_for_sets`) VALUES
+('bx_jobs_cats', '_bx_jobs_pre_lists_cats', 'bx_jobs', '0');
+
+INSERT INTO `sys_form_pre_values`(`Key`, `Value`, `Order`, `LKey`, `LKey2`) VALUES
+('bx_jobs_cats', '', 0, '_sys_please_select', ''),
+('bx_jobs_cats', '1', 1, '_bx_jobs_cat_General', ''),
+('bx_jobs_cats', '2', 2, '_bx_jobs_cat_Business', ''),
+('bx_jobs_cats', '3', 3, '_bx_jobs_cat_Uncategorised', '');
+
+INSERT INTO `sys_form_pre_lists`(`key`, `title`, `module`, `use_for_sets`) VALUES
+('bx_jobs_roles', '_bx_jobs_pre_lists_roles', 'bx_jobs', '1');
+
+INSERT INTO `sys_form_pre_values`(`Key`, `Value`, `Order`, `LKey`, `LKey2`) VALUES
+('bx_jobs_roles', '0', 1, '_bx_jobs_role_regular', ''),
+('bx_jobs_roles', '1', 2, '_bx_jobs_role_administrator', ''),
+('bx_jobs_roles', '2', 3, '_bx_jobs_role_moderator', '');
+
+INSERT INTO `sys_form_pre_lists`(`key`, `title`, `module`, `use_for_sets`) VALUES
+('bx_jobs_period_units', '_bx_jobs_pre_lists_period_units', 'bx_jobs', '0');
+
+INSERT INTO `sys_form_pre_values`(`Key`, `Value`, `Order`, `LKey`, `LKey2`) VALUES
+('bx_jobs_period_units', '', 0, '_sys_please_select', ''),
+('bx_jobs_period_units', 'day', 1, '_bx_jobs_period_unit_day', ''),
+('bx_jobs_period_units', 'week', 2, '_bx_jobs_period_unit_week', ''),
+('bx_jobs_period_units', 'month', 3, '_bx_jobs_period_unit_month', ''),
+('bx_jobs_period_units', 'year', 4, '_bx_jobs_period_unit_year', '');
+
+-- COMMENTS
+INSERT INTO `sys_objects_cmts` (`Name`, `Module`, `Table`, `CharsPostMin`, `CharsPostMax`, `CharsDisplayMax`, `Html`, `PerView`, `PerViewReplies`, `BrowseType`, `IsBrowseSwitch`, `PostFormPosition`, `NumberOfLevels`, `IsDisplaySwitch`, `IsRatable`, `ViewingThreshold`, `IsOn`, `RootStylePrefix`, `BaseUrl`, `ObjectVote`, `TriggerTable`, `TriggerFieldId`, `TriggerFieldAuthor`, `TriggerFieldTitle`, `TriggerFieldComments`, `ClassName`, `ClassFile`) VALUES
+('bx_jobs', 'bx_jobs', 'bx_jobs_cmts', 1, 5000, 1000, 3, 5, 3, 'tail', 1, 'bottom', 1, 1, 1, -3, 1, 'cmt', 'page.php?i=view-job-profile&id={object_id}', '', 'bx_jobs_data', 'id', 'author', 'name', 'comments', 'BxJobsCmts', 'modules/boonex/jobs/classes/BxJobsCmts.php'),
+('bx_jobs_notes', 'bx_jobs', 'bx_jobs_cmts_notes', 1, 5000, 1000, 0, 5, 3, 'tail', 1, 'bottom', 1, 1, 1, -3, 1, 'cmt', 'page.php?i=view-post&id={object_id}', '', 'bx_jobs_data', 'id', 'author', 'name', '', 'BxTemplCmtsNotes', '');
+
+-- VIEWS
+INSERT INTO `sys_objects_view` (`name`, `module`, `table_track`, `period`, `is_on`, `trigger_table`, `trigger_field_id`, `trigger_field_author`, `trigger_field_count`, `class_name`, `class_file`) VALUES 
+('bx_jobs', 'bx_jobs', 'bx_jobs_views_track', '86400', '1', 'bx_jobs_data', 'id', 'author', 'views', '', '');
+
+-- VOTES
+INSERT INTO `sys_objects_vote` (`Name`, `Module`, `TableMain`, `TableTrack`, `PostTimeout`, `MinValue`, `MaxValue`, `IsUndo`, `IsOn`, `TriggerTable`, `TriggerFieldId`, `TriggerFieldAuthor`, `TriggerFieldRate`, `TriggerFieldRateCount`, `ClassName`, `ClassFile`) VALUES 
+('bx_jobs', 'bx_jobs', 'bx_jobs_votes', 'bx_jobs_votes_track', '604800', '1', '1', '0', '1', 'bx_jobs_data', 'id', 'author', 'rate', 'votes', '', '');
+
+-- SCORES
+INSERT INTO `sys_objects_score` (`name`, `module`, `table_main`, `table_track`, `post_timeout`, `is_on`, `trigger_table`, `trigger_field_id`, `trigger_field_author`, `trigger_field_score`, `trigger_field_cup`, `trigger_field_cdown`, `class_name`, `class_file`) VALUES 
+('bx_jobs', 'bx_jobs', 'bx_jobs_scores', 'bx_jobs_scores_track', '604800', '0', 'bx_jobs_data', 'id', 'author', 'score', 'sc_up', 'sc_down', '', '');
+
+-- REPORTS
+INSERT INTO `sys_objects_report` (`name`, `module`, `table_main`, `table_track`, `is_on`, `base_url`, `object_comment`, `trigger_table`, `trigger_field_id`, `trigger_field_author`, `trigger_field_count`, `class_name`, `class_file`) VALUES 
+('bx_jobs', 'bx_jobs', 'bx_jobs_reports', 'bx_jobs_reports_track', '1', 'page.php?i=view-job-profile&id={object_id}', 'bx_jobs_notes', 'bx_jobs_data', 'id', 'author', 'reports', '', '');
+
+-- FAVORITES
+INSERT INTO `sys_objects_favorite` (`name`, `table_track`, `table_lists`, `is_on`, `is_undo`, `is_public`, `base_url`, `trigger_table`, `trigger_field_id`, `trigger_field_author`, `trigger_field_count`, `class_name`, `class_file`) VALUES 
+('bx_jobs', 'bx_jobs_favorites_track', 'bx_jobs_favorites_lists', '1', '1', '1', 'page.php?i=view-job-profile&id={object_id}', 'bx_jobs_data', 'id', 'author', 'favorites', '', '');
+
+-- FEATURED
+INSERT INTO `sys_objects_feature` (`name`, `module`, `is_on`, `is_undo`, `base_url`, `trigger_table`, `trigger_field_id`, `trigger_field_author`, `trigger_field_flag`, `class_name`, `class_file`) VALUES 
+('bx_jobs', 'bx_jobs', '1', '1', 'page.php?i=view-job-profile&id={object_id}', 'bx_jobs_data', 'id', 'author', 'featured', '', '');
+
+-- CONTENT INFO
+INSERT INTO `sys_objects_content_info` (`name`, `title`, `alert_unit`, `alert_action_add`, `alert_action_update`, `alert_action_delete`, `class_name`, `class_file`) VALUES
+('bx_jobs', '_bx_jobs', 'bx_jobs', 'added', 'edited', 'deleted', '', ''),
+('bx_jobs_cmts', '_bx_jobs_cmts', 'bx_jobs', 'commentPost', 'commentUpdated', 'commentRemoved', 'BxDolContentInfoCmts', '');
+
+INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`, `condition`, `selection`) VALUES
+('bx_jobs', 'bx_jobs_administration', 'td`.`id', '', ''),
+('bx_jobs', 'bx_jobs_common', 'td`.`id', '', '');
+
+-- SEARCH EXTENDED
+INSERT INTO `sys_objects_search_extended` (`object`, `object_content_info`, `module`, `title`, `active`, `class_name`, `class_file`) VALUES
+('bx_jobs', 'bx_jobs', 'bx_jobs', '_bx_jobs_search_extended', 1, '', ''),
+('bx_jobs_cmts', 'bx_jobs_cmts', 'bx_jobs', '_bx_jobs_search_extended_cmts', 1, 'BxTemplSearchExtendedCmts', '');
+
+-- STUDIO PAGE & WIDGET
+INSERT INTO `sys_std_pages`(`index`, `name`, `header`, `caption`, `icon`) VALUES
+(3, 'bx_jobs', '_bx_jobs', '_bx_jobs', 'bx_jobs@modules/boonex/jobs/|std-icon.svg');
+SET @iPageId = LAST_INSERT_ID();
+
+SET @iParentPageId = (SELECT `id` FROM `sys_std_pages` WHERE `name` = 'home');
+SET @iParentPageOrder = (SELECT MAX(`order`) FROM `sys_std_pages_widgets` WHERE `page_id` = @iParentPageId);
+INSERT INTO `sys_std_widgets` (`page_id`, `module`, `type`, `url`, `click`, `icon`, `caption`, `cnt_notices`, `cnt_actions`) VALUES
+(@iPageId, 'bx_jobs', 'content', '{url_studio}module.php?name=bx_jobs', '', 'bx_jobs@modules/boonex/jobs/|std-icon.svg', '_bx_jobs', '', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:11:"get_actions";s:6:"params";a:0:{}s:5:"class";s:18:"TemplStudioModules";}');
+INSERT INTO `sys_std_pages_widgets` (`page_id`, `widget_id`, `order`) VALUES
+(@iParentPageId, LAST_INSERT_ID(), IF(ISNULL(@iParentPageOrder), 1, @iParentPageOrder + 1));
+

+ 64 - 0
modules/boonex/jobs/install/sql/uninstall.sql

@@ -0,0 +1,64 @@
+
+-- TABLES
+
+DROP TABLE IF EXISTS `bx_jobs_data`, `bx_jobs_qnr_questions`, `bx_jobs_qnr_answers`, `bx_jobs_pics`, `bx_jobs_pics_resized`, `bx_jobs_cmts`, `bx_jobs_cmts_notes`, `bx_jobs_views_track`, `bx_jobs_meta_keywords`, `bx_jobs_meta_locations`, `bx_jobs_meta_mentions`, `bx_jobs_fans`, `bx_jobs_admins`, `bx_jobs_votes`, `bx_jobs_votes_track`, `bx_jobs_reports`, `bx_jobs_reports_track`, `bx_jobs_favorites_track`, `bx_jobs_favorites_lists`, `bx_jobs_scores`, `bx_jobs_scores_track`, `bx_jobs_invites`, `bx_jobs_prices`;
+
+-- PROFILES
+
+DELETE FROM sys_profiles WHERE `type` = 'bx_jobs';
+
+-- STORAGES & TRANSCODERS
+
+DELETE FROM `sys_objects_storage` WHERE `object` IN('bx_jobs_pics', 'bx_jobs_pics_resized');
+DELETE FROM `sys_storage_tokens` WHERE `object` IN('bx_jobs_pics', 'bx_jobs_pics_resized');
+
+DELETE FROM `sys_objects_transcoder` WHERE `object` IN('bx_jobs_icon', 'bx_jobs_thumb', 'bx_jobs_avatar', 'bx_jobs_avatar_big', 'bx_jobs_picture', 'bx_jobs_cover', 'bx_jobs_cover_thumb', 'bx_jobs_gallery');
+DELETE FROM `sys_transcoder_filters` WHERE `transcoder_object` IN('bx_jobs_icon', 'bx_jobs_thumb', 'bx_jobs_avatar', 'bx_jobs_avatar_big', 'bx_jobs_picture', 'bx_jobs_cover', 'bx_jobs_cover_thumb', 'bx_jobs_gallery');
+DELETE FROM `sys_transcoder_images_files` WHERE `transcoder_object` IN('bx_jobs_icon', 'bx_jobs_thumb', 'bx_jobs_avatar', 'bx_jobs_avatar_big', 'bx_jobs_picture', 'bx_jobs_cover', 'bx_jobs_cover_thumb', 'bx_jobs_gallery');
+
+-- FORMS
+
+DELETE FROM `sys_objects_form` WHERE `module` = 'bx_jobs';
+DELETE FROM `sys_form_displays` WHERE `module` = 'bx_jobs';
+DELETE FROM `sys_form_inputs` WHERE `module` = 'bx_jobs';
+DELETE FROM `sys_form_display_inputs` WHERE `display_name` IN('bx_job_add', 'bx_job_delete', 'bx_job_edit', 'bx_job_edit_cover', 'bx_job_view', 'bx_job_view_full', 'bx_job_invite', 'bx_jobs_price_add', 'bx_jobs_price_edit', 'bx_jobs_question_add', 'bx_jobs_question_edit');
+
+-- PRE-VALUES
+
+DELETE FROM `sys_form_pre_lists` WHERE `module` = 'bx_jobs';
+
+DELETE FROM `sys_form_pre_values` WHERE `Key` LIKE 'bx_jobs%';
+
+-- COMMENTS
+DELETE FROM `sys_objects_cmts` WHERE `Name` LIKE 'bx_jobs%';
+
+-- VIEWS
+DELETE FROM `sys_objects_view` WHERE `name` = 'bx_jobs';
+
+-- VOTES
+DELETE FROM `sys_objects_vote` WHERE `Name` = 'bx_jobs';
+
+-- SCORES
+DELETE FROM `sys_objects_score` WHERE `name` = 'bx_jobs';
+
+-- REPORTS
+DELETE FROM `sys_objects_report` WHERE `name` = 'bx_jobs';
+
+-- FAFORITES
+DELETE FROM `sys_objects_favorite` WHERE `name` = 'bx_jobs';
+
+-- FEATURED
+DELETE FROM `sys_objects_feature` WHERE `name` = 'bx_jobs';
+
+-- CONTENT INFO
+DELETE FROM `sys_objects_content_info` WHERE `name` IN ('bx_jobs', 'bx_jobs_cmts');
+
+DELETE FROM `sys_content_info_grids` WHERE `object` IN ('bx_jobs');
+
+-- SEARCH EXTENDED
+DELETE FROM `sys_objects_search_extended` WHERE `module` = 'bx_jobs';
+
+-- STUDIO PAGE & WIDGET
+DELETE FROM `tp`, `tw`, `twb`, `tpw` 
+USING `sys_std_pages` AS `tp` LEFT JOIN `sys_std_widgets` AS `tw` ON `tp`.`id` = `tw`.`page_id` LEFT JOIN `sys_std_widgets_bookmarks` AS `twb` ON `tw`.`id` = `twb`.`widget_id` LEFT JOIN `sys_std_pages_widgets` AS `tpw` ON `tw`.`id` = `tpw`.`widget_id`
+WHERE  `tp`.`name` = 'bx_jobs';

+ 30 - 0
modules/boonex/jobs/js/entry.js

@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Events Events
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+function BxJobsEntry(oOptions) {
+    BxBaseModGroupsEntry.call(this, oOptions);
+
+    this._sObjName = oOptions.sObjName == undefined ? 'oBxJobsEntry' : oOptions.sObjName;
+
+    var $this = this;
+    $(document).ready(function() {
+        $this.init();
+    });
+}
+
+BxJobsEntry.prototype = Object.create(BxBaseModGroupsEntry.prototype);
+BxJobsEntry.prototype.constructor = BxJobsEntry;
+
+BxJobsEntry.prototype.init = function() {
+    if ('UTC' == $("[name = 'timezone']").val())
+        $("[name = 'timezone']").val(moment.tz.guess());
+};
+
+/** @} */

+ 16 - 0
modules/boonex/jobs/js/invite_popup.js

@@ -0,0 +1,16 @@
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+function BxJobsInvitePopup(oOptions) {
+    BxBaseModJobsInvitePopup.call(this, oOptions);
+}
+
+BxJobsInvitePopup.prototype = Object.create(BxBaseModJobsInvitePopup.prototype);
+BxJobsInvitePopup.prototype.constructor = BxJobsInvitePopup;

+ 43 - 0
modules/boonex/jobs/js/main.js

@@ -0,0 +1,43 @@
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+function BxJobsMain(oOptions) {
+    this._sActionsUrl = oOptions.sActionUrl;
+    this._sObjName = oOptions.sObjName == undefined ? 'oBxJobsMain' : oOptions.sObjName;
+    this._sObjNameGrid = oOptions.sObjNameGrid == undefined ? '' : oOptions.sObjNameGrid;
+    
+    this._sAnimationEffect = oOptions.sAnimationEffect == undefined ? 'fade' : oOptions.sAnimationEffect;
+    this._iAnimationSpeed = oOptions.iAnimationSpeed == undefined ? 'slow' : oOptions.iAnimationSpeed;
+
+    this._aHtmlIds = oOptions.aHtmlIds == undefined ? {} : oOptions.aHtmlIds;
+}
+
+BxJobsMain.prototype.onClickSetRole = function(iFanProfileId, iRole) {
+    $('.bx-popup-applied:visible').dolPopupHide();
+
+    if(glGrids[this._sObjNameGrid] != undefined)
+        glGrids[this._sObjNameGrid].actionWithId(iFanProfileId, 'set_role_submit', {role: iRole}, '', false, false);
+};
+
+BxJobsMain.prototype.onClickSetRoleMulti = function(oElement, iFanProfileId, iRole) {
+    if(!glGrids[this._sObjNameGrid])
+        return;
+
+    var oSiblings = $(oElement).parents('.bx-base-group-sr-role:first').siblings();
+    if(iRole == 0)
+        oSiblings.find('input:checked').removeAttr('checked');
+    else
+        oSiblings.find("input[value = '0']:checked").removeAttr('checked');
+
+    var sRoles = $(oElement).parents('.bx-base-group-sr-roles:first').find('input:checked').serialize();
+    glGrids[this._sObjNameGrid].actionWithId(iFanProfileId, 'set_role_submit', {}, sRoles, false, false);
+};
+
+/** @} */

+ 21 - 0
modules/boonex/jobs/js/manage_tools.js

@@ -0,0 +1,21 @@
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+function BxJobsManageTools(oOptions)
+{
+    BxBaseModJobsManageTools.call(this, oOptions);
+
+    this._sObjName = oOptions.sObjName == undefined ? 'oBxJobsManageTools' : oOptions.sObjName;
+}
+
+BxJobsManageTools.prototype = Object.create(BxBaseModJobsManageTools.prototype);
+BxJobsManageTools.prototype.constructor = BxJobsManageTools;
+
+/** @} */

+ 20 - 0
modules/boonex/jobs/js/prices.js

@@ -0,0 +1,20 @@
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Jobs Jobs
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+function BxJobsPrices(oOptions) {
+    BxBaseModJobsPrices.call(this, oOptions);
+
+    this._sObjName = oOptions.sObjName == undefined ? 'oBxJobsPrices' : oOptions.sObjName;
+}
+
+BxJobsPrices.prototype = Object.create(BxBaseModJobsPrices.prototype);
+BxJobsPrices.prototype.constructor = BxJobsPrices;
+
+/** @} */

+ 18 - 0
modules/boonex/jobs/request.php

@@ -0,0 +1,18 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Groups Groups
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+require_once(BX_DIRECTORY_PATH_INC . "design.inc.php");
+
+check_logged();
+
+BxBaseModProfileRequest::processAsAction($GLOBALS['aModule'], $GLOBALS['aRequest']);
+
+/** @} */

+ 13 - 0
modules/boonex/jobs/template/images/icons/std-icon.svg

@@ -0,0 +1,13 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="48" height="48" fill="url(#paint0_linear_221_2571)"/>
+<path d="M37.161 33C38.285 33 39.1789 32.2928 39.9817 31.3037C41.6248 29.2791 38.9269 27.6612 37.8981 26.8689C36.852 26.0634 35.6841 25.6071 34.5 25.5M33 22.5C35.071 22.5 36.75 20.8211 36.75 18.75C36.75 16.6789 35.071 15 33 15" stroke="white" stroke-width="2.25" stroke-linecap="round"/>
+<path d="M10.8389 33C9.71499 33 8.821 32.2928 8.01832 31.3037C6.37513 29.2791 9.073 27.6612 10.102 26.8689C11.148 26.0634 12.3159 25.6071 13.5 25.5M14.25 22.5C12.1789 22.5 10.5 20.8211 10.5 18.75C10.5 16.6789 12.1789 15 14.25 15" stroke="white" stroke-width="2.25" stroke-linecap="round"/>
+<path d="M18.1257 28.6668C16.593 29.6145 12.5745 31.5496 15.022 33.9711C16.2177 35.154 17.5493 36 19.2234 36H28.7766C30.4507 36 31.7823 35.154 32.9779 33.9711C35.4255 31.5496 31.407 29.6145 29.8743 28.6668C26.2801 26.4444 21.7198 26.4444 18.1257 28.6668Z" stroke="white" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M29.25 17.25C29.25 20.1495 26.8995 22.5 24 22.5C21.1005 22.5 18.75 20.1495 18.75 17.25C18.75 14.3505 21.1005 12 24 12C26.8995 12 29.25 14.3505 29.25 17.25Z" stroke="white" stroke-width="2.25"/>
+<defs>
+<linearGradient id="paint0_linear_221_2571" x1="24" y1="0" x2="24" y2="48" gradientUnits="userSpaceOnUse">
+<stop stop-color="#F43F5E"/>
+<stop offset="1" stop-color="#BE123C"/>
+</linearGradient>
+</defs>
+</svg>

+ 24 - 0
modules/boonex/jobs/template/images/no-picture.svg

@@ -0,0 +1,24 @@
+<svg width="240" height="240" viewBox="0 0 240 240" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M60.8307 70.0068C60.5544 70.0023 60.2774 70 60 70C32.3858 70 10 92.3858 10 120C10 147.614 32.3858 170 60 170C87.6142 170 110 147.614 110 120C110 119.723 109.998 119.446 109.993 119.169C84.8736 114.952 65.0479 95.1264 60.8307 70.0068Z" fill="url(#paint0_linear_429_5623)"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M169.993 60.8307C169.998 60.5544 170 60.2774 170 60C170 32.3858 147.614 10 120 10C92.3858 10 70 32.3858 70 60C70 87.6142 92.3858 110 120 110C120.277 110 120.554 109.998 120.831 109.993C125.048 84.8736 144.874 65.0479 169.993 60.8307Z" fill="url(#paint1_linear_429_5623)"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M70.0068 179.169C70.0023 179.446 70 179.723 70 180C70 207.614 92.3858 230 120 230C147.614 230 170 207.614 170 180C170 152.386 147.614 130 120 130C119.723 130 119.446 130.002 119.169 130.007C114.952 155.126 95.1264 174.952 70.0068 179.169Z" fill="url(#paint2_linear_429_5623)"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M180 170C207.614 170 230 147.614 230 120C230 92.3858 207.614 70 180 70C152.386 70 130 92.3858 130 120C130 120.277 130.002 120.554 130.007 120.831C155.126 125.048 174.952 144.874 179.169 169.993C179.446 169.998 179.723 170 180 170Z" fill="url(#paint3_linear_429_5623)"/>
+<defs>
+<linearGradient id="paint0_linear_429_5623" x1="60" y1="70" x2="60" y2="170" gradientUnits="userSpaceOnUse">
+<stop stop-color="#FB7185"/>
+<stop offset="1" stop-color="#E11D48"/>
+</linearGradient>
+<linearGradient id="paint1_linear_429_5623" x1="120" y1="10" x2="120" y2="110" gradientUnits="userSpaceOnUse">
+<stop stop-color="#34D399"/>
+<stop offset="1" stop-color="#059669"/>
+</linearGradient>
+<linearGradient id="paint2_linear_429_5623" x1="120" y1="130" x2="120" y2="230" gradientUnits="userSpaceOnUse">
+<stop stop-color="#FB923C"/>
+<stop offset="1" stop-color="#EA580C"/>
+</linearGradient>
+<linearGradient id="paint3_linear_429_5623" x1="180" y1="70" x2="180" y2="170" gradientUnits="userSpaceOnUse">
+<stop stop-color="#60A5FA"/>
+<stop offset="1" stop-color="#2563EB"/>
+</linearGradient>
+</defs>
+</svg>