diff --git a/app/admin/ajax-sql.php b/app/admin/ajax-sql.php index 1ae0253..dac3d00 100644 --- a/app/admin/ajax-sql.php +++ b/app/admin/ajax-sql.php @@ -7,12 +7,9 @@ } $sql = trim(Request::val('sql')); - if( - !preg_match('/^SELECT\s+.*?\s+FROM\s+\S+/i', $sql) - && !preg_match('/^SHOW\s+/i', $sql) - ) { + if(!preg_match('/^\s*(SELECT\s+.*?\s+FROM\s+\S+|SHOW\s+)/is', $sql)) { @header('HTTP/1.0 404 Not Found'); - die("Invalid query"); + die('Invalid query'); } // force a limit of 1000 to SELECT queries in case no limit specified diff --git a/app/admin/incFunctions.php b/app/admin/incFunctions.php index 12256bf..be19c66 100644 --- a/app/admin/incFunctions.php +++ b/app/admin/incFunctions.php @@ -87,7 +87,8 @@ ######################################################################## function set_headers() { @header('Content-Type: text/html; charset=' . datalist_db_encoding); - @header('X-Frame-Options: SAMEORIGIN'); // prevent iframing by other sites to prevent clickjacking + // @header('X-Frame-Options: SAMEORIGIN'); // deprecated + @header("Content-Security-Policy: frame-ancestors 'self' " . application_url()); // prevent iframing by other sites to prevent clickjacking } ######################################################################## function get_tables_info($skip_authentication = false) { @@ -424,7 +425,13 @@ function logSlowQuery($statement, $duration) { $statement = makeSafe(trim(preg_replace('/^\s+/m', ' ', $statement))); $duration = floatval($duration); $memberID = makeSafe(getLoggedMemberID()); - $uri = makeSafe($_SERVER['REQUEST_URI']); + $uri = $_SERVER['REQUEST_URI']; + + // for 'admin/ajax-sql.php' strip sql and csrf_token params from uri + if(strpos($uri, 'admin/ajax-sql.php') !== false) { + $uri = stripParams($uri, ['sql', 'csrf_token']); + } + $uri = makeSafe($uri); sql("INSERT INTO `appgini_query_log` SET `statement`='$statement', @@ -445,7 +452,13 @@ function logErrorQuery($statement, $error) { $statement = makeSafe(trim(preg_replace('/^\s+/m', ' ', $statement))); $error = makeSafe($error); $memberID = makeSafe(getLoggedMemberID()); - $uri = makeSafe($_SERVER['REQUEST_URI']); + $uri = $_SERVER['REQUEST_URI']; + + // for 'admin/ajax-sql.php' strip sql and csrf_token params from uri + if(strpos($uri, 'admin/ajax-sql.php') !== false) { + $uri = stripParams($uri, ['sql', 'csrf_token']); + } + $uri = makeSafe($uri); sql("INSERT INTO `appgini_query_log` SET `statement`='$statement', @@ -455,6 +468,42 @@ function logErrorQuery($statement, $error) { ", $o); } + ######################################################################## + /** + * Strip specified parameters from a URL + * @param string $uri - the URL to strip parameters from, could be a full URL or just a URI + * @param array $paramsToRemove - an array of parameter names to remove + * @return string - the URL with specified parameters removed + */ + function stripParams($uri, $paramsToRemove) { + // Parse the URL and its components + $parsedUrl = parse_url($uri); + + // Parse the query string into an associative array + parse_str($parsedUrl['query'] ?? '', $queryParams); + + // Remove specified parameters + foreach ($paramsToRemove as $param) { + unset($queryParams[$param]); + } + + // Reconstruct the query string + $newQuery = http_build_query($queryParams); + + // Reconstruct the URL + $newUrl = $parsedUrl['scheme'] ?? ''; + if (!empty($newUrl)) { + $newUrl .= '://'; + } + $newUrl .= $parsedUrl['host'] ?? ''; + $newUrl .= $parsedUrl['path'] ?? ''; + if (!empty($newQuery)) { + $newUrl .= '?' . $newQuery; + } + $newUrl .= $parsedUrl['fragment'] ?? ''; + + return $newUrl; + } ######################################################################## function createQueryLogTable() { static $created = false; @@ -1719,7 +1768,7 @@ function get_table_fields($tn = null, $include_internal_tables = false) { 'done' => "INT DEFAULT '0'", ], 'appgini_query_log' => [ - 'datetime' => "TIMESTAMP DEFAULT CURRENT_TIMESTAMP", + 'datetime' => "TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP", 'statement' => "LONGTEXT", 'duration' => "DECIMAL(10,2) UNSIGNED DEFAULT '0.00'", 'error' => "TEXT", diff --git a/app/admin/incHeader.php b/app/admin/incHeader.php index 2751f68..3df7ec7 100644 --- a/app/admin/incHeader.php +++ b/app/admin/incHeader.php @@ -6,8 +6,9 @@ - + + <?php echo APP_TITLE . ' | ' . $Translation['admin area'] . (isset($GLOBALS['page_title']) ? html_attr(" | {$GLOBALS['page_title']}") : ''); ?> diff --git a/app/admin/pageInstallPlugin.php b/app/admin/pageInstallPlugin.php index d0068d4..9e532f8 100644 --- a/app/admin/pageInstallPlugin.php +++ b/app/admin/pageInstallPlugin.php @@ -141,11 +141,16 @@ function showPage() { function pageJS() { global $Translation; + $pluginsOrderNum = getUserData('pluginsOrderNum'); + $pluginsEmail = getUserData('pluginsEmail'); + ob_start(); ?> + diff --git a/app/admin/pageServerStatus.php b/app/admin/pageServerStatus.php index aabfd48..b63ea39 100644 --- a/app/admin/pageServerStatus.php +++ b/app/admin/pageServerStatus.php @@ -1,6 +1,6 @@ - {$Translation['google API key instructions']}"); ?> + {$Translation['google API key instructions']}
{$Translation['restrict API key']}
"); ?> diff --git a/app/applicants_and_tenants_dml.php b/app/applicants_and_tenants_dml.php index e60a7fd..c00d0cf 100644 --- a/app/applicants_and_tenants_dml.php +++ b/app/applicants_and_tenants_dml.php @@ -111,15 +111,16 @@ function applicants_and_tenants_delete($selected_id, $AllowDeleteOfParents = fal $id = db_fetch_row($res); $rires = sql("SELECT COUNT(1) FROM `applications_leases` WHERE `tenants`='" . makeSafe($id[0]) . "'", $eo); $rirow = db_fetch_row($rires); + $childrenATag = '%s'; if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation["couldn't delete"]; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'applications_leases', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'applications_leases'), $RetMsg); return $RetMsg; } elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation['confirm delete']; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'applications_leases', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'applications_leases'), $RetMsg); $RetMsg = str_replace('', '', $RetMsg); $RetMsg = str_replace('', '', $RetMsg); return $RetMsg; @@ -130,15 +131,16 @@ function applicants_and_tenants_delete($selected_id, $AllowDeleteOfParents = fal $id = db_fetch_row($res); $rires = sql("SELECT COUNT(1) FROM `residence_and_rental_history` WHERE `tenant`='" . makeSafe($id[0]) . "'", $eo); $rirow = db_fetch_row($rires); + $childrenATag = '%s'; if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation["couldn't delete"]; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'residence_and_rental_history', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'residence_and_rental_history'), $RetMsg); return $RetMsg; } elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation['confirm delete']; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'residence_and_rental_history', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'residence_and_rental_history'), $RetMsg); $RetMsg = str_replace('', '', $RetMsg); $RetMsg = str_replace('', '', $RetMsg); return $RetMsg; @@ -149,15 +151,16 @@ function applicants_and_tenants_delete($selected_id, $AllowDeleteOfParents = fal $id = db_fetch_row($res); $rires = sql("SELECT COUNT(1) FROM `employment_and_income_history` WHERE `tenant`='" . makeSafe($id[0]) . "'", $eo); $rirow = db_fetch_row($rires); + $childrenATag = '%s'; if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation["couldn't delete"]; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'employment_and_income_history', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'employment_and_income_history'), $RetMsg); return $RetMsg; } elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation['confirm delete']; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'employment_and_income_history', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'employment_and_income_history'), $RetMsg); $RetMsg = str_replace('', '', $RetMsg); $RetMsg = str_replace('', '', $RetMsg); return $RetMsg; @@ -168,15 +171,16 @@ function applicants_and_tenants_delete($selected_id, $AllowDeleteOfParents = fal $id = db_fetch_row($res); $rires = sql("SELECT COUNT(1) FROM `references` WHERE `tenant`='" . makeSafe($id[0]) . "'", $eo); $rirow = db_fetch_row($rires); + $childrenATag = '%s'; if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation["couldn't delete"]; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'references', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'references'), $RetMsg); return $RetMsg; } elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation['confirm delete']; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'references', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'references'), $RetMsg); $RetMsg = str_replace('', '', $RetMsg); $RetMsg = str_replace('', '', $RetMsg); return $RetMsg; @@ -388,9 +392,9 @@ function applicants_and_tenants_form($selectedId = '', $allowUpdate = true, $all $templateCode = str_replace('<%%EMBEDDED%%>', (Request::val('Embedded') ? 'Embedded=1' : ''), $templateCode); // process buttons if($showSaveNew) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } elseif($showSaveAsCopy) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } else { $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } @@ -405,7 +409,7 @@ function applicants_and_tenants_form($selectedId = '', $allowUpdate = true, $all if($hasSelectedId) { if(!Request::val('Embedded')) $templateCode = str_replace('<%%DVPRINT_BUTTON%%>', '', $templateCode); if($allowUpdate) - $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); else $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); diff --git a/app/applications_leases_dml.php b/app/applications_leases_dml.php index 9b3f154..79aa23d 100644 --- a/app/applications_leases_dml.php +++ b/app/applications_leases_dml.php @@ -670,9 +670,9 @@ function unit_reload__RAND__(filterer_property) { $templateCode = str_replace('<%%EMBEDDED%%>', (Request::val('Embedded') ? 'Embedded=1' : ''), $templateCode); // process buttons if($showSaveNew) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } elseif($showSaveAsCopy) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } else { $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } @@ -687,7 +687,7 @@ function unit_reload__RAND__(filterer_property) { if($hasSelectedId) { if(!Request::val('Embedded')) $templateCode = str_replace('<%%DVPRINT_BUTTON%%>', '', $templateCode); if($allowUpdate) - $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); else $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); diff --git a/app/common.js b/app/common.js index d8174c9..64ce764 100644 --- a/app/common.js +++ b/app/common.js @@ -1,9 +1,14 @@ var AppGini = AppGini || {}; -AppGini.version = 24.15; +AppGini.version = 24.18; + +/* global constants */ +const NO_GEOLOCATION_THOUGH_REQUIRED = -1; +const NO_GEOLOCATION = 0; +const GEOLOCATION_POPULATED = 1; /* initials and fixes */ -jQuery(function() { +$j(function() { AppGini.count_ajaxes_blocking_saving = 0; /* add ":truncated" pseudo-class to detect elements with clipped text */ @@ -75,10 +80,10 @@ jQuery(function() { }); /* don't allow responsive images to initially exceed the smaller of their actual dimensions, or .6 container width */ - jQuery('.detail_view .img-responsive').each(function() { + $j('.detail_view .img-responsive').each(function() { var pic_real_width, pic_real_height; - var img = jQuery(this); - jQuery('') // Make in memory copy of image to avoid css issues + var img = $j(this); + $j('') // Make in memory copy of image to avoid css issues .attr('src', img.attr('src')) .on('load', function() { pic_real_width = this.width; @@ -89,10 +94,10 @@ jQuery(function() { }); }); - jQuery('.table-responsive .img-responsive').each(function() { + $j('.table-responsive .img-responsive').each(function() { var pic_real_width, pic_real_height; - var img = jQuery(this); - jQuery('') // Make in memory copy of image to avoid css issues + var img = $j(this); + $j('') // Make in memory copy of image to avoid css issues .attr('src', img.attr('src')) .on('load', function() { pic_real_width = this.width; @@ -104,15 +109,15 @@ jQuery(function() { }); /* toggle TV action buttons based on selected records */ - jQuery('.record_selector').click(function() { - var id = jQuery(this).val(); - var checked = jQuery(this).prop('checked'); + $j('.record_selector').click(function() { + var id = $j(this).val(); + var checked = $j(this).prop('checked'); update_action_buttons(); }); /* select/deselect all records in TV */ - jQuery('#select_all_records').click(function() { - jQuery('.record_selector').prop('checked', jQuery(this).prop('checked')); + $j('#select_all_records').click(function() { + $j('.record_selector').prop('checked', $j(this).prop('checked')); update_action_buttons(); }); @@ -133,14 +138,6 @@ jQuery(function() { /* remove empty email links */ $j('a[href="mailto:"]').remove(); - /* Disable action buttons when form is submitted to avoid user re-submission on slow connections */ - $j('form').eq(0).submit(function() { - setTimeout(function() { - var tn = AppGini.currentTableName(); - $j('#' + tn + '_dv_action_buttons').find('.btn').prop('disabled', true); - }, 200); // delay purpose is to allow submitting the button values first then disable them. - }); - /* fix links inside alerts */ $j('.alert a:not(.btn)').addClass('alert-link'); @@ -329,46 +326,42 @@ jQuery(function() { // render the DV layout toolbar AppGini.renderDVLayoutToolbar(); - // handle click on layout toolbar buttons - $j('.detail_view-layout').on('click', 'a', function(e) { - e.preventDefault(); - - if($j(this).hasClass('switch-to-single-column-layout')) { - AppGini.applySingleColumnLayout(); - } else if($j(this).hasClass('switch-to-double-column-layout')) { - AppGini.applyDoubleColumnLayout(); - } else if($j(this).hasClass('switch-to-triple-column-layout')) { - AppGini.applyTripleColumnLayout(); - } - }); - + // show records per page selector in TV AppGini.renderTVRecordsPerPageSelector(); AppGini.appendRecordsPerPageToTableLinks(); + $j('#insert').on('click', (e) => { AppGini.handleSubmitRecord(e, true) }); + $j('#update').on('click', (e) => { AppGini.handleSubmitRecord(e, false) }); + + // handle clicking 'Capture my location' button + AppGini.handleCaptureLocation(); + + // ignore form validation on clicking '#addNew' button + $j('#addNew').on('click', (e) => $j('form').attr('novalidate', 'novalidate')); }); /* show/hide TV action buttons based on whether records are selected or not */ function update_action_buttons() { - if(jQuery('.record_selector:checked').length) { - jQuery('.selected_records').removeClass('hidden'); - jQuery('#select_all_records') - .prop('checked', (jQuery('.record_selector:checked').length == jQuery('.record_selector').length)); + if($j('.record_selector:checked').length) { + $j('.selected_records').removeClass('hidden'); + $j('#select_all_records') + .prop('checked', ($j('.record_selector:checked').length == $j('.record_selector').length)); } else { - jQuery('.selected_records').addClass('hidden'); + $j('.selected_records').addClass('hidden'); } } /* fix table-responsive behavior on Chrome */ function fix_table_responsive_width() { - var resp_width = jQuery('div.table-responsive').width(); + var resp_width = $j('div.table-responsive').width(); var table_width; if(resp_width) { - jQuery('div.table-responsive table').width('100%'); - table_width = jQuery('div.table-responsive table').width(); - resp_width = jQuery('div.table-responsive').width(); + $j('div.table-responsive table').width('100%'); + table_width = $j('div.table-responsive table').width(); + resp_width = $j('div.table-responsive').width(); if(resp_width == table_width) { - jQuery('div.table-responsive table').width(resp_width - 1); + $j('div.table-responsive table').width(resp_width - 1); } } } @@ -442,57 +435,93 @@ AppGini.ajaxCache = function() { }; }; -function applicants_and_tenants_validateData() { +function applicants_and_tenants_validateData(insertMode) { $j('.has-error').removeClass('has-error'); var errors = false; // check all required fields have values - if(!AppGini.Validation.fieldRequired('radio', 'status', 'Status')) return false; + const reqFields = [ + // [field-type, field-name, field-caption], ... + ['radio', 'status', 'Status'], + ]; + + reqFields.map(function(rf) { + // avoid displaying more error messages and overwhelming users + if(rf.length != 3 || errors) return; + + if(!AppGini.Validation.fieldRequired(rf[0], rf[1], rf[2], insertMode)) errors = true; + }); + + if(errors) return false; return !errors; } -function applications_leases_validateData() { +function applications_leases_validateData(insertMode) { $j('.has-error').removeClass('has-error'); var errors = false; // check all required fields have values - if(!AppGini.Validation.fieldRequired('radio', 'status', 'Application status')) return false; - if(!AppGini.Validation.fieldRequired('radio', 'type', 'Lease type')) return false; - if(!AppGini.Validation.fieldRequired('list', 'recurring_charges_frequency', 'Recurring charges frequency')) return false; + const reqFields = [ + // [field-type, field-name, field-caption], ... + ['radio', 'status', 'Application status'], + ['radio', 'type', 'Lease type'], + ['list', 'recurring_charges_frequency', 'Recurring charges frequency'], + ]; + + reqFields.map(function(rf) { + // avoid displaying more error messages and overwhelming users + if(rf.length != 3 || errors) return; + + if(!AppGini.Validation.fieldRequired(rf[0], rf[1], rf[2], insertMode)) errors = true; + }); + + if(errors) return false; return !errors; } -function residence_and_rental_history_validateData() { +function residence_and_rental_history_validateData(insertMode) { $j('.has-error').removeClass('has-error'); var errors = false; return !errors; } -function employment_and_income_history_validateData() { +function employment_and_income_history_validateData(insertMode) { $j('.has-error').removeClass('has-error'); var errors = false; return !errors; } -function references_validateData() { +function references_validateData(insertMode) { $j('.has-error').removeClass('has-error'); var errors = false; return !errors; } -function rental_owners_validateData() { +function rental_owners_validateData(insertMode) { $j('.has-error').removeClass('has-error'); var errors = false; return !errors; } -function properties_validateData() { +function properties_validateData(insertMode) { $j('.has-error').removeClass('has-error'); var errors = false; // check all required fields have values - if(!AppGini.Validation.fieldRequired('text', 'property_name', 'Property Name')) return false; - if(!AppGini.Validation.fieldRequired('radio', 'type', 'Type')) return false; + const reqFields = [ + // [field-type, field-name, field-caption], ... + ['text', 'property_name', 'Property Name'], + ['radio', 'type', 'Type'], + ]; + + reqFields.map(function(rf) { + // avoid displaying more error messages and overwhelming users + if(rf.length != 3 || errors) return; + + if(!AppGini.Validation.fieldRequired(rf[0], rf[1], rf[2], insertMode)) errors = true; + }); + + if(errors) return false; // check file uploads (file type and size) if($j('#photo').val() && !AppGini.checkFileUpload('photo', 'jpg|jpeg|gif|png|webp', 2048000)) { @@ -502,7 +531,7 @@ function properties_validateData() { return !errors; } -function property_photos_validateData() { +function property_photos_validateData(insertMode) { $j('.has-error').removeClass('has-error'); var errors = false; @@ -514,12 +543,24 @@ function property_photos_validateData() { return !errors; } -function units_validateData() { +function units_validateData(insertMode) { $j('.has-error').removeClass('has-error'); var errors = false; // check all required fields have values - if(!AppGini.Validation.fieldRequired('radio', 'status', 'Status')) return false; + const reqFields = [ + // [field-type, field-name, field-caption], ... + ['radio', 'status', 'Status'], + ]; + + reqFields.map(function(rf) { + // avoid displaying more error messages and overwhelming users + if(rf.length != 3 || errors) return; + + if(!AppGini.Validation.fieldRequired(rf[0], rf[1], rf[2], insertMode)) errors = true; + }); + + if(errors) return false; // check file uploads (file type and size) if($j('#photo').val() && !AppGini.checkFileUpload('photo', 'jpg|jpeg|gif|png|webp', 2048000)) { @@ -529,7 +570,7 @@ function units_validateData() { return !errors; } -function unit_photos_validateData() { +function unit_photos_validateData(insertMode) { $j('.has-error').removeClass('has-error'); var errors = false; @@ -674,7 +715,7 @@ function loadScript(jsUrl, cssUrl, callback) { * causes_closing: boolean, default is true. */ function modal_window(options) { - return jQuery('body').agModal(options).agModal('show').attr('id'); + return $j('body').agModal(options).agModal('show').attr('id'); } function random_string(string_length) { @@ -691,7 +732,7 @@ function random_string(string_length) { * @return array of IDs (PK values) of selected records in TV (records that the user checked) */ function get_selected_records_ids() { - return jQuery('.record_selector:checked').map(function() { return jQuery(this).val() }).get(); + return $j('.record_selector:checked').map(function() { return $j(this).val() }).get(); } function print_multiple_dv_tvdv(t, ids) { @@ -743,8 +784,8 @@ function mass_delete(t, ids) { '
' + '' + ''); +} + diff --git a/app/datalist.php b/app/datalist.php index 928520a..d29cc8f 100644 --- a/app/datalist.php +++ b/app/datalist.php @@ -1033,8 +1033,13 @@ function Render() { $rowTemp = str_replace("<%%VALUE($fieldTVCaption)%%>", thisOr($fd, ''), $rowTemp); $rowTemp = str_replace("<%%HTML_ATTR($fieldTVCaption)%%>", html_attr($fd), $rowTemp); - if(strpos($rowTemp, "<%%YOUTUBETHUMB($fieldTVCaption)%%>") !== false) $rowTemp = str_replace("<%%YOUTUBETHUMB($fieldTVCaption)%%>", thisOr(get_embed('youtube', $fd, '', '', 'thumbnail_url'), 'blank.gif'), $rowTemp); - if(strpos($rowTemp, "<%%GOOGLEMAPTHUMB($fieldTVCaption)%%>") !== false) $rowTemp = str_replace("<%%GOOGLEMAPTHUMB($fieldTVCaption)%%>", thisOr(get_embed('googlemap', $fd, '', '', 'thumbnail_url'), 'blank.gif'), $rowTemp); + if(strpos($rowTemp, "<%%YOUTUBETHUMB($fieldTVCaption)%%>") !== false) + $rowTemp = str_replace("<%%YOUTUBETHUMB($fieldTVCaption)%%>", thisOr(get_embed('youtube', $fd, '', '', 'thumbnail_url'), 'blank.gif'), $rowTemp); + if(strpos($rowTemp, "<%%GOOGLEMAPTHUMB($fieldTVCaption)%%>") !== false) + $rowTemp = str_replace("<%%GOOGLEMAPTHUMB($fieldTVCaption)%%>", thisOr(get_embed('googlemap', $fd, '', '', 'thumbnail'), 'blank.gif'), $rowTemp); + if(strpos($rowTemp, "<%%GOOGLEMAPTHUMBPINPOINT($fieldTVCaption)%%>") !== false) + $rowTemp = str_replace("<%%GOOGLEMAPTHUMBPINPOINT($fieldTVCaption)%%>", thisOr(get_embed('googlemap', $fd, '', '', 'thumbnail-pinpoint'), 'blank.gif'), $rowTemp); + if(thisOr($fd) == ' ' && preg_match('/TableName}-dv.js\">\n"; + $dvModDate = @filemtime($dvJSHooksFile); + $this->HTML .= "\n"; } return; diff --git a/app/defaultLang.php b/app/defaultLang.php index c27706f..64514d7 100644 --- a/app/defaultLang.php +++ b/app/defaultLang.php @@ -563,7 +563,6 @@ 'remember me' => 'Remember me', 'go to signup' => "Don't have a username?
 
Sign up here", 'forgot password' => 'Forgot your password? Click here', - 'browse as guest' => 'Continue browsing as a guest', 'no table access' => "You don't have enough permissions to access any page here. Please sign in first.", 'signup' => 'Sign up', 'user already exists' => "Username '' already exists. Try another username.", @@ -884,4 +883,10 @@ // Added in 24.14 'Copy permissions from another group' => 'Copy permissions from another group', 'revert permissions' => 'Revert permissions', + + // Added in 24.18 + 'Capture my location' => 'Capture my location', + 'Could not capture your location' => 'Could not capture your location', + 'You must allow the browser to capture your location' => 'You must allow the browser to capture your location', + 'restrict API key' => 'IMPORTANT! Make sure to add an IP or website restriction to your API key to protect it against abuse.', ]; diff --git a/app/definitions.php b/app/definitions.php index 1727819..4173a72 100644 --- a/app/definitions.php +++ b/app/definitions.php @@ -3,7 +3,7 @@ @define('SESSION_NAME', 'Rental_property_manager'); @define('APP_TITLE', 'Rental Property Manager'); @define('APP_DIR', __DIR__); - @define('APP_VERSION', '24.15'); + @define('APP_VERSION', '24.18'); @define('maxSortBy', 4); @define('empty_lookup_value', '{empty_value}'); @define('MULTIPLE_SUPER_ADMINS', false); diff --git a/app/employment_and_income_history_dml.php b/app/employment_and_income_history_dml.php index 89f0682..04285e4 100644 --- a/app/employment_and_income_history_dml.php +++ b/app/employment_and_income_history_dml.php @@ -372,9 +372,9 @@ function tenant_reload__RAND__() { $templateCode = str_replace('<%%EMBEDDED%%>', (Request::val('Embedded') ? 'Embedded=1' : ''), $templateCode); // process buttons if($showSaveNew) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } elseif($showSaveAsCopy) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } else { $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } @@ -389,7 +389,7 @@ function tenant_reload__RAND__() { if($hasSelectedId) { if(!Request::val('Embedded')) $templateCode = str_replace('<%%DVPRINT_BUTTON%%>', '', $templateCode); if($allowUpdate) - $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); else $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); diff --git a/app/footer.php b/app/footer.php index c16688a..a0a600c 100644 --- a/app/footer.php +++ b/app/footer.php @@ -9,7 +9,7 @@
diff --git a/app/header.php b/app/header.php index 2f24c98..7db2d0f 100644 --- a/app/header.php +++ b/app/header.php @@ -4,8 +4,9 @@ - + + <?php echo APP_TITLE . (isset($x->TableTitle) ? ' | ' . $x->TableTitle : ''); ?> @@ -39,6 +40,7 @@ 'imgFolder' => rtrim(config('adminConfig')['baseUploadPath'], '\\/') . '/', 'url' => application_url(), 'uri' => application_uri(), + 'googleAPIKey' => config('adminConfig')['googleAPIKey'], ]; ?> var AppGini = AppGini || {}; @@ -46,11 +48,13 @@ AppGini.config = - + + + - TableName) && is_file(__DIR__ . "/hooks/{$x->TableName}-tv.js")) { ?> - + TableName) && is_file(__DIR__ . "/hooks/{$x->TableName}-tv.js") && strpos(@$x->ContentType, 'tableview') !== false) { ?> + diff --git a/app/home.php b/app/home.php index d03a867..932ddfe 100644 --- a/app/home.php +++ b/app/home.php @@ -48,8 +48,8 @@ @@ -179,7 +179,7 @@ } elseif($mi['username'] && $mi['username'] != $guest_username) { // non-guest user but no tables to access - die(error_message($Translation['no table access'], false)); + die(error_message($Translation['no table access'], application_url('index.php?signIn=1'), false)); } else { ?>"; - } else { - return $thumbnail_url; - } - } else { + if(!preg_match($coords_regex, $url_parts['path'] . '?' . $url_parts['query'], $m)) return '
' . $Translation['cant retrieve coordinates from url'] . '
'; + + list($lat, $long, $zoom) = explode(',', $m[0]); + $zoom = intval($zoom); + if(!$zoom) $zoom = 15; /* default zoom */ + if(!$max_height) $max_height = 360; + if(!$max_width) $max_width = 480; + + $api_key = config('adminConfig')['googleAPIKey']; + + // if max_height is all numeric, append 'px' to it + $frame_height = $max_height; + if(is_numeric($frame_height)) $frame_height .= 'px'; + + $embed_url = 'https://www.google.com/maps/embed/v1/%s?' . http_build_query([ + 'key' => $api_key, + 'zoom' => $zoom, + 'maptype' => 'roadmap', + ], '', '&'); + + $thumbnail_url = 'https://maps.googleapis.com/maps/api/staticmap?' . http_build_query([ + 'key' => $api_key, + 'zoom' => $zoom, + 'maptype' => 'roadmap', + 'size' => "{$max_width}x{$max_height}", + 'center' => "$lat,$long", + ], '', '&'); + + $iframe = ""; + + switch($retrieve) { + case 'html': + $embed_url = sprintf($embed_url, 'view') . '&' . http_build_query(['center' => "$lat,$long"]); + return sprintf($iframe, $embed_url); + case 'html-pinpoint': + $embed_url = sprintf($embed_url, 'place') . '&' . http_build_query(['q' => "$lat,$long"]); + return sprintf($iframe, $embed_url); + case 'thumbnail-pinpoint': + return $thumbnail_url . '&' . http_build_query(['markers' => "$lat,$long"]); + default: // 'thumbnail' + return $thumbnail_url; } } ######################################################### function request_cache($request, $force_fetch = false) { + static $cache_table_exists = null; $max_cache_lifetime = 7 * 86400; /* max cache lifetime in seconds before refreshing from source */ // force fetching request if no cache table exists - $cache_table_exists = sqlValue("show tables like 'membership_cache'"); + if($cache_table_exists === null) + $cache_table_exists = sqlValue("show tables like 'membership_cache'"); + if(!$cache_table_exists) return request_cache($request, true); diff --git a/app/language.php b/app/language.php index 5108d93..becf5ab 100644 --- a/app/language.php +++ b/app/language.php @@ -590,7 +590,6 @@ 'remember me' => 'Remember me', 'go to signup' => "Don't have a username?
  Sign up here", 'forgot password' => 'Forgot your password? Click here', - 'browse as guest' => 'Continue browsing as a guest', 'no table access' => "You don't have enough permissions to access any page here. Please sign in first.", 'signup' => 'Sign up', 'user already exists' => "Username '' already exists. Try another username.", @@ -911,4 +910,10 @@ // Added in 24.14 'Copy permissions from another group' => 'Copy permissions from another group', 'revert permissions' => 'Revert permissions', + + // Added in 24.18 + 'Capture my location' => 'Capture my location', + 'Could not capture your location' => 'Could not capture your location', + 'You must allow the browser to capture your location' => 'You must allow the browser to capture your location', + 'restrict API key' => 'IMPORTANT! Make sure to add an IP or website restriction to your API key to protect it against abuse.', ]; \ No newline at end of file diff --git a/app/membership_signup.php b/app/membership_signup.php index 0a403ce..8e90970 100644 --- a/app/membership_signup.php +++ b/app/membership_signup.php @@ -2,8 +2,6 @@ include_once(__DIR__ . '/lib.php'); if(MULTI_TENANTS) redirect(SaaS::signupUrl(), true); - include_once(__DIR__ . '/header.php'); - $adminConfig = config('adminConfig'); $app_name = APP_TITLE; @@ -95,6 +93,8 @@ // drop-down of groups allowing self-signup $groupsDropDown = preg_replace('/<\/option>/i', '', htmlSQLSelect('groupID', "select groupID, concat(name, if(needsApproval=1, ' *', ' ')) from membership_groups where allowSignup=1 order by name", ($cg == 1 ? sqlValue("select groupID from membership_groups where allowSignup=1 order by name limit 1") : 0 ))); $groupsDropDown = str_replace('', $RetMsg); $RetMsg = str_replace('', '', $RetMsg); return $RetMsg; @@ -150,15 +151,16 @@ function properties_delete($selected_id, $AllowDeleteOfParents = false, $skipChe $id = db_fetch_row($res); $rires = sql("SELECT COUNT(1) FROM `property_photos` WHERE `property`='" . makeSafe($id[0]) . "'", $eo); $rirow = db_fetch_row($rires); + $childrenATag = '%s'; if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation["couldn't delete"]; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'property_photos', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'property_photos'), $RetMsg); return $RetMsg; } elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation['confirm delete']; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'property_photos', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'property_photos'), $RetMsg); $RetMsg = str_replace('', '', $RetMsg); $RetMsg = str_replace('', '', $RetMsg); return $RetMsg; @@ -169,15 +171,16 @@ function properties_delete($selected_id, $AllowDeleteOfParents = false, $skipChe $id = db_fetch_row($res); $rires = sql("SELECT COUNT(1) FROM `units` WHERE `property`='" . makeSafe($id[0]) . "'", $eo); $rirow = db_fetch_row($rires); + $childrenATag = '%s'; if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation["couldn't delete"]; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'units', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'units'), $RetMsg); return $RetMsg; } elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation['confirm delete']; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'units', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'units'), $RetMsg); $RetMsg = str_replace('', '', $RetMsg); $RetMsg = str_replace('', '', $RetMsg); return $RetMsg; @@ -541,9 +544,9 @@ function owner_reload__RAND__() { $templateCode = str_replace('<%%EMBEDDED%%>', (Request::val('Embedded') ? 'Embedded=1' : ''), $templateCode); // process buttons if($showSaveNew) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } elseif($showSaveAsCopy) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } else { $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } @@ -558,7 +561,7 @@ function owner_reload__RAND__() { if($hasSelectedId) { if(!Request::val('Embedded')) $templateCode = str_replace('<%%DVPRINT_BUTTON%%>', '', $templateCode); if($allowUpdate) - $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); else $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); diff --git a/app/property_photos_dml.php b/app/property_photos_dml.php index e5b9446..aeda25b 100644 --- a/app/property_photos_dml.php +++ b/app/property_photos_dml.php @@ -377,9 +377,9 @@ function property_reload__RAND__() { $templateCode = str_replace('<%%EMBEDDED%%>', (Request::val('Embedded') ? 'Embedded=1' : ''), $templateCode); // process buttons if($showSaveNew) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } elseif($showSaveAsCopy) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } else { $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } @@ -394,7 +394,7 @@ function property_reload__RAND__() { if($hasSelectedId) { if(!Request::val('Embedded')) $templateCode = str_replace('<%%DVPRINT_BUTTON%%>', '', $templateCode); if($allowUpdate) - $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); else $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); diff --git a/app/references_dml.php b/app/references_dml.php index 1b4c009..d47972a 100644 --- a/app/references_dml.php +++ b/app/references_dml.php @@ -344,9 +344,9 @@ function tenant_reload__RAND__() { $templateCode = str_replace('<%%EMBEDDED%%>', (Request::val('Embedded') ? 'Embedded=1' : ''), $templateCode); // process buttons if($showSaveNew) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } elseif($showSaveAsCopy) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } else { $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } @@ -361,7 +361,7 @@ function tenant_reload__RAND__() { if($hasSelectedId) { if(!Request::val('Embedded')) $templateCode = str_replace('<%%DVPRINT_BUTTON%%>', '', $templateCode); if($allowUpdate) - $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); else $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); diff --git a/app/rental_owners_dml.php b/app/rental_owners_dml.php index 332122d..6f38ae2 100644 --- a/app/rental_owners_dml.php +++ b/app/rental_owners_dml.php @@ -109,15 +109,16 @@ function rental_owners_delete($selected_id, $AllowDeleteOfParents = false, $skip $id = db_fetch_row($res); $rires = sql("SELECT COUNT(1) FROM `properties` WHERE `owner`='" . makeSafe($id[0]) . "'", $eo); $rirow = db_fetch_row($rires); + $childrenATag = '%s'; if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation["couldn't delete"]; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'properties', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'properties'), $RetMsg); return $RetMsg; } elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation['confirm delete']; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'properties', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'properties'), $RetMsg); $RetMsg = str_replace('', '', $RetMsg); $RetMsg = str_replace('', '', $RetMsg); return $RetMsg; @@ -342,9 +343,9 @@ function rental_owners_form($selectedId = '', $allowUpdate = true, $allowInsert $templateCode = str_replace('<%%EMBEDDED%%>', (Request::val('Embedded') ? 'Embedded=1' : ''), $templateCode); // process buttons if($showSaveNew) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } elseif($showSaveAsCopy) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } else { $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } @@ -359,7 +360,7 @@ function rental_owners_form($selectedId = '', $allowUpdate = true, $allowInsert if($hasSelectedId) { if(!Request::val('Embedded')) $templateCode = str_replace('<%%DVPRINT_BUTTON%%>', '', $templateCode); if($allowUpdate) - $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); else $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); diff --git a/app/residence_and_rental_history_dml.php b/app/residence_and_rental_history_dml.php index 0d4c761..f5fae65 100644 --- a/app/residence_and_rental_history_dml.php +++ b/app/residence_and_rental_history_dml.php @@ -374,9 +374,9 @@ function tenant_reload__RAND__() { $templateCode = str_replace('<%%EMBEDDED%%>', (Request::val('Embedded') ? 'Embedded=1' : ''), $templateCode); // process buttons if($showSaveNew) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } elseif($showSaveAsCopy) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } else { $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } @@ -391,7 +391,7 @@ function tenant_reload__RAND__() { if($hasSelectedId) { if(!Request::val('Embedded')) $templateCode = str_replace('<%%DVPRINT_BUTTON%%>', '', $templateCode); if($allowUpdate) - $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); else $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); diff --git a/app/resources/lib/WindowMessages.php b/app/resources/lib/WindowMessages.php index b7105ee..2013f7a 100644 --- a/app/resources/lib/WindowMessages.php +++ b/app/resources/lib/WindowMessages.php @@ -49,6 +49,9 @@ class WindowMessages { private static function getExistingOrNewWindowId() { $widFromRequest = Request::val('browser_window_id'); + // strip all non-alphanumeric characters + $widFromRequest = preg_replace('/[^a-z0-9]/i', '', $widFromRequest); + if($widFromRequest) return $widFromRequest; // abort if ajax request @@ -77,7 +80,7 @@ private static function getExistingOrNewWindowId() { */ public static function injectWindowId($buffer) { $wid = self::getExistingOrNewWindowId(); - + // if buffer already contains window id, do nothing if(strpos($buffer, 'name="browser_window_id" value="' . $wid) !== false) return $buffer; diff --git a/app/setup.php b/app/setup.php index c04722d..fdb769d 100644 --- a/app/setup.php +++ b/app/setup.php @@ -532,7 +532,7 @@ function db_test(delay) { db_test_in_progress = true; testFeedback - .html(AppGini.Translate._map['checking database info']) + .html() .removeClass('alert-danger alert-success hidden') .addClass('alert-warning'); @@ -543,12 +543,12 @@ function db_test(delay) { success: (resp) => { testFeedback .addClass('alert-success') - .html(AppGini.Translate._map['Database info is correct']) + .html() }, error: () => { testFeedback .addClass('alert-danger') - .html(AppGini.Translate._map['Database connection error']) + .html() }, complete: () => { db_test_in_progress = false; diff --git a/app/templates/children-applicants_and_tenants.php b/app/templates/children-applicants_and_tenants.php index da4a4be..e60db77 100644 --- a/app/templates/children-applicants_and_tenants.php +++ b/app/templates/children-applicants_and_tenants.php @@ -69,6 +69,7 @@ }); localStorage.removeItem(param.ChildTable + '_last_added_id'); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', @@ -87,6 +88,7 @@ childId: command.ChildID }); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', diff --git a/app/templates/children-applications_leases.php b/app/templates/children-applications_leases.php index e9a64a7..4adc3cf 100644 --- a/app/templates/children-applications_leases.php +++ b/app/templates/children-applications_leases.php @@ -69,6 +69,7 @@ }); localStorage.removeItem(param.ChildTable + '_last_added_id'); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', @@ -87,6 +88,7 @@ childId: command.ChildID }); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', diff --git a/app/templates/children-employment_and_income_history.php b/app/templates/children-employment_and_income_history.php index d61817a..78e1c75 100644 --- a/app/templates/children-employment_and_income_history.php +++ b/app/templates/children-employment_and_income_history.php @@ -69,6 +69,7 @@ }); localStorage.removeItem(param.ChildTable + '_last_added_id'); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', @@ -87,6 +88,7 @@ childId: command.ChildID }); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', diff --git a/app/templates/children-properties.php b/app/templates/children-properties.php index d266ca6..e75d506 100644 --- a/app/templates/children-properties.php +++ b/app/templates/children-properties.php @@ -69,6 +69,7 @@ }); localStorage.removeItem(param.ChildTable + '_last_added_id'); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', @@ -87,6 +88,7 @@ childId: command.ChildID }); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', diff --git a/app/templates/children-property_photos.php b/app/templates/children-property_photos.php index 8913dcd..d73de4d 100644 --- a/app/templates/children-property_photos.php +++ b/app/templates/children-property_photos.php @@ -69,6 +69,7 @@ }); localStorage.removeItem(param.ChildTable + '_last_added_id'); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', @@ -87,6 +88,7 @@ childId: command.ChildID }); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', diff --git a/app/templates/children-references.php b/app/templates/children-references.php index da221d8..f2b32d1 100644 --- a/app/templates/children-references.php +++ b/app/templates/children-references.php @@ -69,6 +69,7 @@ }); localStorage.removeItem(param.ChildTable + '_last_added_id'); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', @@ -87,6 +88,7 @@ childId: command.ChildID }); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', diff --git a/app/templates/children-rental_owners.php b/app/templates/children-rental_owners.php index 22c9a56..3de9a4b 100644 --- a/app/templates/children-rental_owners.php +++ b/app/templates/children-rental_owners.php @@ -69,6 +69,7 @@ }); localStorage.removeItem(param.ChildTable + '_last_added_id'); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', @@ -87,6 +88,7 @@ childId: command.ChildID }); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', diff --git a/app/templates/children-residence_and_rental_history.php b/app/templates/children-residence_and_rental_history.php index dceda3e..7c5224d 100644 --- a/app/templates/children-residence_and_rental_history.php +++ b/app/templates/children-residence_and_rental_history.php @@ -69,6 +69,7 @@ }); localStorage.removeItem(param.ChildTable + '_last_added_id'); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', @@ -87,6 +88,7 @@ childId: command.ChildID }); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', diff --git a/app/templates/children-unit_photos.php b/app/templates/children-unit_photos.php index 8d59df0..ce9e533 100644 --- a/app/templates/children-unit_photos.php +++ b/app/templates/children-unit_photos.php @@ -69,6 +69,7 @@ }); localStorage.removeItem(param.ChildTable + '_last_added_id'); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', @@ -87,6 +88,7 @@ childId: command.ChildID }); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', diff --git a/app/templates/children-units.php b/app/templates/children-units.php index ee9db05..cc00f2e 100644 --- a/app/templates/children-units.php +++ b/app/templates/children-units.php @@ -69,6 +69,7 @@ }); localStorage.removeItem(param.ChildTable + '_last_added_id'); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', @@ -87,6 +88,7 @@ childId: command.ChildID }); GetChildrenRecordsList({ Verb: 'reload' }); + AppGini.calculatedFields.init(); AppGini.scrollTo('children-tabs'); }, size: 'full', diff --git a/app/thumbnail.php b/app/thumbnail.php index aedcd1e..56d6e5b 100644 --- a/app/thumbnail.php +++ b/app/thumbnail.php @@ -69,7 +69,6 @@ function getImage($img = '') { if($thumbInfo && $fp) { $file_size = filesize($img); @header("Last-Modified: {$last_modified_gmt}", true, 200); - @header("Pragma:"); @header("Cache-Control: private, max-age=864000", true); @header("Content-type: {$thumbInfo['mime']}"); @header("Content-Length: {$file_size}"); diff --git a/app/unit_photos_dml.php b/app/unit_photos_dml.php index ed77e1a..9a6af74 100644 --- a/app/unit_photos_dml.php +++ b/app/unit_photos_dml.php @@ -377,9 +377,9 @@ function unit_reload__RAND__() { $templateCode = str_replace('<%%EMBEDDED%%>', (Request::val('Embedded') ? 'Embedded=1' : ''), $templateCode); // process buttons if($showSaveNew) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } elseif($showSaveAsCopy) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } else { $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } @@ -394,7 +394,7 @@ function unit_reload__RAND__() { if($hasSelectedId) { if(!Request::val('Embedded')) $templateCode = str_replace('<%%DVPRINT_BUTTON%%>', '', $templateCode); if($allowUpdate) - $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); else $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); diff --git a/app/units_dml.php b/app/units_dml.php index 0212d55..1d8e26c 100644 --- a/app/units_dml.php +++ b/app/units_dml.php @@ -131,15 +131,16 @@ function units_delete($selected_id, $AllowDeleteOfParents = false, $skipChecks = $id = db_fetch_row($res); $rires = sql("SELECT COUNT(1) FROM `applications_leases` WHERE `unit`='" . makeSafe($id[0]) . "'", $eo); $rirow = db_fetch_row($rires); + $childrenATag = '%s'; if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation["couldn't delete"]; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'applications_leases', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'applications_leases'), $RetMsg); return $RetMsg; } elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation['confirm delete']; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'applications_leases', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'applications_leases'), $RetMsg); $RetMsg = str_replace('', '', $RetMsg); $RetMsg = str_replace('', '', $RetMsg); return $RetMsg; @@ -150,15 +151,16 @@ function units_delete($selected_id, $AllowDeleteOfParents = false, $skipChecks = $id = db_fetch_row($res); $rires = sql("SELECT COUNT(1) FROM `unit_photos` WHERE `unit`='" . makeSafe($id[0]) . "'", $eo); $rirow = db_fetch_row($rires); + $childrenATag = '%s'; if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation["couldn't delete"]; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'unit_photos', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'unit_photos'), $RetMsg); return $RetMsg; } elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks) { $RetMsg = $Translation['confirm delete']; - $RetMsg = str_replace('', $rirow[0], $RetMsg); - $RetMsg = str_replace('', 'unit_photos', $RetMsg); + $RetMsg = str_replace('', sprintf($childrenATag, $rirow[0]), $RetMsg); + $RetMsg = str_replace(['[]', ''], sprintf($childrenATag, 'unit_photos'), $RetMsg); $RetMsg = str_replace('', '', $RetMsg); $RetMsg = str_replace('', '', $RetMsg); return $RetMsg; @@ -485,9 +487,9 @@ function property_reload__RAND__() { $templateCode = str_replace('<%%EMBEDDED%%>', (Request::val('Embedded') ? 'Embedded=1' : ''), $templateCode); // process buttons if($showSaveNew) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } elseif($showSaveAsCopy) { - $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } else { $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode); } @@ -502,7 +504,7 @@ function property_reload__RAND__() { if($hasSelectedId) { if(!Request::val('Embedded')) $templateCode = str_replace('<%%DVPRINT_BUTTON%%>', '', $templateCode); if($allowUpdate) - $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); + $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); else $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode); diff --git a/orpm.axp b/orpm.axp index fa00a93..971a661 100644 --- a/orpm.axp +++ b/orpm.axp @@ -1 +1 @@ -rental_property_managerlocalhostUTF-8FalseFalse12FalseAmerica/New_YorkFalseFalseTrueFalsebootstrap.cssTrueTrue03424.142024-06-04 18:41:56C:\Users\micro\vm-shared\appgini-open-source-apps\online-rental-property-manager\app0False402TrueTrueFalseFalse{"events":{"end-of-lease":{"type":"end-of-lease","color":"danger","textColor":"danger","table":"applications_leases","customWhere":"`applications_leases`.`status` = 'Lease'","title":"<b>End of lease</b><br>Property {4} unit# {5}","allDay":true,"startDateField":"end_date","startTimeField":"","endDateField":"","endTimeField":""},"start-of-lease":{"type":"start-of-lease","color":"success","textColor":"success","table":"applications_leases","customWhere":"`applications_leases`.`status` = 'Lease'","title":"<b>Start of lease</b><br>Property {4} unit# {5}","allDay":true,"startDateField":"start_date","startTimeField":"","endDateField":"","endTimeField":""}},"calendars":{"lease-start-end":{"id":"lease-start-end","title":"Leases starting/ending","initial-view":"dayGridMonth","initial-date":"[today]","events":["end-of-lease","start-of-lease"],"locale":"","groups":["Admins"],"links-home":"1","links-navmenu":"1"}}}dummy12:9:1:4:13:9001:[{"report_hash":"id5fq91qu393nf0k42r1","title":"Applicants By Status","table":"applicants_and_tenants","table_index":0,"label":"status","caption1":"Status","caption2":"Count of Applicants and tenants","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"","look_up_value":"","label_field_index":"13","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"","date_separator":"\/"}][{"label":"Change status","icon":"circle-arrow-right","field":"status","value":"allowUserToSpecify","fixedValue":"","confirmation":1,"groups":[],"hash":"m8xfpspfv9y3762768or"},{"label":"Edit Notes","icon":"pencil","field":"notes","value":"allowUserToSpecify","fixedValue":"","confirmation":1,"groups":[],"hash":"li3ml58uplm5oyp54b8x"}]applicants_and_tenantsFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010references;employment_and_income_history;residence_and_rental_history;applications_leasesTrueFalseFalse2ascaccount_balances.png0False0TruehorizontalFalseFalse25%-1id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falselast_name15400FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falsefirst_name15400FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falseemail15800FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False31FalseFalseleft0000Falsephone15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalseleft0000Falsebirth_date900FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseleft0000Falsedriver_license_number15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalsecenter0000Falsedriver_license_state15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse7False00FalseFalsecenter0000Falserequested_lease_term15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse8False00FalseFalseleft0000Falsemonthly_gross_pay882FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse9False00FalseFalseright0000Falseadditional_income882FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse10False00FalseFalseright0000Falseassets882FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalseright0000Falsestatus15400FalseFalseTrueFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse12False00FalseFalsecenter0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseTrueFalseFalse13True00FalseFalseleft0000False
1:3:2:5:7:8:16:9001:[{"report_hash":"rs1tinh2qcc2azdob0r6","title":"Applications\/Leases Over Time","table":"applications_leases","table_index":1,"label":"status","caption1":"Application status","caption2":"Count of Applications\/Leases","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"","look_up_value":"","label_field_index":"3","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":1,"piechart_section":0,"override_permissions":0,"custom_where":"","date_separator":"\/"},{"report_hash":"7dlamlewaen7fh5e7omb","title":"Applications\/Leases By Property","table":"applications_leases","table_index":1,"label":"property","caption1":"Property","caption2":"Count of Applications\/Leases","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"properties","look_up_value":"property_name","label_field_index":"4","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"","date_separator":"\/"},{"report_hash":"uh2omkvwpr1oqfvdt70y","title":"Leases By Property Over Time","table":"applications_leases","table_index":1,"label":"property","caption1":"Property","caption2":"Count of Applications\/Leases","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"properties","look_up_value":"property_name","label_field_index":"4","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"`applications_leases`.`status`='Lease'","date_separator":"\/"},{"report_hash":"lezfr2w8z8mwp5yq26pw","title":"Lease Value By Property Over Time","table":"applications_leases","table_index":1,"label":"property","caption1":"Property","caption2":"Sum of Applications\/Leases","group_function":"sum","group_function_field":"rent","group_array":[],"look_up_table":"properties","look_up_value":"property_name","label_field_index":"4","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"`applications_leases`.`status` LIKE '%lease'","date_separator":"\/"}][{"label":"Approve application","icon":"ok","field":"status","value":"fixedValue","fixedValue":"Lease","confirmation":1,"groups":[],"hash":"ghqe4agakj7de10gc0ba"}]applications_leasesFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueFalseFalse0asccurriculum_vitae.png0True0TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenants400FalseFalseFalseFalseFalseTrueFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falsestatus15400FalseFalseTrueFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse2False00FalseFalseleft0000Falseproperty400FalseFalseFalseFalseFalseTrueFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseproperty_nameidpropertiesTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falseunit400FalseFalseFalseFalseFalseTrueFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseunit_numberidunitsTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalsepropertyleft0000Falsetype15400FalseFalseTrueFalseFalseFalseFalseFalse40True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse5False00FalseFalseleft0000Falsetotal_number_of_occupants15150FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalsecenter0000Falsestart_date900FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalseleft0000Falseend_date900FalseFalseFalseFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse8False00FalseFalseleft0000Falserecurring_charges_frequency15400FalseFalseTrueFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse9False00FalseFalseleft0000Falsenext_due_date900FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse10False00FalseFalseleft0000Falserent8102FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalseright0000Falsesecurity_deposit8152FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse12False00FalseFalseright0000Falsesecurity_deposit_date900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse13False00FalseFalseleft0000Falseemergency_contact151000FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse14False00FalseFalseleft0000Falseco_signer_details151000FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse15False00FalseFalseleft0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse16True00FalseFalseleft0000FalseThe applicant must agree to the following terms:
  1. I understand that this is a routine application to establish credit, character, employment, and rental history.

  2. I also understand that this is NOT an agreement to rent and that all applications must be approved.

  3. I authorize verification of references given.

  4. I declare that the statements above are true and correct, and I agree that the landlord may terminate my agreement entered into in reliance on any misstatement made above.

  5. ]]>agreement15400FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse17False00TrueFalsecenter0000False
1:8:9:9001:residence_and_rental_historyFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0ascdocument_comment_above.png0True0FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenant400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01TrueFalseFalseFalse1False00FalseFalseright0000Falseaddress15400FalseFalseFalseFalseFalseTrueFalseFalse180True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falselandlord_or_manager_name151000FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falselandlord_or_manager_phone15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalseleft0000Falsemonthly_rent8102FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseright0000Falseduration_of_residency_from900FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalseleft0000Falseto900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalseleft0000Falsereason_for_leaving15400FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8False00FalseFalseleft0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse9True00FalseFalseleft0000False
1:2:7:8:9001:employment_and_income_historyFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0asccash_stack.png0True0FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenant400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01TrueFalseFalseFalse1False00FalseFalseright0000Falseemployer_name151000FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsecity151000FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falseemployer_phone15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalseleft0000Falseemployed_from900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseleft0000Falseemployed_till900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalseleft0000Falseoccupation15400FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalsecenter0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8True00FalseFalseleft0000False
1:9001:referencesFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0ascapplication_from_storage.png0True0FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenant400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01TrueFalseFalseFalse1False00FalseFalseleft0000Falsereference_name151000FalseFalseFalseFalseFalseFalseFalseFalse160True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsephone15150FalseFalseFalseFalseFalseFalseFalseFalse160True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000False
2:7:13:9001:rental_ownersFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010propertiesTrueFalseFalse0ascadministrator.png0True1TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsefirst_name15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falselast_name15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsecompany_name15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falsedate_of_birth900FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse4False00FalseFalseleft0000Falseprimary_email15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False31FalseFalseleft0000Falsealternate_email15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False31FalseFalseleft0000Falsephone15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalseleft0000Falsecountry15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8False00FalseFalseleft0000Falsestreet15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse9False00FalseFalseleft0000Falsecity15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse10False00FalseFalseleft0000Falsestate15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalseleft0000Falsezip8150FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse12False00FalseFalseright0000Falsecomments1800FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse13True00FalseFalseleft0000False
3:5:6:11:13:12:9001:propertiesFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010property_photos;units;applications_leasesTrueFalseFalse1descapplication_home.png0True1Trueleft_imageTrueFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseproperty_name151000FalseFalseTrueFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse1False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png, webp]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse60True0TrueTrueFalseTrue250300TrueFalseTrue600800FalseFalse2048000jpg|jpeg|gif|png|webpFalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsetype15400FalseFalseTrueFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse3False00FalseFalseleft0000Falsenumber_of_units8150FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalseleft0000Falseowner400FalseFalseFalseFalseFalseTrueFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidrental_ownersTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseleft0000Falseoperating_account15400FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseTrueFalseFalse6False00FalseFalseleft0000Falseproperty_reserve8150FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseTrueFalseFalse7False00FalseFalseright0000Falselease_term15150FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse8False00FalseFalseleft0000Falsecountry15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse9False00FalseFalseleft0000Falsestreet15400FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse10False00FalseFalseleft0000FalseCity15400FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalseleft0000FalseState15400FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse12False00FalseFalseleft0000FalseZIP8150FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse13False00FalseFalseleft0000False
1:3:9001:property_photosFalseFalseTrueFalseFalseTrueFalseTrueTrueFalseTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0asccamera_link.png0True1FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseproperty400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseproperty_nameidpropertiesTrueTrueFalse00TrueFalseFalseFalse1False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse150False0TrueTrueFalseTrue100100TrueFalseTrue250250FalseFalse2048000jpg|jpeg|gif|png|webpFalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsedescription1800FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3True00FalseFalseleft0000False
1:8:7:9:2:4:11:12:13:15:9001:[{"label":"Change status","icon":"tags","field":"status","value":"allowUserToSpecify","fixedValue":"","confirmation":1,"groups":[],"hash":"02ra72cumuxuqy0sm1hq"}]unitsFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010unit_photos;applications_leasesTrueFalseFalse2ascchange_password.png0True1TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseproperty400FalseFalseFalseFalseFalseTrueFalseFalse90True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseproperty_nameidpropertiesTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falseunit_number15400FalseFalseFalseFalseFalseTrueFalseFalse40True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse60True0TrueTrueFalseTrue250250TrueFalseTrue250250FalseFalse2048000jpg|jpeg|gif|png|webpFalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falsestatus15400FalseFalseTrueFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse4False00FalseFalseleft0000Falsesize15400FalseFalseFalseFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalsecenter0000Falsecountry400FalseFalseFalseFalseFalseTrueFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsecountryidpropertiesTrueFalseTrue01TrueFalseFalseFalse6False00FalseFalseleft0000Falsestreet400FalseFalseFalseFalseFalseTrueFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsestreetidpropertiesTrueFalseTrue01FalseFalseFalseFalse7False00FalseFalseleft0000Falsecity400FalseFalseFalseFalseFalseTrueFalseFalse55True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseCityidpropertiesTrueFalseTrue01FalseFalseFalseFalse8False00FalseFalseleft0000Falsestate400FalseFalseFalseFalseFalseTrueFalseFalse40True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseStateidpropertiesTrueFalseTrue01FalseFalseFalseFalse9False00FalseFalsecenter0000Falsepostal_code400FalseFalseFalseFalseFalseTrueFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseZIPidpropertiesTrueFalseTrue01TrueFalseFalseFalse10False00FalseFalseleft0000Falserooms15400FalseFalseFalseFalseFalseFalseFalseFalse45True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalsecenter0000Falsebathroom8150FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse12False00FalseFalsecenter0000Falsefeatures1800FalseFalseFalseFalseFalseFalseFalseFalse150True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse31FalseFalseFalseFalse13False00FalseFalseleft0000Falsemarket_rent8152FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse14False00FalseFalseright0000Falserental_amount8102FalseFalseFalseFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse15False00FalseFalseright0000Falsedeposit_amount8102FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse16False00FalseFalseright0000Falsedescription1800FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse17True00FalseFalseleft0000False
1:3:9001:unit_photosFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0asccamera_link.png0True1FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseunit400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsepropertyunit_numberidunitsTrueTrueFalse00TrueFalseFalseFalse1False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse150False0TrueTrueFalseTrue100100TrueFalseTrue250250FalseFalse2048000jpg|jpeg|gif|png|webpFalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsedescription1800FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3True00FalseFalseleft0000False
+rental_property_managerlocalhostUTF-8FalseFalse12FalseAmerica/New_YorkFalseFalseTrueFalsebootstrap.cssTrueTrue03424.152024-07-04 16:23:15C:\Users\micro\vm-shared\appgini-open-source-apps\online-rental-property-manager\app0False402TrueTrueFalseFalse{"events":{"end-of-lease":{"type":"end-of-lease","color":"danger","textColor":"danger","table":"applications_leases","customWhere":"`applications_leases`.`status` = 'Lease'","title":"<b>End of lease</b><br>Property {4} unit# {5}","allDay":true,"startDateField":"end_date","startTimeField":"","endDateField":"","endTimeField":""},"start-of-lease":{"type":"start-of-lease","color":"success","textColor":"success","table":"applications_leases","customWhere":"`applications_leases`.`status` = 'Lease'","title":"<b>Start of lease</b><br>Property {4} unit# {5}","allDay":true,"startDateField":"start_date","startTimeField":"","endDateField":"","endTimeField":""}},"calendars":{"lease-start-end":{"id":"lease-start-end","title":"Leases starting/ending","initial-view":"dayGridMonth","initial-date":"[today]","events":["end-of-lease","start-of-lease"],"locale":"","groups":["Admins"],"links-home":"1","links-navmenu":"1"}}}dummy12:9:1:4:13:9001:[{"report_hash":"id5fq91qu393nf0k42r1","title":"Applicants By Status","table":"applicants_and_tenants","table_index":0,"label":"status","caption1":"Status","caption2":"Count of Applicants and tenants","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"","look_up_value":"","label_field_index":"13","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"","date_separator":"\/"}][{"label":"Change status","icon":"circle-arrow-right","field":"status","value":"allowUserToSpecify","fixedValue":"","confirmation":1,"groups":[],"hash":"m8xfpspfv9y3762768or"},{"label":"Edit Notes","icon":"pencil","field":"notes","value":"allowUserToSpecify","fixedValue":"","confirmation":1,"groups":[],"hash":"li3ml58uplm5oyp54b8x"}]applicants_and_tenantsFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010references;employment_and_income_history;residence_and_rental_history;applications_leasesTrueFalseFalse2ascaccount_balances.png0False0TruehorizontalFalseFalse25%-1id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falselast_name15400FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falsefirst_name15400FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falseemail15800FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False31FalseFalseleft0000Falsephone15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalseleft0000Falsebirth_date900FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseleft0000Falsedriver_license_number15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalsecenter0000Falsedriver_license_state15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse7False00FalseFalsecenter0000Falserequested_lease_term15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse8False00FalseFalseleft0000Falsemonthly_gross_pay882FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse9False00FalseFalseright0000Falseadditional_income882FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse10False00FalseFalseright0000Falseassets882FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalseright0000Falsestatus15400FalseFalseTrueFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse12False00FalseFalsecenter0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseTrueFalseFalse13True00FalseFalseleft0000False
1:3:2:5:7:8:16:9001:[{"report_hash":"rs1tinh2qcc2azdob0r6","title":"Applications\/Leases Over Time","table":"applications_leases","table_index":1,"label":"status","caption1":"Application status","caption2":"Count of Applications\/Leases","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"","look_up_value":"","label_field_index":"3","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":1,"piechart_section":0,"override_permissions":0,"custom_where":"","date_separator":"\/"},{"report_hash":"7dlamlewaen7fh5e7omb","title":"Applications\/Leases By Property","table":"applications_leases","table_index":1,"label":"property","caption1":"Property","caption2":"Count of Applications\/Leases","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"properties","look_up_value":"property_name","label_field_index":"4","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"","date_separator":"\/"},{"report_hash":"uh2omkvwpr1oqfvdt70y","title":"Leases By Property Over Time","table":"applications_leases","table_index":1,"label":"property","caption1":"Property","caption2":"Count of Applications\/Leases","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"properties","look_up_value":"property_name","label_field_index":"4","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"`applications_leases`.`status`='Lease'","date_separator":"\/"},{"report_hash":"lezfr2w8z8mwp5yq26pw","title":"Lease Value By Property Over Time","table":"applications_leases","table_index":1,"label":"property","caption1":"Property","caption2":"Sum of Applications\/Leases","group_function":"sum","group_function_field":"rent","group_array":[],"look_up_table":"properties","look_up_value":"property_name","label_field_index":"4","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"`applications_leases`.`status` LIKE '%lease'","date_separator":"\/"}][{"label":"Approve application","icon":"ok","field":"status","value":"fixedValue","fixedValue":"Lease","confirmation":1,"groups":[],"hash":"ghqe4agakj7de10gc0ba"}]applications_leasesFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueFalseFalse0asccurriculum_vitae.png0True0TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenants400FalseFalseFalseFalseFalseTrueFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falsestatus15400FalseFalseTrueFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse2False00FalseFalseleft0000Falseproperty400FalseFalseFalseFalseFalseTrueFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseproperty_nameidpropertiesTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falseunit400FalseFalseFalseFalseFalseTrueFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseunit_numberidunitsTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalsepropertyleft0000Falsetype15400FalseFalseTrueFalseFalseFalseFalseFalse40True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse5False00FalseFalseleft0000Falsetotal_number_of_occupants15150FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalsecenter0000Falsestart_date900FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalseleft0000Falseend_date900FalseFalseFalseFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse8False00FalseFalseleft0000Falserecurring_charges_frequency15400FalseFalseTrueFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse9False00FalseFalseleft0000Falsenext_due_date900FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse10False00FalseFalseleft0000Falserent8102FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalseright0000Falsesecurity_deposit8152FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse12False00FalseFalseright0000Falsesecurity_deposit_date900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse13False00FalseFalseleft0000Falseemergency_contact151000FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse14False00FalseFalseleft0000Falseco_signer_details151000FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse15False00FalseFalseleft0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse16True00FalseFalseleft0000FalseThe applicant must agree to the following terms:
  1. I understand that this is a routine application to establish credit, character, employment, and rental history.

  2. I also understand that this is NOT an agreement to rent and that all applications must be approved.

  3. I authorize verification of references given.

  4. I declare that the statements above are true and correct, and I agree that the landlord may terminate my agreement entered into in reliance on any misstatement made above.

  5. ]]>agreement15400FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse17False00TrueFalsecenter0000False
1:8:9:9001:residence_and_rental_historyFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0ascdocument_comment_above.png0True0FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenant400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01TrueFalseFalseFalse1False00FalseFalseright0000Falseaddress15400FalseFalseFalseFalseFalseTrueFalseFalse180True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falselandlord_or_manager_name151000FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falselandlord_or_manager_phone15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalseleft0000Falsemonthly_rent8102FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseright0000Falseduration_of_residency_from900FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalseleft0000Falseto900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalseleft0000Falsereason_for_leaving15400FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8False00FalseFalseleft0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse9True00FalseFalseleft0000False
1:2:7:8:9001:employment_and_income_historyFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0asccash_stack.png0True0FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenant400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01TrueFalseFalseFalse1False00FalseFalseright0000Falseemployer_name151000FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsecity151000FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falseemployer_phone15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalseleft0000Falseemployed_from900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseleft0000Falseemployed_till900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalseleft0000Falseoccupation15400FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalsecenter0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8True00FalseFalseleft0000False
1:9001:referencesFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0ascapplication_from_storage.png0True0FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenant400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01TrueFalseFalseFalse1False00FalseFalseleft0000Falsereference_name151000FalseFalseFalseFalseFalseFalseFalseFalse160True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsephone15150FalseFalseFalseFalseFalseFalseFalseFalse160True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000False
2:7:13:9001:rental_ownersFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010propertiesTrueFalseFalse0ascadministrator.png0True1TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsefirst_name15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falselast_name15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsecompany_name15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falsedate_of_birth900FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse4False00FalseFalseleft0000Falseprimary_email15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False31FalseFalseleft0000Falsealternate_email15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False31FalseFalseleft0000Falsephone15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalseleft0000Falsecountry15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8False00FalseFalseleft0000Falsestreet15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse9False00FalseFalseleft0000Falsecity15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse10False00FalseFalseleft0000Falsestate15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalseleft0000Falsezip8150FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse12False00FalseFalseright0000Falsecomments1800FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse13True00FalseFalseleft0000False
3:5:6:11:13:12:9001:propertiesFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010property_photos;units;applications_leasesTrueFalseFalse1descapplication_home.png0True1Trueleft_imageTrueFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseproperty_name151000FalseFalseTrueFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse1False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png, webp]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse60True0TrueTrueFalseTrue250300TrueFalseTrue600800FalseFalse2048000jpg|jpeg|gif|png|webpFalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsetype15400FalseFalseTrueFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse3False00FalseFalseleft0000Falsenumber_of_units8150FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalseleft0000Falseowner400FalseFalseFalseFalseFalseTrueFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidrental_ownersTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseleft0000Falseoperating_account15400FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseTrueFalseFalse6False00FalseFalseleft0000Falseproperty_reserve8150FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseTrueFalseFalse7False00FalseFalseright0000Falselease_term15150FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse8False00FalseFalseleft0000Falsecountry15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse9False00FalseFalseleft0000Falsestreet15400FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse10False00FalseFalseleft0000FalseCity15400FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalseleft0000FalseState15400FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse12False00FalseFalseleft0000FalseZIP8150FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse13False00FalseFalseleft0000False
1:3:9001:property_photosFalseFalseTrueFalseFalseTrueFalseTrueTrueFalseTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0asccamera_link.png0True1FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseproperty400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseproperty_nameidpropertiesTrueTrueFalse00TrueFalseFalseFalse1False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse150False0TrueTrueFalseTrue100100TrueFalseTrue250250FalseFalse2048000jpg|jpeg|gif|png|webpFalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsedescription1800FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3True00FalseFalseleft0000False
1:8:7:9:2:4:11:12:13:15:9001:[{"label":"Change status","icon":"tags","field":"status","value":"allowUserToSpecify","fixedValue":"","confirmation":1,"groups":[],"hash":"02ra72cumuxuqy0sm1hq"}]unitsFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010unit_photos;applications_leasesTrueFalseFalse2ascchange_password.png0True1TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseproperty400FalseFalseFalseFalseFalseTrueFalseFalse90True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseproperty_nameidpropertiesTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falseunit_number15400FalseFalseFalseFalseFalseTrueFalseFalse40True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse60True0TrueTrueFalseTrue250250TrueFalseTrue250250FalseFalse2048000jpg|jpeg|gif|png|webpFalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falsestatus15400FalseFalseTrueFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse4False00FalseFalseleft0000Falsesize15400FalseFalseFalseFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalsecenter0000Falsecountry400FalseFalseFalseFalseFalseTrueFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsecountryidpropertiesTrueFalseTrue01TrueFalseFalseFalse6False00FalseFalseleft0000Falsestreet400FalseFalseFalseFalseFalseTrueFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsestreetidpropertiesTrueFalseTrue01FalseFalseFalseFalse7False00FalseFalseleft0000Falsecity400FalseFalseFalseFalseFalseTrueFalseFalse55True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseCityidpropertiesTrueFalseTrue01FalseFalseFalseFalse8False00FalseFalseleft0000Falsestate400FalseFalseFalseFalseFalseTrueFalseFalse40True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseStateidpropertiesTrueFalseTrue01FalseFalseFalseFalse9False00FalseFalsecenter0000Falsepostal_code400FalseFalseFalseFalseFalseTrueFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseZIPidpropertiesTrueFalseTrue01TrueFalseFalseFalse10False00FalseFalseleft0000Falserooms15400FalseFalseFalseFalseFalseFalseFalseFalse45True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalsecenter0000Falsebathroom8150FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse12False00FalseFalsecenter0000Falsefeatures1800FalseFalseFalseFalseFalseFalseFalseFalse150True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse31FalseFalseFalseFalse13False00FalseFalseleft0000Falsemarket_rent8152FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse14False00FalseFalseright0000Falserental_amount8102FalseFalseFalseFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse15False00FalseFalseright0000Falsedeposit_amount8102FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse16False00FalseFalseright0000Falsedescription1800FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse17True00FalseFalseleft0000False
1:3:9001:unit_photosFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0asccamera_link.png0True1FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseunit400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsepropertyunit_numberidunitsTrueTrueFalse00TrueFalseFalseFalse1False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse150False0TrueTrueFalseTrue100100TrueFalseTrue250250FalseFalse2048000jpg|jpeg|gif|png|webpFalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsedescription1800FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3True00FalseFalseleft0000False