From f43a49d2fd65228de4c0574768d6fcd49aad7f58 Mon Sep 17 00:00:00 2001 From: Morgan Lesko Date: Mon, 11 Feb 2019 00:13:20 -0500 Subject: [PATCH] Polish on survey and core admin tools Many survey aspects polished quite a bit, and code files organized and cleaned up ever more. --- src/Controllers/OpenComplaintConditions.php | 155 + src/Controllers/OpenComplaintPrints.php | 70 +- src/Controllers/OpenComplaintSaves.php | 86 +- src/Controllers/OpenDashAdmin.php | 116 +- src/Controllers/OpenDepts.php | 7 + src/Controllers/OpenInitExtras.php | 307 + src/Controllers/OpenListing.php | 15 +- src/Controllers/OpenPolice.php | 903 +-- src/Controllers/OpenPoliceAdminMenu.php | 2 + src/Controllers/OpenPoliceSearcher.php | 11 +- src/Controllers/OpenPoliceUtils.php | 304 +- src/Controllers/OpenReport.php | 6 +- src/Controllers/OpenReportTools.php | 1 + src/Controllers/OpenSessDataOverride.php | 232 + src/Controllers/OpenVolunteers.php | 98 +- src/Controllers/VolunteerController.php | 795 --- ...0_create_open police complaints_tables.php | 940 +++ src/Database/OpenPoliceDeptSeeder.php | 164 +- src/Database/OpenPoliceSeeder.php | 5846 ++++++++++------- src/Models/OPLinksOfficerVehicles.php | 1 + src/Models/OPPartners.php | 2 +- src/Models/OPUsers.php | 17 + src/Uploads/flex-logo-190.png | Bin 0 -> 2943 bytes src/Uploads/legalaidnyc.jpg | Bin 0 -> 4274 bytes src/Views/admin/lists/academic.blade.php | 22 - src/Views/admin/lists/depts.blade.php | 40 - src/Views/admin/lists/legal.blade.php | 22 - src/Views/admin/lists/media.blade.php | 22 - src/Views/admin/lists/officers.blade.php | 22 - src/Views/admin/lists/overs.blade.php | 52 - src/Views/admin/volun/volun.blade.php | 161 - src/Views/admin/volun/volunDepts.blade.php | 89 - src/Views/admin/volun/volunProfile.blade.php | 21 - src/Views/ajax/search-police-dept.blade.php | 120 +- ....1217-volun-home-your-info.blade.php.marks | 2 + .../nodes/1211-volun-home-all-depts.blade.php | 122 +- .../nodes/1217-volun-home-your-info.blade.php | 14 +- .../1225-volun-dept-edit-header.blade.php | 14 +- ...volun-dept-edit-search-complaint.blade.php | 1 - .../1351-admin-volun-edit-history.blade.php | 22 +- src/Views/nodes/1351-volun-graph.blade.php | 19 - ...18-admin-complaints-listing-ajax.blade.php | 17 +- .../1418-admin-complaints-listing.blade.php | 164 +- .../nodes/143-dept-loop-custom-row.blade.php | 51 +- .../nodes/1436-vehicle-match-line.blade.php | 56 - src/Views/nodes/1436-vehicle-match.blade.php | 55 - .../nodes/145-ajax-dept-search.blade.php | 5 +- src/Views/nodes/145-dept-search.blade.php | 12 +- .../1712-report-inc-staff-tools.blade.php | 6 +- .../1755-volun-home-priority-depts.blade.php | 33 +- ...-volun-dept-edit-how-investigate.blade.php | 1 - .../nodes/1898-public-attorney-page.blade.php | 18 +- .../nodes/1939-manage-attorneys.blade.php | 6 +- .../2069-prepare-complaint-org.blade.php | 4 +- .../2162-volun-dept-edit-header2.blade.php | 13 + src/Views/volun/dept-rows.blade.php | 41 + .../volun/volun-dept-edit-history.blade.php | 3 +- .../volun-dept-edit-ia-contact.blade.php | 2 +- src/routes.php | 91 +- 59 files changed, 6030 insertions(+), 5391 deletions(-) create mode 100644 src/Controllers/OpenComplaintConditions.php create mode 100644 src/Controllers/OpenInitExtras.php create mode 100644 src/Controllers/OpenSessDataOverride.php delete mode 100755 src/Controllers/VolunteerController.php create mode 100644 src/Database/2019_02_11_000000_create_open police complaints_tables.php create mode 100644 src/Models/OPUsers.php create mode 100644 src/Uploads/flex-logo-190.png create mode 100644 src/Uploads/legalaidnyc.jpg delete mode 100755 src/Views/admin/lists/academic.blade.php delete mode 100755 src/Views/admin/lists/depts.blade.php delete mode 100755 src/Views/admin/lists/legal.blade.php delete mode 100755 src/Views/admin/lists/media.blade.php delete mode 100755 src/Views/admin/lists/officers.blade.php delete mode 100755 src/Views/admin/lists/overs.blade.php delete mode 100755 src/Views/admin/volun/volun.blade.php delete mode 100755 src/Views/admin/volun/volunDepts.blade.php delete mode 100755 src/Views/admin/volun/volunProfile.blade.php create mode 100644 src/Views/nodes/.1217-volun-home-your-info.blade.php.marks delete mode 100644 src/Views/nodes/1351-volun-graph.blade.php delete mode 100644 src/Views/nodes/1436-vehicle-match-line.blade.php delete mode 100644 src/Views/nodes/1436-vehicle-match.blade.php create mode 100644 src/Views/nodes/2162-volun-dept-edit-header2.blade.php create mode 100644 src/Views/volun/dept-rows.blade.php diff --git a/src/Controllers/OpenComplaintConditions.php b/src/Controllers/OpenComplaintConditions.php new file mode 100644 index 0000000..cd360d0 --- /dev/null +++ b/src/Controllers/OpenComplaintConditions.php @@ -0,0 +1,155 @@ +sessData->dataSets["Scenes"]) && sizeof($this->sessData->dataSets["Scenes"]) > 0) { + if (isset($this->sessData->dataSets["Scenes"][0]->ScnIsVehicle) + && trim($this->sessData->dataSets["Scenes"][0]->ScnIsVehicle) == 'Y') { + return 1; + } + if (isset($this->sessData->dataSets["Scenes"][0]->ScnIsVehicleAccident) + && trim($this->sessData->dataSets["Scenes"][0]->ScnIsVehicleAccident) == 'Y') { + return 1; + } + } + return 0; + } elseif ($condition == '#LawyerInvolved') { + if ((isset($this->sessData->dataSets["Complaints"][0]->ComAttorneyHas) + && in_array(trim($this->sessData->dataSets["Complaints"][0]->ComAttorneyHas), ['Y', '?'])) + || (isset($this->sessData->dataSets["Complaints"][0]->ComAttorneyWant) + && in_array(trim($this->sessData->dataSets["Complaints"][0]->ComAttorneyWant), ['Y', '?']))) { + return 1; + } + if ((isset($this->sessData->dataSets["Complaints"][0]->ComAnyoneCharged) + && in_array(trim($this->sessData->dataSets["Complaints"][0]->ComAnyoneCharged), ['Y', '?'])) + && (!isset($this->sessData->dataSets["Complaints"][0]->ComAllChargesResolved) + || trim($this->sessData->dataSets["Complaints"][0]->ComAllChargesResolved) != 'Y')) { + return 1; + } + if (isset($this->sessData->dataSets["Complaints"][0]->ComAnyoneCharged) + && trim($this->sessData->dataSets["Complaints"][0]->ComAnyoneCharged) == 'N' + && isset($this->sessData->dataSets["Complaints"][0]->ComFileLawsuit) + && trim($this->sessData->dataSets["Complaints"][0]->ComFileLawsuit) == 'Y') { + return 1; + } + return 0; + } elseif ($condition == '#NoSexualAllegation') { + $noSexAlleg = true; + if (isset($this->sessData->dataSets["Allegations"]) + && sizeof($this->sessData->dataSets["Allegations"]) > 0) { + foreach ($this->sessData->dataSets["Allegations"] as $alleg) { + if (in_array($alleg->AlleType, [ + $GLOBALS["SL"]->def->getID('Allegation Type', 'Sexual Assault'), + $GLOBALS["SL"]->def->getID('Allegation Type', 'Sexual Harassment') + ])) { + $noSexAlleg = false; + } + } + } + return ($noSexAlleg) ? 1 : 0; + } elseif ($condition == '#IncidentHasAddress') { + if (isset($this->sessData->dataSets["Incidents"]) + && isset($this->sessData->dataSets["Incidents"][0]->IncAddress) + && trim($this->sessData->dataSets["Incidents"][0]->IncAddress) != '') { + return 1; + } else { + return 0; + } + } elseif ($condition == '#HasArrestOrForce') { + if ($this->sessData->dataHas('Arrests') || $this->sessData->dataHas('Force')) { + return 1; + } else { + return 0; + } + } elseif ($condition == '#CivHasForce') { + if (isset($GLOBALS["SL"]->closestLoop["itemID"])) { + return $this->chkCivHasForce($GLOBALS["SL"]->closestLoop["itemID"]); + } + return 0; + } elseif ($condition == '#HasForceHuman') { + $ret = 0; + if (isset($this->sessData->dataSets["Civilians"]) && sizeof($this->sessData->dataSets["Civilians"]) > 0) { + foreach ($this->sessData->dataSets["Civilians"] as $civ) { + if ($civ->CivRole == 'Victim' && $this->chkCivHasForce($civ->CivID) == 1) { + $ret = 1; + } + } + } + return $ret; + } elseif ($condition == '#HasInjury') { + if (isset($this->sessData->dataSets["Civilians"]) && sizeof($this->sessData->dataSets["Civilians"]) > 0) { + foreach ($this->sessData->dataSets["Civilians"] as $civ) { + if ($civ->CivRole == 'Victim' && isset($civ->CivHasInjury) && trim($civ->CivHasInjury) == 'Y') { + return 1; + } + } + } + return 0; + } elseif ($condition == '#MedicalCareNotYou') { + $civ = $this->sessData->getDataBranchRow('Civilians'); + if ($civ && isset($civ->CivIsCreator) && trim($civ->CivIsCreator) == 'Y') { + return 0; + } + } elseif ($condition == '#Property') { + $search = $this->sessData->getChildRow('EventSequence', $GLOBALS["SL"]->closestLoop["itemID"], 'Searches'); + if ((isset($search->SrchSeized) && trim($search->SrchSeized) == 'Y') + || (isset($search->SrchDamage) && trim($search->SrchDamage) == 'Y')) { + return 1; + } else { + return 0; + } + } elseif ($condition == '#EmailConfirmSentToday') { + if (isset($this->v["user"]) && isset($this->v["user"]->id)) { + $cutoff = date("Y-m-d H:i:s", + mktime(date("H"), date("i"), date("s"), date("n"), date("j")-1, date("Y"))); + $chk = SLEmailed::where('EmailedEmailID', 1) + ->where('EmailedFromUser', $this->v["user"]->id) + ->where('created_at', '>', $cutoff) + ->get(); + if ($chk->isNotEmpty()) { + return 1; + } + } + return 0; + } elseif ($condition == '#HasUploads') { + $uploads = $this->getUploadsMultNodes($this->cmplntUpNodes, $this->v["isAdmin"], $this->v["isOwner"]); + if ($uploads && sizeof($uploads) > 0) { + return 1; + } + return 0; + } elseif ($condition == '#PrintAnonOnly') { + if (isset($GLOBALS["SL"]->x["pageView"]) && in_array($GLOBALS["SL"]->x["pageView"], ['public', 'pdf']) + && isset($this->sessData->dataSets["Complaints"][0]->ComStatus) + && in_array(trim($this->sessData->dataSets["Complaints"][0]->ComStatus), + $this->getUnPublishedStatusList())) { + return 1; + } + if (isset($GLOBALS["SL"]->x["pageView"]) && in_array($GLOBALS["SL"]->x["pageView"], ['public', 'pdf']) + && isset($this->sessData->dataSets["Complaints"][0]->ComPrivacy) + && $this->sessData->dataSets["Complaints"][0]->ComPrivacy + != $GLOBALS["SL"]->def->getID('Privacy Types', 'Submit Publicly')) { + return 1; + } + return 0; + } elseif ($condition == '#PrintSensitiveReport') { + if (isset($GLOBALS["SL"]->x["pageView"]) && in_array($GLOBALS["SL"]->x["pageView"], ['full', 'full-pdf'])) { + return 1; + } + return 0; + } elseif ($condition == '#IsOversightAgency') { + return (($this->v["uID"] > 0 && $this->v["user"]->hasRole('oversight')) ? 1 : 0); + } + return -1; + } + +} \ No newline at end of file diff --git a/src/Controllers/OpenComplaintPrints.php b/src/Controllers/OpenComplaintPrints.php index c8ad475..709033e 100644 --- a/src/Controllers/OpenComplaintPrints.php +++ b/src/Controllers/OpenComplaintPrints.php @@ -21,7 +21,9 @@ protected function initBlnkAllegsSilv() if (isset($this->sessData->dataSets["Allegations"]) && sizeof($this->sessData->dataSets["Allegations"]) > 0) { foreach ($this->sessData->dataSets["Allegations"] as $i => $alleRow) { - if ($alle[0] == $alleRow->AlleType) $found = true; + if ($alle[0] == $alleRow->AlleType) { + $found = true; + } } } if (!$found) { @@ -85,7 +87,15 @@ protected function customLabels($nIDtxt = '', $str = '') } if (strpos($str, '[ForceType]') !== false) { $forceDesc = $GLOBALS["SL"]->def->getVal('Force Type', $event[0]["Event"]->ForType); - if ($forceDesc == 'Other') $forceDesc = $event[0]["Event"]->ForTypeOther; + if ($forceDesc == 'Other') { + $forceDesc = $event[0]["Event"]->ForTypeOther; + } + if (strpos($nIDtxt, '343') !== false) { + $eveSeq = $this->sessData->getDataBranchRow('EventSequence'); + if ($eveSeq && isset($eveSeq->EveID)) { + $forceDesc .= ' used on ' . $this->getCivNamesFromEvent($eveSeq->EveID); + } + } $str = str_replace('[ForceType]', '' . $forceDesc .'', $str); } } elseif (strpos($str, '[LoopItemLabel]') !== false) { @@ -129,14 +139,29 @@ protected function customLabels($nIDtxt = '', $str = '') $str = str_replace('anybody was', 'anybody was', $str); } } elseif (in_array($nIDtxt, ['591'])) { - if ($complainantVic && !$multipleVic) $str = str_replace('anybody', 'you', $str); + if ($complainantVic && !$multipleVic) { + $str = str_replace('anybody', 'you', $str); + } } elseif (in_array($nIDtxt, ['228'])) { - if ($complainantVic && !$multipleVic) $str = str_replace('anybody was', 'you were', $str); + if ($complainantVic && !$multipleVic) { + $str = str_replace('anybody was', 'you were', $str); + } } $str = str_replace('Did you who was not arrested get a ticket or citation?', 'Did you get a ticket or citation?', $str); } } + + if (strpos($str, '[[PartnerUrl]]') !== false && isset($this->sessData->dataSets["Partners"]) + && isset($this->sessData->dataSets["Partners"][0]->PartSlug)) { + $url = $GLOBALS["SL"]->sysOpts["app-url"] . '/'; + switch ($this->sessData->dataSets["Partners"][0]->PartType) { + case $GLOBALS["SL"]->def->getID('Partner Types', 'Attorney'): $url .= 'attorney/'; break; + case $GLOBALS["SL"]->def->getID('Partner Types', 'Organization'): $url .= 'org/'; break; + } + $url .= $this->sessData->dataSets["Partners"][0]->PartSlug; + $str = str_replace('[[PartnerUrl]]', $GLOBALS["SL"]->swapURLwrap($url, false), $str); + } return $str; } @@ -144,17 +169,23 @@ protected function getLoopItemLabelCustom($loop, $itemRow = null, $itemInd = -3) { //echo '


getLoopItemLabelCustom(' . $loop . '
'; print_r($itemRow); echo '
'; //if ($itemIndex < 0) return ''; - if (!$itemRow) return ''; + if (!$itemRow) { + return ''; + } if (in_array($loop, ['Victims', 'Witnesses'])) { return $this->getCivName($loop, $itemRow, $itemInd); } elseif ($loop == 'Civilians') { - if (isset($itemRow->CivID)) return $this->getCivilianNameFromID($itemRow->CivID); + if (isset($itemRow->CivID)) { + return $this->getCivilianNameFromID($itemRow->CivID); + } } elseif (in_array($loop, ['Officers', 'Excellent Officers'])) { return $this->getOfficerName($itemRow, $itemInd); } elseif ($loop == 'Departments') { return $this->getDeptName($itemRow, $itemInd); } elseif ($loop == 'Events') { - if (isset($itemRow->EveID)) return $this->getEventLabel($itemRow->EveID); + if (isset($itemRow->EveID)) { + return $this->getEventLabel($itemRow->EveID); + } } elseif ($loop == 'Citations') { // why isn't this working?! if (isset($itemRow->StopEventSequenceID) && intVal($itemRow->StopEventSequenceID) > 0) { $eveID = $itemRow->StopEventSequenceID; @@ -163,7 +194,9 @@ protected function getLoopItemLabelCustom($loop, $itemRow = null, $itemInd = -3) return $this->getCivilianNameFromID($EveSeq[0]["Civilians"][0]); } $civList = ''; - foreach ($EveSeq[0]["Civilians"] as $civID) $civList .= ', ' . $this->getCivilianNameFromID($civID); + foreach ($EveSeq[0]["Civilians"] as $civID) { + $civList .= ', ' . $this->getCivilianNameFromID($civID); + } return substr($civList, 1); } } @@ -177,7 +210,7 @@ protected function printSetLoopNavRowCustom($nID, $loopItem, $setIndex) "loopItem" => $this->sessData->getChildRow('LinksComplaintDept', $loopItem->getKey(), 'Departments'), "setIndex" => $setIndex, "itemID" => $loopItem->getKey() - ])->render(); + ])->render(); } return ''; } @@ -186,9 +219,13 @@ protected function getTableRecLabelCustom($tbl, $rec = [], $ind = -3) { if ($tbl == 'Vehicles' && isset($rec->VehicTransportation)) { return $GLOBALS["SL"]->def->getValById($rec->VehicTransportation) - . ((isset($rec->VehicVehicleMake)) ? ' ' . $rec->VehicVehicleMake : '') - . ((isset($rec->VehicVehicleModel)) ? ' ' . $rec->VehicVehicleModel : '') - . ((isset($rec->VehicVehicleDesc)) ? ' ' . $rec->VehicVehicleDesc : ''); + . ((isset($rec->VehicUnmarked) && $rec->VehicUnmarked == 'Y') ? ' Unmarked' : '') + . ((isset($rec->VehicVehicleMake) && trim($rec->VehicVehicleMake) != '') + ? ' ' . $rec->VehicVehicleMake : '') + . ((isset($rec->VehicVehicleModel) && trim($rec->VehicVehicleModel) != '') + ? ' ' . $rec->VehicVehicleModel : '') . ' (Vehicle #' . (1+$ind) . ')'; + } elseif ($tbl == 'Civilians' && isset($rec->CivID)) { + return $this->getCivilianNameFromID($rec->CivID); } return ''; } @@ -197,8 +234,12 @@ protected function loadUpDeetPrivacy($upRow = NULL) { if ($upRow && isset($upRow->UpPrivacy)) { if ($upRow->UpTreeID == 1) { - if ($GLOBALS["SL"]->x["dataPerms"] == 'public') return 'Block'; - if ($GLOBALS["SL"]->x["pageView"] == 'public') return 'Public'; + if ($GLOBALS["SL"]->x["dataPerms"] == 'public') { + return 'Block'; + } + if ($GLOBALS["SL"]->x["pageView"] == 'public') { + return 'Public'; + } if ($upRow->UpPrivacy == 'Private') { if (in_array($GLOBALS["SL"]->x["pageView"], ['sensitive', 'internal'])) { return 'Public'; @@ -212,5 +253,4 @@ protected function loadUpDeetPrivacy($upRow = NULL) return 'Block'; } - } \ No newline at end of file diff --git a/src/Controllers/OpenComplaintSaves.php b/src/Controllers/OpenComplaintSaves.php index c75eeb2..4647e21 100644 --- a/src/Controllers/OpenComplaintSaves.php +++ b/src/Controllers/OpenComplaintSaves.php @@ -6,10 +6,68 @@ use App\Models\OPStops; use App\Models\OPInjuries; use App\Models\OPLinksCivilianEvents; -use OpenPolice\Controllers\OpenComplaintPrints; +use App\Models\OPLinksCivilianVehicles; +use App\Models\OPLinksOfficerVehicles; +use OpenPolice\Controllers\OpenComplaintConditions; -class OpenComplaintSaves extends OpenComplaintPrints +class OpenComplaintSaves extends OpenComplaintConditions { + protected function postNodePublicCustom($nID = -3, $tmpSubTier = []) + { + if (empty($tmpSubTier)) { + $tmpSubTier = $this->loadNodeSubTier($nID); + } + list($tbl, $fld) = $this->allNodes[$nID]->getTblFld(); + if ($this->treeID == 1 && isset($this->sessData->dataSets["Complaints"])) { + $this->sessData->dataSets["Complaints"][0]->update([ "updated_at" => date("Y-m-d H:i:s") ]); + } + // Main Complaint Survey... + if ($nID == 439) { + return $this->saveUnresolvedCharges($nID); + } elseif (in_array($nID, [16, 17])) { + return $this->saveStartTime($nID, $tbl, $fld); + } elseif (in_array($nID, [145, 920])) { + return $this->saveNewDept($nID); + } elseif ($nID == 234) { + return $this->saveCitationVictim($nID); + } elseif ($nID == 237) { + return $this->saveCitationVictims($nID); + } elseif ($nID == 671) { + return $this->saveProfanePersons($nID); + } elseif ($nID == 674) { + return $this->saveProfanePerson($nID); + } elseif ($nID == 670) { + return $this->saveProfanePersons($nID, 'Civ'); + } elseif ($nID == 676) { + return $this->saveProfanePerson($nID, 'Civ'); + } elseif (in_array($nID, [742, 2044])) { + return $this->saveForceTypes($nID); + } elseif ($nID == 743) { + return $this->saveForceAnimYN($nID); + } elseif ($nID == 744) { + return $this->saveForceTypesAnim($nID, 743, 746); + } elseif ($nID == 316) { + return $this->saveHandcuffInjury($nID); + } elseif ($nID == 976) { + return $this->saveStatusCompletion($nID); + + // Department Editor Survey ... + } elseif ($nID == 1285) { + return $this->saveDeptSubWays1($nID); + } elseif ($nID == 1287) { + return $this->saveDeptSubWays2($nID); + } elseif ($nID == 1329) { + return $this->saveEditLog($nID); + } elseif ($nID == 1229) { + return $this->saveInitDeptOversight($nID); + + // Page Nodes ... + } elseif ($nID == 1007) { + return $this->postContactEmail($nID); + } + return false; // false to continue standard post processing + } + protected function saveUnresolvedCharges($nID) { if ($GLOBALS["SL"]->REQ->has('n' . $nID . 'fld')) { @@ -46,6 +104,18 @@ protected function saveStartTime($nID, $tbl, $fld) return true; } + protected function saveCitationVictim($nID) + { + if (isset($this->sessData->dataSets["Civilians"]) && sizeof($this->sessData->dataSets["Civilians"]) == 1) { + if ($GLOBALS["SL"]->REQ->has('n234fld') && trim($GLOBALS["SL"]->REQ->get('n234fld')) == 'Y') { + $this->sessData->dataSets["Civilians"][0]->update([ 'CivGivenCitation' => 'Y' ]); + } else { + $this->sessData->dataSets["Civilians"][0]->update([ 'CivGivenCitation' => 'N' ]); + } + } + return false; + } + protected function saveCitationVictims($nID) { $isEmpty = (!$GLOBALS["SL"]->REQ->has('n' . $nID . 'fld') @@ -160,7 +230,9 @@ protected function saveForceAnimYN($nID) if (!$GLOBALS["SL"]->REQ->has('n' . $nID . 'fld') || $GLOBALS["SL"]->REQ->get('n' . $nID . 'fld') == 'N') { $animalsForce = $this->getCivAnimalForces(); if ($animalsForce && sizeof($animalsForce) > 0) { - foreach ($animalsForce as $force) $this->deleteEventByID($force->ForEventSequenceID); + foreach ($animalsForce as $force) { + $this->deleteEventByID($force->ForEventSequenceID); + } } } return false; @@ -179,7 +251,9 @@ protected function saveForceTypesAnim($nID1, $nID2, $nID3) $foundType = false; if ($animalsForce && sizeof($animalsForce) > 0) { foreach ($animalsForce as $force) { - if ($force->ForType == $forceType) $foundType = true; + if ($force->ForType == $forceType) { + $foundType = true; + } } } if (!$foundType) { @@ -223,7 +297,9 @@ protected function saveHandcuffInjury($nID) protected function saveStatusCompletion($nID) { - if ($GLOBALS["SL"]->REQ->get('step') != 'next') return true; + if ($GLOBALS["SL"]->REQ->get('step') != 'next') { + return true; + } $this->sessData->dataSets['Complaints'][0]->ComStatus = $GLOBALS["SL"]->def->getID('Complaint Status', 'New'); $this->sessData->dataSets['Complaints'][0]->save(); return false; diff --git a/src/Controllers/OpenDashAdmin.php b/src/Controllers/OpenDashAdmin.php index 27f0887..7d23ccb 100644 --- a/src/Controllers/OpenDashAdmin.php +++ b/src/Controllers/OpenDashAdmin.php @@ -4,10 +4,12 @@ use DB; use App\Models\User; use App\Models\OPComplaints; +use App\Models\OPLinksComplaintOversight; use App\Models\OPDepartments; use App\Models\OPZeditDepartments; use App\Models\OPZeditOversight; use App\Models\OPzVolunStatDays; +use SurvLoop\Controllers\SurvTrends; class OpenDashAdmin { @@ -16,9 +18,34 @@ class OpenDashAdmin public function printDashSessGraph() { $this->v["isDash"] = true; - $GLOBALS["SL"]->x["needsCharts"] = true; - $GLOBALS["SL"]->pageAJAX .= '$("#1359graph").load("/dashboard/surv-1/sessions/graph-daily"); '; - return '
'; + $grapher = new SurvTrends('' . rand(1000000, 10000000) . ''); + $grapher->addDataLineType('incomplete', 'Incomplete', '', '#2b3493', '#2b3493'); + $grapher->addDataLineType('complete', 'Complete', '', '#29B76F', '#29B76F'); + $recentAttempts = OPComplaints::whereNotNull('ComSummary') + ->where('ComSummary', 'NOT LIKE', '') + ->where('created_at', '>=', $grapher->getPastStartDate() . ' 00:00:00') + ->select('ComStatus', 'created_at') + ->get(); + if ($recentAttempts->isNotEmpty()) { + foreach ($recentAttempts as $i => $rec) { + if ($GLOBALS["SL"]->def->getID('Complaint Status', 'Incomplete')) { + $grapher->addDayTally('incomplete', $rec->created_at); + } else { + $grapher->addDayTally('complete', $rec->created_at); + } + } + } + $grapher->addDataLineType('submitted', 'Submitted to Oversight', '', '#c3ffe1', '#c3ffe1'); + $recentAttempts = OPLinksComplaintOversight::select('LnkComOverSubmitted') + ->where('LnkComOverSubmitted', '>=', $grapher->getPastStartDate() . ' 00:00:00') + ->get(); + if ($recentAttempts->isNotEmpty()) { + foreach ($recentAttempts as $i => $rec) { + $grapher->addDayTally('submitted', $rec->LnkComOverSubmitted); + } + } + //$grapher->addDataLineType('attorneyd', 'Attorney\'d', '', '#63c6ff', '#63c6ff'); + return $grapher->printDailyGraph(350); } public function printDashPercCompl() @@ -63,7 +90,8 @@ public function volunDeptsRecent() { $this->v["isDash"] = true; $this->v["statTots"] = []; - $statRanges = [ [ + $statRanges = [ + [ 'Last 24 Hours', date("Y-m-d H:i:s", mktime(date("H")-24, date("i"), date("s"), date("n"), date("j"), date("Y"))) ], [ @@ -72,7 +100,7 @@ public function volunDeptsRecent() ], [ 'All-Time Totals', date("Y-m-d H:i:s", mktime(0, 0, 0, 1, 1, 1000)) - ], + ] ]; foreach ($statRanges as $i => $stat) { $this->v["statTots"][$i] = [ $stat[0] ]; @@ -129,9 +157,9 @@ public function volunDepts() "deptType" => $GLOBALS["SL"]->def->getVal('Department Types', $deptEdit[1]->ZedDeptType), "iaEdit" => $deptEdit[2], "civEdit" => $deptEdit[3] - ])->render(); + ])->render(); } - $this->volunStatsDailyGraph(); + $this->v["volunDataGraph"] = $this->volunStatsDailyGraph(); return view('vendor.openpolice.nodes.1351-admin-volun-edit-history', $this->v)->render(); } @@ -142,72 +170,16 @@ public function volunStatsDailyGraph() $this->volunDeptsRecent(); } $this->recalcVolunStats(); - $past = 60; - $startDate = date("Y-m-d", mktime(0, 0, 0, date("n"), date("j")-$past, date("Y"))); - $this->v["statDays"] = OPzVolunStatDays::where('VolunStatDate', '>=', $startDate) + $grapher = new SurvTrends('1349', 'VolunStatDate'); + $grapher->addDataLineType('depts', 'Unique Depts', 'VolunStatDeptsUnique', '#2b3493', '#2b3493'); + $grapher->addDataLineType('users', 'Unique Users', 'VolunStatUsersUnique', '#63c6ff', '#63c6ff'); + $grapher->addDataLineType('edits', 'Total Edits', 'VolunStatTotalEdits', '#c3ffe1', '#c3ffe1'); + $grapher->addDataLineType('calls', 'Total Calls', 'VolunStatCallsTot', '#29B76F', '#29B76F'); + $grapher->addDataLineType('signup', 'Signups', 'VolunStatSignups', '#ffd2c9', '#ffd2c9'); + $grapher->processRawDataResults(OPzVolunStatDays::where('VolunStatDate', '>=', $grapher->getPastStartDate()) ->orderBy('VolunStatDate', 'asc') - ->get(); - $this->v["axisLabels"] = []; - foreach ($this->v["statDays"] as $i => $s) { - if ($i%5 == 0) { - $this->v["axisLabels"][] = date('n/j', strtotime($s->VolunStatDate)); - } else { - $this->v["axisLabels"][] = ''; - } - } - $lines = []; - $lines[0] = [ - "label" => 'Unique Departments', - "brdColor" => '#2b3493', - "dotColor" => 'rgba(75,192,192,1)', - "data" => [], - ]; - foreach ($this->v["statDays"] as $s) { - $lines[0]["data"][] = $s->VolunStatDeptsUnique; - } - $lines[1] = [ - "label" => 'Unique Users', - "brdColor" => '#63c6ff', - "dotColor" => 'rgba(75,192,192,1)', - "data" => [], - ]; - foreach ($this->v["statDays"] as $s) { - $lines[1]["data"][] = $s->VolunStatUsersUnique; - } - $lines[2] = [ - "label" => 'Total Edits', - "brdColor" => '#c3ffe1', - "dotColor" => 'rgba(75,192,192,1)', - "data" => [], - ]; - foreach ($this->v["statDays"] as $s) { - $lines[2]["data"][] = $s->VolunStatTotalEdits; - } - $lines[3] = [ - "label" => 'Total Calls', - "brdColor" => '#29B76F', - "dotColor" => 'rgba(75,192,192,1)', - "data" => [], - ]; - foreach ($this->v["statDays"] as $s) { - $lines[3]["data"][] = $s->VolunStatCallsTot; - } - $lines[4] = [ - "label" => 'Signups', - "brdColor" => '#ffd2c9', - "dotColor" => 'rgba(75,192,192,1)', - "data" => [], - ]; - foreach ($this->v["statDays"] as $s) { - $lines[4]["data"][] = $s->VolunStatSignups; - } - $this->v["dataLines"] = ''; - foreach ($lines as $l) { - $this->v["dataLines"] .= view('vendor.survloop.graph-data-line', $l)->render(); - } - $volunDataGraph = view('vendor.openpolice.nodes.1351-volun-graph', $this->v)->render(); - $GLOBALS["SL"]->x["needsCharts"] = true; - return $volunDataGraph; + ->get()); + return $grapher->printDailyGraph(350); } public function volunStatsTable() diff --git a/src/Controllers/OpenDepts.php b/src/Controllers/OpenDepts.php index 65b7c38..9b36634 100644 --- a/src/Controllers/OpenDepts.php +++ b/src/Controllers/OpenDepts.php @@ -3,6 +3,7 @@ use DB; use Auth; +use Illuminate\Support\Str; use Illuminate\Http\Request; use App\Models\OPDepartments; use App\Models\OPZeditDepartments; @@ -248,6 +249,12 @@ protected function printDeptEditHeader() return view('vendor.openpolice.nodes.1225-volun-dept-edit-header', $this->v)->render(); } + protected function printDeptEditHeader2() + { + return view('vendor.openpolice.nodes.2162-volun-dept-edit-header2', + [ "deptRow" => $this->sessData->dataSets["Departments"][0] ])->render(); + } + protected function printDeptEditContact($nID) { $this->getOverRow('IA'); diff --git a/src/Controllers/OpenInitExtras.php b/src/Controllers/OpenInitExtras.php new file mode 100644 index 0000000..284317c --- /dev/null +++ b/src/Controllers/OpenInitExtras.php @@ -0,0 +1,307 @@ +loadYourContact(); + $this->majorSections = []; + if (!isset($GLOBALS["SL"]->treeID)) { + return true; + } + if ($GLOBALS["SL"]->treeID == 1) { + $this->navMenuComplaint(); + } elseif ($GLOBALS["SL"]->treeID == 5) { + $this->navMenuCompliment(); + } elseif ($GLOBALS["SL"]->treeID == 36) { + if ($request->has('d') && trim($request->get('d')) != '') { + $chk = OPDepartments::where('DeptSlug', 'LIKE', trim($request->get('d'))) + ->first(); + if ($chk && isset($chk->DeptID)) { + $this->loadAllSessData($GLOBALS["SL"]->coreTbl, $chk->DeptID); + } + } + } + return true; + } + + // Maps survey tree nodes which wrap navigational sections + protected function navMenuComplaint() + { + $this->majorSections = []; + $this->majorSections[] = [1, 'Your Story', 'active']; + $this->majorSections[] = [4, 'Who\'s Involved', 'active']; + $this->majorSections[] = [5, 'Allegations', 'active']; + $this->majorSections[] = [6, 'Go Gold', 'disabled']; + $this->majorSections[] = [419, 'Finish', 'active']; + + $this->minorSections = [ [], [], [], [], [] ]; + $this->minorSections[0][] = [157, 'Start Your Story']; + $this->minorSections[0][] = [437, 'Privacy Options']; + $this->minorSections[0][] = [158, 'When & Where']; + $this->minorSections[0][] = [707, 'The Scene']; + + $this->minorSections[1][] = [139, 'About You']; + $this->minorSections[1][] = [140, 'Victims']; + $this->minorSections[1][] = [141, 'Witnesses']; + $this->minorSections[1][] = [144, 'Police Departments']; + $this->minorSections[1][] = [142, 'Officers']; + + $this->minorSections[2][] = [198, 'Stops']; + $this->minorSections[2][] = [199, 'Searches']; + $this->minorSections[2][] = [200, 'Force']; + $this->minorSections[2][] = [201, 'Arrests & Citations']; + $this->minorSections[2][] = [154, 'Other']; + + $this->minorSections[3][] = [196, 'GO GOLD!']; // 483 + $this->minorSections[3][] = [149, 'Stops & Searches']; + $this->minorSections[3][] = [153, 'Arrests & Citations']; + $this->minorSections[3][] = [151, 'Uses of Force']; + $this->minorSections[3][] = [410, 'Injuries & Medical']; + + $this->minorSections[4][] = [420, 'Review Narrative']; + $this->minorSections[4][] = [431, 'Sharing Options']; + $this->minorSections[4][] = [156, 'Submit Complaint']; + return true; + } + + protected function navMenuCompliment() + { + $this->majorSections[] = array(752, 'Your Story', 'active'); + $this->majorSections[] = array(761, 'Who\'s Involved', 'active'); + $this->majorSections[] = array(763, 'Compliments', 'active'); + $this->majorSections[] = array(764, 'Finish', 'active'); + + $this->minorSections = array( [], [], [], [], [] ); + $this->minorSections[0][] = array(753, 'Start Your Story'); + $this->minorSections[0][] = array(867, 'Privacy Options'); + $this->minorSections[0][] = array(877, 'When & Where'); + $this->minorSections[0][] = array(887, 'The Scene'); + + $this->minorSections[1][] = array(762, 'About You'); + $this->minorSections[1][] = array(765, 'Police Departments'); + $this->minorSections[1][] = array(766, 'Officers'); + + $this->minorSections[2][] = array(945, 'Compliment Officers'); + + $this->minorSections[3][] = array(957, 'Review Narrative'); + $this->minorSections[3][] = array(961, 'Feedback'); + $this->minorSections[3][] = array(964, 'Submit Complaint'); + return true; + } + + protected function overrideMinorSection($nID = -3, $majorSectInd = -3) + { + //if ($nID == 482) return 148; + return -1; + } + + // Initializing a bunch of things which are not [yet] automatically determined by the software + protected function loadExtra() + { + if ($this->treeID == 1 && $this->isGold()) { + $this->majorSections[3][2] = 'active'; + } + if ($this->treeID == 1 || $GLOBALS["SL"]->getReportTreeID() == 1) { + if ($this->v["user"] && intVal($this->v["user"]->id) > 0 && isset($this->sessData->dataSets["Civilians"]) + && isset($this->sessData->dataSets["Civilians"][0]) + && (!isset($this->sessData->dataSets["Civilians"][0]->CivUserID) + || intVal($this->sessData->dataSets["Civilians"][0]->CivUserID) <= 0)) { + $this->sessData->dataSets["Civilians"][0]->update([ 'CivUserID' => $this->v["user"]->id ]); + } + $this->chkPersonRecs(); + if (isset($this->sessData->dataSets["Departments"]) && + sizeof($this->sessData->dataSets["Departments"]) > 0) { + foreach ($this->sessData->dataSets["Departments"] as $i => $d) { + $this->chkDeptLinks($d->DeptID); + } + } + if (isset($this->sessData->dataSets["Complaints"]) + && !isset($this->sessData->dataSets["Complaints"][0]->ComRecordSubmitted) + && $this->sessData->dataSets["Complaints"][0]->ComStatus + != $GLOBALS["SL"]->def->getID('Complaint Status', 'Incomplete')) { + $this->sessData->dataSets["Complaints"][0]->ComRecordSubmitted + = $this->sessData->dataSets["Complaints"][0]->created_at; + $chk = DB::table('SL_NodeSavesPage') + ->join('SL_Sess', 'SL_Sess.SessID', '=', 'SL_NodeSavesPage.PageSaveSession') + ->where('SL_Sess.SessTree', 1) + ->where('SL_Sess.SessCoreID', $this->coreID) + ->select('SL_NodeSavesPage.created_at') + ->orderBy('SL_NodeSavesPage.created_at', 'desc') + ->first(); + if ($chk && isset($chk->created_at)) { + $this->sessData->dataSets["Complaints"][0]->ComRecordSubmitted = $chk->created_at; + } + $this->sessData->dataSets["Complaints"][0]->save(); + } + foreach ($this->eventTypeLabel as $type => $label) { + if (!isset($this->sessData->dataSets[$type]) || sizeof($this->sessData->dataSets[$type]) == 0) { + $this->addNewEveSeq($type); + } + } + } + if ($this->treeID == 5 || $GLOBALS["SL"]->getReportTreeID() == 5) { + if (isset($this->sessData->dataSets["Complaints"]) + && (!isset($this->sessData->dataSets["Complaints"][0]->ComIsCompliment) + || intVal($this->sessData->dataSets["Complaints"][0]->ComIsCompliment) != 1)) { + $this->sessData->dataSets["Complaints"][0]->ComIsCompliment = 1; + $this->sessData->dataSets["Complaints"][0]->save(); + } + } + if (session()->has('opcDeptID') && intVal(session()->get('opcDeptID')) > 0) { + if ($this->treeID == 1) { + if (isset($this->sessData->dataSets["Complaints"]) + && intVal($this->sessData->dataSets["Complaints"][0]->ComSubmissionProgress) > 0) { + if (!isset($this->sessData->dataSets["LinksComplaintDept"])) { + $this->sessData->dataSets["LinksComplaintDept"] = []; + } + if (empty($this->sessData->dataSets["LinksComplaintDept"])) { + $newDept = new OPLinksComplaintDept; + $newDept->LnkComDeptComplaintID = $this->coreID; + $newDept->LnkComDeptDeptID = intVal(session()->get('opcDeptID')); + $newDept->save(); + session()->forget('opcDeptID'); + } + } + } elseif ($this->treeID == 5) { + if (isset($this->sessData->dataSets["Compliments"]) + && intVal($this->sessData->dataSets["Compliments"][0]->ComSubmissionProgress) > 0) { + if (!isset($this->sessData->dataSets["LinksComplimentDept"])) { + $this->sessData->dataSets["LinksComplimentDept"] = []; + } + if (empty($this->sessData->dataSets["LinksComplimentDept"])) { + $newDept = new OPLinksComplimentDept; + $newDept->LnkCompliDeptComplimentID = $this->coreID; + $newDept->LnkCompliDeptDeptID = intVal(session()->get('opcDeptID')); + $newDept->save(); + session()->forget('opcDeptID'); + } + } + } + } + if ($this->treeID == 1 && session()->has('opcPartID') && intVal(session()->get('opcPartID')) > 0 + && isset($this->sessData->dataSets["Complaints"]) + && intVal($this->sessData->dataSets["Complaints"][0]->ComSubmissionProgress) > 0) { + $this->sessData->dataSets["Complaints"][0]->ComAttID = intVal(session()->get('opcPartID')); + $this->sessData->dataSets["Complaints"][0]->save(); + } + $this->v["isPublic"] = $this->isPublic(); + + // used to be admin initializations: + $this->v["allowEdits"] = ($this->v["uID"] > 0 && $this->v["user"] && $this->v["user"]->hasRole('administrator|staff')); + $this->v["management"] = ($this->v["uID"] > 0 && $this->v["user"] && $this->v["user"]->hasRole('administrator|staff')); + $this->v["volunOpts"] = 1; + if ($GLOBALS["SL"]->REQ->session()->has('volunOpts')) { + $this->v["volunOpts"] = $GLOBALS["SL"]->REQ->session()->get('volunOpts'); + } + if ((!session()->has('opcChks') || !session()->get('opcChks') || $GLOBALS["SL"]->REQ->has('refresh')) + && $this->treeID == 1) { + $chk = OPComplaints::where('ComPublicID', null) + ->where('ComStatus', 'NOT LIKE', $GLOBALS["SL"]->def->getID('Complaint Status', 'Incomplete')) + ->get(); + if ($chk->isNotEmpty()) { + foreach ($chk as $i => $complaint) { + $complaint->update([ 'ComPublicID' => $GLOBALS["SL"]->genNewCorePubID('Complaints') ]); + } + } + session()->put('opcChks', true); + } + return true; + } + + public function initPowerUser($uID = -3) + { + /* if (!$this->v["user"] || intVal($this->v["user"]->id) <= 0 + || !$this->v["user"]->hasRole('administrator|staff|databaser|partner|volunteer')) { + return $this->redir('/'); + } */ + if ($uID <= 0) { + $uID = $this->v["uID"]; + } + if ($uID > 0) { + $GLOBALS["SL"]->x["yourUserInfo"] = OPzVolunUserInfo::where('UserInfoUserID', $uID) + ->first(); + if (!$GLOBALS["SL"]->x["yourUserInfo"]) { + $GLOBALS["SL"]->x["yourUserInfo"] = new OPzVolunUserInfo; + $GLOBALS["SL"]->x["yourUserInfo"]->UserInfoUserID = $uID; + $GLOBALS["SL"]->x["yourUserInfo"]->save(); + } + $this->v["yourUserContact"] = []; + if (!isset($GLOBALS["SL"]->x["yourUserInfo"]->UserInfoPersonContactID) + || intVal($GLOBALS["SL"]->x["yourUserInfo"]->UserInfoPersonContactID) <= 0) { + $thisUser = User::select('email')->find($uID); + $this->v["yourUserContact"] = new OPPersonContact; + $this->v["yourUserContact"]->PrsnEmail = $thisUser->email; + $this->v["yourUserContact"]->save(); + $GLOBALS["SL"]->x["yourUserInfo"]->UserInfoPersonContactID = $this->v["yourUserContact"]->PrsnID; + $GLOBALS["SL"]->x["yourUserInfo"]->save(); + } else { + $this->v["yourUserContact"] + = OPPersonContact::find($GLOBALS["SL"]->x["yourUserInfo"]->UserInfoPersonContactID); + } + return [ $GLOBALS["SL"]->x["yourUserInfo"], $this->v["yourUserContact"] ]; + } + return [ [], [] ]; + } + + protected function ajaxContentWrapCustom($str, $nID = -3) + { + if ($this->treeID == 1) { + if ($GLOBALS["SL"]->REQ->has('treeSlug') && trim($GLOBALS["SL"]->REQ->get('treeSlug')) == 'complaint' + && $GLOBALS["SL"]->REQ->has('nodeSlug') && trim($GLOBALS["SL"]->REQ->get('nodeSlug')) == 'login') { + return $this->redir('/u/complaint/when-and-where', true); + } + } + return $str; + } + + protected function tweakPageViewPerms() + { + if (isset($this->sessData->dataSets["Complaints"]) + && $this->isPublished('Complaints', $this->coreID, $this->sessData->dataSets["Complaints"][0]) + && isset($this->sessData->dataSets["Complaints"][0]->ComPrivacy) + && $this->sessData->dataSets["Complaints"][0]->ComPrivacy + == $GLOBALS["SL"]->def->getID('Privacy Types', 'Submit Publicly')) { + if ($GLOBALS["SL"]->x["dataPerms"] == 'public') { + $GLOBALS["SL"]->x["dataPerms"] = 'private'; + } + } + return true; + } + + protected function rawOrderPercentTweak($nID, $rawPerc, $found = -3) + { + if ($this->isGold() && !$this->isCompliment()) { + return $rawPerc; + } + return round(100*($found/(sizeof($this->nodesRawOrder)-200))); + } + + protected function runPageExtra($nID = -3) + { + if ($nID == 1362) { // Loading Complaint Report: Check for oversight permissions + if (!isset($GLOBALS["SL"]->x["pageView"])) { + $this->maxUserView(); // shouldn't be needed? + } + if ($this->chkOverUserHasCore()) { + $GLOBALS["SL"]->x["dataPerms"] = 'sensitive'; + } + } + return true; + } + +} \ No newline at end of file diff --git a/src/Controllers/OpenListing.php b/src/Controllers/OpenListing.php index 9b8cd00..bc7fd71 100644 --- a/src/Controllers/OpenListing.php +++ b/src/Controllers/OpenListing.php @@ -103,7 +103,7 @@ protected function printComplaintListing($view = 'all') $compls = DB::select( DB::raw($qman) ); if ($compls && sizeof($compls) > 0) { foreach ($compls as $com) { - $this->v["comInfo"][$com->ComPublicID] = [ '', '' ]; + $this->v["comInfo"][$com->ComPublicID] = [ "depts" => '', "submitted" => '' ]; $dChk = DB::table('OP_LinksComplaintDept') ->where('OP_LinksComplaintDept.LnkComDeptComplaintID', $com->ComID) ->leftJoin('OP_Departments', 'OP_Departments.DeptID', '=', 'OP_LinksComplaintDept.LnkComDeptDeptID') @@ -112,7 +112,7 @@ protected function printComplaintListing($view = 'all') ->get(); if ($dChk && sizeof($dChk) > 0) { foreach ($dChk as $i => $d) { - $this->v["comInfo"][$com->ComPublicID][1] .= (($i > 0) ? ', ' : '') + $this->v["comInfo"][$com->ComPublicID]["depts"] .= (($i > 0) ? ', ' : '') . str_replace('Department' , 'Dept', $d->DeptName); } } @@ -122,22 +122,25 @@ protected function printComplaintListing($view = 'all') } if (!isset($com->ComStatus) || intVal($com->ComStatus) <= 0) { $com->ComStatus = $GLOBALS['SL']->def->getID('Complaint Status', 'Incomplete'); - OPComplaints::find($com->ComID)->update([ "ComStatus" => $com->ComStatus ]); + OPComplaints::find($com->ComID) + ->update([ "ComStatus" => $com->ComStatus ]); } if (!isset($com->ComType) || intVal($com->ComType) <= 0) { $com->ComType = $GLOBALS['SL']->def->getID('OPC Staff/Internal Complaint Type', 'Unreviewed'); - OPComplaints::find($com->ComID)->update([ "ComType" => $com->ComType ]); + OPComplaints::find($com->ComID) + ->update([ "ComType" => $com->ComType ]); } $cutoffTime = mktime(date("H"), date("i"), date("s"), date("m"), date("d")-1, date("Y")); if ($comTime < $cutoffTime) { if (!isset($com->ComSummary) || trim($com->ComSummary) == '') { - OPComplaints::find($com->ComID)->delete(); + OPComplaints::find($com->ComID) + ->delete(); $comTime = false; } } if ($comTime !== false) { $sortInd = $comTime; - $this->v["comInfo"][$com->ComPublicID][0] = date("n/j/Y", $comTime); + $this->v["comInfo"][$com->ComPublicID]["submitted"] = date("n/j/Y", $comTime); if ($com->ComStatus == $GLOBALS['SL']->def->getID('Complaint Status', 'Incomplete')) { if ($com->ComSubmissionProgress > 0 && !isset($this->v["lastNodes"][$com->ComSubmissionProgress])) { diff --git a/src/Controllers/OpenPolice.php b/src/Controllers/OpenPolice.php index 84d081f..f5644f3 100755 --- a/src/Controllers/OpenPolice.php +++ b/src/Controllers/OpenPolice.php @@ -5,510 +5,18 @@ use Auth; use Illuminate\Support\Str; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Mail; -use Aws\Ses\SesClient; use App\Models\User; -use App\Models\SLZips; -use App\Models\SLEmailed; -use App\Models\SLDefinitions; -use App\Models\SLNode; -use App\Models\SLNodeSavesPage; -use App\Models\SLEmails; use App\Models\OPComplaints; -use App\Models\OPCompliments; -use App\Models\OPIncidents; -use App\Models\OPEventSequence; -use App\Models\OPAllegSilver; -use App\Models\OPAllegations; -use App\Models\OPStops; -use App\Models\OPSearches; -use App\Models\OPArrests; -use App\Models\OPForce; -use App\Models\OPInjuries; -use App\Models\OPCivilians; use App\Models\OPDepartments; -use App\Models\OPOversight; use App\Models\OPLinksComplaintDept; -use App\Models\OPLinksOfficerEvents; -use App\Models\OPLinksCivilianEvents; use App\Models\OPPersonContact; use App\Models\OPPhysicalDesc; -use App\Models\OPLinksComplaintOversight; -use App\Models\OPPartners; -use App\Models\OPPartnerCaseTypes; -use App\Models\OPzComplaintReviews; -use App\Models\OPZeditDepartments; -use App\Models\OPZeditOversight; -use App\Models\OPzVolunTmp; use App\Models\OPzVolunUserInfo; -use App\Models\OPzVolunStatDays; -use OpenPolice\Controllers\OpenPoliceAdmin; -use OpenPolice\Controllers\OpenPolice; -use OpenPolice\Controllers\VolunteerLeaderboard; - use OpenPolice\Controllers\VolunteerController; -use OpenPolice\Controllers\DepartmentScores; use OpenPolice\Controllers\OpenDashAdmin; -use SurvLoop\Controllers\SurvStatsGraph; -use OpenPolice\Controllers\OpenPartners; +use OpenPolice\Controllers\OpenInitExtras; -class OpenPolice extends OpenPartners +class OpenPolice extends OpenInitExtras { - // Initializing a bunch of things which are not [yet] automatically determined by the software - protected function initExtra(Request $request) - { - // Establishing Main Navigation Organization, with Node ID# and Section Titles - $this->loadYourContact(); - $this->majorSections = []; - if (!isset($GLOBALS["SL"]->treeID)) return true; - if ($GLOBALS["SL"]->treeID == 1) { - $this->navMenuComplaint(); - } elseif ($GLOBALS["SL"]->treeID == 5) { - $this->navMenuCompliment(); - } elseif ($GLOBALS["SL"]->treeID == 36) { - if ($request->has('d') && trim($request->get('d')) != '') { - $chk = OPDepartments::where('DeptSlug', 'LIKE', trim($request->get('d'))) - ->first(); - if ($chk && isset($chk->DeptID)) { - $this->loadAllSessData($GLOBALS["SL"]->coreTbl, $chk->DeptID); - } - } - } - return true; - } - - // Maps survey tree nodes which wrap navigational sections - protected function navMenuComplaint() - { - $this->majorSections = []; - $this->majorSections[] = [1, 'Your Story', 'active']; - $this->majorSections[] = [4, 'Who\'s Involved', 'active']; - $this->majorSections[] = [5, 'Allegations', 'active']; - $this->majorSections[] = [6, 'Go Gold', 'disabled']; - $this->majorSections[] = [419, 'Finish', 'active']; - - $this->minorSections = [ [], [], [], [], [] ]; - $this->minorSections[0][] = [157, 'Start Your Story']; - $this->minorSections[0][] = [437, 'Privacy Options']; - $this->minorSections[0][] = [158, 'When & Where']; - $this->minorSections[0][] = [707, 'The Scene']; - - $this->minorSections[1][] = [139, 'About You']; - $this->minorSections[1][] = [140, 'Victims']; - $this->minorSections[1][] = [141, 'Witnesses']; - $this->minorSections[1][] = [144, 'Police Departments']; - $this->minorSections[1][] = [142, 'Officers']; - - $this->minorSections[2][] = [198, 'Stops']; - $this->minorSections[2][] = [199, 'Searches']; - $this->minorSections[2][] = [200, 'Force']; - $this->minorSections[2][] = [201, 'Arrests & Citations']; - $this->minorSections[2][] = [154, 'Other']; - - $this->minorSections[3][] = [196, 'GO GOLD!']; // 483 - $this->minorSections[3][] = [149, 'Stops & Searches']; - $this->minorSections[3][] = [153, 'Arrests & Citations']; - $this->minorSections[3][] = [151, 'Uses of Force']; - $this->minorSections[3][] = [410, 'Injuries & Medical']; - - $this->minorSections[4][] = [420, 'Review Narrative']; - $this->minorSections[4][] = [431, 'Sharing Options']; - $this->minorSections[4][] = [156, 'Submit Complaint']; - return true; - } - - protected function navMenuCompliment() - { - $this->majorSections[] = array(752, 'Your Story', 'active'); - $this->majorSections[] = array(761, 'Who\'s Involved', 'active'); - $this->majorSections[] = array(763, 'Compliments', 'active'); - $this->majorSections[] = array(764, 'Finish', 'active'); - - $this->minorSections = array( [], [], [], [], [] ); - $this->minorSections[0][] = array(753, 'Start Your Story'); - $this->minorSections[0][] = array(867, 'Privacy Options'); - $this->minorSections[0][] = array(877, 'When & Where'); - $this->minorSections[0][] = array(887, 'The Scene'); - - $this->minorSections[1][] = array(762, 'About You'); - $this->minorSections[1][] = array(765, 'Police Departments'); - $this->minorSections[1][] = array(766, 'Officers'); - - $this->minorSections[2][] = array(945, 'Compliment Officers'); - - $this->minorSections[3][] = array(957, 'Review Narrative'); - $this->minorSections[3][] = array(961, 'Feedback'); - $this->minorSections[3][] = array(964, 'Submit Complaint'); - return true; - } - - protected function overrideMinorSection($nID = -3, $majorSectInd = -3) - { - //if ($nID == 482) return 148; - return -1; - } - - // Initializing a bunch of things which are not [yet] automatically determined by the software - protected function loadExtra() - { - if ($this->treeID == 1 && $this->isGold()) { - $this->majorSections[3][2] = 'active'; - } - if ($this->treeID == 1 || $GLOBALS["SL"]->getReportTreeID() == 1) { - if ($this->v["user"] && intVal($this->v["user"]->id) > 0 && isset($this->sessData->dataSets["Civilians"]) - && isset($this->sessData->dataSets["Civilians"][0]) - && (!isset($this->sessData->dataSets["Civilians"][0]->CivUserID) - || intVal($this->sessData->dataSets["Civilians"][0]->CivUserID) <= 0)) { - $this->sessData->dataSets["Civilians"][0]->update([ 'CivUserID' => $this->v["user"]->id ]); - } - $this->chkPersonRecs(); - if (isset($this->sessData->dataSets["Departments"]) && - sizeof($this->sessData->dataSets["Departments"]) > 0) { - foreach ($this->sessData->dataSets["Departments"] as $i => $d) $this->chkDeptLinks($d->DeptID); - } - if (isset($this->sessData->dataSets["Complaints"]) - && !isset($this->sessData->dataSets["Complaints"][0]->ComRecordSubmitted) - && $this->sessData->dataSets["Complaints"][0]->ComStatus - != $GLOBALS["SL"]->def->getID('Complaint Status', 'Incomplete')) { - $this->sessData->dataSets["Complaints"][0]->ComRecordSubmitted - = $this->sessData->dataSets["Complaints"][0]->created_at; - $chk = DB::table('SL_NodeSavesPage') - ->join('SL_Sess', 'SL_Sess.SessID', '=', 'SL_NodeSavesPage.PageSaveSession') - ->where('SL_Sess.SessTree', 1) - ->where('SL_Sess.SessCoreID', $this->coreID) - ->select('SL_NodeSavesPage.created_at') - ->orderBy('SL_NodeSavesPage.created_at', 'desc') - ->first(); - if ($chk && isset($chk->created_at)) { - $this->sessData->dataSets["Complaints"][0]->ComRecordSubmitted = $chk->created_at; - } - $this->sessData->dataSets["Complaints"][0]->save(); - } - foreach ($this->eventTypeLabel as $type => $label) { - if (!isset($this->sessData->dataSets[$type]) || sizeof($this->sessData->dataSets[$type]) == 0) { - $this->addNewEveSeq($type); - } - } - } - if ($this->treeID == 5 || $GLOBALS["SL"]->getReportTreeID() == 5) { - if (isset($this->sessData->dataSets["Complaints"]) - && (!isset($this->sessData->dataSets["Complaints"][0]->ComIsCompliment) - || intVal($this->sessData->dataSets["Complaints"][0]->ComIsCompliment) != 1)) { - $this->sessData->dataSets["Complaints"][0]->ComIsCompliment = 1; - $this->sessData->dataSets["Complaints"][0]->save(); - } - } - if (session()->has('opcDeptID') && intVal(session()->get('opcDeptID')) > 0) { - if ($this->treeID == 1) { - if (isset($this->sessData->dataSets["Complaints"]) - && intVal($this->sessData->dataSets["Complaints"][0]->ComSubmissionProgress) > 0) { - if (!isset($this->sessData->dataSets["LinksComplaintDept"])) { - $this->sessData->dataSets["LinksComplaintDept"] = []; - } - if (empty($this->sessData->dataSets["LinksComplaintDept"])) { - $newDept = new OPLinksComplaintDept; - $newDept->LnkComDeptComplaintID = $this->coreID; - $newDept->LnkComDeptDeptID = intVal(session()->get('opcDeptID')); - $newDept->save(); - session()->forget('opcDeptID'); - } - } - } elseif ($this->treeID == 5) { - if (isset($this->sessData->dataSets["Compliments"]) - && intVal($this->sessData->dataSets["Compliments"][0]->ComSubmissionProgress) > 0) { - if (!isset($this->sessData->dataSets["LinksComplimentDept"])) { - $this->sessData->dataSets["LinksComplimentDept"] = []; - } - if (empty($this->sessData->dataSets["LinksComplimentDept"])) { - $newDept = new OPLinksComplimentDept; - $newDept->LnkCompliDeptComplimentID = $this->coreID; - $newDept->LnkCompliDeptDeptID = intVal(session()->get('opcDeptID')); - $newDept->save(); - session()->forget('opcDeptID'); - } - } - } - } - if ($this->treeID == 1 && session()->has('opcPartID') && intVal(session()->get('opcPartID')) > 0 - && isset($this->sessData->dataSets["Complaints"]) - && intVal($this->sessData->dataSets["Complaints"][0]->ComSubmissionProgress) > 0) { - $this->sessData->dataSets["Complaints"][0]->ComAttID = intVal(session()->get('opcPartID')); - $this->sessData->dataSets["Complaints"][0]->save(); - } - $this->v["isPublic"] = $this->isPublic(); - - // used to be admin initializations: - $this->v["allowEdits"] = ($this->v["uID"] > 0 && $this->v["user"] && $this->v["user"]->hasRole('administrator|staff')); - $this->v["management"] = ($this->v["uID"] > 0 && $this->v["user"] && $this->v["user"]->hasRole('administrator|staff')); - $this->v["volunOpts"] = 1; - if ($GLOBALS["SL"]->REQ->session()->has('volunOpts')) { - $this->v["volunOpts"] = $GLOBALS["SL"]->REQ->session()->get('volunOpts'); - } - if ((!session()->has('opcChks') || !session()->get('opcChks') || $GLOBALS["SL"]->REQ->has('refresh')) - && $this->treeID == 1) { - $chk = OPComplaints::where('ComPublicID', null) - ->where('ComStatus', 'NOT LIKE', $GLOBALS["SL"]->def->getID('Complaint Status', 'Incomplete')) - ->get(); - if ($chk->isNotEmpty()) { - foreach ($chk as $i => $complaint) { - $complaint->update([ 'ComPublicID' => $GLOBALS["SL"]->genNewCorePubID('Complaints') ]); - } - } - session()->put('opcChks', true); - } - return true; - } - - public function initPowerUser($uID = -3) - { - if (!$this->v["user"] || intVal($this->v["user"]->id) <= 0 - || !$this->v["user"]->hasRole('administrator|staff|databaser|volunteer')) { - return $this->redir('/'); - } - if ($uID <= 0) $uID = $this->v["uID"]; - $GLOBALS["SL"]->x["yourUserInfo"] = OPzVolunUserInfo::where('UserInfoUserID', $uID) - ->first(); - if (!$GLOBALS["SL"]->x["yourUserInfo"]) { - $GLOBALS["SL"]->x["yourUserInfo"] = new OPzVolunUserInfo; - $GLOBALS["SL"]->x["yourUserInfo"]->UserInfoUserID = $uID; - $GLOBALS["SL"]->x["yourUserInfo"]->save(); - } - $this->v["yourUserContact"] = []; - if (!isset($GLOBALS["SL"]->x["yourUserInfo"]->UserInfoPersonContactID) - || intVal($GLOBALS["SL"]->x["yourUserInfo"]->UserInfoPersonContactID) <= 0) { - $thisUser = User::select('email')->find($uID); - $this->v["yourUserContact"] = new OPPersonContact; - $this->v["yourUserContact"]->PrsnEmail = $thisUser->email; - $this->v["yourUserContact"]->save(); - $GLOBALS["SL"]->x["yourUserInfo"]->UserInfoPersonContactID = $this->v["yourUserContact"]->PrsnID; - $GLOBALS["SL"]->x["yourUserInfo"]->save(); - } else { - $this->v["yourUserContact"] = OPPersonContact::find($GLOBALS["SL"]->x["yourUserInfo"]->UserInfoPersonContactID); - } - return [ $GLOBALS["SL"]->x["yourUserInfo"], $this->v["yourUserContact"] ]; - } - - protected function ajaxContentWrapCustom($str, $nID = -3) - { - if ($this->treeID == 1) { - if ($GLOBALS["SL"]->REQ->has('treeSlug') && trim($GLOBALS["SL"]->REQ->get('treeSlug')) == 'complaint' - && $GLOBALS["SL"]->REQ->has('nodeSlug') && trim($GLOBALS["SL"]->REQ->get('nodeSlug')) == 'login') { - return $this->redir('/u/complaint/when-and-where', true); - } - } - return $str; - } - - protected function chkPersonRecs() - { - // This should've been automated via the data table subset option - // but for now, I'm replacing that complication with this check... - $found = false; - foreach ([ ['Civilians', 'Civ'], ['Officers', 'Off'] ] as $type) { - if (isset($this->sessData->dataSets[$type[0]]) && sizeof($this->sessData->dataSets[$type[0]]) > 0) { - foreach ($this->sessData->dataSets[$type[0]] as $i => $civ) { - if (!isset($civ->{ $type[1] . 'PersonID' }) || intVal($civ->{ $type[1] . 'PersonID' }) <= 0) { - $new = new OPPersonContact; - $new->save(); - $this->sessData->dataSets[$type[0]][$i]->update([ - $type[1] . 'PersonID' => $new->getKey() ]); - $found = true; - } - if (!isset($civ->{ $type[1] . 'PhysDescID' }) - || intVal($civ->{ $type[1] . 'PhysDescID' }) <= 0) { - $new = new OPPhysicalDesc; - $new->save(); - $this->sessData->dataSets[$type[0]][$i]->update([ - $type[1] . 'PhysDescID' => $new->getKey() ]); - $found = true; - } - } - } - } - if ($found) $this->sessData->refreshDataSets(); - // // // // - return true; - } - - protected function afterCreateNewDataLoopItem($tbl = '', $itemID = -3) - { - if (in_array($tbl, ['Civilians', 'Officers']) && $itemID > 0) $this->chkPersonRecs(); - return true; - } - - // CUSTOM={OnlyIfNoAllegationsOtherThan:WrongStop,Miranda,PoliceRefuseID] - protected function checkNodeConditionsCustom($nID, $condition = '') - { - if ($condition == '#VehicleStop') { // could be replaced by OR functionality - if (isset($this->sessData->dataSets["Scenes"]) && sizeof($this->sessData->dataSets["Scenes"]) > 0) { - if (isset($this->sessData->dataSets["Scenes"][0]->ScnIsVehicle) - && trim($this->sessData->dataSets["Scenes"][0]->ScnIsVehicle) == 'Y') { - return 1; - } - if (isset($this->sessData->dataSets["Scenes"][0]->ScnIsVehicleAccident) - && trim($this->sessData->dataSets["Scenes"][0]->ScnIsVehicleAccident) == 'Y') { - return 1; - } - } - return 0; - } elseif ($condition == '#LawyerInvolved') { - if ((isset($this->sessData->dataSets["Complaints"][0]->ComAttorneyHas) - && in_array(trim($this->sessData->dataSets["Complaints"][0]->ComAttorneyHas), ['Y', '?'])) - || (isset($this->sessData->dataSets["Complaints"][0]->ComAttorneyWant) - && in_array(trim($this->sessData->dataSets["Complaints"][0]->ComAttorneyWant), ['Y', '?']))) { - return 1; - } - if ((isset($this->sessData->dataSets["Complaints"][0]->ComAnyoneCharged) - && in_array(trim($this->sessData->dataSets["Complaints"][0]->ComAnyoneCharged), ['Y', '?'])) - && (!isset($this->sessData->dataSets["Complaints"][0]->ComAllChargesResolved) - || trim($this->sessData->dataSets["Complaints"][0]->ComAllChargesResolved) != 'Y')) { - return 1; - } - if (isset($this->sessData->dataSets["Complaints"][0]->ComAnyoneCharged) - && trim($this->sessData->dataSets["Complaints"][0]->ComAnyoneCharged) == 'N' - && isset($this->sessData->dataSets["Complaints"][0]->ComFileLawsuit) - && trim($this->sessData->dataSets["Complaints"][0]->ComFileLawsuit) == 'Y') { - return 1; - } - return 0; - } elseif ($condition == '#NoSexualAllegation') { - $noSexAlleg = true; - if (isset($this->sessData->dataSets["Allegations"]) - && sizeof($this->sessData->dataSets["Allegations"]) > 0) { - foreach ($this->sessData->dataSets["Allegations"] as $alleg) { - if (in_array($alleg->AlleType, [ - $GLOBALS["SL"]->def->getID('Allegation Type', 'Sexual Assault'), - $GLOBALS["SL"]->def->getID('Allegation Type', 'Sexual Harassment') - ])) { - $noSexAlleg = false; - } - } - } - return ($noSexAlleg) ? 1 : 0; - } elseif ($condition == '#IncidentHasAddress') { - if (isset($this->sessData->dataSets["Incidents"]) - && isset($this->sessData->dataSets["Incidents"][0]->IncAddress) - && trim($this->sessData->dataSets["Incidents"][0]->IncAddress) != '') { - return 1; - } else { - return 0; - } - } elseif ($condition == '#HasArrestOrForce') { - if ($this->sessData->dataHas('Arrests') || $this->sessData->dataHas('Force')) return 1; - else return 0; - } elseif ($condition == '#CivHasForce') { - if (isset($GLOBALS["SL"]->closestLoop["itemID"])) { - return $this->chkCivHasForce($GLOBALS["SL"]->closestLoop["itemID"]); - } - return 0; - } elseif ($condition == '#HasForceHuman') { - $ret = 0; - if (isset($this->sessData->dataSets["Civilians"]) && sizeof($this->sessData->dataSets["Civilians"]) > 0) { - foreach ($this->sessData->dataSets["Civilians"] as $civ) { - if ($civ->CivRole == 'Victim' && $this->chkCivHasForce($civ->CivID) == 1) $ret = 1; - } - } - return $ret; - } elseif ($condition == '#HasInjury') { - if (isset($this->sessData->dataSets["Civilians"]) && sizeof($this->sessData->dataSets["Civilians"]) > 0) { - foreach ($this->sessData->dataSets["Civilians"] as $civ) { - if ($civ->CivRole == 'Victim' && isset($civ->CivHasInjury) && trim($civ->CivHasInjury) == 'Y') { - return 1; - } - } - } - return 0; - } elseif ($condition == '#MedicalCareNotYou') { - if (isset($GLOBALS["SL"]->closestLoop["itemID"])) { - $careRec = $this->sessData->getRowById('InjuryCare', $GLOBALS["SL"]->closestLoop["itemID"]); - if ($careRec && isset($careRec->InjCareSubjectID)) { - $civ = $this->sessData->getRowById('Civilians', $careRec->InjCareSubjectID); - if ($civ && isset($civ->CivIsCreator) && trim($civ->CivIsCreator) == 'Y') return 0; - } - } - } elseif ($condition == '#Property') { - $search = $this->sessData->getChildRow('EventSequence', $GLOBALS["SL"]->closestLoop["itemID"], 'Searches'); - if ((isset($search->SrchSeized) && trim($search->SrchSeized) == 'Y') - || (isset($search->SrchDamage) && trim($search->SrchDamage) == 'Y')) { - return 1; - } else { - return 0; - } - } elseif ($condition == '#EmailConfirmSentToday') { - if (isset($this->v["user"]) && isset($this->v["user"]->id)) { - $cutoff = date("Y-m-d H:i:s", - mktime(date("H"), date("i"), date("s"), date("n"), date("j")-1, date("Y"))); - $chk = SLEmailed::where('EmailedEmailID', 1) - ->where('EmailedFromUser', $this->v["user"]->id) - ->where('created_at', '>', $cutoff) - ->get(); - if ($chk->isNotEmpty()) { - return 1; - } - } - return 0; - } elseif ($condition == '#HasUploads') { - $uploads = $this->getUploadsMultNodes($this->cmplntUpNodes, $this->v["isAdmin"], $this->v["isOwner"]); - if ($uploads && sizeof($uploads) > 0) return 1; - return 0; - } elseif ($condition == '#PrintAnonOnly') { - if (isset($GLOBALS["SL"]->x["pageView"]) && in_array($GLOBALS["SL"]->x["pageView"], ['public', 'pdf']) - && isset($this->sessData->dataSets["Complaints"][0]->ComStatus) - && in_array(trim($this->sessData->dataSets["Complaints"][0]->ComStatus), - $this->getUnPublishedStatusList())) { - return 1; - } - if (isset($GLOBALS["SL"]->x["pageView"]) && in_array($GLOBALS["SL"]->x["pageView"], ['public', 'pdf']) - && isset($this->sessData->dataSets["Complaints"][0]->ComPrivacy) - && $this->sessData->dataSets["Complaints"][0]->ComPrivacy - != $GLOBALS["SL"]->def->getID('Privacy Types', 'Submit Publicly')) { - return 1; - } - return 0; - } elseif ($condition == '#PrintSensitiveReport') { - if (isset($GLOBALS["SL"]->x["pageView"]) && in_array($GLOBALS["SL"]->x["pageView"], ['full', 'full-pdf'])) { - return 1; - } - return 0; - } elseif ($condition == '#IsOversightAgency') { - return (($this->v["uID"] > 0 && $this->v["user"]->hasRole('oversight')) ? 1 : 0); - } - return -1; - } - - protected function tweakPageViewPerms() - { - if (isset($this->sessData->dataSets["Complaints"]) - && $this->isPublished('Complaints', $this->coreID, $this->sessData->dataSets["Complaints"][0]) - && isset($this->sessData->dataSets["Complaints"][0]->ComPrivacy) - && $this->sessData->dataSets["Complaints"][0]->ComPrivacy - == $GLOBALS["SL"]->def->getID('Privacy Types', 'Submit Publicly')) { - if ($GLOBALS["SL"]->x["dataPerms"] == 'public') { - $GLOBALS["SL"]->x["dataPerms"] = 'private'; - } - } - return true; - } - - protected function rawOrderPercentTweak($nID, $rawPerc, $found = -3) - { - if ($this->isGold() && !$this->isCompliment()) return $rawPerc; - return round(100*($found/(sizeof($this->nodesRawOrder)-200))); - } - - protected function runPageExtra($nID = -3) - { - if ($nID == 1362) { // Loading Complaint Report: Check for oversight permissions - if (!isset($GLOBALS["SL"]->x["pageView"])) $this->maxUserView(); // shouldn't be needed? - if ($this->chkOverUserHasCore()) $GLOBALS["SL"]->x["dataPerms"] = 'sensitive'; - } - return true; - } - - -/***************************************************************************** -// START Processes Which Override Basic Node Printing and $_POST Processing -*****************************************************************************/ - protected function customNodePrint($nID = -3, $tmpSubTier = [], $nIDtxt = '', $nSffx = '', $currVisib = 1) { $ret = ''; @@ -644,6 +152,8 @@ protected function customNodePrint($nID = -3, $tmpSubTier = [], $nIDtxt = '', $n return $this->printVolunLocationForm(); } elseif ($nID == 1225) { return $this->printDeptEditHeader(); + } elseif ($nID == 2162) { + return $this->printDeptEditHeader2(); } elseif ($nID == 1261) { return view('vendor.openpolice.nodes.1261-volun-dept-edit-wiki-stats', $this->v)->render(); } elseif ($nID == 1809) { @@ -663,7 +173,8 @@ protected function customNodePrint($nID = -3, $tmpSubTier = [], $nIDtxt = '', $n } elseif ($nID == 1346) { return $this->volunStars(); } elseif ($nID == 1351) { - return $this->volunDepts(); + $this->initAdmDash(); + return $this->v["openDash"]->volunDepts(); // Admin Dashboard Page } elseif ($nID == 1359) { @@ -685,6 +196,41 @@ protected function customNodePrint($nID = -3, $tmpSubTier = [], $nIDtxt = '', $n return $ret; } + protected function customResponses($nID, $curr) + { + if ($nID == 2126) { + if (isset($curr->responses[0]) && isset($curr->responses[0]->NodeResEng) + && isset($this->sessData->dataSets["Complaints"]) + && isset($this->sessData->dataSets["Complaints"][0]->ComPrivacy)) { + switch ($this->sessData->dataSets["Complaints"][0]->ComPrivacy) { + case $GLOBALS["SL"]->def->getID('Privacy Types', 'Submit Publicly'): + $curr->responses[0]->NodeResEng = 'Yes, I agree to publish my complaint data on this website + with Full Transparency.
+ We will publish your FULL complaint on OpenPolice.org. This includes your written story, + the names of civilians and police officers, and all survey answers. +
'; + break; + case $GLOBALS["SL"]->def->getID('Privacy Types', 'Names Visible to Police but not Public'): + $curr->responses[0]->NodeResEng = 'Yes, I agree to publish my complaint data on this website + with No Names Public.
+ Only your multiple-choice answers will be published on OpenPolice.org. + This will NOT include your written story or police officers\' names and badge numbers. +
'; + break; + case $GLOBALS["SL"]->def->getID('Privacy Types', 'Completely Anonymous'): + case $GLOBALS["SL"]->def->getID('Privacy Types', 'Anonymized'): + $curr->responses[0]->NodeResEng = 'Yes, I agree to publish my Anonymized complaint data + on this website.
+ Only your multiple-choice answers will be published on OpenPolice.org. + This will NOT include your written story or police officers\' names and badge numbers. +
'; + break; + } + } + } + return $curr; + } + protected function initAdmDash() { $this->v["isDash"] = true; @@ -696,354 +242,59 @@ protected function initAdmDash() protected function customNodePrintButton($nID = -3, $promptNotes = '') { - if (in_array($nID, [270, 973])) return ''; + if (in_array($nID, [270, 973])) { + return ''; + } return ''; } - protected function postNodePublicCustom($nID = -3, $tmpSubTier = []) - { - if (empty($tmpSubTier)) $tmpSubTier = $this->loadNodeSubTier($nID); - list($tbl, $fld) = $this->allNodes[$nID]->getTblFld(); - if ($this->treeID == 1 && isset($this->sessData->dataSets["Complaints"])) { - $this->sessData->dataSets["Complaints"][0]->update([ "updated_at" => date("Y-m-d H:i:s") ]); - } - // Main Complaint Survey... - if ($nID == 439) { - return $this->saveUnresolvedCharges($nID); - } elseif (in_array($nID, [16, 17])) { - return $this->saveStartTime($nID, $tbl, $fld); - } elseif (in_array($nID, [145, 920])) { - return $this->saveNewDept($nID); - } elseif ($nID == 237) { - return $this->saveCitationVictims($nID); - } elseif ($nID == 671) { - return $this->saveProfanePersons($nID); - } elseif ($nID == 674) { - return $this->saveProfanePerson($nID); - } elseif ($nID == 670) { - return $this->saveProfanePersons($nID, 'Civ'); - } elseif ($nID == 676) { - return $this->saveProfanePerson($nID, 'Civ'); - } elseif (in_array($nID, [742, 2044])) { - return $this->saveForceTypes($nID); - } elseif ($nID == 743) { - return $this->saveForceAnimYN($nID); - } elseif ($nID == 744) { - return $this->saveForceTypesAnim($nID, 743, 746); - } elseif ($nID == 316) { - return $this->saveHandcuffInjury($nID); - } elseif ($nID == 976) { - return $this->saveStatusCompletion($nID); - - // Department Editor Survey ... - } elseif ($nID == 1285) { - return $this->saveDeptSubWays1($nID); - } elseif ($nID == 1287) { - return $this->saveDeptSubWays2($nID); - } elseif ($nID == 1329) { - return $this->saveEditLog($nID); - } elseif ($nID == 1229) { - return $this->saveInitDeptOversight($nID); - - // Page Nodes ... - } elseif ($nID == 1007) { - return $this->postContactEmail($nID); - } - return false; // false to continue standard post processing - } + - // returns an array of overrides for ($currNodeSessionData, ???... - protected function printNodeSessDataOverride($nID = -3, $tmpSubTier = [], $nIDtxt = '', $currNodeSessionData = '') + protected function chkPersonRecs() { - if (empty($this->sessData->dataSets)) { - return []; - } - if ($nID == 28) { // Complainant's Role - if (isset($this->sessData->dataSets["Civilians"])) { - return [trim($this->sessData->dataSets["Civilians"][0]->CivRole)]; - } - return []; - } elseif ($nID == 47) { // Complainant Recorded Incident? - if (isset($this->sessData->dataSets["Civilians"])) { - return [trim($this->sessData->dataSets["Civilians"][0]->CivCameraRecord)]; - } - return []; - } elseif ($nID == 19) { // Would you like to provide the GPS location? - if (isset($this->sessData->dataSets["Incidents"]) - && intVal($this->sessData->dataSets["Incidents"][0]->IncAddressLat) != 0 - || intVal($this->sessData->dataSets["Incidents"][0]->IncAddressLng) != 0) { - return ['Yes']; - } else { - return []; - } - } elseif ($nID == 39) { - if ($currNodeSessionData == '') { - $user = Auth::user(); - if ($user && isset($user->email)) return [$user->email]; - return ['']; - } - } elseif ($nID == 671) { // Officers Used Profanity? - $currVals = []; - foreach ($this->sessData->dataSets["Officers"] as $i => $off) { - if (isset($off->OffUsedProfanity) && $off->OffUsedProfanity == 'Y') $currVals[] = $off->getKey(); - } - return [';' . implode(';', $currVals) . ';']; - } elseif ($nID == 237) { - $ret = []; - $civs = $this->sessData->getLoopRows('Victims'); - if ($civs && sizeof($civs) > 0) { - foreach ($civs as $i => $civ) { - if ($civ->CivRole == 'Victim' && trim($civ->CivGivenCitation) == 'Y') $ret[] = $civ->CivID; - } - } - return $ret; - } elseif ($nID == 674) { // Officer Used Profanity? - return [trim($this->sessData->dataSets["Officers"][0]->OffUsedProfanity)]; - } elseif ($nID == 670) { // Victims Used Profanity? - $currVals = []; - foreach ($this->sessData->dataSets["Civilians"] as $i => $civ) { - if ($civ->CivUsedProfanity == 'Y') $currVals[] = $civ->getKey(); - } - return [';' . implode(';', $currVals) . ';']; - } elseif ($nID == 676) { // Victim Used Profanity? - $civInd = $this->getFirstVictimCivInd(); - if ($civInd >= 0) { - return [trim($this->sessData->dataSets["Civilians"][$civInd]->CivUsedProfanity)]; - } - } elseif (in_array($nID, [732, 736, 733])) { // Gold Stops & Searches, Multiple Victims - if (!isset($this->v["firstTimeGoGoldDeets"])) { - $chk = SLNodeSavesPage::where('PageSaveSession', $this->coreID) - ->where('PageSaveNode', 484) - ->first(); - $this->v["firstTimeGoGoldDeets"] = (!$chk || !isset($chk->PageSaveID)); - } - $ret = []; - $eveType = (in_array($nID, [732, 736])) ? 'Stops' : 'Searches'; - if (sizeof($this->sessData->loopItemIDs["Victims"]) > 0) { - foreach ($this->sessData->loopItemIDs["Victims"] as $civ) { - if ($this->getCivEventID($nID, $eveType, $civ) > 0) $ret[] = $civ; - } - } - return $ret; - } elseif (in_array($nID, [738, 737, 739])) { // Gold Stops & Searches, Only One Victims - $eveType = (in_array($nID, [738, 737])) ? 'Stops' : 'Searches'; - if ($this->getCivEventID($nID, $eveType, $this->sessData->loopItemIDs["Victims"][0]) > 0) { - return ['Y']; - } - return ['N']; - } elseif ($nID == 740) { // Use of Force on Victims - $ret = []; - $this->checkHasEventSeq($nID); - foreach ($this->sessData->loopItemIDs["Victims"] as $i => $civ) { - if (in_array($civ, $this->eventCivLookup['Force'])) { - $ret[] = 'cyc' . $i . 'Y'; - } elseif (!isset($this->v["firstTimeGoGoldDeets"]) || !$this->v["firstTimeGoGoldDeets"] - || !in_array($civ, $this->eventCivLookup['Force'])) { - $ret[] = 'cyc' . $i . 'N'; - } - } - if (empty($ret)) $ret = ['N']; - return $ret; - } elseif (in_array($nID, [742, 2044])) { // Use of Force on Victims: Sub-Types - $ret = []; - if (isset($this->sessData->dataSets["Force"]) && sizeof($this->sessData->dataSets["Force"]) > 0) { - foreach ($this->sessData->dataSets["Force"] as $force) { - if (isset($force->ForType) && intVal($force->ForType) > 0 - && (!isset($force->ForAgainstAnimal) || trim($force->ForAgainstAnimal) != 'Y')) { - $ret[] = $force->ForType; + // This should've been automated via the data table subset option + // but for now, I'm replacing that complication with this check... + $found = false; + foreach ([ ['Civilians', 'Civ'], ['Officers', 'Off'] ] as $type) { + if (isset($this->sessData->dataSets[$type[0]]) && sizeof($this->sessData->dataSets[$type[0]]) > 0) { + foreach ($this->sessData->dataSets[$type[0]] as $i => $civ) { + if (!isset($civ->{ $type[1] . 'PersonID' }) || intVal($civ->{ $type[1] . 'PersonID' }) <= 0) { + $new = new OPPersonContact; + $new->save(); + $this->sessData->dataSets[$type[0]][$i]->update([ + $type[1] . 'PersonID' => $new->getKey() ]); + $found = true; } - } - } - return $ret; - } elseif ($nID == 2043) { - $force = $this->sessData->getDataBranchRow('Force'); - if ($force && isset($force->ForEventSequenceID) && intVal($force->ForEventSequenceID) > 0) { - return $this->getLinkedToEvent('Civilian', $force->ForEventSequenceID); - } - return []; - } elseif ($nID == 743) { // Use of Force against Animal: Yes/No - $animalsForce = $this->getCivAnimalForces(); - if ($animalsForce && sizeof($animalsForce) > 0) return ['Y']; - elseif (!isset($this->v["firstTimeGoGoldDeets"]) || !$this->v["firstTimeGoGoldDeets"]) return ['N']; - } elseif ($nID == 746) { // Use of Force against Animal: Description - $animalsForce = $this->getCivAnimalForces(); - if ($animalsForce->isNotEmpty() && isset($animalsForce[0]->ForAnimalDesc)) { - return [$animalsForce[0]->ForAnimalDesc]; - } - } elseif ($nID == 744) { // Use of Force against Animal: Sub-types - $ret = []; - $animalsForce = $this->getCivAnimalForces(); - if ($animalsForce && sizeof($animalsForce) > 0) { - foreach ($animalsForce as $force) $ret[] = $force->ForType; - } - return $ret; - } elseif ($nID == 741) { // Arrests, Citations, Warnings - $ret = []; - $this->checkHasEventSeq($nID); - foreach ($this->sessData->loopItemIDs["Victims"] as $i => $civ) { - if (in_array($civ, $this->eventCivLookup['Arrests'])) $ret[] = 'cyc' . $i . 'Arrests'; - elseif (in_array($civ, $this->eventCivLookup['Citations'])) $ret[] = 'cyc' . $i . 'Citations'; - elseif (in_array($civ, $this->eventCivLookup['Warnings'])) $ret[] = 'cyc' . $i . 'Warnings'; - else $ret[] = 'cyc' . $i . 'None'; - } - return $ret; - } elseif (in_array($nID, [401, 334, 409, 356, 384])) { // Gold Allegations: Pre-Load "Why" From Silver - if (trim($currNodeSessionData) == '') { - $defID = $GLOBALS["SL"]->def->getID('Allegation Type', 'Wrongful Detention'); // 401 - switch ($nID) { - case 334: $defID = $GLOBALS["SL"]->def->getID('Allegation Type', 'Wrongful Search'); break; - case 409: $defID = $GLOBALS["SL"]->def->getID('Allegation Type', 'Wrongful Property Seizure'); break; - case 356: $defID = $GLOBALS["SL"]->def->getID('Allegation Type', 'Unreasonable Force'); break; - case 384: $defID = $GLOBALS["SL"]->def->getID('Allegation Type', 'Wrongful Arrest'); break; - } - if (isset($this->sessData->dataSets["Allegations"]) - && sizeof($this->sessData->dataSets["Allegations"]) > 0) { - foreach ($this->sessData->dataSets["Allegations"] as $alleg) { - if (isset($alleg->AlleType) && $alleg->AlleType == $defID && isset($alleg->AlleDescription) - && (!isset($alleg->AlleEventSequenceID) || intVal($alleg->AlleEventSequenceID) == 0)) { - return [$alleg->AlleDescription]; - } + if (!isset($civ->{ $type[1] . 'PhysDescID' }) + || intVal($civ->{ $type[1] . 'PhysDescID' }) <= 0) { + $new = new OPPhysicalDesc; + $new->save(); + $this->sessData->dataSets[$type[0]][$i]->update([ + $type[1] . 'PhysDescID' => $new->getKey() ]); + $found = true; } } } - } elseif ($nID == 269) { // Confirm Submission, Complaint Completed! - return [(($this->sessData->dataSets["Complaints"][0]->ComStatus - != $GLOBALS["SL"]->def->getID('Complaint Status', 'Incomplete')) ? 'Y' : '')]; - - // Volunteer Research Departments - } elseif ($nID == 1285) { - $this->getOverRow('IA'); - $currNodeSessionData = []; - if (isset($this->v["overRowIA"]->OverWaySubEmail) && intVal($this->v["overRowIA"]->OverWaySubEmail) > 0) { - $currNodeSessionData[] = 'Email'; - } - if (isset($this->v["overRowIA"]->OverWaySubVerbalPhone) - && intVal($this->v["overRowIA"]->OverWaySubVerbalPhone) > 0) { - $currNodeSessionData[] = 'VerbalPhone'; - } - if (isset($this->v["overRowIA"]->OverWaySubPaperMail) - && intVal($this->v["overRowIA"]->OverWaySubPaperMail) > 0) { - $currNodeSessionData[] = 'PaperMail'; - } - if (isset($this->v["overRowIA"]->OverWaySubPaperInPerson) - && intVal($this->v["overRowIA"]->OverWaySubPaperInPerson) > 0) { - $currNodeSessionData[] = 'PaperInPerson'; - } - return $currNodeSessionData; - } elseif ($nID == 1287) { - $currNodeSessionData = []; - if (isset($this->v["overRowIA"]->OverOfficialFormNotReq) - && intVal($this->v["overRowIA"]->OverOfficialFormNotReq) > 0) { - $currNodeSessionData[] = 'OfficialFormNotReq'; - } - if (isset($this->v["overRowIA"]->OverOfficialAnon) - && intVal($this->v["overRowIA"]->OverOfficialAnon) > 0) { - $currNodeSessionData[] = 'OfficialAnon'; - } - if (isset($this->v["overRowIA"]->OverWaySubNotary) - && intVal($this->v["overRowIA"]->OverWaySubNotary) > 0) { - $currNodeSessionData[] = 'Notary'; - } - if (isset($this->v["overRowIA"]->OverSubmitDeadline) - && intVal($this->v["overRowIA"]->OverSubmitDeadline) > 0) { - $currNodeSessionData[] = 'TimeLimit'; - } - return $currNodeSessionData; } - return []; - } - -/***************************************************************************** -// END Processes Which Override Default Behaviors -*****************************************************************************/ - - - - public function sortableStart($nID) - { - return '
Start of Incident
'; + if ($found) { + $this->sessData->refreshDataSets(); + } + // // // // + return true; } - public function sortableEnd($nID) + protected function afterCreateNewDataLoopItem($tbl = '', $itemID = -3) { - return '
End of Incident
'; + if (in_array($tbl, ['Civilians', 'Officers']) && $itemID > 0) { + $this->chkPersonRecs(); + } + return true; } protected function uploadWarning($nID) { - return '
WARNING: If documents show sensitive personal information, set this to "private." - This includes addresses, phone numbers, emails, or social security numbers.
'; - } - - protected function deptSearchForm($state = '', $deptName = '') - { - $GLOBALS["SL"]->loadStates(); - return view('vendor.openpolice.volun.volunEditSearch', [ - "deptName" => $deptName, - "stateDrop" => $GLOBALS["SL"]->states->stateDrop($state) - ])->render(); - } - - public function deptIndexSearch($deptRows = [], $state = '', $deptName = '') - { - $this->v["viewType"] = 'search'; - $this->v["deptRows"] = $deptRows; - $this->v["userTots"] = $this->getVolunEditsOverview(); - $this->v["searchForm"] = str_replace('deptSearchForm($state, $deptName) )) . ''; - $this->v["belowAdmMenu"] = $this->printSidebarLeaderboard(); - $GLOBALS["SL"]->loadStates(); - return view('vendor.openpolice.volun.volunteer', $this->v)->render(); - } - - public function deptIndexSearchS(Request $request, $state = '') - { - $this->survLoopInit($request, '/dashboard/volunteer'); - $deptRows = OPDepartments::where('DeptAddressState', '=', $state) - ->orderBy('DeptName', 'asc') - ->paginate(50); - return $this->deptIndexSearch($deptRows, $state, ''); - } - - public function deptIndexSearchD(Request $request, $deptName = '') - { - $this->survLoopInit($request, '/dashboard/volunteer'); - $this->v["deptName"] = ''; - if (trim($deptName) != '') $this->v["deptName"] = $deptName; - return $this->deptIndexSearch($this->processSearchDepts('', $deptName), '', $deptName); - } - - public function deptIndexSearchSD(Request $request, $state = '', $deptName = '') - { - $this->survLoopInit($request, '/dashboard/volunteer'); - $this->v["deptName"] = ''; - if (trim($deptName) != '') $this->v["deptName"] = $deptName; - return $this->deptIndexSearch($this->processSearchDepts($state, $deptName), $state, $deptName); - } - - protected function processSearchDepts($state = '', $deptName = '') - { - $deptName = str_replace(' ', ' ', str_replace(' ', ' ', str_replace(' ', ' ', $deptName))); - $searches = array('%'.$deptName.'%'); - if (strpos($deptName, ' ') !== false) { - $words = explode(' ', $deptName); - foreach ($words as $w) { - if (!in_array(strtolower($w), ['city', 'county', 'sherrif\'s', 'police', 'department', 'dept'])) { - $searches = '%'.$w.'%'; - } - } - } - $deptRows = []; - $evalQry = "\$deptRows = App\\Models\\OPDepartments::" - . ((trim($state) != '') ? "where('DeptAddressState', '=', \$state)->" : "") - . "where(function(\$query) { return \$query->where('DeptName', 'LIKE', '" - . addslashes($searches[0]) . "')"; - for ($i = 1; $i < sizeof($searches); $i++) { - $evalQry .= "->orWhere('DeptName', 'LIKE', '" . addslashes($searches[$i]) . "')"; - } - $evalQry .= "; })->orderBy('DeptName', 'asc')->paginate(50);"; - eval($evalQry); - return $deptRows; + return 'WARNING: If documents show sensitive personal information, set this to "private." + This includes addresses, phone numbers, emails, or social security numbers.'; } } \ No newline at end of file diff --git a/src/Controllers/OpenPoliceAdminMenu.php b/src/Controllers/OpenPoliceAdminMenu.php index f79d20e..e027bec 100644 --- a/src/Controllers/OpenPoliceAdminMenu.php +++ b/src/Controllers/OpenPoliceAdminMenu.php @@ -55,6 +55,7 @@ public function loadAdmMenu($currUser = null, $currPage = '') $this->admMenuLnk('/dash/volunteer', 'Department List'), $this->admMenuLnk('/dash/team-resources', 'Team Resources') ]); + return $treeMenu; } elseif ($this->currUser->hasRole('volunteer')) { $treeMenu[] = $this->admMenuLnk('/dash/volunteer', 'Police Departments List'); $treeMenu[] = $this->admMenuLnk('/dash/verify-next-department', 'Verify A Dept.'); @@ -72,6 +73,7 @@ public function loadAdmMenu($currUser = null, $currPage = '') $treeMenu[] = $this->admMenuLnk('/dash/volunteer-stars', $stars . 'You Have ' . number_format($GLOBALS["SL"]->x["yourUserInfo"]->UserInfoStars) . ' Stars'); } + return $treeMenu; } } //$treeMenu = $this->addAdmMenuHome(); diff --git a/src/Controllers/OpenPoliceSearcher.php b/src/Controllers/OpenPoliceSearcher.php index ab5bbc4..795c386 100644 --- a/src/Controllers/OpenPoliceSearcher.php +++ b/src/Controllers/OpenPoliceSearcher.php @@ -19,17 +19,20 @@ protected function processSearchFilt($key, $val) { if ($key == 'd') { $deptComs = $both = []; - $chk = OPLinksComplaintDept::where('LnkComDeptDeptID', $val) + $chk = OPLinksComplaintDept::whereIn('LnkComDeptDeptID', $val) ->get(); if ($chk->isNotEmpty()) { - foreach ($chk as $com) $deptComs[] = $com->LnkComDeptComplaintID; + foreach ($chk as $com) { + $deptComs[] = $com->LnkComDeptComplaintID; + } $chk = OPComplaints::whereIn('ComID', $deptComs) + ->select('ComID') ->get(); $deptComs = []; if ($chk->isNotEmpty()) { foreach ($chk as $com) { - if (in_array($com->ComPublicID, $this->allPublicFiltIDs)) { - $both[] = $com->ComPublicID; + if (in_array($com->ComID, $this->allPublicFiltIDs)) { + $both[] = $com->ComID; } } } diff --git a/src/Controllers/OpenPoliceUtils.php b/src/Controllers/OpenPoliceUtils.php index 9ba5f79..31a4d7e 100644 --- a/src/Controllers/OpenPoliceUtils.php +++ b/src/Controllers/OpenPoliceUtils.php @@ -3,6 +3,7 @@ use DB; use Auth; +use App\Models\User; use App\Models\OPComplaints; use App\Models\OPCompliments; use App\Models\OPIncidents; @@ -72,7 +73,9 @@ public function comStatus($defVal) protected function isCompliment() { - if (!isset($this->sessData->dataSets["Complaints"])) return ($this->treeID == 5); + if (!isset($this->sessData->dataSets["Complaints"])) { + return ($this->treeID == 5); + } return (isset($this->sessData->dataSets["Complaints"][0]->ComIsCompliment) && intVal($this->sessData->dataSets["Complaints"][0]->ComIsCompliment) == 1); } @@ -86,19 +89,25 @@ public function isOverCompatible($overRow) protected function isSilver() { - if (!isset($this->sessData->dataSets["Complaints"])) return false; + if (!isset($this->sessData->dataSets["Complaints"])) { + return false; + } return ($this->sessData->dataSets["Complaints"][0]->ComAwardMedallion == 'Silver'); } protected function isGold() { - if (!isset($this->sessData->dataSets["Complaints"])) return false; + if (!isset($this->sessData->dataSets["Complaints"])) { + return false; + } return ($this->sessData->dataSets["Complaints"][0]->ComAwardMedallion == 'Gold'); } protected function isPublic() { - if (!isset($this->sessData->dataSets["Complaints"])) return false; + if (!isset($this->sessData->dataSets["Complaints"])) { + return false; + } return ($this->sessData->dataSets["Complaints"][0]->ComPrivacy == $GLOBALS["SL"]->def->getID('Privacy Types', 'Submit Publicly')); } @@ -106,7 +115,9 @@ protected function isPublic() public function isPublished($coreTbl, $coreID, $coreRec = NULL) { if ($coreTbl == 'Complaints') { - if (!$coreRec) $coreRec = OPComplaints::find($coreID); + if (!$coreRec) { + $coreRec = OPComplaints::find($coreID); + } if ($coreRec && isset($coreRec->ComStatus)) { return (in_array($coreRec->ComStatus, $this->getPublishedStatusList($coreTbl))); } @@ -117,13 +128,17 @@ public function isPublished($coreTbl, $coreID, $coreRec = NULL) protected function moreThan1Victim() { - if (!isset($this->sessData->loopItemIDs['Victims'])) return false; + if (!isset($this->sessData->loopItemIDs['Victims'])) { + return false; + } return (sizeof($this->sessData->loopItemIDs['Victims']) > 1); } protected function moreThan1Officer() { - if (!isset($this->sessData->loopItemIDs['Officers'])) return false; + if (!isset($this->sessData->loopItemIDs['Officers'])) { + return false; + } return (sizeof($this->sessData->loopItemIDs["Officers"]) > 1); } @@ -199,23 +214,43 @@ public function multiRecordCheckDelWarn() public function chkCoreRecEmpty($coreID = -3, $coreRec = NULL) { - if ($coreID <= 0) $coreID = $this->coreID; - if (!$coreRec && $coreID > 0) $coreRec = OPComplaints::find($coreID); - if (!$coreRec) return false; - if (!isset($coreRec->ComSubmissionProgress) || intVal($coreRec->ComSubmissionProgress) <= 0) return true; - if (!isset($coreRec->ComSummary) || trim($coreRec->ComSummary) == '') return true; + if ($coreID <= 0) { + $coreID = $this->coreID; + } + if (!$coreRec && $coreID > 0) { + $coreRec = OPComplaints::find($coreID); + } + if (!$coreRec) { + return false; + } + if (!isset($coreRec->ComSubmissionProgress) || intVal($coreRec->ComSubmissionProgress) <= 0) { + return true; + } + if (!isset($coreRec->ComSummary) || trim($coreRec->ComSummary) == '') { + return true; + } return false; } protected function recordIsEditable($coreTbl, $coreID, $coreRec = NULL) { - if (!$coreRec && $coreID > 0) $coreRec = OPComplaints::find($coreID); - if (!isset($coreRec->ComStatus)) return true; - if (!$coreRec) return false; + if (!$coreRec && $coreID > 0) { + $coreRec = OPComplaints::find($coreID); + } + if (!isset($coreRec->ComStatus)) { + return true; + } + if (!$coreRec) { + return false; + } if ($this->treeID == 1) { - if ($coreRec->ComStatus == $GLOBALS["SL"]->def->getID('Complaint Status', 'Incomplete')) return true; + if ($coreRec->ComStatus == $GLOBALS["SL"]->def->getID('Complaint Status', 'Incomplete')) { + return true; + } } elseif ($this->treeID == 5) { - if ($coreRec->ComStatus == $GLOBALS["SL"]->def->getID('Compliment Status', 'Incomplete')) return true; + if ($coreRec->ComStatus == $GLOBALS["SL"]->def->getID('Compliment Status', 'Incomplete')) { + return true; + } } return false; } @@ -223,7 +258,9 @@ protected function recordIsEditable($coreTbl, $coreID, $coreRec = NULL) public function getAllPublicCoreIDs($coreTbl = '') { - if (trim($coreTbl) == '') $coreTbl = $GLOBALS["SL"]->coreTbl; + if (trim($coreTbl) == '') { + $coreTbl = $GLOBALS["SL"]->coreTbl; + } $this->allPublicCoreIDs = $list = []; if ($coreTbl == 'Complaints') { $list = OPComplaints::whereIn('ComStatus', $this->getPublishedStatusList($coreTbl)) @@ -239,7 +276,9 @@ public function getAllPublicCoreIDs($coreTbl = '') ->get(); } if ($list->isNotEmpty()) { - foreach ($list as $l) $this->allPublicCoreIDs[] = $l->ComPublicID; + foreach ($list as $l) { + $this->allPublicCoreIDs[] = $l->ComPublicID; + } } //echo '
'; print_r($this->allPublicCoreIDs); echo '
'; return $this->allPublicCoreIDs; @@ -247,7 +286,9 @@ public function getAllPublicCoreIDs($coreTbl = '') protected function getPublishedStatusList($coreTbl = '') { - if (!isset($coreTbl)) $coreTbl = $GLOBALS["SL"]->coreTbl; + if (!isset($coreTbl)) { + $coreTbl = $GLOBALS["SL"]->coreTbl; + } if ($coreTbl == 'Complaints') { return [ $GLOBALS["SL"]->def->getID('Complaint Status', 'Submitted to Oversight'), @@ -267,7 +308,9 @@ protected function getPublishedStatusList($coreTbl = '') protected function getUnPublishedStatusList($coreTbl = '') { - if (!isset($coreTbl)) $coreTbl = $GLOBALS["SL"]->coreTbl; + if (!isset($coreTbl)) { + $coreTbl = $GLOBALS["SL"]->coreTbl; + } if ($coreTbl == 'Complaints') { return [ $GLOBALS["SL"]->def->getID('Complaint Status', 'Hold'), @@ -290,7 +333,9 @@ protected function getUnPublishedStatusList($coreTbl = '') public function tblsInPackage() { - if ($this->dbID == 1) return ['Departments', 'Oversight']; + if ($this->dbID == 1) { + return ['Departments', 'Oversight']; + } return []; } @@ -346,7 +391,9 @@ protected function loadYourContact() public function loadDeptStuff($deptID = -3) { - if (!isset($this->v["deptScores"])) $this->v["deptScores"] = new DepartmentScores; + if (!isset($this->v["deptScores"])) { + $this->v["deptScores"] = new DepartmentScores; + } $this->v["deptScores"]->loadDeptStuff($deptID); return true; } @@ -484,7 +531,9 @@ public function simpleAllegationList() } break; } - if ($allegInfo[1] != '') $this->allegations[] = $allegInfo; + if ($allegInfo[1] != '') { + $this->allegations[] = $allegInfo; + } } } return $this->allegations; @@ -511,8 +560,12 @@ public function commaTopThreeAllegationList() $ret = ''; $this->simpleAllegationList(); if (sizeof($this->allegations) > 0) { - if (sizeof($this->allegations) == 1) return $this->allegations[0][0]; - if (sizeof($this->allegations) == 2) return $this->allegations[0][0] . ' and ' . $this->allegations[1][0]; + if (sizeof($this->allegations) == 1) { + return $this->allegations[0][0]; + } + if (sizeof($this->allegations) == 2) { + return $this->allegations[0][0] . ' and ' . $this->allegations[1][0]; + } return $this->allegations[0][0] . ', ' . $this->allegations[1][0] . ', and ' . $this->allegations[2][0]; } return $ret; @@ -551,15 +604,33 @@ protected function commaComplimentList() } } $ret = ''; - if (in_array('Valor', $types)) $ret .= ', Valor'; - if (in_array('Lifesaving', $types)) $ret .= ', Lifesaving'; - if (in_array('De-escalation', $types)) $ret .= ', De-escalation'; - if (in_array('Professionalism', $types)) $ret .= ', Professionalism'; - if (in_array('Fairness', $types)) $ret .= ', Fairness'; - if (in_array('Constitutional', $types)) $ret .= ', Constitutional Policing'; - if (in_array('Compassion', $types)) $ret .= ', Compassion'; - if (in_array('Community', $types)) $ret .= ', Community Service'; - if (trim($ret) != '') $ret = trim(substr($ret, 1)); + if (in_array('Valor', $types)) { + $ret .= ', Valor'; + } + if (in_array('Lifesaving', $types)) { + $ret .= ', Lifesaving'; + } + if (in_array('De-escalation', $types)) { + $ret .= ', De-escalation'; + } + if (in_array('Professionalism', $types)) { + $ret .= ', Professionalism'; + } + if (in_array('Fairness', $types)) { + $ret .= ', Fairness'; + } + if (in_array('Constitutional', $types)) { + $ret .= ', Constitutional Policing'; + } + if (in_array('Compassion', $types)) { + $ret .= ', Compassion'; + } + if (in_array('Community', $types)) { + $ret .= ', Community Service'; + } + if (trim($ret) != '') { + $ret = trim(substr($ret, 1)); + } return $ret; } @@ -575,7 +646,9 @@ protected function getAllegID($allegName) { if (sizeof($this->worstAllegations) > 0) { foreach ($this->worstAllegations as $a) { - if ($a[1] == $allegName) return $a[0]; + if ($a[1] == $allegName) { + return $a[0]; + } } } return -3; @@ -583,7 +656,9 @@ protected function getAllegID($allegName) protected function getAllegSilvRec($allegName, $allegID = -3) { - if ($allegID <= 0) $allegID = $this->getAllegID($allegName); + if ($allegID <= 0) { + $allegID = $this->getAllegID($allegName); + } if (isset($this->sessData->dataSets["Allegations"]) && sizeof($this->sessData->dataSets["Allegations"]) > 0) { foreach ($this->sessData->dataSets["Allegations"] as $alleg) { if ($alleg->AlleType == $allegID @@ -597,7 +672,9 @@ protected function getAllegSilvRec($allegName, $allegID = -3) protected function getAllegGoldRec($allegName, $allegID = -3) { - if ($allegID <= 0) $allegID = $this->getAllegID($allegName); + if ($allegID <= 0) { + $allegID = $this->getAllegID($allegName); + } if (isset($this->sessData->dataSets["Allegations"]) && sizeof($this->sessData->dataSets["Allegations"]) > 0) { foreach ($this->sessData->dataSets["Allegations"] as $alleg) { if ($alleg->AlleType == $allegID @@ -611,8 +688,12 @@ protected function getAllegGoldRec($allegName, $allegID = -3) protected function getAllegDesc($allegName, $allegID = -3, $allegRec = []) { - if (!$allegRec || !isset($allegRec->AlleDescription)) $allegRec = $this->getAllegSilvRec($allegName, $allegID); - if ($allegRec && isset($allegRec->AlleDescription)) return trim($allegRec->AlleDescription); + if (!$allegRec || !isset($allegRec->AlleDescription)) { + $allegRec = $this->getAllegSilvRec($allegName, $allegID); + } + if ($allegRec && isset($allegRec->AlleDescription)) { + return trim($allegRec->AlleDescription); + } return ''; } @@ -721,7 +802,9 @@ protected function getEveSeqOrd($eveSeqID) if (isset($this->sessData->dataSets["EventSequence"]) && sizeof($this->sessData->dataSets["EventSequence"]) > 0) { foreach ($this->sessData->dataSets["EventSequence"] as $i => $eveSeq) { - if ($eveSeq->EveID == $eveSeqID) return $eveSeq->EveOrder; + if ($eveSeq->EveID == $eveSeqID) { + return $eveSeq->EveOrder; + } } } return 0; @@ -750,7 +833,7 @@ protected function checkHasEventSeq($nID) 'Citations' => [], 'Warnings' => [], 'No Punish' => [] - ]; + ]; $loopRows = $this->sessData->getLoopRows('Victims'); foreach ($loopRows as $i => $civ) { if ($this->getCivEveSeqIdByType($civ->CivID, 'Stops') > 0) { @@ -768,8 +851,12 @@ protected function checkHasEventSeq($nID) && ($civ->CivGivenWarning == 'N' || trim($civ->CivGivenWarning) == '')) { $this->eventCivLookup["No Punish"][] = $civ->CivID; } - if ($civ->CivGivenCitation == 'Y') $this->eventCivLookup["Citations"][] = $civ->CivID; - if ($civ->CivGivenWarning == 'Y') $this->eventCivLookup["Warnings"][] = $civ->CivID; + if ($civ->CivGivenCitation == 'Y') { + $this->eventCivLookup["Citations"][] = $civ->CivID; + } + if ($civ->CivGivenWarning == 'Y') { + $this->eventCivLookup["Warnings"][] = $civ->CivID; + } } if (isset($this->sessData->dataSets["Force"]) && sizeof($this->sessData->dataSets["Force"]) > 0) { foreach ($this->sessData->dataSets["Force"] as $forceRow) { @@ -790,7 +877,9 @@ protected function addNewEveSeq($eventType, $forceType = -3) $newEveSeq->save(); eval("\$newEvent = new App\\Models\\" . $GLOBALS["SL"]->tblModels[$eventType] . ";"); $newEvent->{ $GLOBALS["SL"]->tblAbbr[$eventType].'EventSequenceID' } = $newEveSeq->getKey(); - if ($eventType == 'Force' && $forceType > 0) $newEvent->ForType = $forceType; + if ($eventType == 'Force' && $forceType > 0) { + $newEvent->ForType = $forceType; + } $newEvent->save(); $this->sessData->dataSets["EventSequence"][] = $newEveSeq; $this->sessData->dataSets[$eventType][] = $newEvent; @@ -805,7 +894,9 @@ protected function getCivEventID($nID, $eveType, $civID) ->where('OP_LinksCivilianEvents.LnkCivEveCivID', $civID) ->select('OP_EventSequence.*') ->first(); - if ($civLnk && isset($civLnk->EveID)) return $civLnk->EveID; + if ($civLnk && isset($civLnk->EveID)) { + return $civLnk->EveID; + } return -3; } @@ -848,9 +939,13 @@ protected function createCivAnimalForces() $frc->ForEventSequenceID = $eve->getKey(); $frc->ForAgainstAnimal = 'Y'; $frc->save(); - if (!isset($this->sessData->dataSets["Force"])) $this->sessData->dataSets["Force"] = []; + if (!isset($this->sessData->dataSets["Force"])) { + $this->sessData->dataSets["Force"] = []; + } $this->sessData->dataSets["Force"][] = $frc; - if (!isset($this->sessData->dataSets["EventSequence"])) $this->sessData->dataSets["EventSequence"] = []; + if (!isset($this->sessData->dataSets["EventSequence"])) { + $this->sessData->dataSets["EventSequence"] = []; + } $this->sessData->dataSets["EventSequence"][] = $eve; return $eve; } @@ -902,7 +997,7 @@ protected function getEventSequence($eveSeqID = -3) "Civilians" => $this->getLinkedToEvent('Civilian', $eveSeq->EveID), "Officers" => $this->getLinkedToEvent('Officer', $eveSeq->EveID), "Event" => $this->sessData->getChildRow('EventSequence', $eveSeq->EveID, $eveSeq->EveType) - ]; + ]; } } } @@ -920,8 +1015,12 @@ protected function getEventLabel($eveSeqID = -3) protected function printEventSequenceLine($eveSeq, $info = '') { - if (!isset($eveSeq["EveType"]) && is_array($eveSeq) && sizeof($eveSeq) > 0) $eveSeq = $eveSeq[0]; - if (!is_array($eveSeq) || !isset($eveSeq["EveType"])) return ''; + if (!isset($eveSeq["EveType"]) && is_array($eveSeq) && sizeof($eveSeq) > 0) { + $eveSeq = $eveSeq[0]; + } + if (!is_array($eveSeq) || !isset($eveSeq["EveType"])) { + return ''; + } $ret = ''; if ($eveSeq["EveType"] == 'Force' && isset($eveSeq["Event"]->ForType) && trim($eveSeq["Event"]->ForType) != ''){ if ($eveSeq["Event"]->ForType == $GLOBALS["SL"]->def->getID('Force Type', 'Other')) { @@ -988,7 +1087,9 @@ protected function getCivEveSeqIdByType($civID, $eventType) protected function getEveSeqRowType($eveSeqID = -3) { $eveSeq = $this->sessData->getRowById('EventSequence', $eveSeqID); - if ($eveSeq) return $eveSeq->EveType; + if ($eveSeq) { + return $eveSeq->EveType; + } return ''; } @@ -1001,7 +1102,9 @@ protected function chkCivHasForce($civID = -3) $chk = OPLinksCivilianEvents::where('LnkCivEveEveID', $eve->EveID) ->where('LnkCivEveCivID', $civID) ->first(); - if ($chk && isset($chk->LnkCivEveID)) return 1; + if ($chk && isset($chk->LnkCivEveID)) { + return 1; + } } } } @@ -1073,7 +1176,9 @@ protected function getCivName($loop, $civ = [], $itemInd = -3) $contact = $this->sessData->getChildRow('Civilians', $civ->CivPersonID, 'PersonContact'); $name = $contact->PrsnNameFirst . ' ' . $contact->PrsnNameLast; } - if (trim($name) == '') $name = 'Complainant'; + if (trim($name) == '') { + $name = 'Complainant'; + } } else { $name = 'You ' . $name; } @@ -1083,6 +1188,9 @@ protected function getCivName($loop, $civ = [], $itemInd = -3) $name = trim($name); if ($name != '' && $name != 'You') { $name .= ' (' . $civ->CivRole . ' #' . (1+$this->sessData->getLoopIndFromID($loop, $civ->CivID)) . ')'; + } + if ($name == '') { + } return trim($name); } @@ -1100,28 +1208,61 @@ public function getCivilianNameFromID($civID) } $civInd = $this->sessData->getLoopIndFromID('Victims', $civID); if ($civInd >= 0) { - return $this->getCivName('Victims', $this->sessData->getRowById('Civilians', $civID), (1+$civInd)); + $name = $this->getCivName('Victims', $this->sessData->getRowById('Civilians', $civID), (1+$civInd)); + if ($name == '') { + $name = 'Victim #' . (1+$civInd); + } + return $name; } $civInd = $this->sessData->getLoopIndFromID('Witnesses', $civID); if ($civInd >= 0) { - return $this->getCivName('Witnesses', $this->sessData->getRowById('Civilians', $civID), (1+$civInd)); + $name = $this->getCivName('Witnesses', $this->sessData->getRowById('Civilians', $civID), (1+$civInd)); + if ($name == '') { + $name = 'Witness #' . (1+$civInd); + } + return $name; } return ''; } + protected function getCivNamesFromEvent($eveID) + { + $ret = ''; + $lnks = OPLinksCivilianEvents::where('LnkCivEveEveID', $eveID) + ->get(); + if ($lnks->isNotEmpty()) { + $civs = []; + foreach ($lnks as $lnk) { + if (!in_array($lnk->LnkCivEveCivID, $civs)) { + $civs[] = $lnk->LnkCivEveCivID; + } + } + foreach ($civs as $i => $civID) { + $ret .= (($i > 0) ? ', ' . ((sizeof($civs) > 2 && $i == (sizeof($civs)-1)) ? 'and ' : '') : '') + . $this->getPersonLabel('Civilians', $civID); + } + } + return $ret; + } + // converts Officer row into identifying name used in most of the complaint process protected function getOfficerName($officer = [], $itemIndex = -3) { $name = $this->getPersonLabel('Officers', $officer->OffID, $officer); - if (trim($name) == '') $name = 'Officer #' . (1+$itemIndex); - else $name .= ' (Officer #' . (1+$itemIndex) . ')'; + if (trim($name) == '') { + $name = 'Officer #' . (1+$itemIndex); + } else { + $name .= ' (Officer #' . (1+$itemIndex) . ')'; + } return trim($name); } protected function getOfficerNameFromID($offID) { $offInd = $this->sessData->getLoopIndFromID('Officers', $offID); - if ($offInd >= 0) return $this->getOfficerName($this->sessData->getRowById('Officers', $offID), (1+$offInd)); + if ($offInd >= 0) { + return $this->getOfficerName($this->sessData->getRowById('Officers', $offID), (1+$offInd)); + } return ''; } @@ -1130,7 +1271,9 @@ protected function getFirstVictimCivInd() $civInd = -3; if (sizeof($this->sessData->dataSets["Civilians"]) > 0) { foreach ($this->sessData->dataSets["Civilians"] as $i => $civ) { - if (isset($civ->CivRole) && trim($civ->CivRole) == 'Victim' && $civInd < 0) $civInd = $i; + if (isset($civ->CivRole) && trim($civ->CivRole) == 'Victim' && $civInd < 0) { + $civInd = $i; + } } } return $civInd; @@ -1156,29 +1299,39 @@ protected function chkDeptLinks($newDeptID) protected function getDeptName($dept = [], $itemIndex = -3) { $name = ''; //(($itemIndex > 0) ? '(#'.$itemIndex.')' : ''); - if (isset($dept->DeptName) && trim($dept->DeptName) != '') $name = $dept->DeptName . ' ' . $name; + if (isset($dept->DeptName) && trim($dept->DeptName) != '') { + $name = $dept->DeptName . ' ' . $name; + } return trim($name); } protected function getDeptNameByID($deptID) { $dept = $this->sessData->getRowById('Departments', $deptID); - if ($dept) return $this->getDeptName($dept); + if ($dept) { + return $this->getDeptName($dept); + } return ''; } protected function civRow2Set($civ) { - if (!$civ || !isset($civ->CivIsCreator)) return ''; + if (!$civ || !isset($civ->CivIsCreator)) { + return ''; + } return (($civ->CivIsCreator == 'Y') ? '' : (($civ->CivRole == 'Victim') ? 'Victims' : 'Witnesses') ); } protected function getCivilianList($loop = 'Victims') { - if ($loop == 'Victims' || $loop == 'Witness') return $this->sessData->loopItemIDs[$loop]; + if ($loop == 'Victims' || $loop == 'Witness') { + return $this->sessData->loopItemIDs[$loop]; + } $civs = []; if (isset($this->sessData->dataSets["Civilians"]) && sizeof($this->sessData->dataSets["Civilians"]) > 0) { - foreach ($this->sessData->dataSets["Civilians"] as $civ) $civs[] = $civ->CivID; + foreach ($this->sessData->dataSets["Civilians"] as $civ) { + $civs[] = $civ->CivID; + } } return $civs; } @@ -1203,18 +1356,26 @@ protected function loadPartnerTypes() protected function loadPrtnAbbr($defID) { - if (!isset($this->v["prtnTypes"])) $this->loadPartnerTypes(); + if (!isset($this->v["prtnTypes"])) { + $this->loadPartnerTypes(); + } foreach ($this->v["prtnTypes"] as $p) { - if ($p["defID"] == $defID) return $p["abbr"]; + if ($p["defID"] == $defID) { + return $p["abbr"]; + } } return ''; } protected function loadPrtnDefID($abbr) { - if (!isset($this->v["prtnTypes"])) $this->loadPartnerTypes(); + if (!isset($this->v["prtnTypes"])) { + $this->loadPartnerTypes(); + } foreach ($this->v["prtnTypes"] as $p) { - if ($p["abbr"] == $abbr) return $p["defID"]; + if ($p["abbr"] == $abbr) { + return $p["defID"]; + } } return ''; } @@ -1283,7 +1444,9 @@ public function userFormalName($uID) } } $usr = User::find($uID); - if ($usr && isset($usr->name)) return $usr->name; + if ($usr && isset($usr->name)) { + return $usr->name; + } return ''; } @@ -1313,5 +1476,4 @@ protected function loadSearchSuggestions() return true; } - } diff --git a/src/Controllers/OpenReport.php b/src/Controllers/OpenReport.php index 4fddfc0..31afbad 100644 --- a/src/Controllers/OpenReport.php +++ b/src/Controllers/OpenReport.php @@ -417,13 +417,13 @@ protected function fillGlossary() == $GLOBALS["SL"]->def->getID('Privacy Types', 'Completely Anonymous')) { $this->v["glossaryList"][] = ['Anonymous ', $prvLnk . 'User needs complaint to be completely anonymous, even though it will be harder to ' - . 'investigate. No names will be published on this website. Neither OPC staff nor investigators ' - . 'will be able to contact them. Any details that could be used for personal identification ' + . 'investigate. No names will be published on this website. Neither OPC staff nor investigators' + . ' will be able to contact them. Any details that could be used for personal identification ' . 'may be deleted from the database.']; } if ($this->sessData->dataSets["Complaints"][0]->ComAwardMedallion == 'Gold') { $this->v["glossaryList"][] = ['Gold-Level Complaint', - 'Optional: This user opted ' + 'Optional: This user opted ' . 'to share more complete details about their police experience than a Basic Complaint.']; } $this->simpleAllegationList(); diff --git a/src/Controllers/OpenReportTools.php b/src/Controllers/OpenReportTools.php index 7d16877..6b07c58 100644 --- a/src/Controllers/OpenReportTools.php +++ b/src/Controllers/OpenReportTools.php @@ -4,6 +4,7 @@ use App\Models\User; use App\Models\SLEmails; use App\Models\SLEmailed; +use App\Models\OPComplaints; use App\Models\OPzComplaintReviews; use OpenPolice\Controllers\OpenReport; diff --git a/src/Controllers/OpenSessDataOverride.php b/src/Controllers/OpenSessDataOverride.php new file mode 100644 index 0000000..3dcadfb --- /dev/null +++ b/src/Controllers/OpenSessDataOverride.php @@ -0,0 +1,232 @@ +sessData->dataSets)) { + return []; + } + if ($nID == 28) { // Complainant's Role + if (isset($this->sessData->dataSets["Civilians"])) { + return [trim($this->sessData->dataSets["Civilians"][0]->CivRole)]; + } + return []; + } elseif ($nID == 47) { // Complainant Recorded Incident? + if (isset($this->sessData->dataSets["Civilians"])) { + return [trim($this->sessData->dataSets["Civilians"][0]->CivCameraRecord)]; + } + return []; + } elseif ($nID == 19) { // Would you like to provide the GPS location? + if (isset($this->sessData->dataSets["Incidents"]) + && intVal($this->sessData->dataSets["Incidents"][0]->IncAddressLat) != 0 + || intVal($this->sessData->dataSets["Incidents"][0]->IncAddressLng) != 0) { + return ['Yes']; + } else { + return []; + } + } elseif ($nID == 39) { + if ($currNodeSessionData == '') { + $user = Auth::user(); + if ($user && isset($user->email)) { + return [$user->email]; + } + return ['']; + } + } elseif ($nID == 671) { // Officers Used Profanity? + $currVals = []; + foreach ($this->sessData->dataSets["Officers"] as $i => $off) { + if (isset($off->OffUsedProfanity) && $off->OffUsedProfanity == 'Y') { + $currVals[] = $off->getKey(); + } + } + return [';' . implode(';', $currVals) . ';']; + } elseif ($nID == 237) { + $ret = []; + $civs = $this->sessData->getLoopRows('Victims'); + if ($civs && sizeof($civs) > 0) { + foreach ($civs as $i => $civ) { + if ($civ->CivRole == 'Victim' && trim($civ->CivGivenCitation) == 'Y') { + $ret[] = $civ->CivID; + } + } + } + return $ret; + } elseif ($nID == 674) { // Officer Used Profanity? + return [trim($this->sessData->dataSets["Officers"][0]->OffUsedProfanity)]; + } elseif ($nID == 670) { // Victims Used Profanity? + $currVals = []; + foreach ($this->sessData->dataSets["Civilians"] as $i => $civ) { + if ($civ->CivUsedProfanity == 'Y') { + $currVals[] = $civ->getKey(); + } + } + return [';' . implode(';', $currVals) . ';']; + } elseif ($nID == 676) { // Victim Used Profanity? + $civInd = $this->getFirstVictimCivInd(); + if ($civInd >= 0) { + return [trim($this->sessData->dataSets["Civilians"][$civInd]->CivUsedProfanity)]; + } + } elseif (in_array($nID, [732, 736, 733])) { // Gold Stops & Searches, Multiple Victims + if (!isset($this->v["firstTimeGoGoldDeets"])) { + $chk = SLNodeSavesPage::where('PageSaveSession', $this->coreID) + ->where('PageSaveNode', 484) + ->first(); + $this->v["firstTimeGoGoldDeets"] = (!$chk || !isset($chk->PageSaveID)); + } + $ret = []; + $eveType = (in_array($nID, [732, 736])) ? 'Stops' : 'Searches'; + if (sizeof($this->sessData->loopItemIDs["Victims"]) > 0) { + foreach ($this->sessData->loopItemIDs["Victims"] as $civ) { + if ($this->getCivEventID($nID, $eveType, $civ) > 0) { + $ret[] = $civ; + } + } + } + return $ret; + } elseif (in_array($nID, [738, 737, 739])) { // Gold Stops & Searches, Only One Victims + $eveType = (in_array($nID, [738, 737])) ? 'Stops' : 'Searches'; + if ($this->getCivEventID($nID, $eveType, $this->sessData->loopItemIDs["Victims"][0]) > 0) { + return ['Y']; + } + return ['N']; + } elseif ($nID == 740) { // Use of Force on Victims + $ret = []; + $this->checkHasEventSeq($nID); + foreach ($this->sessData->loopItemIDs["Victims"] as $i => $civ) { + if (in_array($civ, $this->eventCivLookup['Force'])) { + $ret[] = 'cyc' . $i . 'Y'; + } elseif (!isset($this->v["firstTimeGoGoldDeets"]) || !$this->v["firstTimeGoGoldDeets"] + || !in_array($civ, $this->eventCivLookup['Force'])) { + $ret[] = 'cyc' . $i . 'N'; + } + } + if (empty($ret)) { + $ret = ['N']; + } + return $ret; + } elseif (in_array($nID, [742, 2044])) { // Use of Force on Victims: Sub-Types + $ret = []; + if (isset($this->sessData->dataSets["Force"]) && sizeof($this->sessData->dataSets["Force"]) > 0) { + foreach ($this->sessData->dataSets["Force"] as $force) { + if (isset($force->ForType) && intVal($force->ForType) > 0 + && (!isset($force->ForAgainstAnimal) || trim($force->ForAgainstAnimal) != 'Y')) { + $ret[] = $force->ForType; + } + } + } + return $ret; + } elseif ($nID == 2043) { + $force = $this->sessData->getDataBranchRow('Force'); + if ($force && isset($force->ForEventSequenceID) && intVal($force->ForEventSequenceID) > 0) { + return $this->getLinkedToEvent('Civilian', $force->ForEventSequenceID); + } + return []; + } elseif ($nID == 743) { // Use of Force against Animal: Yes/No + $animalsForce = $this->getCivAnimalForces(); + if ($animalsForce && sizeof($animalsForce) > 0) { + return ['Y']; + } elseif (!isset($this->v["firstTimeGoGoldDeets"]) || !$this->v["firstTimeGoGoldDeets"]) { + return ['N']; + } + } elseif ($nID == 746) { // Use of Force against Animal: Description + $animalsForce = $this->getCivAnimalForces(); + if ($animalsForce->isNotEmpty() && isset($animalsForce[0]->ForAnimalDesc)) { + return [$animalsForce[0]->ForAnimalDesc]; + } + } elseif ($nID == 744) { // Use of Force against Animal: Sub-types + $ret = []; + $animalsForce = $this->getCivAnimalForces(); + if ($animalsForce && sizeof($animalsForce) > 0) { + foreach ($animalsForce as $force) { + $ret[] = $force->ForType; + } + } + return $ret; + } elseif ($nID == 741) { // Arrests, Citations, Warnings + $ret = []; + $this->checkHasEventSeq($nID); + foreach ($this->sessData->loopItemIDs["Victims"] as $i => $civ) { + if (in_array($civ, $this->eventCivLookup['Arrests'])) { + $ret[] = 'cyc' . $i . 'Arrests'; + } elseif (in_array($civ, $this->eventCivLookup['Citations'])) { + $ret[] = 'cyc' . $i . 'Citations'; + } elseif (in_array($civ, $this->eventCivLookup['Warnings'])) { + $ret[] = 'cyc' . $i . 'Warnings'; + } else { + $ret[] = 'cyc' . $i . 'None'; + } + } + return $ret; + } elseif (in_array($nID, [401, 334, 409, 356, 384])) { // Gold Allegations: Pre-Load "Why" From Silver + if (trim($currNodeSessionData) == '') { + $defID = $GLOBALS["SL"]->def->getID('Allegation Type', 'Wrongful Detention'); // 401 + switch ($nID) { + case 334: $defID = $GLOBALS["SL"]->def->getID('Allegation Type', 'Wrongful Search'); break; + case 409: $defID = $GLOBALS["SL"]->def->getID('Allegation Type', 'Wrongful Property Seizure');break; + case 356: $defID = $GLOBALS["SL"]->def->getID('Allegation Type', 'Unreasonable Force'); break; + case 384: $defID = $GLOBALS["SL"]->def->getID('Allegation Type', 'Wrongful Arrest'); break; + } + if (isset($this->sessData->dataSets["Allegations"]) + && sizeof($this->sessData->dataSets["Allegations"]) > 0) { + foreach ($this->sessData->dataSets["Allegations"] as $alleg) { + if (isset($alleg->AlleType) && $alleg->AlleType == $defID && isset($alleg->AlleDescription) + && (!isset($alleg->AlleEventSequenceID) || intVal($alleg->AlleEventSequenceID) == 0)) { + return [$alleg->AlleDescription]; + } + } + } + } + } elseif ($nID == 269) { // Confirm Submission, Complaint Completed! + return [(($this->sessData->dataSets["Complaints"][0]->ComStatus + != $GLOBALS["SL"]->def->getID('Complaint Status', 'Incomplete')) ? 'Y' : '')]; + + // Volunteer Research Departments + } elseif ($nID == 1285) { + $this->getOverRow('IA'); + $currNodeSessionData = []; + if (isset($this->v["overRowIA"]->OverWaySubEmail) && intVal($this->v["overRowIA"]->OverWaySubEmail) > 0) { + $currNodeSessionData[] = 'Email'; + } + if (isset($this->v["overRowIA"]->OverWaySubVerbalPhone) + && intVal($this->v["overRowIA"]->OverWaySubVerbalPhone) > 0) { + $currNodeSessionData[] = 'VerbalPhone'; + } + if (isset($this->v["overRowIA"]->OverWaySubPaperMail) + && intVal($this->v["overRowIA"]->OverWaySubPaperMail) > 0) { + $currNodeSessionData[] = 'PaperMail'; + } + if (isset($this->v["overRowIA"]->OverWaySubPaperInPerson) + && intVal($this->v["overRowIA"]->OverWaySubPaperInPerson) > 0) { + $currNodeSessionData[] = 'PaperInPerson'; + } + return $currNodeSessionData; + } elseif ($nID == 1287) { + $currNodeSessionData = []; + if (isset($this->v["overRowIA"]->OverOfficialFormNotReq) + && intVal($this->v["overRowIA"]->OverOfficialFormNotReq) > 0) { + $currNodeSessionData[] = 'OfficialFormNotReq'; + } + if (isset($this->v["overRowIA"]->OverOfficialAnon) + && intVal($this->v["overRowIA"]->OverOfficialAnon) > 0) { + $currNodeSessionData[] = 'OfficialAnon'; + } + if (isset($this->v["overRowIA"]->OverWaySubNotary) + && intVal($this->v["overRowIA"]->OverWaySubNotary) > 0) { + $currNodeSessionData[] = 'Notary'; + } + if (isset($this->v["overRowIA"]->OverSubmitDeadline) + && intVal($this->v["overRowIA"]->OverSubmitDeadline) > 0) { + $currNodeSessionData[] = 'TimeLimit'; + } + return $currNodeSessionData; + } + return []; + } +} \ No newline at end of file diff --git a/src/Controllers/OpenVolunteers.php b/src/Controllers/OpenVolunteers.php index 2bdd5b5..53ea2fc 100644 --- a/src/Controllers/OpenVolunteers.php +++ b/src/Controllers/OpenVolunteers.php @@ -4,6 +4,7 @@ use DB; use Illuminate\Http\Request; use App\Models\OPPartners; +use App\Models\OPDepartments; use App\Models\OPZeditDepartments; use OpenPolice\Controllers\VolunteerLeaderboard; use OpenPolice\Controllers\OpenReportTools; @@ -40,16 +41,21 @@ public function printVolunAllList() $this->v["viewType"] = (($GLOBALS["SL"]->REQ->has('sort')) ? $GLOBALS["SL"]->REQ->get('sort') : 'recent'); $this->v["deptRows"] = []; $this->v["searchForm"] = $this->deptSearchForm(); - $orderby = [ [ 'DeptVerified', 'desc' ], [ 'DeptName', 'asc' ] ]; + $orderby = [ + [ 'DeptVerified', 'desc' ], + [ 'DeptName', 'asc' ] + ]; switch ($this->v["viewType"]) { case 'best': $orderby[0] = [ 'DeptScoreOpenness', 'desc' ]; break; case 'name': $orderby[0] = [ 'DeptName', 'asc' ]; break; case 'city': $orderby = [ [ 'DeptAddressState', 'asc' ], [ 'DeptAddressCity', 'asc' ] ]; break; } - $this->v["state"] = $whrState = ''; - if ($GLOBALS["SL"]->REQ->has('state') && trim($GLOBALS["SL"]->REQ->get('state')) != '') { + $this->v["state"] = ''; + if ($GLOBALS["SL"]->REQ->has('state')) { $this->v["state"] = trim($GLOBALS["SL"]->REQ->get('state')); - $whrState = "->where('DeptAddressState', '" . $this->v["state"] . "')"; + } elseif (isset($this->v["yourContact"]->PrsnAddressState) + && trim($this->v["yourContact"]->PrsnAddressState) != '') { + $this->v["state"] = trim($this->v["yourContact"]->PrsnAddressState); } if ($GLOBALS["SL"]->REQ->has('s') && trim($GLOBALS["SL"]->REQ->get('s')) != '') { $this->chkRecsPub($GLOBALS["SL"]->REQ, 36); @@ -58,26 +64,49 @@ public function printVolunAllList() $searches = $GLOBALS["SL"]->parseSearchWords($GLOBALS["SL"]->REQ->get('s')); } if (sizeof($searches) > 0) { - foreach ($searches as $s) { - eval("\$rows = App\\Models\\OPDepartments::where('DeptName', 'LIKE', '%' . \$s . '%') - ->orWhere('DeptEmail', 'LIKE', '%' . \$s . '%') - ->orWhere('DeptPhoneWork', 'LIKE', '%' . \$s . '%') - ->orWhere('DeptAddress', 'LIKE', '%' . \$s . '%') - ->orWhere('DeptAddressCity', 'LIKE', '%' . \$s . '%') - ->orWhere('DeptAddressZip', 'LIKE', '%' . \$s . '%') - ->orWhere('DeptAddressCounty', 'LIKE', '%' . \$s . '%') - " . $whrState . "->get();"); - $GLOBALS["SL"]->addSrchResults('depts', $rows, 'DeptID'); + $rows = null; + if ($this->v["state"] == '') { + foreach ($searches as $s) { + $rows = OPDepartments::where('DeptName', 'LIKE', '%' . $s . '%') + ->orWhere('DeptEmail', 'LIKE', '%' . $s . '%') + ->orWhere('DeptPhoneWork', 'LIKE', '%' . $s . '%') + ->orWhere('DeptAddress', 'LIKE', '%' . $s . '%') + ->orWhere('DeptAddressCity', 'LIKE', '%' . $s . '%') + ->orWhere('DeptAddressZip', 'LIKE', '%' . $s . '%') + ->orWhere('DeptAddressCounty', 'LIKE', '%' . $s . '%') + ->get(); + $GLOBALS["SL"]->addSrchResults('depts', $rows, 'DeptID'); + } + } else { + foreach ($searches as $s) { + $rows = OPDepartments::where('DeptAddressState', $this->v["state"]) + ->where(function ($query) use ($s) { + $query->where('DeptName', 'LIKE', '%' . $s . '%') + ->orWhere('DeptEmail', 'LIKE', '%' . $s . '%') + ->orWhere('DeptPhoneWork', 'LIKE', '%' . $s . '%') + ->orWhere('DeptAddress', 'LIKE', '%' . $s . '%') + ->orWhere('DeptAddressCity', 'LIKE', '%' . $s . '%') + ->orWhere('DeptAddressZip', 'LIKE', '%' . $s . '%') + ->orWhere('DeptAddressCounty', 'LIKE', '%' . $s . '%'); + }) + ->get(); + $GLOBALS["SL"]->addSrchResults('depts', $rows, 'DeptID'); + } } } $this->v["deptRows"] = $GLOBALS["SL"]->x["srchRes"]["depts"]; unset($GLOBALS["SL"]->x["srchRes"]["depts"]); + } elseif ($this->v["state"] != '') { + $this->v["deptRows"] = OPDepartments::select('DeptID', 'DeptName', 'DeptScoreOpenness', 'DeptVerified', + 'DeptAddressCity', 'DeptAddressState') + ->where('DeptAddressState', $this->v["state"]) + ->orderBy($orderby[0][0], $orderby[0][1]) + ->get(); } else { - eval("\$this->v['deptRows'] = App\\Models\\OPDepartments::select('DeptID', 'DeptName', 'DeptScoreOpenness', - 'DeptVerified', 'DeptAddressCity', 'DeptAddressState') - ->orderBy(\$orderby[0][0], \$orderby[0][1]) - ->orderBy(\$orderby[1][0], \$orderby[1][1]) - " . $whrState . "->get();"); + $this->v["deptRows"] = OPDepartments::select('DeptID', 'DeptName', 'DeptScoreOpenness', 'DeptVerified', + 'DeptAddressCity', 'DeptAddressState') + ->orderBy($orderby[0][0], $orderby[0][1]) + ->get(); } $this->loadRecentDeptEdits(); $GLOBALS["SL"]->loadStates(); @@ -140,6 +169,15 @@ protected function loadDeptPriorityRows() return $this->v["deptPriorityRows"]; } + protected function deptSearchForm($state = '', $deptName = '') + { + $GLOBALS["SL"]->loadStates(); + return view('vendor.openpolice.volun.volunEditSearch', [ + "deptName" => $deptName, + "stateDrop" => $GLOBALS["SL"]->states->stateDrop($state) + ])->render(); + } + protected function loadRecentDeptEdits() { if (!isset($GLOBALS["SL"]->x["usernames"])) $GLOBALS["SL"]->x["usernames"] = []; @@ -170,22 +208,18 @@ protected function loadRecentDeptEdits() public function printVolunLocationForm() { $GLOBALS["SL"]->loadStates(); - return view('vendor.openpolice.nodes.1217-volun-home-your-info', $this->v)->render(); - } - - public function saveDefaultState(Request $request) - { - $this->survLoopInit($request); $this->loadYourContact(); - if (isset($this->v["yourContact"]) && isset($this->v["yourContact"]->PrsnID)) { - if ($request->has('newState')) { - $this->v["yourContact"]->update([ "PrsnAddressState" => $request->get('newState') ]); - } - if ($request->has('newPhone')) { - $this->v["yourContact"]->update([ "PrsnPhoneMobile" => $request->get('newPhone') ]); + if ($GLOBALS["SL"]->REQ->has('saveDefaultState')) { + if (isset($this->v["yourContact"]) && isset($this->v["yourContact"]->PrsnID)) { + if ($GLOBALS["SL"]->REQ->has('newState')) { + $this->v["yourContact"]->update([ "PrsnAddressState" => $GLOBALS["SL"]->REQ->get('newState') ]); + } + if ($GLOBALS["SL"]->REQ->has('newPhone')) { + $this->v["yourContact"]->update([ "PrsnPhoneMobile" => $GLOBALS["SL"]->REQ->get('newPhone') ]); + } } } - exit; + return view('vendor.openpolice.nodes.1217-volun-home-your-info', $this->v)->render(); } diff --git a/src/Controllers/VolunteerController.php b/src/Controllers/VolunteerController.php deleted file mode 100755 index d2a838c..0000000 --- a/src/Controllers/VolunteerController.php +++ /dev/null @@ -1,795 +0,0 @@ -v["ways"] = [ - 'Online-Submittable Form', - 'Submit via Email Allowed', - 'Verbally on Phone Allowed', - 'Paper Form via Snail Mail Allowed', - 'Requires In-Person Visit', - 'Official Form NOT Required for Investigation', - 'Anonymous Complaints Investigated', - 'Requires Notary (for any type of complaint)', - ]; - $this->v["waysFlds"] = [ - 'OverWaySubOnline', - 'OverWaySubEmail', - 'OverWaySubVerbalPhone', - 'OverWaySubPaperMail', - 'OverWaySubPaperInPerson', - 'OverOfficialFormNotReq', - 'OverOfficialAnon', - 'OverWaySubNotary', - ]; - $this->v["wayPoints"] = [30, 15, 3, 2, 0, 15, 15, -10]; - $this->v["deptPoints"] = [ - "Website" => 5, - "FB" => 5, - "Twit" => 5, - "YouTube" => 5, - "ComplaintInfo" => 20, - "ComplaintInfoHomeLnk" => 15, - "FormPDF" => 15 - ]; - - - if (isset($this->v["deptSlug"])) { - if ($this->v["user"]->hasRole('administrator|staff|databaser')) { - $this->admMenuData["currNavPos"] = [2, 3, -1, -1]; - } else { - $this->admMenuData["currNavPos"] = [1, -1, -1, -1]; - } - $volunteeringSubMenu = [ - 'javascript:;" id="navBtnContact0', - 'Verifying Department', - 1, - [ - [ - 'javascript:;" id="navBtnContact', - '  Contact Info
' - . '
', - 1, - ], [ - 'javascript:;" id="navBtnWeb', - '  Web & Complaints
' - . '
', - 1, - ], [ - 'javascript:;" id="navBtnIA', - '  Internal Affairs
' - . '
', - 1, - ], [ - 'javascript:;" id="navBtnOver', - '  Civilian Oversight
' - . '
', - 1, - ], [ - 'javascript:;" id="navBtnSave', - 'Save All Changes ', - 1, - ], [ - 'javascript:;" id="navBtnEdits', - '  Past Edits: ' - . ((isset($this->v["editsSummary"][1])) ? $this->v["editsSummary"][1]: '') - . '
' - . '
', - 1, - ], [ - 'javascript:;" id="navBtnCheck', - '  Volunteer Checklist
', - 1, - ], [ - 'javascript:;" id="navBtnPhone', - '  Sample Phone Script', - 1, - ], [ - 'javascript:;" id="navBtnFAQ', - '  Frequently Asked s
', - 1, - ] - ] - ]; - if ($this->v["user"]->hasRole('administrator|staff|databaser')) { - //$this->admMenuData["adminNav"][2][3][3] = $volunteeringSubMenu; - } else { // is Volunteer - //$volunteeringSubMenu[1] .= ' '; - //$this->admMenuData["adminNav"][1] = $volunteeringSubMenu; - } - } - if (!$this->v["user"]->hasRole('administrator|staff|databaser')) { - $score = 0; - if (isset($GLOBALS["SL"]->x["yourUserInfo"]->UserInfoStars)) { - $score = intVal($GLOBALS["SL"]->x["yourUserInfo"]->UserInfoStars); - } - $this->admMenuData["adminNav"][2][1] = str_replace('[[score]]', $score, - $this->admMenuData["adminNav"][2][1]); - } - return true; - } - - protected function genDeptAdmTopMenu($deptRow) - { - return ''; - } - - protected function getNextDept() - { - $this->v["nextDept"] = array(0, '', ''); - $recentDate = date("Y-m-d H:i:s", time(date("H")-6, date("i"), date("s"), date("n"), date("j"), date("Y"))); - OPzVolunTmp::where('TmpType', 'ZedDept') - ->where('TmpDate', '<', $recentDate) - ->delete(); - // First check for department temporarily reserved for this user - $tmpReserve = OPzVolunTmp::where('TmpType', 'ZedDept') - ->where('TmpUser', Auth::user()->id) - ->first(); - if ($tmpReserve && isset($tmpReserve->TmpVal) && intVal($tmpReserve->TmpVal) > 0) { - $nextRow = OPDepartments::where('DeptID', $tmpReserve->TmpVal) - ->first(); - $this->v["nextDept"] = [ - $nextRow->DeptID, - $nextRow->DeptName, - $nextRow->DeptSlug - ]; - } else { // no department reserved yet, find best next choice... - $nextRow = NULL; - $qmen = []; - $qBase = "SELECT `DeptID`, `DeptName`, `DeptSlug` FROM `OP_Departments` WHERE "; - $qReserves = " AND `DeptID` NOT IN (SELECT `TmpVal` FROM `OP_zVolunTmp` WHERE " - . "`TmpType` LIKE 'ZedDept' AND `TmpUser` NOT LIKE '" . Auth::user()->id . "')"; - $qmen[] = $qBase . "(`DeptVerified` < '2015-01-01 00:00:00' OR `DeptVerified` IS NULL) " - . $qReserves . " ORDER BY RAND()"; - $qmen[] = $qBase . "1 " . $qReserves . " ORDER BY `DeptVerified`"; - $qmen[] = $qBase . "1 ORDER BY RAND()"; // worst-case backup - for ($i = 0; ($i < sizeof($qmen) && !$nextRow); $i++) { - $nextRow = DB::select( DB::raw( $qmen[$i]." LIMIT 1" ) ); - } - $this->v["nextDept"] = [ - $nextRow[0]->DeptID, - str_replace('Department', 'Dept', $nextRow[0]->DeptName), - $nextRow[0]->DeptSlug - ]; - - // Temporarily reserve this department for this user - $newTmp = new OPzVolunTmp; - $newTmp->TmpUser = Auth::user()->id; - $newTmp->TmpDate = date("Y-m-d H:i:s"); - $newTmp->TmpType = 'ZedDept'; - $newTmp->TmpVal = $this->v["nextDept"][0]; - $newTmp->save(); - } - return $this->v["nextDept"]; - } - - public function getVolunEditsOverview() - { - $retArr = $userTots = $uNames = []; - $userEdits = DB::table('OP_Zedit_Departments') - ->join('users', 'users.id', '=', 'OP_Zedit_Departments.ZedDeptUserID') - ->select('users.id', 'users.name', 'OP_Zedit_Departments.ZedDeptDeptID') - ->get(); - if ($userEdits->isNotEmpty()) { - foreach ($userEdits as $row) { - if (!isset($userTots[$row->id])) $userTots[$row->id] = []; - if (!in_array($row->DeptID, $userTots[$row->id])) { - $userTots[$row->id] = array($row->ZedDeptDeptID); - } - if (!isset($uNames[$row->id])) { - $uNames[$row->id] = '' . $row->name . ''; - } - } - } - foreach ($userTots as $u => $d) $userTots[$u] = sizeof($d); - arsort($userTots); - foreach ($userTots as $u => $d) $retArr = array($uNames[$u], $d); - return $retArr; - } - - public function index(Request $request) - { - $this->admControlInit($request, '/dashboard/volunteer'); - $this->v["viewType"] = 'priority'; - $this->v["deptRows"] = []; - $this->v["searchForm"] = $this->deptSearchForm(); - $qman = " `DeptVerified` > '2015-01-01 00:00:00' "; - $this->v["deptRows"] = DB::select( DB::raw("SELECT * FROM `OP_Departments` WHERE " . $qman - . " ORDER BY `DeptScoreOpenness` DESC, `DeptVerified` DESC, `DeptName`, `DeptAddressState`") ); - $this->v["belowAdmMenu"] = $this->printSidebarLeaderboard() - . '
' . $GLOBALS["SL"]->dbRow->DbMission . '
'; - $GLOBALS["SL"]->pageAJAX .= '$("#newDeptBtn").click(function() { $("#newDeptForm").slideToggle("fast"); }); '; - $GLOBALS["SL"]->loadStates(); - return view('vendor.openpolice.volun.volunteer', $this->v)->render(); - } - - public function indexAll(Request $request) - { - $this->admControlInit($request, '/dashboard/volunteer'); - $this->v["viewType"] = 'all'; - $this->v["deptRows"] = []; - $this->v["searchForm"] = $this->deptSearchForm(); - $this->v["deptRows"] = OPDepartments::orderBy('DeptName', 'asc')->paginate(50); - $this->v["belowAdmMenu"] = $this->printSidebarLeaderboard(); - $GLOBALS["SL"]->loadStates(); - return view('vendor.openpolice.volun.volunteer', $this->v)->render(); - } - - protected function deptSearchForm($state = '', $deptName = '') - { - $GLOBALS["SL"]->loadStates(); - return view('vendor.openpolice.volun.volunEditSearch', [ - "deptName" => $deptName, - "stateDrop" => $GLOBALS["SL"]->states->stateDrop($state) - ])->render(); - } - - public function deptIndexSearch($deptRows = [], $state = '', $deptName = '') - { - $this->v["viewType"] = 'search'; - $this->v["deptRows"] = $deptRows; - $this->v["userTots"] = $this->getVolunEditsOverview(); - $this->v["searchForm"] = str_replace('deptSearchForm($state, $deptName) )) . ''; - $this->v["belowAdmMenu"] = $this->printSidebarLeaderboard(); - $GLOBALS["SL"]->loadStates(); - return view('vendor.openpolice.volun.volunteer', $this->v)->render(); - } - - public function deptIndexSearchS(Request $request, $state = '') - { - $this->admControlInit($request, '/dashboard/volunteer'); - $deptRows = OPDepartments::where('DeptAddressState', '=', $state) - ->orderBy('DeptName', 'asc') - ->paginate(50); - return $this->deptIndexSearch($deptRows, $state, ''); - } - - public function deptIndexSearchD(Request $request, $deptName = '') - { - $this->admControlInit($request, '/dashboard/volunteer'); - $this->v["deptName"] = ''; - if (trim($deptName) != '') $this->v["deptName"] = $deptName; - return $this->deptIndexSearch($this->processSearchDepts('', $deptName), '', $deptName); - } - - public function deptIndexSearchSD(Request $request, $state = '', $deptName = '') - { - $this->admControlInit($request, '/dashboard/volunteer'); - $this->v["deptName"] = ''; - if (trim($deptName) != '') $this->v["deptName"] = $deptName; - return $this->deptIndexSearch($this->processSearchDepts($state, $deptName), $state, $deptName); - } - - protected function processSearchDepts($state = '', $deptName = '') - { - $deptName = str_replace(' ', ' ', str_replace(' ', ' ', str_replace(' ', ' ', $deptName))); - $searches = ['%'.$deptName.'%']; - if (strpos($deptName, ' ') !== false) { - $words = explode(' ', $deptName); - foreach ($words as $w) { - if (!in_array(strtolower($w), ['city', 'county', 'sherrif\'s', 'police', 'department', 'dept'])) { - $searches = '%'.$w.'%'; - } - } - } - $deptRows = []; - $evalQry = "\$deptRows = App\\Models\\OPDepartments::" - . ((trim($state) != '') ? "where('DeptAddressState', '=', \$state)->" : "") - . "where(function(\$query) { return \$query->where('DeptName', 'LIKE', '" - . addslashes($searches[0]) . "')"; - for ($i = 1; $i < sizeof($searches); $i++) { - $evalQry .= "->orWhere('DeptName', 'LIKE', '" . addslashes($searches[$i]) . "')"; - } - $evalQry .= "; })->orderBy('DeptName', 'asc')->paginate(50);"; - eval($evalQry); - return $deptRows; - } - - - public function nextDept() - { - $this->getNextDept(); - return $this->redir('/dashboard/volunteer/verify/'.$this->v["nextDept"][2]); - } - - - public function newDept(REQUEST $request) - { - if ($request->has('deptName') && $request->has('DeptAddressState')) { - $newDept = $this->newDeptAdd($request->deptName, $request->DeptAddressState); - return $this->redir('/dashboard/volunteer/verify/' . $newDept->DeptSlug); - } - return $this->redir('/dashboard/volunteer'); - } - - public function newDeptAdd($deptName = '', $deptState = '') { - if (trim($deptName) != '' && trim($deptState) != '') { - $newDept = OPDepartments::where('DeptName', $deptName)->where('DeptAddressState', $deptState)->first(); - if ($newDept && isset($newDept->DeptSlug)) return $this->redir('/dashboard/volunteer/verify/'.$newDept->DeptSlug); - $newDept = new OPDepartments; - $newIA = new OPOversight; - $newEdit = new OPZeditDepartments; - $iaEdit = new OPZeditOversight; - $newIA->OverType = $iaEdit->ZedOverOverType = 303; - $newDept->DeptName = $newEdit->ZedDeptName = $deptName; - $newDept->DeptAddressState = $newEdit->ZedDeptAddressState = (($deptState != 'US') ? $deptState : ''); - $newDept->DeptSlug = $newEdit->ZedDeptSlug = $deptState . '-' . Str::slug($deptName); - $newDept->DeptType = $newEdit->ZedDeptType = (($deptState == 'US') ? 366 : 0); - $newDept->DeptStatus = 1; - $newDept->save(); - $newIA->OverDeptID = $newEdit->ZedDeptDeptID = $iaEdit->ZedOverDeptID = $newDept->DeptID; - $newIA->save(); - $iaEdit->ZedOverOverID = $newIA->OverID; - $newEdit->ZedDeptUserID = $iaEdit->ZedOverUser = Auth::user()->id; - $newEdit->ZedDeptDeptVerified = $iaEdit->ZedOverOverVerified = date("Y-m-d H:i:s"); - $newEdit->save(); - $iaEdit->ZedOverZedDeptID = $newEdit->ZedDeptID; - $iaEdit->ZedOverNotes = 'NEW DEPARTMENT ADDED TO DATABASE!'; - $iaEdit->save(); - return $newDept; - } - return ''; - } - - - public function deptEdit(REQUEST $request, $deptSlug) - { - $this->loadDbLookups($request); - $this->v["deptSlug"] = $deptSlug; - $this->v["deptRow"] = OPDepartments::where('DeptSlug', $deptSlug)->first(); - $this->v["editsIA"] = $this->v["editsCiv"] = $this->v["userEdits"] = $this->v["userNames"] = []; - $this->v["editTots"] = ["notes" => 0, "online" => 0, "callDept" => 0, "callIA" => 0]; - $this->v["user"] = Auth::user(); - $this->v["neverEdited"] = false; - $this->v["recentEdits"] = ''; - - if (!isset($this->v["deptRow"]->DeptID) || intVal($this->v["deptRow"]->DeptID) <= 0) { - return $this->redir('/dashboard/volunteer'); - } - - $recentEdits = OPZeditDepartments::where('ZedDeptDeptID', $this->v["deptRow"]->DeptID) - ->orderBy('ZedDeptDeptVerified', 'desc') - ->get(); - if ($recentEdits->isNotEmpty()) { - foreach ($recentEdits as $i => $edit) { - $this->v["editsIA"][$i] = OPZeditOversight::where('ZedOverZedDeptID', $edit->ZedDeptID) - ->where('ZedOverOverType', 303) - ->first(); - $this->v["editsCiv"][$i] = OPZeditOversight::where('ZedOverZedDeptID', $edit->ZedDeptID) - ->where('ZedOverOverType', 302) - ->first(); - if ($this->v["editsIA"][$i]) { - if (trim($this->v["editsIA"][$i]->ZedOverNotes) != '') { - $this->v["editTots"]["notes"]++; - } - if (intVal($this->v["editsIA"][$i]->ZedOverOnlineResearch) == 1) { - $this->v["editTots"]["online"]++; - } - if (intVal($this->v["editsIA"][$i]->ZedOverMadeDeptCall) == 1) { - $this->v["editTots"]["callDept"]++; - } - if (intVal($this->v["editsIA"][$i]->ZedOverMadeIACall) == 1) { - $this->v["editTots"]["callIA"]++; - } - } - if (!isset($this->v["userNames"][$edit->ZedDeptUserID])) { - $this->v["userNames"][$edit->ZedDeptUserID] = User::find($edit->ZedDeptUserID) - ->printUsername(true, '/dashboard/volun/user/'); - } - if ($this->v["user"]->hasRole('administrator|staff')) { - $this->v["recentEdits"] .= view('vendor.openpolice.volun.admPrintDeptEdit', [ - "user" => $this->v["userNames"][$edit->ZedDeptUserID], - "deptRow" => $this->v["deptRow"], - "deptEdit" => $edit, - "deptType" => $GLOBALS["SL"]->def->getVal('Department Types', $edit->DeptType), - "iaEdit" => $this->v["editsIA"][$i], - "civEdit" => $this->v["editsCiv"][$i] - ])->render(); - } - } - } else { - $this->v["neverEdited"] = true; - } - $this->loadDeptEditsSummary(); - $this->admControlInit($request, '/dashboard/volunteer/verify'); - if (!$request->session()->has('whatNext')) $request->session()->put('whatNext', 'another'); - $this->getNextDept(); - $this->v["whatNext"] = $request->session()->get('whatNext'); - $this->v["volunChecklist"] = $GLOBALS["SL"]->getBlurbAndSwap('Volunteer Checklist'); - $this->v["FAQs"] = $GLOBALS["SL"]->getBlurb('Volunteer Data Mining FAQs'); - $this->v["rightSide"] = $this->getSidebarScript(); - $GLOBALS["SL"]->loadStates(); - $this->v["stateDrop"] = $GLOBALS["SL"]->states->stateDrop($this->v["deptRow"]->DeptAddressState); - $this->v["iaRow"] = OPOversight::where('OverDeptID', $this->v["deptRow"]->DeptID) - ->where('OverType', 303) - ->first(); - if (!$this->v["iaRow"]) { - $this->v["iaRow"] = new OPOversight; - $this->v["iaRow"]->OverType = 303; // definition ID for Internal Affairs - } - $this->v["civRow"] = OPOversight::where('OverDeptID', $this->v["deptRow"]->DeptID) - ->where('OverType', 302) - ->first(); - if (!$this->v["civRow"]) { - $this->v["civRow"] = new OPOversight; - $this->v["civRow"]->OverType = 302; // definition ID for Civilian Oversight - } - $this->v["iaForms"] = $this->deptEditPrintOver($this->v["iaRow"]); - $this->v["civForms"] = $this->deptEditPrintOver($this->v["civRow"], 'Civ'); - $this->v["iaComplaints"] = $this->deptEditPrintOverComplaints($this->v["deptRow"], $this->v["iaRow"]); - $this->v["admTopMenu"] = $this->genDeptAdmTopMenu($this->v["deptRow"]); - $this->v["deptTypes"] = SLDefinitions::where('DefSet', 'Value Ranges') - ->where('DefSubset', 'Department Types') - ->orderBy('DefOrder') - ->get(); - $GLOBALS["SL"]->pageJAVA .= view('vendor.openpolice.volun.volun-dept-edit-java', $this->v)->render(); - $GLOBALS["SL"]->pageAJAX .= view('vendor.openpolice.volun.volun-dept-edit-ajax', $this->v)->render(); - return view('vendor.openpolice.volun.volun-dept-edit', $this->v)->render(); - } - - public function deptEditPrintOver($overRow = [], $overType = 'IA') - { - $alreadyHascontact = ((isset($overRow->OverNameFirst) && trim($overRow->OverNameFirst) != '') - || (isset($overRow->OverNameLast) && trim($overRow->OverNameLast) != '') - || (isset($overRow->OverTitle) && trim($overRow->OverTitle) != '')); - return view('vendor.openpolice.volun.inc-oversightEdit', [ - 'overRow' => $overRow, - 'overType' => $overType, - 'DeptName' => $this->v["deptRow"]->DeptName, - 'stateDrop' => $this->v["stateDrop"], - 'alreadyHascontact' => $alreadyHascontact, - 'neverEdited' => $this->v["neverEdited"] - ])->render(); - } - - public function deptEditPrintOverComplaints($deptRow = [], $overRow = [], $overType = 'IA') - { - $waysChecked = []; - foreach ($this->v["ways"] as $i => $w) { - eval("\$waysChecked[\$i] = ((isset(\$overRow->" . $this->v["waysFlds"][$i] - . ") && \$overRow->" . $this->v["waysFlds"][$i] . " == 1) ? true : false);"); - } - return view('vendor.openpolice.volun.inc-oversightComplaints', [ - 'deptRow' => $deptRow, - 'overRow' => $overRow, - 'overType' => $overType, - 'DeptName' => $this->v["deptRow"]->DeptName, - 'ways' => $this->v["ways"], - 'waysFlds' => $this->v["waysFlds"], - 'wayPoints' => $this->v["wayPoints"], - 'waysChecked' => $waysChecked, - 'deptPoints' => $this->v["deptPoints"], - 'neverEdited' => $this->v["neverEdited"] - ])->render(); - } - - public function loadDeptEditsSummary() - { - $this->v["editsSummary"] = ['Last Verified: ', '']; - $this->v["editsSummary"][0] .= (($this->v["neverEdited"]) - ? date('n/j', strtotime($this->v["deptRow"]->DeptVerified)) : 'Never') - . '    ' - . '' . intVal($this->v["editTots"]["online"]) - . 'x Online Research,
' - . '' . intVal($this->v["editTots"]["callDept"]) - . 'x Department Calls, ' - . '   ' . intVal($this->v["editTots"]["callIA"]) - . 'x ' - . 'Internal Affairs Calls'; - $this->v["editsSummary"][1] = intVal($this->v["editTots"]["online"]) - . ', ' . intVal($this->v["editTots"]["callDept"]) - . ', ' - . intVal($this->v["editTots"]["callIA"]) . ''; - return true; - } - - public function deptEditSave(Request $request, $deptSlug = '') - { - $this->v["deptSlug"] = $deptSlug; - $this->v["deptRow"] = OPDepartments::find($request->DeptID); - $this->admControlInit($request, '/dashboard/volunteer/verify'); - - $ia = $civ = $deptEdit = $iaEdit = $civEdit = []; - - $this->v["deptRow"] = OPDepartments::find($request->DeptID); - $deptEdit = new OPZeditDepartments; - if (!isset($request->OverID) || intVal($request->OverID) <= 0) { - $ia = new OPOversight; - $ia->OverDeptID = $request->DeptID; - $ia->OverType = 303; - } else { - $ia = OPOversight::find($request->OverID); - } - $iaEdit = new OPZeditOversight; - - $deptEdit->ZedDeptDeptID = $iaEdit->ZedOverDeptID = $request->DeptID; - $deptEdit->ZedDeptUserID = $iaEdit->ZedOverUser = Auth::user()->id; - $deptEdit->ZedDeptDuration = time()-intVal($request->formLoaded); - $iaEdit->ZedOverOverType = 303; - - $this->v["deptRow"]->DeptVerified = $deptEdit->ZedDeptDeptVerified = date("Y-m-d H:i:s"); - $this->v["deptRow"]->DeptName = $deptEdit->ZedDeptName = $request->DeptName; - $this->v["deptRow"]->DeptSlug = $deptEdit->ZedDeptSlug = $request->DeptSlug; - $this->v["deptRow"]->DeptType = $deptEdit->ZedDeptType = intVal($request->DeptType); - $this->v["deptRow"]->DeptStatus = $deptEdit->ZedDeptStatus = $request->DeptStatus; - $this->v["deptRow"]->DeptAddress = $deptEdit->ZedDeptAddress = $request->DeptAddress; - $this->v["deptRow"]->DeptAddress2 = $deptEdit->ZedDeptAddress2 = $request->DeptAddress2; - $this->v["deptRow"]->DeptAddressCity = $deptEdit->ZedDeptAddressCity = $request->DeptAddressCity; - $this->v["deptRow"]->DeptAddressState = $deptEdit->ZedDeptAddressState = $request->DeptAddressState; - $this->v["deptRow"]->DeptAddressZip = $deptEdit->ZedDeptAddressZip = $request->DeptAddressZip; - $this->v["deptRow"]->DeptAddressCounty = $deptEdit->ZedDeptAddressCounty = $request->DeptAddressCounty; - $this->v["deptRow"]->DeptEmail = $deptEdit->ZedDeptEmail = $request->DeptEmail; - $this->v["deptRow"]->DeptPhoneWork = $deptEdit->ZedDeptPhoneWork = $request->DeptPhoneWork; - $this->v["deptRow"]->DeptTotOfficers = $deptEdit->ZedDeptTotOfficers = str_replace(',', '', $request->DeptTotOfficers); - $this->v["deptRow"]->DeptJurisdictionPopulation = $deptEdit->ZedDeptJurisdictionPopulation = str_replace(',', '', $request->DeptJurisdictionPopulation); - $this->v["deptRow"]->DeptScoreOpenness = $deptEdit->ZedDeptScoreOpenness = $request->DeptScoreOpenness; - - $ia->OverVerified = $iaEdit->ZedOverOverVerified = date("Y-m-d H:i:s"); - $ia->OverAgncName = $iaEdit->ZedOverAgncName = $request->DeptName; - $ia->OverAddress = $iaEdit->ZedOverAddress = $request->IAOverAddress; - $ia->OverAddress2 = $iaEdit->ZedOverAddress2 = $request->IAOverAddress2; - $ia->OverAddressCity = $iaEdit->ZedOverAddressCity = $request->IAOverAddressCity; - $ia->OverAddressState = $iaEdit->ZedOverAddressState = $request->IAOverAddressState; - $ia->OverAddressZip = $iaEdit->ZedOverAddressZip = $request->IAOverAddressZip; - $ia->OverEmail = $iaEdit->ZedOverEmail = $request->IAOverEmail; - $ia->OverPhoneWork = $iaEdit->ZedOverPhoneWork = $request->IAOverPhoneWork; - $ia->OverNameFirst = $iaEdit->ZedOverNameFirst = $request->IAOverNameFirst; - $ia->OverNameMiddle = $iaEdit->ZedOverNameMiddle = $request->IAOverNameMiddle; - $ia->OverNameLast = $iaEdit->ZedOverNameLast = $request->IAOverNameLast; - $ia->OverTitle = $iaEdit->ZedOverTitle = $request->IAOverTitle; - $ia->OverIDnumber = $iaEdit->ZedOverIDnumber = $request->IAOverIDnumber; - $ia->OverNickname = $iaEdit->ZedOverNickname = $request->IAOverNickname; - $ia->OverWebsite = $iaEdit->ZedOverWebsite = $this->fixURL($request->IAOverWebsite); - $ia->OverFacebook = $iaEdit->ZedOverFacebook = $this->fixURL($request->IAOverFacebook); - $ia->OverTwitter = $iaEdit->ZedOverTwitter = $this->fixURL($request->IAOverTwitter); - $ia->OverYouTube = $iaEdit->ZedOverYouTube = $this->fixURL($request->IAOverYouTube); - $ia->OverWebComplaintInfo = $iaEdit->ZedOverWebComplaintInfo = $this->fixURL($request->IAOverWebComplaintInfo); - $ia->OverComplaintPDF = $iaEdit->ZedOverComplaintPDF = $this->fixURL($request->IAOverComplaintPDF); - $ia->OverComplaintWebForm = $iaEdit->ZedOverComplaintWebForm = $this->fixURL($request->IAOverComplaintWebForm); - $ia->OverHomepageComplaintLink = $iaEdit->ZedOverHomepageComplaintLink = $request->IAOverHomepageComplaintLink; - foreach ($this->v["waysFlds"] as $fld) { - eval("\$ia->" . $fld . " = \$iaEdit->Edit" . $fld . " = ((isset(\$request->IA" - . $fld . ") && \$request->IA" . $fld . " == 1) ? 1 : 0);"); - } - $ia->OverSubmitDeadline = $iaEdit->ZedOverSubmitDeadline = intVal($request->IAOverSubmitDeadline); - if ($request->has('IAOverSubmitAnytime') && intVal($request->IAOverSubmitAnytime) == -1) { - $ia->OverSubmitDeadline = $iaEdit->ZedOverSubmitDeadline = -1; - } - - $iaEdit->ZedOverOnlineResearch = $request->ZedOverOnlineResearch; - $iaEdit->ZedOverMadeDeptCall = $request->ZedOverMadeDeptCall; - $iaEdit->ZedOverMadeIACall = $request->ZedOverMadeIACall; - $iaEdit->ZedOverNotes = $request->ZedOverNotes; - - $this->v["deptRow"]->save(); - $ia->save(); - $deptEdit->save(); - $iaEdit->ZedOverOverID = $ia->OverID; - $iaEdit->ZedOverZedDeptID = $deptEdit->DeptEditID; - $iaEdit->save(); - - if (trim($request->CivOverAgncName) != '' || trim($request->CivOverWebsite) != '' - || intVal($request->CivOverID) > 0) { - if (!isset($request->CivOverID) || intVal($request->CivOverID) <= 0) { - $civ = new OPOversight; - $civ->OverDeptID = $request->DeptID; - $civ->OverType = 302; - } else { - $civ = OPOversight::find($request->CivOverID); - } - $civEdit = new OPZeditOversight; - $civEdit->ZedOverDeptID = $request->DeptID; - $civEdit->ZedOverZedDeptID = $deptEdit->ZedDeptID; - $civEdit->ZedOverUser = Auth::user()->id; - $civEdit->ZedOverOverType = 302; - - $civ->OverVerified = $civEdit->ZedOverOverVerified = date("Y-m-d H:i:s"); - $civ->OverAgncName = $civEdit->ZedOverAgncName = $request->CivOverAgncName; - $this->collectCivOversightForm($civ, $civEdit, $request); - - $civ->save(); - $civEdit->ZedOverOverID = $civ->OverID; - $civEdit->save(); - } - - $tmpReserve = OPzVolunTmp::where('TmpType', 'ZedDept') - ->where('TmpUser', Auth::user()->id) - ->where('TmpVal', $request->DeptID) - ->delete(); - - if ($request->whatNext == 'again') { - $request->session()->put('whatNext', 'again'); - return $this->redir('/dashboard/volunteer/verify/'.$request->DeptSlug); - } elseif ($request->whatNext == 'list') { - $request->session()->put('whatNext', 'list'); - return $this->redir('/dashboard/volunteer'); - } else { // moving to next (reserved) department - $request->session()->put('whatNext', 'another'); - return $this->redir('/dashboard/volunteer/verify/'.$request->whatNext); - } - return $this->redir('/dashboard/volunteer'); // this line shouldn't happen - } - - protected function collectCivOversightForm(&$civ, &$civEdit, $request) - { - $civ->OverAddress = $civEdit->ZedOverAddress = $request->CivOverAddress; - $civ->OverAddress2 = $civEdit->ZedOverAddress2 = $request->CivOverAddress2; - $civ->OverAddressCity = $civEdit->ZedOverAddressCity = $request->CivOverAddressCity; - $civ->OverAddressState = $civEdit->ZedOverAddressState = $request->CivOverAddressState; - $civ->OverAddressZip = $civEdit->ZedOverAddressZip = $request->CivOverAddressZip; - $civ->OverEmail = $civEdit->ZedOverEmail = $request->CivOverEmail; - $civ->OverPhoneWork = $civEdit->ZedOverPhoneWork = $request->CivOverPhoneWork; - $civ->OverNameFirst = $civEdit->ZedOverNameFirst = $request->CivOverNameFirst; - $civ->OverNameMiddle = $civEdit->ZedOverNameMiddle = $request->CivOverNameMiddle; - $civ->OverNameLast = $civEdit->ZedOverNameLast = $request->CivOverNameLast; - $civ->OverTitle = $civEdit->ZedOverTitle = $request->CivOverTitle; - $civ->OverIDnumber = $civEdit->ZedOverIDnumber = $request->CivOverIDnumber; - $civ->OverNickname = $civEdit->ZedOverNickname = $request->CivOverNickname; - $civ->OverWebsite = $civEdit->ZedOverWebsite = $request->CivOverWebsite; - /* - $civ->OverFacebook = $civEdit->ZedOverFacebook = $request->CivOverFacebook; - $civ->OverTwitter = $civEdit->ZedOverTwitter = $request->OverTwitter; - $civ->OverWebComplaintInfo = $civEdit->ZedOverWebComplaintInfo = $request->CivOverWebComplaintInfo; - $civ->OverComplaintPDF = $civEdit->ZedOverComplaintPDF = $request->CivOverComplaintPDF; - $civ->OverComplaintWebForm = $civEdit->ZedOverComplaintWebForm =$request->CivOverComplaintWebForm; - $civ->OverHomepageComplaintLink = $civEdit->ZedOverHomepageComplaintLink = $request->CivOverHomepageComplaintLink; - foreach ($this->v["waysFlds"] as $fld) { - eval("\$civ->" . $fld . " = \$civEdit->Edit" . $fld . " = ((isset(\$request->Civ" - . $fld . ") && \$request->Civ" . $fld . " == 1) ? 1 : 0);"); - } - $civ->OverSubmitDeadline = $civEdit->ZedOverSubmitDeadline = intVal($request->CivOverSubmitDeadline); - */ - return true; - } - - protected function getSidebarScript() - { - $script1 = $GLOBALS["SL"]->getBlurb('Phone Script: Department'); - $script2 = $GLOBALS["SL"]->getBlurb('Phone Script: Internal Affairs'); - return view('vendor.openpolice.volun.volunScript-cache', [ - 'script1' => $script1, - 'script2' => $script2 - ])->render(); - } - - public function deptEditCheck() - { - $this->v["content"] = '
-

Department Info: Volunteer Checklist

- Back To Department List' - . $GLOBALS["SL"]->getBlurbAndSwap('Volunteer Checklist') . '
'; - return view('vendor.survloop.master', $this->v)->render(); - } - - - public function saveDefaultState(Request $request) - { - $this->admControlInit($request); - if ($GLOBALS["SL"]->REQ->has('newState')) { - $this->v["yourContact"]->update([ "PrsnAddressState" => $GLOBALS["SL"]->REQ->newState ]); - } - if ($GLOBALS["SL"]->REQ->has('newPhone')) { - $this->v["yourContact"]->update([ "PrsnPhoneMobile" => $GLOBALS["SL"]->REQ->newPhone ]); - } - exit; - } - - protected function printSidebarLeaderboard() - { - $this->v["leaderboard"] = new VolunteerLeaderboard; - return view('vendor.openpolice.volun.volun-sidebar-leaderboard', [ - "leaderboard" => $this->v["leaderboard"] - ])->render(); - } - - public function printStars(Request $request) - { - $this->admControlInit($request, '/dashboard/volunteer/stars'); - $this->v["leaderboard"] = new VolunteerLeaderboard; - $this->v["yourStats"] = []; - if ($this->v["leaderboard"]->UserInfoStars && sizeof($this->v["leaderboard"]->UserInfoStars) > 0) { - foreach ($this->v["leaderboard"]->UserInfoStars as $i => $volunUser) { - if ($volunUser->UserInfoUserID == $this->v["user"]->id) { - $this->v["yourStats"] = $volunUser; - } - } - } - return view('vendor.openpolice.volun.stars', $this->v)->render(); - } - - public function volunProfileAdm(Request $request, $uid) - { - $this->admControlInit($request, '/dashboard/volun/stars'); - return $this->volunProfile($request, $uid, true); - } - - public function volunProfile(Request $request, $uid, $isAdmin = false) - { - if (!$isAdmin) $this->admControlInit($request, '/dashboard/volunteer/stars'); - $this->v["isAdminList"] = $isAdmin; - $this->v["userObj"] = User::find($uid); - $this->v["userStats"] = OPzVolunUserInfo::where('UserInfoUserID', $uid) - ->first(); - $this->v["userInfo"] = OPPersonContact::find($this->v["userStats"]->UserInfoPersonContactID); - $deptEdits = []; - $recentEdits = OPZeditDepartments::where('ZedDeptUserID', $uid) - ->orderBy('ZedDeptDeptVerified', 'desc') - ->get(); - if ($recentEdits->isNotEmpty()) { - foreach ($recentEdits as $i => $edit) { - $iaEdit = OPZeditOversight::where('ZedOverZedDeptID', $edit->ZedDeptID) - ->where('ZedOverOverType', 303) - ->first(); - $civEdit = OPZeditOversight::where('ZedOverZedDeptID', $edit->ZedDeptID) - ->where('ZedOverOverType', 302) - ->first(); - $userObj = User::find($edit->ZedDeptUserID); - $deptEdits[] = [ - $userObj->printUsername(true, '/dashboard/volun/user/'), - $edit, - $iaEdit, - $civEdit - ]; - } - } - $this->v["recentEdits"] = ''; - if ($deptEdits->isNotEmpty()) { - foreach ($deptEdits as $deptEdit) { - $this->v["recentEdits"] .= view('vendor.openpolice.volun.admPrintDeptEdit', [ - "user" => $deptEdit[0], - "deptRow" => OPDepartments::find($deptEdit[1]->ZedDeptDeptID), - "deptEdit" => $deptEdit[1], - "deptType" => $GLOBALS["SL"]->def->getVal('Department Types', $deptEdit[1]->ZedDeptType), - "iaEdit" => $deptEdit[2], - "civEdit" => $deptEdit[3] - ])->render(); - } - } - return view('vendor.openpolice.admin.volun.volunProfile', $this->v)->render(); - } - - - public function fixURL($str) - { - $str = trim($str); - if ($str == '' || strtolower($str) == 'none') return ''; - if (substr($str, 0, 1) == '@') return 'https://twitter.com/' . substr($str, 1); - if (substr($str, 0, 7) != 'http://' && substr($str, 0, 8) != 'https://') { - $str = 'http:' . ((substr($str, 0, 2) != '//') ? '//' : '') . $str; - } - return $str; - } - -} diff --git a/src/Database/2019_02_11_000000_create_open police complaints_tables.php b/src/Database/2019_02_11_000000_create_open police complaints_tables.php new file mode 100644 index 0000000..f81663d --- /dev/null +++ b/src/Database/2019_02_11_000000_create_open police complaints_tables.php @@ -0,0 +1,940 @@ +increments('ComID'); + $table->integer('ComUserID')->unsigned()->nullable(); + $table->integer('ComStatus')->unsigned()->nullable(); + $table->index('ComStatus'); + $table->integer('ComType')->unsigned()->nullable(); + $table->index('ComType'); + $table->integer('ComIncidentID')->unsigned()->nullable(); + $table->integer('ComSceneID')->unsigned()->nullable(); + $table->integer('ComPrivacy')->unsigned()->nullable(); + $table->string('ComAwardMedallion', 10)->nullable(); + $table->longText('ComSummary')->nullable(); + $table->longText('ComAllegList')->nullable(); + $table->char('ComTriedOtherWays', 1)->nullable(); + $table->string('ComTriedOtherWaysDesc')->nullable(); + $table->char('ComOfficerInjured', 1)->nullable(); + $table->string('ComOfficerInjuredDesc')->nullable(); + $table->char('ComAttorneyHas', 1)->nullable(); + $table->char('ComAttorneyOKedOPC', 1)->nullable(); + $table->char('ComAttorneyWant', 1)->nullable(); + $table->char('ComAnyoneCharged', 1)->nullable(); + $table->char('ComAllChargesResolved', 1)->nullable(); + $table->integer('ComUnresolvedChargesActions')->unsigned()->default('0')->nullable(); + $table->char('ComFileLawsuit', 1)->nullable(); + $table->string('ComHowHear')->nullable(); + $table->longText('ComFeedback')->nullable(); + $table->char('ComOfficerDisciplined', 1)->nullable(); + $table->integer('ComOfficerDisciplineType')->unsigned()->nullable(); + $table->longText('ComMediaLinks')->nullable(); + $table->integer('ComAdminID')->unsigned()->nullable(); + $table->index('ComAdminID'); + $table->integer('ComAttID')->unsigned()->nullable(); + $table->longText('ComNotes')->nullable(); + $table->string('ComSlug', 255)->nullable(); + $table->dateTime('ComRecordSubmitted')->nullable(); + $table->index('ComRecordSubmitted'); + $table->string('ComSubmissionProgress')->nullable(); + $table->string('ComVersionAB')->nullable(); + $table->string('ComTreeVersion', 50)->nullable(); + $table->string('ComHoneyPot')->nullable(); + $table->boolean('ComIsMobile')->nullable(); + $table->string('ComUniqueStr', 20)->nullable(); + $table->string('ComIPaddy')->nullable(); + $table->integer('ComPublicID')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Compliments', function(Blueprint $table) + { + $table->increments('CompliID'); + $table->integer('CompliUserID')->unsigned()->nullable(); + $table->integer('CompliStatus')->unsigned()->nullable(); + $table->integer('CompliType')->nullable(); + $table->integer('CompliIncidentID')->unsigned()->nullable(); + $table->integer('CompliSceneID')->unsigned()->nullable(); + $table->integer('CompliPrivacy')->unsigned()->nullable(); + $table->longText('CompliSummary')->nullable(); + $table->string('CompliHowHear')->nullable(); + $table->longText('CompliFeedback')->nullable(); + $table->string('CompliSlug')->nullable(); + $table->longText('CompliNotes')->nullable(); + $table->dateTime('CompliRecordSubmitted')->nullable(); + $table->string('CompliSubmissionProgress')->nullable(); + $table->string('CompliVersionAB')->nullable(); + $table->string('CompliTreeVersion', 50)->nullable(); + $table->string('CompliHoneyPot')->nullable(); + $table->boolean('CompliIsMobile')->nullable(); + $table->string('CompliUniqueStr', 20)->nullable(); + $table->string('CompliIPaddy')->nullable(); + $table->integer('CompliPublicID')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Incidents', function(Blueprint $table) + { + $table->increments('IncID'); + $table->integer('IncComplaintID')->unsigned()->nullable(); + $table->index('IncComplaintID'); + $table->string('IncAddress')->nullable(); + $table->string('IncAddress2')->nullable(); + $table->string('IncAddressCity')->nullable(); + $table->string('IncAddressState', 2)->nullable(); + $table->string('IncAddressZip', 10)->nullable(); + $table->double('IncAddressLat')->nullable(); + $table->double('IncAddressLng')->nullable(); + $table->string('IncLandmarks')->nullable(); + $table->dateTime('IncTimeStart')->nullable(); + $table->dateTime('IncTimeEnd')->nullable(); + $table->integer('IncDuration')->nullable(); + $table->boolean('IncPublic')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Scenes', function(Blueprint $table) + { + $table->increments('ScnID'); + $table->char('ScnIsVehicle', 1)->nullable(); + $table->integer('ScnType')->unsigned()->nullable(); + $table->longText('ScnDescription')->nullable(); + $table->char('ScnForcibleEntry', 1)->nullable(); + $table->char('ScnCCTV', 1)->nullable(); + $table->longText('ScnCCTVDesc')->nullable(); + $table->char('ScnIsVehicleAccident', 1)->nullable(); + $table->timestamps(); + }); + Schema::create('OP_AllegSilver', function(Blueprint $table) + { + $table->increments('AlleSilID'); + $table->integer('AlleSilComplaintID')->unsigned()->nullable(); + $table->char('AlleSilStopYN', 1)->nullable(); + $table->char('AlleSilStopWrongful', 1)->nullable(); + $table->char('AlleSilOfficerID', 1)->nullable(); + $table->char('AlleSilOfficerRefuseID', 1)->nullable(); + $table->char('AlleSilSearchYN', 1)->nullable(); + $table->char('AlleSilSearchWrongful', 1)->nullable(); + $table->char('AlleSilForceYN', 1)->nullable(); + $table->char('AlleSilForceUnreason', 1)->nullable(); + $table->char('AlleSilPropertyYN', 1)->nullable(); + $table->char('AlleSilPropertyWrongful', 1)->nullable(); + $table->char('AlleSilArrestYN', 1)->nullable(); + $table->char('AlleSilPropertyDamage', 1)->nullable(); + $table->char('AlleSilArrestWrongful', 1)->nullable(); + $table->char('AlleSilArrestRetaliatory', 1)->nullable(); + $table->char('AlleSilArrestMiranda', 1)->nullable(); + $table->char('AlleSilCitationYN', 1)->nullable(); + $table->char('AlleSilCitationExcessive', 1)->nullable(); + $table->char('AlleSilProcedure', 1)->nullable(); + $table->char('AlleSilNeglectDuty', 1)->nullable(); + $table->char('AlleSilBias', 1)->nullable(); + $table->char('AlleSilSexualHarass', 1)->nullable(); + $table->char('AlleSilSexualAssault', 1)->nullable(); + $table->integer('AlleSilIntimidatingWeapon')->unsigned()->nullable(); + $table->integer('AlleSilIntimidatingWeaponType')->unsigned()->nullable(); + $table->char('AlleSilWrongfulEntry', 1)->nullable(); + $table->char('AlleSilUnbecoming', 1)->nullable(); + $table->char('AlleSilDiscourteous', 1)->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Allegations', function(Blueprint $table) + { + $table->increments('AlleID'); + $table->integer('AlleComplaintID')->unsigned()->nullable(); + $table->index('AlleComplaintID'); + $table->integer('AlleType')->unsigned()->nullable(); + $table->integer('AlleEventSequenceID')->unsigned()->nullable(); + $table->longText('AlleDescription')->nullable(); + $table->integer('AlleFindings')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_OffCompliments', function(Blueprint $table) + { + $table->increments('OffCompID'); + $table->integer('OffCompOffID')->unsigned()->nullable(); + $table->char('OffCompValor', 1)->nullable(); + $table->char('OffCompLifesaving', 1)->nullable(); + $table->char('OffCompDeescalation', 1)->nullable(); + $table->char('OffCompProfessionalism', 1)->nullable(); + $table->char('OffCompFairness', 1)->nullable(); + $table->char('OffCompConstitutional', 1)->nullable(); + $table->char('OffCompCompassion', 1)->nullable(); + $table->char('OffCompCommunity', 1)->nullable(); + $table->timestamps(); + }); + Schema::create('OP_EventSequence', function(Blueprint $table) + { + $table->increments('EveID'); + $table->integer('EveComplaintID')->unsigned()->nullable(); + $table->index('EveComplaintID'); + $table->string('EveType')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Stops', function(Blueprint $table) + { + $table->increments('StopID'); + $table->integer('StopEventSequenceID')->unsigned()->nullable(); + $table->longText('StopStatedReasonDesc')->nullable(); + $table->char('StopSubjectAskedToLeave', 1)->nullable(); + $table->longText('StopSubjectStatementsDesc')->nullable(); + $table->char('StopEnterPrivateProperty', 1)->nullable(); + $table->string('StopEnterPrivatePropertyDesc')->nullable(); + $table->char('StopPermissionEnter', 1)->nullable(); + $table->char('StopPermissionEnterGranted', 1)->nullable(); + $table->char('StopRequestID', 1)->nullable(); + $table->char('StopRefuseID', 1)->nullable(); + $table->char('StopRequestOfficerID', 1)->nullable(); + $table->char('StopOfficerRefuseID', 1)->nullable(); + $table->char('StopSubjectFrisk', 1)->nullable(); + $table->char('StopSubjectHandcuffed', 1)->nullable(); + $table->char('StopStopSubjectHandcuffInjYN', 1)->nullable(); + $table->integer('StopSubjectHandcuffInjury')->unsigned()->nullable(); + $table->integer('StopDuration')->nullable(); + $table->char('StopBreathAlcohol', 1)->nullable(); + $table->char('StopBreathAlcoholFailed', 1)->nullable(); + $table->char('StopBreathCannabis', 1)->nullable(); + $table->char('StopBreathCannabisFailed', 1)->nullable(); + $table->char('StopSalivaTest', 1)->nullable(); + $table->char('StopSobrietyOther', 1)->nullable(); + $table->string('StopSobrietyOtherDescribe')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_StopReasons', function(Blueprint $table) + { + $table->increments('StopReasID'); + $table->integer('StopReasStopID')->unsigned()->nullable(); + $table->integer('StopReasReason')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Searches', function(Blueprint $table) + { + $table->increments('SrchID'); + $table->integer('SrchEventSequenceID')->unsigned()->nullable(); + $table->char('SrchStatedReason', 1)->nullable(); + $table->longText('SrchStatedReasonDesc')->nullable(); + $table->char('SrchOfficerRequest', 1)->nullable(); + $table->longText('SrchOfficerRequestDesc')->nullable(); + $table->char('SrchSubjectConsent', 1)->nullable(); + $table->longText('SrchSubjectSay')->nullable(); + $table->char('SrchOfficerThreats', 1)->nullable(); + $table->longText('SrchOfficerThreatsDesc')->nullable(); + $table->char('SrchStrip', 1)->nullable(); + $table->string('SrchStripSearchDesc')->nullable(); + $table->char('SrchK9sniff', 1)->nullable(); + $table->char('SrchContrabandDiscovered', 1)->nullable(); + $table->char('SrchOfficerWarrant', 1)->nullable(); + $table->longText('SrchOfficerWarrantSay')->nullable(); + $table->char('SrchSeized', 1)->nullable(); + $table->longText('SrchSeizedDesc')->nullable(); + $table->char('SrchDamage', 1)->nullable(); + $table->longText('SrchDamageDesc')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_SearchContra', function(Blueprint $table) + { + $table->increments('SrchConID'); + $table->integer('SrchConSearchID')->unsigned()->nullable(); + $table->integer('SrchConType')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_SearchSeize', function(Blueprint $table) + { + $table->increments('SrchSeizID'); + $table->integer('SrchSeizSearchID')->unsigned()->nullable(); + $table->integer('SrchSeizType')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Arrests', function(Blueprint $table) + { + $table->increments('ArstID'); + $table->integer('ArstEventSequenceID')->unsigned()->nullable(); + $table->char('ArstChargesFiled', 1)->nullable(); + $table->char('ArstStatedReason', 1)->nullable(); + $table->longText('ArstStatedReasonDesc')->nullable(); + $table->char('ArstMiranda', 1)->nullable(); + $table->char('ArstSITA', 1)->nullable(); + $table->char('ArstNoChargesFiled', 1)->nullable(); + $table->char('ArstStrip', 1)->nullable(); + $table->string('ArstStripSearchDesc')->nullable(); + $table->longText('ArstChargesOther')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Force', function(Blueprint $table) + { + $table->increments('ForID'); + $table->integer('ForEventSequenceID')->unsigned()->nullable(); + $table->char('ForAgainstAnimal', 1)->nullable(); + $table->string('ForAnimalDesc')->nullable(); + $table->integer('ForType')->unsigned()->nullable(); + $table->string('ForTypeOther')->nullable(); + $table->integer('ForGunAmmoType')->unsigned()->nullable(); + $table->string('ForGunDesc')->nullable(); + $table->integer('ForHowManyTimes')->nullable(); + $table->char('ForOrdersBeforeForce', 1)->nullable(); + $table->longText('ForOrdersSubjectResponse')->nullable(); + $table->char('ForWhileHandcuffed', 1)->nullable(); + $table->char('ForWhileHeldDown', 1)->nullable(); + $table->timestamps(); + }); + Schema::create('OP_ForceSubType', function(Blueprint $table) + { + $table->increments('ForceSubID'); + $table->integer('ForceSubForceID')->unsigned()->nullable(); + $table->integer('ForceSubType')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_ForceBodyParts', function(Blueprint $table) + { + $table->increments('FrcBdyID'); + $table->integer('FrcBdyForceID')->unsigned()->nullable(); + $table->integer('FrcBdyPart')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_CivWeapons', function(Blueprint $table) + { + $table->increments('CivWeapID'); + $table->integer('CivWeapComID')->unsigned()->nullable(); + $table->integer('CivWeapBodyWeapon')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Charges', function(Blueprint $table) + { + $table->increments('ChrgID'); + $table->integer('ChrgCivID')->unsigned()->nullable(); + $table->integer('ChrgCharges')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Injuries', function(Blueprint $table) + { + $table->increments('InjID'); + $table->integer('InjSubjectID')->unsigned()->nullable(); + $table->integer('InjType')->unsigned()->nullable(); + $table->integer('InjHowManyTimes')->nullable(); + $table->longText('InjDescription')->nullable(); + $table->boolean('InjDone')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_InjuryBodyParts', function(Blueprint $table) + { + $table->increments('InjBdyID'); + $table->integer('InjBdyInjuryID')->unsigned()->nullable(); + $table->integer('InjBdyPart')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_InjuryCare', function(Blueprint $table) + { + $table->increments('InjCareID'); + $table->integer('InjCareSubjectID')->unsigned()->nullable(); + $table->char('InjCareResultInDeath', 1)->nullable(); + $table->dateTime('InjCareTimeOfDeath')->nullable(); + $table->char('InjCareGotMedical', 1)->nullable(); + $table->string('InjCareHospitalTreated')->nullable(); + $table->string('InjCareDoctorNameFirst')->nullable(); + $table->string('InjCareDoctorNameLast')->nullable(); + $table->string('InjCareDoctorEmail')->nullable(); + $table->string('InjCareDoctorPhone')->nullable(); + $table->char('InjCareEmergencyOnScene', 1)->nullable(); + $table->string('InjCareEmergencyNameFirst')->nullable(); + $table->string('InjCareEmergencyNameLast')->nullable(); + $table->string('InjCareEmergencyIDnumber')->nullable(); + $table->string('InjCareEmergencyVehicleNumber')->nullable(); + $table->string('InjCareEmergencyLicenceNumber')->nullable(); + $table->string('InjCareEmergencyDeptName')->nullable(); + $table->boolean('InjCareDone')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Surveys', function(Blueprint $table) + { + $table->increments('SurvID'); + $table->integer('SurvComplaintID')->unsigned()->nullable(); + $table->index('SurvComplaintID'); + $table->integer('SurvAuthUserID')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_ComplaintNotes', function(Blueprint $table) + { + $table->increments('NoteID'); + $table->integer('NoteComplaintID')->unsigned()->nullable(); + $table->index('NoteComplaintID'); + $table->integer('NoteUserID')->unsigned()->nullable(); + $table->dateTime('NoteTimestamp')->default('NOW()')->nullable(); + $table->longText('NoteContent')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Civilians', function(Blueprint $table) + { + $table->increments('CivID'); + $table->integer('CivComplaintID')->unsigned()->nullable(); + $table->index('CivComplaintID'); + $table->integer('CivUserID')->unsigned()->nullable(); + $table->char('CivIsCreator', 1)->default('N')->nullable(); + $table->string('CivRole', 10)->nullable(); + $table->integer('CivPersonID')->unsigned()->nullable(); + $table->integer('CivPhysDescID')->unsigned()->nullable(); + $table->char('CivGiveName', 1)->nullable(); + $table->char('CivGiveContactInfo', 1)->nullable(); + $table->char('CivResident', 1)->nullable(); + $table->string('CivOccupation')->nullable(); + $table->char('CivHadVehicle', 1)->nullable(); + $table->char('CivChase', 1)->nullable(); + $table->integer('CivChaseType')->unsigned()->nullable(); + $table->integer('CivVictimWhatWeapon')->unsigned()->nullable(); + $table->integer('CivVictimUseWeapon')->unsigned()->nullable(); + $table->char('CivCameraRecord', 1)->nullable(); + $table->char('CivUsedProfanity', 1)->nullable(); + $table->char('CivHasInjury', 1)->nullable(); + $table->char('CivHasInjuryCare', 1)->nullable(); + $table->char('CivGivenCitation', 1)->nullable(); + $table->char('CivGivenWarning', 1)->nullable(); + $table->string('CivCitationNumber', 25)->nullable(); + $table->longText('CivChargesOther')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Officers', function(Blueprint $table) + { + $table->increments('OffID'); + $table->boolean('OffIsVerified')->nullable(); + $table->index('OffIsVerified'); + $table->integer('OffComplaintID')->unsigned()->nullable(); + $table->index('OffComplaintID'); + $table->string('OffRole')->nullable(); + $table->integer('OffDeptID')->unsigned()->nullable(); + $table->index('OffDeptID'); + $table->integer('OffPersonID')->unsigned()->nullable(); + $table->integer('OffPhysDescID')->unsigned()->nullable(); + $table->char('OffGiveName', 1)->nullable(); + $table->char('OffHadVehicle', 1)->nullable(); + $table->string('OffPrecinct')->nullable(); + $table->integer('OffBadgeNumber')->nullable(); + $table->integer('OffIDnumber')->nullable(); + $table->string('OffOfficerRank')->nullable(); + $table->char('OffDashCam', 1)->nullable(); + $table->char('OffBodyCam', 1)->nullable(); + $table->string('OffDutyStatus', 10)->nullable(); + $table->char('OffUniform', 1)->nullable(); + $table->char('OffUsedProfanity', 1)->nullable(); + $table->longText('OffAdditionalDetails')->nullable(); + $table->char('OffGaveCompliment', 1)->nullable(); + $table->timestamps(); + }); + Schema::create('OP_PersonContact', function(Blueprint $table) + { + $table->increments('PrsnID'); + $table->string('PrsnNamePrefix', 20)->nullable(); + $table->string('PrsnNameFirst')->nullable(); + $table->string('PrsnNickname')->nullable(); + $table->string('PrsnNameMiddle')->nullable(); + $table->string('PrsnNameLast')->nullable(); + $table->string('PrsnNameSuffix', 20)->nullable(); + $table->string('PrsnEmail')->nullable(); + $table->string('PrsnPhoneHome', 20)->nullable(); + $table->string('PrsnPhoneWork', 20)->nullable(); + $table->string('PrsnPhoneMobile', 20)->nullable(); + $table->string('PrsnAddress')->nullable(); + $table->string('PrsnAddress2')->nullable(); + $table->string('PrsnAddressCity')->nullable(); + $table->string('PrsnAddressState', 2)->nullable(); + $table->string('PrsnAddressZip', 10)->nullable(); + $table->date('PrsnBirthday')->nullable(); + $table->string('PrsnFacebook')->nullable(); + $table->integer('PrsnUserID')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_PhysicalDesc', function(Blueprint $table) + { + $table->increments('PhysID'); + $table->char('PhysGender', 1)->nullable(); + $table->string('PhysGenderOther')->nullable(); + $table->integer('PhysAge')->unsigned()->nullable(); + $table->integer('PhysHeight')->nullable(); + $table->integer('PhysBodyType')->unsigned()->nullable(); + $table->string('PhysGeneralDesc')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_PhysicalDescRace', function(Blueprint $table) + { + $table->increments('PhysRaceID'); + $table->integer('PhysRacePhysDescID')->unsigned()->nullable(); + $table->integer('PhysRaceRace')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Vehicles', function(Blueprint $table) + { + $table->increments('VehicID'); + $table->integer('VehicComplaintID')->unsigned()->nullable(); + $table->boolean('VehicIsCivilian')->nullable(); + $table->integer('VehicTransportation')->unsigned()->nullable(); + $table->char('VehicUnmarked', 1)->nullable(); + $table->string('VehicVehicleMake')->nullable(); + $table->string('VehicVehicleModel')->nullable(); + $table->string('VehicVehicleDesc')->nullable(); + $table->string('VehicVehicleLicence')->nullable(); + $table->string('VehicVehicleNumber', 20)->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Departments', function(Blueprint $table) + { + $table->increments('DeptID'); + $table->string('DeptName')->nullable(); + $table->string('DeptSlug', 100)->nullable(); + $table->integer('DeptType')->unsigned()->nullable(); + $table->integer('DeptStatus')->unsigned()->nullable(); + $table->dateTime('DeptVerified')->nullable(); + $table->string('DeptEmail')->nullable(); + $table->string('DeptPhoneWork', 20)->nullable(); + $table->string('DeptAddress')->nullable(); + $table->string('DeptAddress2')->nullable(); + $table->string('DeptAddressCity')->nullable(); + $table->string('DeptAddressState', 2)->nullable(); + $table->string('DeptAddressZip', 10)->nullable(); + $table->string('DeptAddressCounty', 100)->nullable(); + $table->string('DeptScoreOpenness', 11)->nullable(); + $table->integer('DeptTotOfficers')->nullable(); + $table->integer('DeptJurisdictionPopulation')->nullable(); + $table->longText('DeptJurisdictionGPS')->nullable(); + $table->string('DeptVersionAB')->nullable(); + $table->integer('DeptSubmissionProgress')->nullable(); + $table->string('DeptIPaddy')->nullable(); + $table->string('DeptTreeVersion')->nullable(); + $table->string('DeptUniqueStr')->nullable(); + $table->integer('DeptUserID')->unsigned()->nullable(); + $table->string('DeptIsMobile')->nullable(); + $table->double('DeptAddressLat')->nullable(); + $table->double('DeptAddressLng')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Oversight', function(Blueprint $table) + { + $table->increments('OverID'); + $table->integer('OverType')->unsigned()->nullable(); + $table->integer('OverCivModel')->unsigned()->nullable(); + $table->integer('OverUserID')->unsigned()->nullable(); + $table->integer('OverDeptID')->unsigned()->nullable(); + $table->index('OverDeptID'); + $table->string('OverAgncName')->nullable(); + $table->dateTime('OverVerified')->nullable(); + $table->string('OverNamePrefix', 20)->nullable(); + $table->string('OverNameFirst')->nullable(); + $table->string('OverNickname')->nullable(); + $table->string('OverNameMiddle', 100)->nullable(); + $table->string('OverNameLast')->nullable(); + $table->string('OverNameSuffix', 20)->nullable(); + $table->string('OverTitle')->nullable(); + $table->string('OverIDnumber', 50)->nullable(); + $table->string('OverWebsite')->nullable(); + $table->string('OverFacebook')->nullable(); + $table->string('OverTwitter')->nullable(); + $table->string('OverYouTube')->nullable(); + $table->char('OverHomepageComplaintLink', 1)->nullable(); + $table->string('OverWebComplaintInfo')->nullable(); + $table->string('OverComplaintPDF')->nullable(); + $table->string('OverComplaintWebForm')->nullable(); + $table->string('OverEmail')->nullable(); + $table->string('OverPhoneWork', 20)->nullable(); + $table->string('OverAddress')->nullable(); + $table->string('OverAddress2')->nullable(); + $table->string('OverAddressCity')->nullable(); + $table->string('OverAddressState', 2)->nullable(); + $table->string('OverAddressZip', 10)->nullable(); + $table->integer('OverSubmitDeadline')->nullable(); + $table->boolean('OverOfficialFormNotReq')->nullable(); + $table->boolean('OverOfficialAnon')->nullable(); + $table->boolean('OverWaySubOnline')->nullable(); + $table->boolean('OverWaySubEmail')->nullable(); + $table->boolean('OverWaySubVerbalPhone')->nullable(); + $table->boolean('OverWaySubPaperMail')->nullable(); + $table->boolean('OverWaySubPaperInPerson')->nullable(); + $table->boolean('OverWaySubNotary')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Partners', function(Blueprint $table) + { + $table->increments('PartID'); + $table->integer('PartType')->unsigned()->nullable(); + $table->boolean('PartStatus')->default('1')->nullable(); + $table->integer('PartUserID')->unsigned()->nullable(); + $table->integer('PartPersonID')->unsigned()->nullable(); + $table->string('PartBio')->nullable(); + $table->string('PartSlug')->nullable(); + $table->string('PartCompanyName')->nullable(); + $table->string('PartTitle')->nullable(); + $table->string('PartCompanyWebsite')->nullable(); + $table->longText('PartBioUrl')->nullable(); + $table->longText('PartHelpReqs')->nullable(); + $table->string('PartGeoDesc')->nullable(); + $table->string('PartPhotoUrl')->nullable(); + $table->integer('PartAlerts')->unsigned()->nullable(); + $table->string('PartVersionAB')->nullable(); + $table->integer('PartSubmissionProgress')->nullable(); + $table->string('PartIPaddy')->nullable(); + $table->string('PartTreeVersion')->nullable(); + $table->string('PartUniqueStr')->nullable(); + $table->string('PartIsMobile')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_PartnerStates', function(Blueprint $table) + { + $table->increments('PrtStaID'); + $table->integer('PrtStaPartID')->unsigned()->nullable(); + $table->string('PrtStaState', 2)->nullable(); + $table->timestamps(); + }); + Schema::create('OP_PartnerCapac', function(Blueprint $table) + { + $table->increments('PrtCapID'); + $table->integer('PrtCapPartID')->unsigned()->nullable(); + $table->integer('PrtCapCapacity')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_PartnerCaseTypes', function(Blueprint $table) + { + $table->increments('PrtCasID'); + $table->integer('PrtCasPartnerID')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_PartnerFilters', function(Blueprint $table) + { + $table->increments('PrtFltID'); + $table->integer('PrtFltCaseID')->unsigned()->nullable(); + $table->integer('PrtFltFilter')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Administrators', function(Blueprint $table) + { + $table->increments('AdmID'); + $table->integer('AdmUserID')->unsigned()->nullable(); + $table->integer('AdmPersonID')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_LinksComplaintDept', function(Blueprint $table) + { + $table->increments('LnkComDeptID'); + $table->integer('LnkComDeptComplaintID')->unsigned()->nullable(); + $table->integer('LnkComDeptDeptID')->unsigned()->nullable(); + $table->index('LnkComDeptDeptID'); + $table->timestamps(); + }); + Schema::create('OP_LinksComplaintOversight', function(Blueprint $table) + { + $table->increments('LnkComOverID'); + $table->integer('LnkComOverComplaintID')->unsigned()->nullable(); + $table->index('LnkComOverComplaintID'); + $table->integer('LnkComOverDeptID')->unsigned()->nullable(); + $table->integer('LnkComOverOverID')->unsigned()->nullable(); + $table->index('LnkComOverOverID'); + $table->dateTime('LnkComOverSubmitted')->default(NULL)->nullable(); + $table->dateTime('LnkComOverStillNoResponse')->nullable(); + $table->dateTime('LnkComOverReceived')->default(NULL)->nullable(); + $table->dateTime('LnkComOverInvestigated')->default(NULL)->nullable(); + $table->dateTime('LnkComOverReportDate')->nullable(); + $table->integer('LnkComOverOversightReportEvidenceID')->unsigned()->nullable(); + $table->integer('LnkComOverAgencyComplaintNumber')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_LinksComplimentDept', function(Blueprint $table) + { + $table->increments('LnkCompliDeptID'); + $table->integer('LnkCompliDeptComplimentID')->unsigned()->nullable(); + $table->integer('LnkCompliDeptDeptID')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_LinksOfficerAllegations', function(Blueprint $table) + { + $table->increments('LnkOffAlleID'); + $table->integer('LnkOffAlleOffID')->unsigned()->nullable(); + $table->integer('LnkOffAlleAlleID')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_LinksOfficerEvents', function(Blueprint $table) + { + $table->increments('LnkOffEveID'); + $table->integer('LnkOffEveOffID')->unsigned()->nullable(); + $table->integer('LnkOffEveEveID')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_LinksOfficerVehicles', function(Blueprint $table) + { + $table->increments('LnkOffVehicID'); + $table->integer('LnkOffVehicOffID')->unsigned()->nullable(); + $table->integer('LnkOffVehicVehicID')->unsigned()->nullable(); + $table->integer('LnkOffVehicRole')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_LinksCivilianAllegations', function(Blueprint $table) + { + $table->increments('LnkCivAlleID'); + $table->integer('LnkCivAlleCivID')->unsigned()->nullable(); + $table->integer('LnkCivAlleAlleID')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_LinksCivilianEvents', function(Blueprint $table) + { + $table->increments('LnkCivEveID'); + $table->integer('LnkCivEveCivID')->unsigned()->nullable(); + $table->integer('LnkCivEveEveID')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_LinksCivilianVehicles', function(Blueprint $table) + { + $table->increments('LnkCivVehicID'); + $table->integer('LnkCivVehicCivID')->unsigned()->nullable(); + $table->integer('LnkCivVehicVehicID')->unsigned()->nullable(); + $table->integer('LnkCivVehicRole')->unsigned()->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Visitors', function(Blueprint $table) + { + $table->increments('VisID'); + $table->string('VisVersionAB')->nullable(); + $table->integer('VisSubmissionProgress')->nullable(); + $table->string('VisIPaddy')->nullable(); + $table->string('VisTreeVersion')->nullable(); + $table->string('VisUniqueStr')->nullable(); + $table->integer('VisUserID')->unsigned()->nullable(); + $table->string('VisIsMobile')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_PrivilegeProfiles', function(Blueprint $table) + { + $table->increments('PrivID'); + $table->integer('PrivUserID')->unsigned()->nullable(); + $table->integer('PrivComplaintID')->unsigned()->nullable(); + $table->index('PrivComplaintID'); + $table->integer('PrivDeptID')->unsigned()->nullable(); + $table->index('PrivDeptID'); + $table->string('PrivAccessLevel')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_AdminActions', function(Blueprint $table) + { + $table->increments('AdmActID'); + $table->integer('AdmActUserID')->unsigned()->nullable(); + $table->dateTime('AdmActTimestamp')->default('NOW()')->nullable(); + $table->string('AdmActTable')->nullable(); + $table->integer('AdmActRecordID')->nullable(); + $table->longText('AdmActOldData')->nullable(); + $table->longText('AdmActNewData')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Zedit_Departments', function(Blueprint $table) + { + $table->increments('ZedDeptID'); + $table->integer('ZedDeptUserID')->nullable(); + $table->integer('ZedDeptDuration')->nullable(); + $table->integer('ZedDeptDeptID')->unsigned()->nullable(); + $table->string('ZedDeptDeptName')->nullable(); + $table->string('ZedDeptDeptSlug', 100)->nullable(); + $table->integer('ZedDeptDeptType')->unsigned()->nullable(); + $table->integer('ZedDeptDeptStatus')->unsigned()->nullable(); + $table->dateTime('ZedDeptDeptVerified')->nullable(); + $table->string('ZedDeptDeptEmail')->nullable(); + $table->string('ZedDeptDeptPhoneWork', 20)->nullable(); + $table->string('ZedDeptDeptAddress')->nullable(); + $table->string('ZedDeptDeptAddress2')->nullable(); + $table->string('ZedDeptDeptAddressCity')->nullable(); + $table->string('ZedDeptDeptAddressState', 2)->nullable(); + $table->string('ZedDeptDeptAddressZip', 10)->nullable(); + $table->string('ZedDeptDeptAddressCounty', 100)->nullable(); + $table->string('ZedDeptDeptScoreOpenness', 11)->nullable(); + $table->integer('ZedDeptDeptTotOfficers')->nullable(); + $table->integer('ZedDeptDeptJurisdictionPopulation')->nullable(); + $table->longText('ZedDeptDeptJurisdictionGPS')->nullable(); + $table->integer('ZedDeptDeptUserID')->unsigned()->nullable(); + $table->integer('ZedDeptDeptSubmissionProgress')->nullable(); + $table->string('ZedDeptDeptTreeVersion')->nullable(); + $table->string('ZedDeptDeptVersionAB')->nullable(); + $table->string('ZedDeptDeptUniqueStr')->nullable(); + $table->string('ZedDeptDeptIPaddy')->nullable(); + $table->string('ZedDeptDeptIsMobile')->nullable(); + $table->double('ZedDeptDeptAddressLat')->nullable(); + $table->double('ZedDeptDeptAddressLng')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_Zedit_Oversight', function(Blueprint $table) + { + $table->increments('ZedOverID'); + $table->integer('ZedOverZedDeptID')->unsigned()->nullable(); + $table->boolean('ZedOverOnlineResearch')->nullable(); + $table->boolean('ZedOverMadeDeptCall')->nullable(); + $table->boolean('ZedOverMadeIACall')->nullable(); + $table->longText('ZedOverNotes')->nullable(); + $table->integer('ZedOverOverID')->unsigned()->nullable(); + $table->integer('ZedOverOverType')->unsigned()->nullable(); + $table->integer('ZedOverOverCivModel')->unsigned()->nullable(); + $table->integer('ZedOverOverUserID')->unsigned()->nullable(); + $table->integer('ZedOverOverDeptID')->unsigned()->nullable(); + $table->index('ZedOverOverDeptID'); + $table->string('ZedOverOverAgncName')->nullable(); + $table->dateTime('ZedOverOverVerified')->nullable(); + $table->string('ZedOverOverNamePrefix', 20)->nullable(); + $table->string('ZedOverOverNameFirst')->nullable(); + $table->string('ZedOverOverNickname')->nullable(); + $table->string('ZedOverOverNameMiddle', 100)->nullable(); + $table->string('ZedOverOverNameLast')->nullable(); + $table->string('ZedOverOverNameSuffix', 20)->nullable(); + $table->string('ZedOverOverTitle')->nullable(); + $table->string('ZedOverOverIDnumber', 50)->nullable(); + $table->string('ZedOverOverWebsite')->nullable(); + $table->string('ZedOverOverFacebook')->nullable(); + $table->string('ZedOverOverTwitter')->nullable(); + $table->string('ZedOverOverYouTube')->nullable(); + $table->char('ZedOverOverHomepageComplaintLink', 1)->nullable(); + $table->string('ZedOverOverWebComplaintInfo')->nullable(); + $table->string('ZedOverOverComplaintPDF')->nullable(); + $table->string('ZedOverOverComplaintWebForm')->nullable(); + $table->string('ZedOverOverEmail')->nullable(); + $table->string('ZedOverOverPhoneWork', 20)->nullable(); + $table->string('ZedOverOverAddress')->nullable(); + $table->string('ZedOverOverAddress2')->nullable(); + $table->string('ZedOverOverAddressCity')->nullable(); + $table->string('ZedOverOverAddressState', 2)->nullable(); + $table->string('ZedOverOverAddressZip', 10)->nullable(); + $table->integer('ZedOverOverSubmitDeadline')->nullable(); + $table->boolean('ZedOverOverOfficialFormNotReq')->nullable(); + $table->boolean('ZedOverOverOfficialAnon')->nullable(); + $table->boolean('ZedOverOverWaySubOnline')->nullable(); + $table->boolean('ZedOverOverWaySubEmail')->nullable(); + $table->boolean('ZedOverOverWaySubVerbalPhone')->nullable(); + $table->boolean('ZedOverOverWaySubPaperMail')->nullable(); + $table->boolean('ZedOverOverWaySubPaperInPerson')->nullable(); + $table->boolean('ZedOverOverWaySubNotary')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_zVolunStatDays', function(Blueprint $table) + { + $table->increments('VolunStatID'); + $table->date('VolunStatDate')->nullable(); + $table->integer('VolunStatSignups')->default('0')->nullable(); + $table->integer('VolunStatLogins')->default('0')->nullable(); + $table->integer('VolunStatUsersUnique')->default('0')->nullable(); + $table->integer('VolunStatDeptsUnique')->default('0')->nullable(); + $table->integer('VolunStatOnlineResearch')->default('0')->nullable(); + $table->integer('VolunStatCallsDept')->default('0')->nullable(); + $table->integer('VolunStatCallsIA')->default('0')->nullable(); + $table->integer('VolunStatTot')->default('0')->nullable(); + $table->integer('VolunStatTotalEdits')->default('0')->nullable(); + $table->integer('VolunStatOnlineResearchV')->default('0')->nullable(); + $table->integer('VolunStatCallsDeptV')->default('0')->nullable(); + $table->integer('VolunStatCallsIAV')->default('0')->nullable(); + $table->integer('VolunStatTotV')->default('0')->nullable(); + $table->integer('VolunStatTotalEditsV')->default('0')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_zVolunUserInfo', function(Blueprint $table) + { + $table->increments('UserInfoID'); + $table->integer('UserInfoUserID')->unsigned()->nullable(); + $table->integer('UserInfoPersonContactID')->unsigned()->nullable(); + $table->integer('UserInfoStars')->default('0')->nullable(); + $table->integer('UserInfoStars1')->default('0')->nullable(); + $table->integer('UserInfoStars2')->default('0')->nullable(); + $table->integer('UserInfoStars3')->default('0')->nullable(); + $table->integer('UserInfoDepts')->default('0')->nullable(); + $table->integer('UserInfoAvgTimeDept')->default('0')->nullable(); + $table->timestamps(); + }); + Schema::create('OP_zComplaintReviews', function(Blueprint $table) + { + $table->increments('ComRevID'); + $table->integer('ComRevComplaint')->unsigned()->nullable(); + $table->integer('ComRevUser')->unsigned()->nullable(); + $table->date('ComRevDate')->nullable(); + $table->string('ComRevType', 10)->nullable(); + $table->integer('ComRevComplaintType')->unsigned()->nullable(); + $table->string('ComRevStatus', 50)->nullable(); + $table->string('ComRevNext Action')->nullable(); + $table->longText('ComRevNote')->nullable(); + $table->boolean('ComRevOneIncident')->nullable(); + $table->boolean('ComRevCivilianContact')->nullable(); + $table->boolean('ComRevOneOfficer')->nullable(); + $table->boolean('ComRevOneAllegation')->nullable(); + $table->boolean('ComRevEvidenceUploaded')->nullable(); + $table->integer('ComRevEnglishSkill')->nullable(); + $table->integer('ComRevReadability')->nullable(); + $table->integer('ComRevConsistency')->nullable(); + $table->integer('ComRevRealistic')->nullable(); + $table->integer('ComRevOutrage')->nullable(); + $table->boolean('ComRevExplicitLang')->nullable(); + $table->boolean('ComRevGraphicContent')->nullable(); + $table->timestamps(); + }); + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('OP_Complaints'); + Schema::drop('OP_Compliments'); + Schema::drop('OP_Incidents'); + Schema::drop('OP_Scenes'); + Schema::drop('OP_AllegSilver'); + Schema::drop('OP_Allegations'); + Schema::drop('OP_OffCompliments'); + Schema::drop('OP_EventSequence'); + Schema::drop('OP_Stops'); + Schema::drop('OP_StopReasons'); + Schema::drop('OP_Searches'); + Schema::drop('OP_SearchContra'); + Schema::drop('OP_SearchSeize'); + Schema::drop('OP_Arrests'); + Schema::drop('OP_Force'); + Schema::drop('OP_ForceSubType'); + Schema::drop('OP_ForceBodyParts'); + Schema::drop('OP_CivWeapons'); + Schema::drop('OP_Charges'); + Schema::drop('OP_Injuries'); + Schema::drop('OP_InjuryBodyParts'); + Schema::drop('OP_InjuryCare'); + Schema::drop('OP_Surveys'); + Schema::drop('OP_ComplaintNotes'); + Schema::drop('OP_Civilians'); + Schema::drop('OP_Officers'); + Schema::drop('OP_PersonContact'); + Schema::drop('OP_PhysicalDesc'); + Schema::drop('OP_PhysicalDescRace'); + Schema::drop('OP_Vehicles'); + Schema::drop('OP_Departments'); + Schema::drop('OP_Oversight'); + Schema::drop('OP_Partners'); + Schema::drop('OP_PartnerStates'); + Schema::drop('OP_PartnerCapac'); + Schema::drop('OP_PartnerCaseTypes'); + Schema::drop('OP_PartnerFilters'); + Schema::drop('OP_Administrators'); + Schema::drop('OP_LinksComplaintDept'); + Schema::drop('OP_LinksComplaintOversight'); + Schema::drop('OP_LinksComplimentDept'); + Schema::drop('OP_LinksOfficerAllegations'); + Schema::drop('OP_LinksOfficerEvents'); + Schema::drop('OP_LinksOfficerVehicles'); + Schema::drop('OP_LinksCivilianAllegations'); + Schema::drop('OP_LinksCivilianEvents'); + Schema::drop('OP_LinksCivilianVehicles'); + Schema::drop('OP_Visitors'); + Schema::drop('OP_PrivilegeProfiles'); + Schema::drop('OP_AdminActions'); + Schema::drop('OP_Zedit_Departments'); + Schema::drop('OP_Zedit_Oversight'); + Schema::drop('OP_zVolunStatDays'); + Schema::drop('OP_zVolunUserInfo'); + Schema::drop('OP_zComplaintReviews'); + + } +} diff --git a/src/Database/OpenPoliceDeptSeeder.php b/src/Database/OpenPoliceDeptSeeder.php index b4a7f7a..114a543 100755 --- a/src/Database/OpenPoliceDeptSeeder.php +++ b/src/Database/OpenPoliceDeptSeeder.php @@ -13,6 +13,7 @@ class OpenPoliceDeptSeeder extends Seeder */ public function run() { + DB::table('OP_Departments')->insert([ 'DeptID' => 2, 'DeptName' => 'Haven Police Department', @@ -20672,7 +20673,8 @@ public function run() 'DeptAddressCounty' => 'Grant', 'DeptScoreOpenness' => '0', 'DeptTotOfficers' => '0', - 'DeptJurisdictionPopulation' => '0' + 'DeptJurisdictionPopulation' => '0', + 'DeptSubmissionProgress' => '1223' ]); DB::table('OP_Departments')->insert([ 'DeptID' => 1280, @@ -131585,7 +131587,6 @@ public function run() 'DeptID' => 8127, 'DeptName' => 'Cheverly Police Department', 'DeptSlug' => 'MD-cheverly-police-dept', - 'DeptType' => '0', 'DeptStatus' => '506', 'DeptVerified' => '2001-01-01 00:00:00', 'DeptAddress' => '6401 Forest Road', @@ -131593,9 +131594,10 @@ public function run() 'DeptAddressState' => 'MD', 'DeptAddressZip' => '20785', 'DeptAddressCounty' => 'Prince Georges', - 'DeptScoreOpenness' => '0', - 'DeptTotOfficers' => '0', - 'DeptJurisdictionPopulation' => '0' + 'DeptScoreOpenness' => '3', + 'DeptTotOfficers' => '340', + 'DeptJurisdictionPopulation' => '5450', + 'DeptSubmissionProgress' => '1223' ]); DB::table('OP_Departments')->insert([ 'DeptID' => 8128, @@ -175878,7 +175880,7 @@ public function run() 'DeptSlug' => 'MN-minneapolis-police-dept', 'DeptType' => '368', 'DeptStatus' => '506', - 'DeptVerified' => '2016-06-08 16:38:28', + 'DeptVerified' => '2018-12-03 00:00:00', 'DeptAddress' => '350 South 5Th Street, Room 130', 'DeptAddressCity' => 'Minneapolis', 'DeptAddressState' => 'MN', @@ -203446,7 +203448,8 @@ public function run() 'DeptAddressCounty' => 'Westchester', 'DeptScoreOpenness' => '0', 'DeptTotOfficers' => '0', - 'DeptJurisdictionPopulation' => '0' + 'DeptJurisdictionPopulation' => '0', + 'DeptSubmissionProgress' => '1223' ]); DB::table('OP_Departments')->insert([ 'DeptID' => 12565, @@ -292008,6 +292011,30 @@ public function run() 'DeptSubmissionProgress' => '1223', 'DeptUserID' => '389' ]); + DB::table('OP_Departments')->insert([ + 'DeptID' => 18134 + ]); + DB::table('OP_Departments')->insert([ + 'DeptID' => 18135, + 'DeptName' => 'asdfasdf', + 'DeptSlug' => 'AK-asdfasdf', + 'DeptType' => '0', + 'DeptStatus' => '1', + 'DeptAddressState' => 'AK', + 'DeptUserID' => '2' + ]); + DB::table('OP_Departments')->insert([ + 'DeptID' => 18136, + 'DeptName' => 'dicktown', + 'DeptSlug' => 'AK-dicktown', + 'DeptType' => '0', + 'DeptStatus' => '1', + 'DeptAddressState' => 'AK', + 'DeptUserID' => '2' + ]); + DB::table('OP_Departments')->insert([ + 'DeptID' => 18137 + ]); DB::table('OP_Oversight')->insert([ 'OverID' => 1, @@ -296508,11 +296535,6 @@ public function run() 'OverType' => '302', 'OverDeptID' => '17131' ]); - DB::table('OP_Oversight')->insert([ - 'OverID' => 271, - 'OverType' => '302', - 'OverDeptID' => '2187' - ]); DB::table('OP_Oversight')->insert([ 'OverID' => 275, 'OverType' => '302', @@ -296719,6 +296741,122 @@ public function run() 'OverType' => '302', 'OverDeptID' => '11535' ]); - + DB::table('OP_Oversight')->insert([ + 'OverID' => 325, + 'OverType' => '302', + 'OverDeptID' => '12564' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 326, + 'OverType' => '303', + 'OverDeptID' => '12866', + 'OverAgncName' => 'CUNY New York City College of Technology Police', + 'OverAddress' => '300 Jay Street', + 'OverAddressCity' => 'Brooklyn', + 'OverAddressState' => 'NY', + 'OverAddressZip' => '11201' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 327, + 'OverType' => '303', + 'OverDeptID' => '8127', + 'OverAgncName' => 'Cheverly Police Department', + 'OverWebsite' => 'https://www.montgomerycountymd.gov/pol/', + 'OverAddress' => '6401 Forest Road', + 'OverAddressCity' => 'Cheverly', + 'OverAddressState' => 'MD', + 'OverAddressZip' => '20785' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 328, + 'OverType' => '302', + 'OverDeptID' => '18127' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 329, + 'OverType' => '302', + 'OverDeptID' => '18128' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 330, + 'OverType' => '302', + 'OverDeptID' => '18129' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 331, + 'OverType' => '302', + 'OverDeptID' => '18130' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 332, + 'OverType' => '302', + 'OverDeptID' => '18131' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 333, + 'OverType' => '302', + 'OverDeptID' => '18132' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 334, + 'OverType' => '302', + 'OverDeptID' => '18133' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 335, + 'OverType' => '302', + 'OverDeptID' => '18134' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 336, + 'OverType' => '303', + 'OverDeptID' => '15431', + 'OverAgncName' => 'Nevada City Police Department', + 'OverAddress' => '317 Broad Street', + 'OverAddressCity' => 'Nevada City', + 'OverAddressState' => 'CA', + 'OverAddressZip' => '95959' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 337, + 'OverType' => '303', + 'OverDeptID' => '18124', + 'OverAgncName' => 'Not sure about department' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 338, + 'OverType' => '303', + 'OverUserID' => '2', + 'OverDeptID' => '18135', + 'OverAgncName' => 'asdfasdf' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 339, + 'OverType' => '303', + 'OverDeptID' => '16117', + 'OverAgncName' => 'Saint Mary\'s Police Dept.', + 'OverAddress' => 'Po Box 147', + 'OverAddressCity' => 'St. Mary\'s', + 'OverAddressState' => 'AK', + 'OverAddressZip' => '99658' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 340, + 'OverType' => '303', + 'OverUserID' => '2', + 'OverDeptID' => '18136', + 'OverAgncName' => 'dicktown' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 342, + 'OverType' => '302', + 'OverDeptID' => '8127' + ]); + DB::table('OP_Oversight')->insert([ + 'OverID' => 343, + 'OverType' => '302', + 'OverDeptID' => '1279' + ]); + } } diff --git a/src/Database/OpenPoliceSeeder.php b/src/Database/OpenPoliceSeeder.php index 095ad15..793eb57 100755 --- a/src/Database/OpenPoliceSeeder.php +++ b/src/Database/OpenPoliceSeeder.php @@ -21,8 +21,8 @@ public function run() 'DbName' => 'Open Police Complaints', 'DbDesc' => 'The nation\'s most trusted police complaints service', 'DbMission' => 'The purpose of the Open Police Complaints (OPC) database is to maintain the data we collect from users and to supply information that supports the work of police oversight professionals throughout the United States.', - 'DbTables' => '55', - 'DbFields' => '584' + 'DbTables' => '56', + 'DbFields' => '579' ]); DB::table('SL_Tables')->insert([ @@ -76,7 +76,7 @@ public function run() 'TblEng' => 'Administrators', 'TblDesc' => 'OPC staff and volunteers with special access permission to review and manage Complaints. This information allows OPC management to measure the performance of individual Administrators.', 'TblGroup' => 'People & Groups Involved In Complaint Process', - 'TblOrd' => '36', + 'TblOrd' => '37', 'TblExtend' => '0', 'TblNumFields' => '2', 'TblNumForeignKeys' => '2', @@ -93,9 +93,9 @@ public function run() 'TblGroup' => 'People & Groups Involved In Complaint Process', 'TblOrd' => '32', 'TblExtend' => '0', - 'TblNumFields' => '18', + 'TblNumFields' => '20', 'TblNumForeignKeys' => '2', - 'TblNumForeignIn' => '3' + 'TblNumForeignIn' => '4' ]); DB::table('SL_Tables')->insert([ 'TblID' => 111, @@ -214,7 +214,7 @@ public function run() 'TblGroup' => 'Complaint Data Tables', 'TblOrd' => '8', 'TblExtend' => '0', - 'TblNumFields' => '25', + 'TblNumFields' => '24', 'TblNumForeignKeys' => '2', 'TblNumForeignIn' => '1' ]); @@ -247,7 +247,7 @@ public function run() 'TblGroup' => 'Complaint Data Tables', 'TblOrd' => '13', 'TblExtend' => '0', - 'TblNumFields' => '9', + 'TblNumFields' => '10', 'TblNumForeignKeys' => '1' ]); DB::table('SL_Tables')->insert([ @@ -259,7 +259,7 @@ public function run() 'TblDesc' => 'Beyond default privileges for various types of system users, this table includes explicit privileges to enable access to specific system data. This is vital in allowing User IDs (which are associated with different user types) to be granted access to specific complaints or sets of complaints.', 'TblType' => 'Linking', 'TblGroup' => 'Internal Infrastructure', - 'TblOrd' => '47', + 'TblOrd' => '48', 'TblOpts' => '3', 'TblExtend' => '0', 'TblNumFields' => '4', @@ -275,7 +275,7 @@ public function run() 'TblNotes' => '(*This is just how Morgan might implement this need, but the details of its implementation should not effect the core OPC data structures*)', 'TblType' => 'Validation', 'TblGroup' => 'Logging Data Tables', - 'TblOrd' => '48', + 'TblOrd' => '49', 'TblExtend' => '0', 'TblNumFields' => '6', 'TblNumForeignKeys' => '1' @@ -320,9 +320,9 @@ public function run() 'TblGroup' => 'Complaint Data Tables', 'TblOrd' => '7', 'TblExtend' => '0', - 'TblNumFields' => '4', + 'TblNumFields' => '2', 'TblNumForeignKeys' => '1', - 'TblNumForeignIn' => '8' + 'TblNumForeignIn' => '7' ]); DB::table('SL_Tables')->insert([ 'TblID' => 138, @@ -334,8 +334,8 @@ public function run() 'TblGroup' => 'Complaint Data Tables', 'TblOrd' => '18', 'TblExtend' => '0', - 'TblNumFields' => '3', - 'TblNumForeignKeys' => '2' + 'TblNumFields' => '2', + 'TblNumForeignKeys' => '1' ]); DB::table('SL_Tables')->insert([ 'TblID' => 144, @@ -346,7 +346,7 @@ public function run() 'TblDesc' => 'Includes linkages between Police Departments and Complaints. This allows a single Complaint to be associated with more than one Police Department.', 'TblType' => 'Linking', 'TblGroup' => 'Complaint Linkage Tables', - 'TblOrd' => '37', + 'TblOrd' => '38', 'TblOpts' => '3', 'TblExtend' => '0', 'TblNumFields' => '2', @@ -361,7 +361,7 @@ public function run() 'TblDesc' => 'Includes linkages between Oversight Agencies involved in a Complaint. This allows us to track the progress of Complaints being investigated by more than one Oversight Agency.', 'TblType' => 'Linking', 'TblGroup' => 'Complaint Linkage Tables', - 'TblOrd' => '38', + 'TblOrd' => '39', 'TblOpts' => '3', 'TblExtend' => '0', 'TblNumFields' => '10', @@ -506,9 +506,9 @@ public function run() 'TblDesc' => 'This table includes linkages between vehicles and people. This allows a single vehicle to be associated with one or more Officer.', 'TblType' => 'Linking', 'TblGroup' => 'Complaint Linkage Tables', - 'TblOrd' => '42', + 'TblOrd' => '43', 'TblExtend' => '0', - 'TblNumFields' => '2', + 'TblNumFields' => '3', 'TblNumForeignKeys' => '2' ]); DB::table('SL_Tables')->insert([ @@ -532,7 +532,7 @@ public function run() 'TblEng' => 'Civilian-Allegation Links', 'TblType' => 'Linking', 'TblGroup' => 'Complaint Linkage Tables', - 'TblOrd' => '43', + 'TblOrd' => '44', 'TblOpts' => '3', 'TblExtend' => '0', 'TblNumFields' => '2', @@ -546,7 +546,7 @@ public function run() 'TblEng' => 'Officer-Allegation Links', 'TblType' => 'Linking', 'TblGroup' => 'Complaint Linkage Tables', - 'TblOrd' => '40', + 'TblOrd' => '41', 'TblOpts' => '3', 'TblExtend' => '0', 'TblNumFields' => '2', @@ -561,7 +561,7 @@ public function run() 'TblDesc' => 'Includes linkages between Officers involved in an Incident with key events that happened during an Incident. Each record links one Officer with one Event (a Stop, Search, Property, or Use of Force).', 'TblType' => 'Linking', 'TblGroup' => 'Complaint Linkage Tables', - 'TblOrd' => '41', + 'TblOrd' => '42', 'TblOpts' => '3', 'TblExtend' => '0', 'TblNumFields' => '2', @@ -575,7 +575,7 @@ public function run() 'TblEng' => 'Civilian-Event Links', 'TblType' => 'Linking', 'TblGroup' => 'Complaint Linkage Tables', - 'TblOrd' => '44', + 'TblOrd' => '45', 'TblOpts' => '3', 'TblExtend' => '0', 'TblNumFields' => '2', @@ -590,7 +590,7 @@ public function run() 'TblDesc' => 'This table includes linkages between vehicles and people. This allows a single vehicle to be associated with one or more Civilian.', 'TblType' => 'Linking', 'TblGroup' => 'Complaint Linkage Tables', - 'TblOrd' => '45', + 'TblOrd' => '46', 'TblExtend' => '0', 'TblNumFields' => '3', 'TblNumForeignKeys' => '2' @@ -631,7 +631,7 @@ public function run() 'TblName' => 'users', 'TblEng' => 'Users', 'TblDesc' => 'This represents the Laravel Users table, but will not actually be implemented by SurvLoop as part of the database installation.', - 'TblOrd' => '49', + 'TblOrd' => '50', 'TblExtend' => '0', 'TblNumForeignIn' => '15' ]); @@ -643,7 +643,7 @@ public function run() 'TblEng' => 'Site Visitors', 'TblDesc' => 'Represent user sessions while visiting the web site. This is useful for tracking visitor responses, searches, etc.', 'TblGroup' => 'Internal Infrastructure', - 'TblOrd' => '46', + 'TblOrd' => '47', 'TblExtend' => '0', 'TblNumFields' => '7', 'TblNumForeignKeys' => '1' @@ -684,7 +684,7 @@ public function run() 'TblDesc' => 'Includes linkages between Police Departments and Complaints. This allows a single Complaint to be associated with more than one Police Department.', 'TblType' => 'Linking', 'TblGroup' => 'Complaint Linkage Tables', - 'TblOrd' => '39', + 'TblOrd' => '40', 'TblExtend' => '0', 'TblNumFields' => '2', 'TblNumForeignKeys' => '2' @@ -698,7 +698,7 @@ public function run() 'TblDesc' => 'Each record stores a copy of individual edits made to unique records in the Departments table.', 'TblType' => 'Validation', 'TblGroup' => 'Record Edit Histories', - 'TblOrd' => '50', + 'TblOrd' => '51', 'TblExtend' => '111', 'TblNumFields' => '2', 'TblNumForeignIn' => '1' @@ -712,7 +712,7 @@ public function run() 'TblDesc' => 'Each record stores a copy of individual edits made to unique records in the Oversight table.', 'TblType' => 'Validation', 'TblGroup' => 'Record Edit Histories', - 'TblOrd' => '51', + 'TblOrd' => '52', 'TblExtend' => '106', 'TblNumFields' => '5', 'TblNumForeignKeys' => '1' @@ -726,7 +726,7 @@ public function run() 'TblDesc' => 'Each record stores daily statistics for volunteer activity.', 'TblType' => 'Validation', 'TblGroup' => 'Internal Volunteer Data', - 'TblOrd' => '52', + 'TblOrd' => '53', 'TblExtend' => '0', 'TblNumFields' => '15' ]); @@ -738,7 +738,7 @@ public function run() 'TblEng' => 'Volunteers: User Info', 'TblDesc' => 'Each record stores extra information related to one volunteer User.', 'TblGroup' => 'Internal Volunteer Data', - 'TblOrd' => '53', + 'TblOrd' => '54', 'TblExtend' => '0', 'TblNumFields' => '8', 'TblNumForeignKeys' => '2' @@ -751,7 +751,7 @@ public function run() 'TblEng' => 'Complaint Review', 'TblDesc' => 'Each record stores feedback from a system admin, the complaint owner, or the department.', 'TblGroup' => 'Internal Volunteer Data', - 'TblOrd' => '54', + 'TblOrd' => '55', 'TblExtend' => '0', 'TblNumFields' => '20', 'TblNumForeignKeys' => '2' @@ -779,7 +779,7 @@ public function run() 'TblDesc' => 'Partners can specify one or more sets of filters to define one type of case.', 'TblType' => 'Linking', 'TblGroup' => 'People & Groups Involved In Complaint Process', - 'TblOrd' => '34', + 'TblOrd' => '36', 'TblExtend' => '0', 'TblNumFields' => '2', 'TblNumForeignKeys' => '1' @@ -793,7 +793,7 @@ public function run() 'TblDesc' => 'Partners can specify one or more sets of filters for types of complaints that match their needs. Each record links one complaint case profile to as many complaint filters as needed. Information in this table enables us to alert Partners to the best matches.', 'TblType' => 'Subset', 'TblGroup' => 'People & Groups Involved In Complaint Process', - 'TblOrd' => '33', + 'TblOrd' => '35', 'TblExtend' => '0', 'TblNumFields' => '1', 'TblNumForeignKeys' => '1', @@ -808,7 +808,21 @@ public function run() 'TblDesc' => 'Partners can specify one or more states where there currently work. Information in this table enables us to alert Partners to the best matches they can actually work with.', 'TblType' => 'Linking', 'TblGroup' => 'People & Groups Involved In Complaint Process', - 'TblOrd' => '35', + 'TblOrd' => '33', + 'TblExtend' => '0', + 'TblNumFields' => '2', + 'TblNumForeignKeys' => '1' + ]); + DB::table('SL_Tables')->insert([ + 'TblID' => 182, + 'TblDatabase' => '1', + 'TblAbbr' => 'PrtCap', + 'TblName' => 'PartnerCapac', + 'TblEng' => 'Partner Capacities', + 'TblDesc' => 'Partners can specify one or more sets of Capacities to list for their organization. These are important for site visitors and power users to filter for the most helpful organizations for a given situation.', + 'TblType' => 'Subset', + 'TblGroup' => 'People & Groups Involved In Complaint Process', + 'TblOrd' => '34', 'TblExtend' => '0', 'TblNumFields' => '2', 'TblNumForeignKeys' => '1' @@ -2409,7 +2423,7 @@ public function run() 'FldID' => 369, 'FldDatabase' => '1', 'FldTable' => '123', - 'FldOrd' => '7', + 'FldOrd' => '6', 'FldSpecSource' => '0', 'FldName' => 'NoChargesFiled', 'FldEng' => 'Were all charges dropped upon release?', @@ -3820,10 +3834,9 @@ public function run() 'FldSpecType' => 'Replica', 'FldSpecSource' => '868', 'FldName' => 'Age', - 'FldEng' => 'Age', + 'FldEng' => 'Age Range', 'FldDesc' => 'Estimated age in years of a Civilian or Officer. This information is used to verify a Civilian or Officer\'s identity.', 'FldNotes' => 'Because the "Date of Birth" field will determine Complainant\'s age. This field should become visible only if a Civilian\'s age is unknown. The "Harmonised Standard 3" age ranges presented here: https://meta.wikimedia.org/wiki/Survey_best_practices#Age', - 'FldForeignTable' => '0', 'FldForeignMin' => '11', 'FldForeignMax' => '11', 'FldForeign2Min' => '0', @@ -3833,8 +3846,8 @@ public function run() 'FldDataType' => 'Numeric', 'FldDataLength' => '3', 'FldCharSupport' => ',Numbers,', - 'FldKeyStruct' => 'Simple', - 'FldCompareSame' => '130' + 'FldNullSupport' => '0', + 'FldCompareSame' => '878800' ]); DB::table('SL_Fields')->insert([ 'FldID' => 632, @@ -4304,7 +4317,7 @@ public function run() 'FldID' => 785, 'FldDatabase' => '1', 'FldTable' => '102', - 'FldOrd' => '16', + 'FldOrd' => '15', 'FldSpecType' => 'Replica', 'FldSpecSource' => '918', 'FldName' => 'CameraRecord', @@ -4643,29 +4656,6 @@ public function run() 'FldCompareSame' => '130', 'FldOpts' => '13' ]); - DB::table('SL_Fields')->insert([ - 'FldID' => 818, - 'FldDatabase' => '1', - 'FldTable' => '137', - 'FldOrd' => '1', - 'FldSpecSource' => '0', - 'FldName' => 'Order', - 'FldEng' => 'Event Order', - 'FldDesc' => 'The is the chronological rank of events within an incident, identifying the order in which they occurred. This is vital to presenting the Stops, Searches, Uses of Force, and Arrests in the order they occurred during the Incident.', - 'FldForeignTable' => '0', - 'FldForeignMin' => '11', - 'FldForeignMax' => '11', - 'FldForeign2Min' => '0', - 'FldForeign2Max' => '0', - 'FldType' => 'INT', - 'FldDataType' => 'Numeric', - 'FldDataLength' => '11', - 'FldCharSupport' => ',Numbers,', - 'FldKeyStruct' => 'Simple', - 'FldEditRule' => 'NowAllowed', - 'FldCompareSame' => '6', - 'FldOpts' => '13' - ]); DB::table('SL_Fields')->insert([ 'FldID' => 823, 'FldDatabase' => '1', @@ -6509,16 +6499,15 @@ public function run() 'FldName' => 'Nickname', 'FldEng' => 'Nickname', 'FldDesc' => 'Preferred first name of persons that we may use in less-formal communications with them. Important for maintaining cordial relationships with these key contacts.', - 'FldNotes' => 'Use only if selected. Field may otherwise be left blank', - 'FldForeignTable' => '0', + 'FldNotes' => 'Use only if selected. Field may otherwise be left blank. For people directly involved in a police incident (Victims, Witnesses, Officers), the Nickname field is really for the sake of user experience while taking the survey.', 'FldForeignMin' => '0', 'FldForeignMax' => '0', 'FldForeign2Min' => '0', 'FldForeign2Max' => '0', 'FldDataLength' => '0', - 'FldCharSupport' => ',Letters,Keyboard,Numbers,', - 'FldCompareSame' => '6', - 'FldOpts' => '7' + 'FldCharSupport' => ',Letters,Numbers,Keyboard,', + 'FldNullSupport' => '0', + 'FldCompareSame' => '6' ]); DB::table('SL_Fields')->insert([ 'FldID' => 977, @@ -7215,7 +7204,7 @@ public function run() 'FldID' => 1029, 'FldDatabase' => '1', 'FldTable' => '102', - 'FldOrd' => '8', + 'FldOrd' => '9', 'FldSpecSource' => '0', 'FldName' => 'Occupation', 'FldEng' => 'Occupation', @@ -8010,7 +7999,7 @@ public function run() 'FldID' => 1078, 'FldDatabase' => '1', 'FldTable' => '102', - 'FldOrd' => '11', + 'FldOrd' => '8', 'FldSpecSource' => '0', 'FldName' => 'Resident', 'FldEng' => 'Civilian resident of jurisdiction?', @@ -8029,8 +8018,8 @@ public function run() DB::table('SL_Fields')->insert([ 'FldID' => 1079, 'FldDatabase' => '1', - 'FldTable' => '121', - 'FldOrd' => '11', + 'FldTable' => '102', + 'FldOrd' => '21', 'FldSpecSource' => '0', 'FldName' => 'CitationNumber', 'FldEng' => 'Citation ID#', @@ -8086,31 +8075,11 @@ public function run() 'FldCharSupport' => ',Numbers,', 'FldCompareSame' => '130' ]); - DB::table('SL_Fields')->insert([ - 'FldID' => 1083, - 'FldDatabase' => '1', - 'FldTable' => '138', - 'FldOrd' => '1', - 'FldSpecSource' => '0', - 'FldName' => 'EventID', - 'FldEng' => 'Event Sequence ID', - 'FldDesc' => 'The unique number of the Event Sequence record related to this Arrest or Stop Charge.', - 'FldForeignTable' => '137', - 'FldForeignMin' => '0', - 'FldForeignMax' => 'N', - 'FldType' => 'INT', - 'FldDataType' => 'Numeric', - 'FldDataLength' => '0', - 'FldCharSupport' => ',Numbers,', - 'FldKeyType' => ',Foreign,', - 'FldNullSupport' => '0', - 'FldCompareSame' => '878800' - ]); DB::table('SL_Fields')->insert([ 'FldID' => 1084, 'FldDatabase' => '1', 'FldTable' => '102', - 'FldOrd' => '20', + 'FldOrd' => '19', 'FldSpecSource' => '0', 'FldName' => 'GivenCitation', 'FldEng' => 'Given Citation (Not Arrested)', @@ -8129,7 +8098,7 @@ public function run() 'FldID' => 1085, 'FldDatabase' => '1', 'FldTable' => '102', - 'FldOrd' => '21', + 'FldOrd' => '20', 'FldSpecSource' => '0', 'FldName' => 'GivenWarning', 'FldEng' => 'Given Written Warning', @@ -8152,15 +8121,14 @@ public function run() 'FldSpecSource' => '0', 'FldName' => 'ChargesOther', 'FldEng' => 'Other charges filed?', - 'FldDesc' => 'Citation or arrest charge(s) an Officer issued a Subject as a result of this Stop. Important for evaluating wrongful citation Allegations and tracking citation trends.', + 'FldDesc' => 'Citation charge(s) an Officer issued a Subject as a result of this Stop. Important for evaluating wrongful citation Allegations and tracking citation trends.', 'FldForeignMin' => 'N', 'FldForeignMax' => 'N', 'FldForeign2Min' => 'N', 'FldForeign2Max' => 'N', 'FldType' => 'TEXT', 'FldDataLength' => '0', - 'FldCharSupport' => ',Letters,Numbers,Keyboard,', - 'FldNullSupport' => '0' + 'FldCharSupport' => ',Letters,Numbers,Keyboard,' ]); DB::table('SL_Fields')->insert([ 'FldID' => 1087, @@ -8878,7 +8846,7 @@ public function run() 'FldID' => 1126, 'FldDatabase' => '1', 'FldTable' => '102', - 'FldOrd' => '9', + 'FldOrd' => '10', 'FldSpecSource' => '0', 'FldName' => 'HadVehicle', 'FldEng' => 'Using Vehicle at Start', @@ -9208,15 +9176,17 @@ public function run() 'FldName' => 'Role', 'FldEng' => 'Vehicle Role', 'FldDesc' => 'When a Vehicle is associated with multiple Civilians, this information is important for identifier for which person was driving a Vehicle.', - 'FldForeignTable' => '0', 'FldForeignMin' => 'N', 'FldForeignMax' => 'N', 'FldForeign2Min' => 'N', 'FldForeign2Max' => 'N', - 'FldValues' => 'Driver;Passenger', - 'FldDataLength' => '10', - 'FldCharSupport' => ',Letters,', - 'FldCompareSame' => '130' + 'FldValues' => 'Def::Vehicle Roles', + 'FldType' => 'INT', + 'FldDataType' => 'Numeric', + 'FldDataLength' => '0', + 'FldCharSupport' => ',Numbers,', + 'FldNullSupport' => '0', + 'FldCompareSame' => '878800' ]); DB::table('SL_Fields')->insert([ 'FldID' => 1148, @@ -9295,25 +9265,6 @@ public function run() 'FldCharSupport' => ',', 'FldCompareSame' => '878800' ]); - DB::table('SL_Fields')->insert([ - 'FldID' => 1155, - 'FldDatabase' => '1', - 'FldTable' => '137', - 'FldOrd' => '3', - 'FldSpecSource' => '0', - 'FldName' => 'UserFinished', - 'FldEng' => 'User Finished Event', - 'FldDesc' => 'Internally indicates whether or not the Complainant completed the final questions related to a Stop, Search, Use of Force, or Arrest. This is important for determining when the Complainant has completed all dynamically generated sections describing \'What Happened\'.', - 'FldForeignMin' => '0', - 'FldForeignMax' => '0', - 'FldForeign2Min' => '0', - 'FldForeign2Max' => '0', - 'FldValues' => 'Y;N', - 'FldDataLength' => '1', - 'FldCharSupport' => ',Letters,', - 'FldNullSupport' => '0', - 'FldCompareSame' => '878800' - ]); DB::table('SL_Fields')->insert([ 'FldID' => 1157, 'FldDatabase' => '1', @@ -9375,7 +9326,7 @@ public function run() 'FldID' => 1166, 'FldDatabase' => '1', 'FldTable' => '123', - 'FldOrd' => '8', + 'FldOrd' => '7', 'FldSpecSource' => '0', 'FldName' => 'Strip', 'FldEng' => 'Strip search done at station?', @@ -9394,7 +9345,7 @@ public function run() 'FldID' => 1167, 'FldDatabase' => '1', 'FldTable' => '123', - 'FldOrd' => '9', + 'FldOrd' => '8', 'FldSpecSource' => '0', 'FldName' => 'StripSearchDesc', 'FldEng' => 'Strip search description', @@ -9513,7 +9464,7 @@ public function run() 'FldID' => 1173, 'FldDatabase' => '1', 'FldTable' => '102', - 'FldOrd' => '10', + 'FldOrd' => '11', 'FldSpecSource' => '0', 'FldName' => 'Chase', 'FldEng' => 'Was subject chased by police?', @@ -9537,15 +9488,16 @@ public function run() 'FldName' => 'ChaseType', 'FldEng' => 'Type of chase', 'FldDesc' => 'Indicates whether the Subject\'s chase took place on foot, in vehicles, or both. Important for evaluating Allegations of Excessive Force and tracking Force trends.', - 'FldForeignTable' => '0', 'FldForeignMin' => '0', 'FldForeignMax' => '0', 'FldForeign2Min' => '0', 'FldForeign2Max' => '0', + 'FldValues' => 'Def::Chase Types', 'FldType' => 'INT', 'FldDataType' => 'Numeric', 'FldDataLength' => '0', 'FldCharSupport' => ',Numbers,', + 'FldNullSupport' => '0', 'FldCompareSame' => '878800' ]); DB::table('SL_Fields')->insert([ @@ -9635,46 +9587,27 @@ public function run() 'FldName' => 'BodyWeapon', 'FldEng' => 'Civilian body weapon use against officer', 'FldDesc' => 'The Definition ID number of the type of Body Weapon used by the Civilian against the Officer. Vital for associating multiple Body Weapons with a single Use of Force during an Incident.', - 'FldForeignTable' => '0', 'FldForeignMin' => '0', 'FldForeignMax' => '0', 'FldForeign2Min' => '0', 'FldForeign2Max' => '0', + 'FldValues' => 'Def::Force Type - Body Weapons', 'FldType' => 'INT', 'FldDataType' => 'Numeric', 'FldDataLength' => '0', 'FldCharSupport' => ',Numbers,', - 'FldCompareSame' => '878800' - ]); - DB::table('SL_Fields')->insert([ - 'FldID' => 1180, - 'FldDatabase' => '1', - 'FldTable' => '102', - 'FldOrd' => '13', - 'FldSpecSource' => '0', - 'FldName' => 'VictimHadWeapon', - 'FldEng' => 'Did subject have weapon?', - 'FldDesc' => 'Indicates whether or not the Victim of this Use of Force seemed to have a weapon at the time of the Incident. This is important for determining if the Officer used Unreasonable Force.', - 'FldForeignTable' => '0', - 'FldForeignMin' => '0', - 'FldForeignMax' => '0', - 'FldForeign2Min' => '0', - 'FldForeign2Max' => '0', - 'FldValues' => 'Y;N;?', - 'FldDataLength' => '1', - 'FldCharSupport' => ',Letters,Keyboard,', + 'FldNullSupport' => '0', 'FldCompareSame' => '878800' ]); DB::table('SL_Fields')->insert([ 'FldID' => 1181, 'FldDatabase' => '1', 'FldTable' => '102', - 'FldOrd' => '14', + 'FldOrd' => '13', 'FldSpecSource' => '0', 'FldName' => 'VictimWhatWeapon', - 'FldEng' => 'Weapon Type', - 'FldDesc' => 'Indicates what type of weapon the Victim of this Use of Force had at the time of the Incident. This is important for determining if the Officer used Unreasonable Force.', - 'FldForeignTable' => '0', + 'FldEng' => 'Did subject have weapon?', + 'FldDesc' => 'Indicates what type of weapon the Victim of this Use of Force had at the time of the Incident (including \'No weapon\' and \'Not sure\'). This is important for determining if the Officer used Unreasonable Force.', 'FldForeignMin' => '0', 'FldForeignMax' => '0', 'FldForeign2Min' => '0', @@ -9684,13 +9617,14 @@ public function run() 'FldDataType' => 'Numeric', 'FldDataLength' => '0', 'FldCharSupport' => ',Numbers,', + 'FldNullSupport' => '0', 'FldCompareSame' => '878800' ]); DB::table('SL_Fields')->insert([ 'FldID' => 1182, 'FldDatabase' => '1', 'FldTable' => '102', - 'FldOrd' => '15', + 'FldOrd' => '14', 'FldSpecSource' => '0', 'FldName' => 'VictimUseWeapon', 'FldEng' => 'Did subject use the weapon?', @@ -10130,7 +10064,7 @@ public function run() 'FldID' => 1373, 'FldDatabase' => '1', 'FldTable' => '102', - 'FldOrd' => '17', + 'FldOrd' => '16', 'FldSpecSource' => '0', 'FldName' => 'UsedProfanity', 'FldEng' => 'Civilian used profanity?', @@ -11173,7 +11107,7 @@ public function run() 'FldID' => 1436, 'FldDatabase' => '1', 'FldTable' => '102', - 'FldOrd' => '18', + 'FldOrd' => '17', 'FldSpecSource' => '0', 'FldName' => 'HasInjury', 'FldEng' => 'Did civilian receive injuries from use of force?', @@ -11193,7 +11127,7 @@ public function run() 'FldID' => 1437, 'FldDatabase' => '1', 'FldTable' => '102', - 'FldOrd' => '19', + 'FldOrd' => '18', 'FldSpecSource' => '0', 'FldName' => 'HasInjuryCare', 'FldEng' => 'Received medical care?', @@ -12610,112 +12544,6 @@ public function run() 'FldNullSupport' => '0', 'FldCompareSame' => '878800' ]); - DB::table('SL_Fields')->insert([ - 'FldID' => 1514, - 'FldDatabase' => '1', - 'FldTable' => '3', - 'FldSpecType' => 'Replica', - 'FldName' => 'UserID', - 'FldEng' => 'User ID', - 'FldDesc' => 'Indicates the unique User ID number of the User owning the data stored in this record for this Experience.', - 'FldForeignTable' => '167', - 'FldForeignMin' => '11', - 'FldForeignMax' => '11', - 'FldForeign2Min' => '11', - 'FldForeign2Max' => '11', - 'FldType' => 'INT', - 'FldDataType' => 'Numeric', - 'FldCharSupport' => ',Numbers,', - 'FldKeyType' => ',Foreign,', - 'FldOpts' => '39' - ]); - DB::table('SL_Fields')->insert([ - 'FldID' => 1515, - 'FldDatabase' => '1', - 'FldTable' => '3', - 'FldSpecType' => 'Replica', - 'FldName' => 'SubmissionProgress', - 'FldEng' => 'Experience Node Progress', - 'FldDesc' => 'Indicates the unique Node ID number of the last Experience Node loaded during this User\'s Experience.', - 'FldForeignMin' => '11', - 'FldForeignMax' => '11', - 'FldForeign2Min' => '11', - 'FldForeign2Max' => '11', - 'FldType' => 'INT', - 'FldDataType' => 'Numeric', - 'FldCharSupport' => ',Numbers,', - 'FldOpts' => '39' - ]); - DB::table('SL_Fields')->insert([ - 'FldID' => 1516, - 'FldDatabase' => '1', - 'FldTable' => '3', - 'FldSpecType' => 'Replica', - 'FldName' => 'TreeVersion', - 'FldEng' => 'Tree Version Number', - 'FldDesc' => 'Stores the current version number of this User Experience, important for tracking bugs.', - 'FldForeignMin' => '11', - 'FldForeignMax' => '11', - 'FldForeign2Min' => '11', - 'FldForeign2Max' => '11', - 'FldOpts' => '39' - ]); - DB::table('SL_Fields')->insert([ - 'FldID' => 1517, - 'FldDatabase' => '1', - 'FldTable' => '3', - 'FldSpecType' => 'Replica', - 'FldName' => 'VersionAB', - 'FldEng' => 'A/B Testing Version', - 'FldDesc' => 'Stores a complex string reflecting all A/B Testing variations in effect at the time of this User\'s Experience of this Node.', - 'FldForeignMin' => '11', - 'FldForeignMax' => '11', - 'FldForeign2Min' => '11', - 'FldForeign2Max' => '11', - 'FldOpts' => '39' - ]); - DB::table('SL_Fields')->insert([ - 'FldID' => 1518, - 'FldDatabase' => '1', - 'FldTable' => '3', - 'FldSpecType' => 'Replica', - 'FldName' => 'UniqueStr', - 'FldEng' => 'Unique String For Record', - 'FldDesc' => 'This unique string is for cases when including the record ID number is not appropriate.', - 'FldForeignMin' => '11', - 'FldForeignMax' => '11', - 'FldForeign2Min' => '11', - 'FldForeign2Max' => '11', - 'FldOpts' => '39' - ]); - DB::table('SL_Fields')->insert([ - 'FldID' => 1519, - 'FldDatabase' => '1', - 'FldTable' => '3', - 'FldSpecType' => 'Replica', - 'FldName' => 'IPaddy', - 'FldEng' => 'IP Address', - 'FldDesc' => 'Encrypted IP address of the current user.', - 'FldForeignMin' => '11', - 'FldForeignMax' => '11', - 'FldForeign2Min' => '11', - 'FldForeign2Max' => '11', - 'FldOpts' => '39' - ]); - DB::table('SL_Fields')->insert([ - 'FldID' => 1520, - 'FldDatabase' => '1', - 'FldTable' => '3', - 'FldSpecType' => 'Replica', - 'FldName' => 'IsMobile', - 'FldEng' => 'Using Mobile Device', - 'FldDesc' => 'Indicates whether or not the current user is interacting via a mobile deviced.', - 'FldForeignMin' => '11', - 'FldForeignMax' => '11', - 'FldForeign2Min' => '11', - 'FldForeign2Max' => '11', - 'FldOpts' => '39' - ]); DB::table('SL_Fields')->insert([ 'FldID' => 1521, 'FldDatabase' => '1', @@ -12842,7 +12670,7 @@ public function run() 'FldID' => 1539, 'FldDatabase' => '1', 'FldTable' => '110', - 'FldOrd' => '13', + 'FldOrd' => '15', 'FldSpecType' => 'Replica', 'FldName' => 'SubmissionProgress', 'FldEng' => 'Experience Node Progress', @@ -12860,7 +12688,7 @@ public function run() 'FldID' => 1540, 'FldDatabase' => '1', 'FldTable' => '110', - 'FldOrd' => '15', + 'FldOrd' => '17', 'FldSpecType' => 'Replica', 'FldName' => 'TreeVersion', 'FldEng' => 'Tree Version Number', @@ -12875,7 +12703,7 @@ public function run() 'FldID' => 1541, 'FldDatabase' => '1', 'FldTable' => '110', - 'FldOrd' => '12', + 'FldOrd' => '14', 'FldSpecType' => 'Replica', 'FldName' => 'VersionAB', 'FldEng' => 'A/B Testing Version', @@ -12890,7 +12718,7 @@ public function run() 'FldID' => 1542, 'FldDatabase' => '1', 'FldTable' => '110', - 'FldOrd' => '16', + 'FldOrd' => '18', 'FldSpecType' => 'Replica', 'FldName' => 'UniqueStr', 'FldEng' => 'Unique String For Record', @@ -12905,7 +12733,7 @@ public function run() 'FldID' => 1543, 'FldDatabase' => '1', 'FldTable' => '110', - 'FldOrd' => '14', + 'FldOrd' => '16', 'FldSpecType' => 'Replica', 'FldName' => 'IPaddy', 'FldEng' => 'IP Address', @@ -12920,7 +12748,7 @@ public function run() 'FldID' => 1544, 'FldDatabase' => '1', 'FldTable' => '110', - 'FldOrd' => '17', + 'FldOrd' => '19', 'FldSpecType' => 'Replica', 'FldName' => 'IsMobile', 'FldEng' => 'Using Mobile Device', @@ -12967,8 +12795,8 @@ public function run() 'FldForeignMax' => 'N', 'FldForeign2Min' => 'N', 'FldForeign2Max' => 'N', + 'FldType' => 'TEXT', 'FldDataLength' => '0', - 'FldCharSupport' => ',Letters,Numbers,Keyboard,', 'FldKeyType' => ',', 'FldNullSupport' => '0' ]); @@ -12995,7 +12823,7 @@ public function run() 'FldID' => 1548, 'FldDatabase' => '1', 'FldTable' => '110', - 'FldOrd' => '11', + 'FldOrd' => '13', 'FldSpecSource' => '0', 'FldName' => 'Alerts', 'FldEng' => 'Referral Alert Perference', @@ -13054,7 +12882,7 @@ public function run() 'FldID' => 1551, 'FldDatabase' => '1', 'FldTable' => '110', - 'FldOrd' => '10', + 'FldOrd' => '12', 'FldSpecSource' => '0', 'FldName' => 'PhotoUrl', 'FldEng' => 'Photo Url', @@ -13089,6 +12917,122 @@ public function run() 'FldNullSupport' => '0', 'FldCompareSame' => '878800' ]); + DB::table('SL_Fields')->insert([ + 'FldID' => 1554, + 'FldDatabase' => '1', + 'FldTable' => '123', + 'FldOrd' => '9', + 'FldSpecSource' => '0', + 'FldName' => 'ChargesOther', + 'FldEng' => 'Other charges filed?', + 'FldDesc' => 'Arrest charge(s) an Officer issued a Subject as a result of this Stop. Important for evaluating wrongful arrest and retaliatory Allegations and tracking citation trends.', + 'FldForeignMin' => 'N', + 'FldForeignMax' => 'N', + 'FldForeign2Min' => 'N', + 'FldForeign2Max' => 'N', + 'FldType' => 'TEXT', + 'FldDataLength' => '0', + 'FldCharSupport' => ',Letters,Numbers,Keyboard,', + 'FldEditRule' => '' + ]); + DB::table('SL_Fields')->insert([ + 'FldID' => 1555, + 'FldDatabase' => '1', + 'FldTable' => '110', + 'FldOrd' => '10', + 'FldSpecSource' => '0', + 'FldName' => 'HelpReqs', + 'FldEng' => 'Assistance Requirements', + 'FldDesc' => 'A brief description of the organization\'s requirements for requesting assistance. This is an integral component of a Customer\'s profile and intake process.', + 'FldForeignMin' => 'N', + 'FldForeignMax' => 'N', + 'FldForeign2Min' => 'N', + 'FldForeign2Max' => 'N', + 'FldType' => 'TEXT', + 'FldDataLength' => '0', + 'FldKeyType' => ',', + 'FldNullSupport' => '0' + ]); + DB::table('SL_Fields')->insert([ + 'FldID' => 1556, + 'FldDatabase' => '1', + 'FldTable' => '182', + 'FldSpecSource' => '0', + 'FldName' => 'PartID', + 'FldEng' => 'Part ID', + 'FldDesc' => 'The primary Partner record number connected to a Capacity. Important for filtering organizations for a given situation.', + 'FldForeignTable' => '110', + 'FldForeignMin' => '0', + 'FldForeignMax' => 'N', + 'FldType' => 'INT', + 'FldDataType' => 'Numeric', + 'FldDataLength' => '0', + 'FldCharSupport' => ',Numbers,', + 'FldKeyType' => ',Foreign,', + 'FldNullSupport' => '0', + 'FldCompareSame' => '878800' + ]); + DB::table('SL_Fields')->insert([ + 'FldID' => 1557, + 'FldDatabase' => '1', + 'FldTable' => '182', + 'FldOrd' => '1', + 'FldSpecSource' => '0', + 'FldName' => 'Capacity', + 'FldEng' => 'Organizational Capacity', + 'FldDesc' => 'Indicates the Capacity with which this Partner Organization can potentially help OPC users. Important for associating multiple Capacities with one Partner.', + 'FldForeignMin' => 'N', + 'FldForeignMax' => 'N', + 'FldForeign2Min' => 'N', + 'FldForeign2Max' => 'N', + 'FldValues' => 'Def::Organization Capacities', + 'FldType' => 'INT', + 'FldDataType' => 'Numeric', + 'FldDataLength' => '0', + 'FldCharSupport' => ',Numbers,', + 'FldKeyType' => ',', + 'FldNullSupport' => '0', + 'FldCompareSame' => '54925' + ]); + DB::table('SL_Fields')->insert([ + 'FldID' => 1558, + 'FldDatabase' => '1', + 'FldTable' => '110', + 'FldOrd' => '11', + 'FldSpecSource' => '0', + 'FldName' => 'GeoDesc', + 'FldEng' => 'Description of Geographic Service Area', + 'FldDesc' => 'Indicates whatever description the Partner finds appropriate to more specifically describe the geographic area where they offer services. Important for enabling all site Users to find better matches for the help they need.', + 'FldForeignMin' => 'N', + 'FldForeignMax' => 'N', + 'FldForeign2Min' => 'N', + 'FldForeign2Max' => 'N', + 'FldDataLength' => '0', + 'FldKeyType' => ',', + 'FldNullSupport' => '0' + ]); + DB::table('SL_Fields')->insert([ + 'FldID' => 1560, + 'FldDatabase' => '1', + 'FldTable' => '155', + 'FldOrd' => '2', + 'FldSpecSource' => '0', + 'FldName' => 'Role', + 'FldEng' => 'Vehicle Role', + 'FldDesc' => 'When a Vehicle is associated with multiple Officers, this information can be important for identifier for which person was driving a Vehicle.', + 'FldForeignMin' => 'N', + 'FldForeignMax' => 'N', + 'FldForeign2Min' => 'N', + 'FldForeign2Max' => 'N', + 'FldValues' => 'Def::Vehicle Roles', + 'FldType' => 'INT', + 'FldDataType' => 'Numeric', + 'FldDataLength' => '0', + 'FldCharSupport' => ',Numbers,', + 'FldKeyType' => ',', + 'FldNullSupport' => '0', + 'FldCompareSame' => '878800' + ]); DB::table('SL_Definitions')->insert([ 'DefID' => 1, @@ -13230,7 +13174,7 @@ public function run() 'DefDatabase' => '1', 'DefSet' => 'System Settings', 'DefSubset' => 'signup-instruct', - 'DefDescription' => '

Sign Up

' + 'DefDescription' => '

Here you can finish, review, or update your complaint. Volunteers also login here.

' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 21, @@ -13329,7 +13273,7 @@ public function run() 'DefDatabase' => '1', 'DefSet' => 'System Settings', 'DefSubset' => 'app-license-img', - 'DefDescription' => '/survloop/creative-commons-by-sa-88x31.png' + 'DefDescription' => '/survloop/uploads/creative-commons-by-sa-88x31.png' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 101, @@ -14322,7 +14266,7 @@ public function run() 'DefSubset' => 'Evidence Types', 'DefOrder' => '3', 'DefIsActive' => '0', - 'DefValue' => 'Diagram' + 'DefValue' => 'Sketch/Diagram' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 225, @@ -14353,8 +14297,8 @@ public function run() 'DefSubset' => 'Force Type', 'DefOrder' => '2', 'DefIsActive' => '0', - 'DefValue' => 'Body Weapons (Punch, Kick, etc)', - 'DefDescription' => 'An officer\'s use of his/her limbs in a manner similar to an impact weapon, e.g., using his/her hands to punch, hit or slap a person.' + 'DefValue' => 'Body Weapons (Punch, Kick, Elbow, etc)', + 'DefDescription' => 'An officer\'s use of his/her limbs in a manner similar to an impact weapon. Body Weapons include Fist (Closed Hand), Slap (Open Hand), Kick (Feet), Knee, Elbow, Head.' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 229, @@ -14657,8 +14601,8 @@ public function run() 'DefSubset' => 'Injury Types', 'DefOrder' => '9', 'DefIsActive' => '0', - 'DefValue' => 'Effective Tasings', - 'DefDescription' => 'LEVEL 1 (most serious)' + 'DefValue' => 'Taser Wounds', + 'DefDescription' => 'LEVEL 1 (most serious) was "Effective Tasings"' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 266, @@ -15359,83 +15303,45 @@ public function run() 'DefIsActive' => '0', 'DefValue' => 'Indoor public space' ]); - DB::table('SL_Definitions')->insert([ - 'DefID' => 355, - 'DefDatabase' => '1', - 'DefSubset' => 'Transportation Civilian', - 'DefIsActive' => '0', - 'DefValue' => 'Car' - ]); - DB::table('SL_Definitions')->insert([ - 'DefID' => 356, - 'DefDatabase' => '1', - 'DefSubset' => 'Transportation Civilian', - 'DefOrder' => '2', - 'DefIsActive' => '0', - 'DefValue' => 'Bicycle' - ]); - DB::table('SL_Definitions')->insert([ - 'DefID' => 357, - 'DefDatabase' => '1', - 'DefSubset' => 'Transportation Civilian', - 'DefOrder' => '3', - 'DefIsActive' => '0', - 'DefValue' => 'Boat' - ]); - DB::table('SL_Definitions')->insert([ - 'DefID' => 358, - 'DefDatabase' => '1', - 'DefSubset' => 'Transportation Civilian', - 'DefOrder' => '1', - 'DefIsActive' => '0', - 'DefValue' => 'Motorcycle' - ]); DB::table('SL_Definitions')->insert([ 'DefID' => 360, 'DefDatabase' => '1', - 'DefSubset' => 'Transportation Officer', - 'DefOrder' => '1', - 'DefIsActive' => '0', + 'DefSubset' => 'Transportation', 'DefValue' => 'Car' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 361, 'DefDatabase' => '1', - 'DefSubset' => 'Transportation Officer', + 'DefSubset' => 'Transportation', 'DefOrder' => '2', - 'DefIsActive' => '0', 'DefValue' => 'Van' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 362, 'DefDatabase' => '1', - 'DefSubset' => 'Transportation Officer', + 'DefSubset' => 'Transportation', 'DefOrder' => '3', - 'DefIsActive' => '0', 'DefValue' => 'Motorcycle' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 363, 'DefDatabase' => '1', - 'DefSubset' => 'Transportation Officer', + 'DefSubset' => 'Transportation', 'DefOrder' => '4', - 'DefIsActive' => '0', 'DefValue' => 'Bicycle' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 364, 'DefDatabase' => '1', - 'DefSubset' => 'Transportation Officer', + 'DefSubset' => 'Transportation', 'DefOrder' => '5', - 'DefIsActive' => '0', 'DefValue' => 'Boat' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 365, 'DefDatabase' => '1', - 'DefSubset' => 'Transportation Officer', + 'DefSubset' => 'Transportation', 'DefOrder' => '6', - 'DefIsActive' => '0', 'DefValue' => 'Other' ]); DB::table('SL_Definitions')->insert([ @@ -15751,13 +15657,6 @@ public function run() 'DefOrder' => '10', 'DefValue' => 'Loitering/Trespassing' ]); - DB::table('SL_Definitions')->insert([ - 'DefID' => 407, - 'DefDatabase' => '1', - 'DefSubset' => 'Transportation Civilian', - 'DefOrder' => '4', - 'DefValue' => 'Other' - ]); DB::table('SL_Definitions')->insert([ 'DefID' => 408, 'DefDatabase' => '1', @@ -15810,20 +15709,21 @@ public function run() 'DefID' => 415, 'DefDatabase' => '1', 'DefSubset' => 'Civilian Weapons', + 'DefOrder' => '1', 'DefValue' => 'Gun' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 416, 'DefDatabase' => '1', 'DefSubset' => 'Civilian Weapons', - 'DefOrder' => '1', + 'DefOrder' => '2', 'DefValue' => 'Knife' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 417, 'DefDatabase' => '1', 'DefSubset' => 'Civilian Weapons', - 'DefOrder' => '2', + 'DefOrder' => '3', 'DefValue' => 'Other' ]); DB::table('SL_Definitions')->insert([ @@ -16032,7 +15932,7 @@ public function run() 'DefDatabase' => '1', 'DefSet' => 'System Settings', 'DefSubset' => 'login-instruct', - 'DefDescription' => 'Here you can finish, review, or update your complaint. Volunteers also login here.' + 'DefDescription' => '

Here you can finish, review, or update your complaint. Volunteers also login here.

' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 448, @@ -16325,6 +16225,9 @@ public function run() unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; } +input, textarea, select, .nFld input, .nFld textarea, .nFld select, .nFld input.form-control, .nFld input.form-control-lg, .nFld input.form-control.form-control-lg, .nFld textarea.form-control, .nFld textarea.form-control-lg, .nFld textarea.form-control.form-control-lg, .nFld select.form-control, .nFld select.form-control-lg, .nFld select.form-control.form-control-lg { font-family: Georgia, serif; } +input.btn, input.btn.btn-primary, input.btn.btn-secondary, input.btn.btn-primary.btn-xl { font-family: \'Cairo\', sans-serif; } + b { font-weight: 900; @@ -16352,6 +16255,7 @@ public function run() background: #2b3493; border: 1px #FFF solid; text-shadow: none; + font-family: \'Cairo\', sans-serif; } a.btn-primary:hover, a.btn-primary.btn-xl:hover, a.btn-primary.btn-lg:hover, a.btn-primary.btn-sm:hover, input[type="submit"].btn-primary:hover, input[type="submit"].btn-primary.btn-xl:hover, input[type="submit"].btn-primary.btn-lg:hover, input[type="submit"].btn-primary.btn-sm:hover { @@ -16370,6 +16274,7 @@ public function run() background: #EDF8FF; border: 1px #333 solid; text-shadow: none; + font-family: \'Cairo\', sans-serif; } a.btn-info:hover, a.btn-info.btn-xl:hover, a.btn-info.btn-lg:hover, a.btn-info.btn-sm:hover, input[type="submit"].btn-info:hover, input[type="submit"].btn-info.btn-xl:hover, input[type="submit"].btn-info.btn-lg:hover, input[type="submit"].btn-info.btn-sm:hover { @@ -16388,6 +16293,7 @@ public function run() background: #EDF8FF; border: 1px #2B3493 solid; text-shadow: none; + font-family: \'Cairo\', sans-serif; } a.btn-secondary:hover, a.btn-secondary.btn-xl:hover, a.btn-secondary.btn-lg:hover, a.btn-secondary.btn-sm:hover, input[type="submit"].btn-secondary:hover, input[type="submit"].btn-secondary.btn-xl:hover, input[type="submit"].btn-secondary.btn-lg:hover, input[type="submit"].btn-secondary.btn-sm:hover { @@ -16406,6 +16312,7 @@ public function run() background: #EC2327; border: 1px #FFF solid; text-shadow: none; + font-family: \'Cairo\', sans-serif; } a.btn-danger:hover, a.btn-danger.btn-xl:hover, a.btn-danger.btn-lg:hover, a.btn-danger.btn-sm:hover, input[type="submit"].btn-danger:hover, input[type="submit"].btn-danger.btn-xl:hover, input[type="submit"].btn-danger.btn-lg:hover, input[type="submit"].btn-danger.btn-sm:hover { @@ -16514,7 +16421,9 @@ public function run() .deptRgtCol { width: 116px; } .scoreRowOn, .scoreRowOff { padding: 10px; } .scoreRowOn { color: #63C6FF; } -.scoreRowOff { color: #CCC; }' +.scoreRowOff { color: #CCC; } + +#dontWorry { margin-top: 25px; }' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 466, @@ -16573,7 +16482,7 @@ public function run() 'DefDatabase' => '1', 'DefSet' => 'Tree Settings', 'DefSubset' => 'tree-1-footer', - 'DefDescription' => '

Don\'t worry, we\'re saving your progress. You can pick up where you left off anytime. Most answers are optional. But the more you share, the stronger your report will be!

' + 'DefDescription' => '
' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 474, @@ -16627,15 +16536,14 @@ public function run() - -' +' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 478, @@ -16656,7 +16564,7 @@ public function run() 'DefDatabase' => '1', 'DefSet' => 'System Settings', 'DefSubset' => 'log-css-reload', - 'DefDescription' => '1543444490' + 'DefDescription' => '1549816047' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 480, @@ -16678,7 +16586,7 @@ public function run() 'DefDatabase' => '1', 'DefSet' => 'Tree Settings', 'DefSubset' => 'tree-5-footer', - 'DefDescription' => '
Don\'t worry, we\'re saving your progress. You can pick up where you left off anytime!
Most answers are optional. But the more you share, the stronger your report will be!
' + 'DefDescription' => '
Don\'t worry, we\'re saving your progress. You can pick up where you left off anytime!
Most answers are optional. But the more you share, the stronger your report will be!
' ]); DB::table('SL_Definitions')->insert([ 'DefID' => 483, @@ -17375,6 +17283,181 @@ public function run() 'DefSubset' => 'google-cod-key2', 'DefDescription' => 'AIzaSyCxvl1Od9PXI5xtWH-a0faGY4ZkrGAukrw' ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 582, + 'DefDatabase' => '1', + 'DefSubset' => 'Civilian Weapons', + 'DefValue' => 'No weapon' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 583, + 'DefDatabase' => '1', + 'DefSubset' => 'Civilian Weapons', + 'DefOrder' => '4', + 'DefValue' => 'Not sure' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 584, + 'DefDatabase' => '1', + 'DefSubset' => 'Partner Types', + 'DefOrder' => '6', + 'DefValue' => 'Organization' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 585, + 'DefDatabase' => '1', + 'DefSubset' => 'Organization Capacities', + 'DefOrder' => '1', + 'DefValue' => 'Services or Support for Police Brutality Victims' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 586, + 'DefDatabase' => '1', + 'DefSubset' => 'Organization Capacities', + 'DefOrder' => '5', + 'DefValue' => 'Political or Legislative Action' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 587, + 'DefDatabase' => '1', + 'DefSubset' => 'Organization Capacities', + 'DefOrder' => '2', + 'DefValue' => 'Education About Police or Corrections' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 588, + 'DefDatabase' => '1', + 'DefSubset' => 'Organization Capacities', + 'DefValue' => 'Assist Complainants Using OpenPolice.org' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 589, + 'DefDatabase' => '1', + 'DefSubset' => 'Organization Capacities', + 'DefOrder' => '3', + 'DefValue' => 'Legal Assistance' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 590, + 'DefDatabase' => '1', + 'DefSubset' => 'Organization Capacities', + 'DefOrder' => '4', + 'DefValue' => 'Legal Representation' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 591, + 'DefDatabase' => '1', + 'DefSet' => 'System Settings', + 'DefSubset' => 'user-name-req', + 'DefDescription' => '0' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 592, + 'DefDatabase' => '1', + 'DefSubset' => 'Transportation', + 'DefOrder' => '1', + 'DefValue' => 'Truck' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 593, + 'DefDatabase' => '1', + 'DefSubset' => 'Vehicle Roles', + 'DefValue' => 'Driver' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 594, + 'DefDatabase' => '1', + 'DefSubset' => 'Vehicle Roles', + 'DefOrder' => '1', + 'DefValue' => 'Passenger' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 595, + 'DefDatabase' => '1', + 'DefSet' => 'Tree Settings', + 'DefSubset' => 'tree-1-protip', + 'DefDescription' => 'We are saving your progress.' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 596, + 'DefDatabase' => '1', + 'DefSet' => 'Tree Settings', + 'DefSubset' => 'tree-1-protip', + 'DefOrder' => '1', + 'DefDescription' => 'You can log out and log in anytime.' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 597, + 'DefDatabase' => '1', + 'DefSet' => 'Tree Settings', + 'DefSubset' => 'tree-1-protip', + 'DefOrder' => '2', + 'DefDescription' => 'Your story matters.' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 598, + 'DefDatabase' => '1', + 'DefSet' => 'Tree Settings', + 'DefSubset' => 'tree-1-protip', + 'DefOrder' => '3', + 'DefDescription' => 'Most questions are optional.' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 599, + 'DefDatabase' => '1', + 'DefSet' => 'Tree Settings', + 'DefSubset' => 'tree-1-protip', + 'DefOrder' => '4', + 'DefDescription' => 'Answer every question you can.' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 600, + 'DefDatabase' => '1', + 'DefSet' => 'Tree Settings', + 'DefSubset' => 'tree-1-protip', + 'DefOrder' => '5', + 'DefDescription' => 'You are brave.' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 601, + 'DefDatabase' => '1', + 'DefSet' => 'Tree Settings', + 'DefSubset' => 'tree-1-protip', + 'DefOrder' => '6', + 'DefDescription' => 'Focus on one incident for now.' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 602, + 'DefDatabase' => '1', + 'DefSet' => 'Tree Settings', + 'DefSubset' => 'tree-1-protip', + 'DefOrder' => '7', + 'DefDescription' => 'Be truthful.' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 603, + 'DefDatabase' => '1', + 'DefSet' => 'Tree Settings', + 'DefSubset' => 'tree-1-protip', + 'DefOrder' => '8', + 'DefDescription' => 'You are not alone.' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 604, + 'DefDatabase' => '1', + 'DefSet' => 'Tree Settings', + 'DefSubset' => 'tree-1-protip', + 'DefOrder' => '9', + 'DefDescription' => 'Reload the page if it freezes.' + ]); + DB::table('SL_Definitions')->insert([ + 'DefID' => 605, + 'DefDatabase' => '1', + 'DefSet' => 'Tree Settings', + 'DefSubset' => 'tree-1-protip', + 'DefOrder' => '10', + 'DefDescription' => 'You are part of the solution.' + ]); DB::table('SL_BusRules')->insert([ 'RuleID' => 3, @@ -17486,7 +17569,7 @@ public function run() 'TreeID' => 1, 'TreeDatabase' => '1', 'TreeUser' => '1', - 'TreeOpts' => '47', + 'TreeOpts' => '3478', 'TreeType' => 'Survey', 'TreeName' => 'Complaint', 'TreeDesc' => 'Open Police Complaint', @@ -17510,7 +17593,7 @@ public function run() 'TreeID' => 5, 'TreeDatabase' => '1', 'TreeUser' => '1', - 'TreeOpts' => '47', + 'TreeOpts' => '94', 'TreeType' => 'Survey', 'TreeName' => 'Compliment', 'TreeDesc' => 'Open Police Compliment', @@ -17591,7 +17674,7 @@ public function run() 'TreeID' => 12, 'TreeDatabase' => '1', 'TreeUser' => '1', - 'TreeOpts' => '203', + 'TreeOpts' => '7', 'TreeType' => 'Page', 'TreeName' => 'Open Police Complaints - You belong at the center of police oversight.', 'TreeDesc' => 'Home page', @@ -17715,7 +17798,7 @@ public function run() 'TreeUser' => '1', 'TreeOpts' => '1', 'TreeType' => 'Page', - 'TreeName' => 'Sharing Your Story', + 'TreeName' => 'Complaint or Compliment: Sharing Your Story', 'TreeDesc' => 'Choose Complaint or Compliment', 'TreeRoot' => '1096', 'TreeFirstPage' => '1096', @@ -17790,7 +17873,7 @@ public function run() 'TreeUser' => '1', 'TreeOpts' => '3689', 'TreeType' => 'Page', - 'TreeName' => 'Volunteer', + 'TreeName' => 'Volunteer Dashboard', 'TreeRoot' => '1210', 'TreeFirstPage' => '1210', 'TreeLastPage' => '1210' @@ -18059,7 +18142,7 @@ public function run() 'TreeUser' => '1', 'TreeOpts' => '5289', 'TreeType' => 'Survey', - 'TreeName' => 'Attorney Profile', + 'TreeName' => 'Partner Profile', 'TreeRoot' => '1921', 'TreeFirstPage' => '1922', 'TreeLastPage' => '1954', @@ -18071,7 +18154,7 @@ public function run() 'TreeUser' => '1', 'TreeOpts' => '5289', 'TreeType' => 'Survey XML', - 'TreeName' => 'Attorney Profile', + 'TreeName' => 'Partner Profile', 'TreeRoot' => '1923', 'TreeCoreTable' => '110' ]); @@ -18081,7 +18164,7 @@ public function run() 'TreeUser' => '1', 'TreeOpts' => '43', 'TreeType' => 'Page', - 'TreeName' => 'Manage Attorneys', + 'TreeName' => 'Manage Partners', 'TreeRoot' => '1938', 'TreeFirstPage' => '1938', 'TreeLastPage' => '1938' @@ -18101,12 +18184,13 @@ public function run() 'TreeID' => 62, 'TreeDatabase' => '1', 'TreeUser' => '1', - 'TreeOpts' => '29', + 'TreeOpts' => '377', 'TreeType' => 'Page', 'TreeName' => 'Preparing Your Complaint for an Attorney', 'TreeRoot' => '1992', 'TreeFirstPage' => '1992', - 'TreeLastPage' => '1992' + 'TreeLastPage' => '1992', + 'TreeCoreTable' => '110' ]); DB::table('SL_Tree')->insert([ 'TreeID' => 63, @@ -18130,6 +18214,100 @@ public function run() 'TreeFirstPage' => '2012', 'TreeLastPage' => '2012' ]); + DB::table('SL_Tree')->insert([ + 'TreeID' => 65, + 'TreeDatabase' => '1', + 'TreeUser' => '1', + 'TreeOpts' => '13', + 'TreeType' => 'Page', + 'TreeName' => 'Organization Profile', + 'TreeRoot' => '2059', + 'TreeFirstPage' => '2059', + 'TreeLastPage' => '2059', + 'TreeCoreTable' => '110' + ]); + DB::table('SL_Tree')->insert([ + 'TreeID' => 66, + 'TreeDatabase' => '1', + 'TreeUser' => '1', + 'TreeOpts' => '377', + 'TreeType' => 'Page', + 'TreeName' => 'Preparing Your Complaint for an Organization', + 'TreeRoot' => '2063', + 'TreeFirstPage' => '2063', + 'TreeLastPage' => '2063', + 'TreeCoreTable' => '110' + ]); + DB::table('SL_Tree')->insert([ + 'TreeID' => 67, + 'TreeDatabase' => '1', + 'TreeUser' => '0', + 'TreeOpts' => '1333', + 'TreeType' => 'Page', + 'TreeName' => 'Staff Search', + 'TreeRoot' => '2090' + ]); + DB::table('SL_Tree')->insert([ + 'TreeID' => 68, + 'TreeDatabase' => '1', + 'TreeUser' => '0', + 'TreeOpts' => '1271', + 'TreeType' => 'Page', + 'TreeName' => 'Partner Search', + 'TreeRoot' => '2092' + ]); + DB::table('SL_Tree')->insert([ + 'TreeID' => 69, + 'TreeDatabase' => '1', + 'TreeUser' => '1', + 'TreeOpts' => '1', + 'TreeType' => 'Redirect', + 'TreeDesc' => 'http://homestead.test/complaint-or-compliment' + ]); + DB::table('SL_Tree')->insert([ + 'TreeID' => 70, + 'TreeDatabase' => '1', + 'TreeUser' => '1', + 'TreeOpts' => '1', + 'TreeType' => 'Page', + 'TreeName' => 'Complaint or Compliment: Sharing Your Story', + 'TreeRoot' => '2094', + 'TreeFirstPage' => '2094', + 'TreeLastPage' => '2094' + ]); + DB::table('SL_Tree')->insert([ + 'TreeID' => 71, + 'TreeDatabase' => '1', + 'TreeUser' => '1', + 'TreeOpts' => '1', + 'TreeType' => 'Page', + 'TreeName' => 'Features', + 'TreeRoot' => '2104', + 'TreeFirstPage' => '2104', + 'TreeLastPage' => '2104' + ]); + DB::table('SL_Tree')->insert([ + 'TreeID' => 72, + 'TreeDatabase' => '1', + 'TreeUser' => '1', + 'TreeOpts' => '1', + 'TreeType' => 'Page', + 'TreeName' => 'Principles', + 'TreeRoot' => '2106', + 'TreeFirstPage' => '2106', + 'TreeLastPage' => '2106' + ]); + DB::table('SL_Tree')->insert([ + 'TreeID' => 73, + 'TreeDatabase' => '1', + 'TreeUser' => '1', + 'TreeOpts' => '1', + 'TreeType' => 'Page', + 'TreeName' => 'OPC Partners', + 'TreeRoot' => '2149', + 'TreeFirstPage' => '2149', + 'TreeLastPage' => '2149' + ]); DB::table('SL_Node')->insert([ 'NodeID' => 1, @@ -18194,10 +18372,8 @@ public function run() 'NodeID' => 8, 'NodeTree' => '1', 'NodeParentID' => '454', - 'NodeParentOrder' => '1', 'NodeType' => 'User Sign Up', - 'NodePromptText' => 'User Sign Up Form (Email, Password, Confirm Password)', - 'NodeInternalNotes' => 'Open to idea of Login with Facebook (could be great for viral sharing of complaints once complete).', + 'NodePromptText' => '

Your story matters. Please sign up or login so you can finish your complaint later, if we get interrupted. It is also important so we can contact you about the progress of your complaint.

', 'NodeOpts' => '5' ]); DB::table('SL_Node')->insert([ @@ -18236,7 +18412,7 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '455', 'NodeType' => 'Instructions', - 'NodePromptText' => '

When and where did this incident happen?

' + 'NodePromptText' => '

When and where did this incident happen?

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 22, @@ -18285,7 +18461,7 @@ public function run() 'NodeParentID' => '455', 'NodeParentOrder' => '9', 'NodeType' => 'Text', - 'NodePromptText' => 'Zip', + 'NodePromptText' => 'Zip Code', 'NodeDataStore' => 'Incidents:IncAddressZip', 'NodeOpts' => '3' ]); @@ -18303,8 +18479,9 @@ public function run() 'NodeID' => 28, 'NodeTree' => '1', 'NodeParentID' => '459', + 'NodeParentOrder' => '1', 'NodeType' => 'Radio', - 'NodePromptText' => 'How were you involved with this incident?', + 'NodePromptText' => '

How were you involved with this incident?

', 'NodeDataStore' => 'Civilians:CivRole', 'NodeOpts' => '5' ]); @@ -18385,7 +18562,7 @@ public function run() 'NodeParentID' => '604', 'NodeParentOrder' => '8', 'NodeType' => 'Text', - 'NodePromptText' => 'Zip', + 'NodePromptText' => 'Zip Code', 'NodeDataStore' => 'PersonContact:PrsnAddressZip', 'NodeOpts' => '15' ]); @@ -18410,17 +18587,6 @@ public function run() 'NodeDataStore' => 'PersonContact:PrsnEmail', 'NodeOpts' => '15' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 40, - 'NodeTree' => '1', - 'NodeParentID' => '604', - 'NodeParentOrder' => '11', - 'NodeType' => 'Text', - 'NodePromptText' => 'Facebook Profile URL', - 'NodeInternalNotes' => 'Auto-fill if provided during login', - 'NodeDataStore' => 'PersonContact:PrsnFacebook', - 'NodeOpts' => '3' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 41, 'NodeTree' => '1', @@ -18466,8 +18632,7 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 47, 'NodeTree' => '1', - 'NodeParentID' => '457', - 'NodeParentOrder' => '5', + 'NodeParentID' => '2049', 'NodeType' => 'Radio', 'NodePromptText' => 'Did you record the incident with audio or video?', 'NodeDataStore' => 'Civilians:CivCameraRecord', @@ -18479,7 +18644,8 @@ public function run() 'NodeParentID' => '140', 'NodeType' => 'Loop Root', 'NodePromptText' => '

Who\'s Involved: Adding Victims

-

Please provide information about the victims in this incident. These are people who were harmed by an alleged act of police misconduct. (If you were the only victim, go to the next section.)

', +

Please provide information about the victims in this incident. These are people who were harmed by an alleged act of police misconduct.

+

If you were the only victim, go to the next section.

', 'NodePromptNotes' => 'add-victims', 'NodePromptAfter' => 'Add Victims - Your Complaint::M::::M::::M::', 'NodeDataBranch' => 'Victims', @@ -18559,7 +18725,7 @@ public function run() 'NodeParentID' => '1132', 'NodeParentOrder' => '4', 'NodeType' => 'Text', - 'NodePromptText' => 'Zip', + 'NodePromptText' => 'Zip Code', 'NodeDataStore' => 'PersonContact:PrsnAddressZip', 'NodeOpts' => '3' ]); @@ -18609,7 +18775,7 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '1441', 'NodeType' => 'Instructions', - 'NodePromptText' => '

Your current contact information

+ 'NodePromptText' => '

Your current contact information

Most police investigators require this. We will never make it public, sell it, or mail you stuff.

', 'NodeOpts' => '3' ]); @@ -18711,7 +18877,8 @@ public function run() 'NodeParentID' => '141', 'NodeType' => 'Loop Root', 'NodePromptText' => '

Who\'s Involved: Adding Witnesses

-

Please share information about people who observed the incident. Witnesses are distinct from victims if they weren\'t harmed by anything an officer did. (If there were no witnesses, go to the next section.)

', +

Please share information about people who observed the incident. Witnesses are distinct from victims if they weren\'t harmed by anything an officer did.

+

If there were no witnesses, go to the next section.

', 'NodePromptNotes' => 'add-witnesses', 'NodePromptAfter' => 'Add Witnesses - Your Complaint::M::::M::::M::', 'NodeDataBranch' => 'Witnesses', @@ -18722,8 +18889,7 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '462', 'NodeType' => 'Instructions', - 'NodePromptText' => '

Witness #[LoopItemCnt]:

', - 'NodePromptNotes' => 'All questions are optional.' + 'NodePromptText' => '

Witness #[LoopItemCnt]:

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 99, @@ -18810,7 +18976,7 @@ public function run() 'NodeParentID' => '1134', 'NodeParentOrder' => '4', 'NodeType' => 'Text', - 'NodePromptText' => 'Zip', + 'NodePromptText' => 'Zip Code', 'NodeDataStore' => 'PersonContact:PrsnAddressZip', 'NodeOpts' => '3' ]); @@ -18928,25 +19094,6 @@ public function run() 'NodeDataStore' => 'Civilians:CivCameraRecord', 'NodeOpts' => '3' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 138, - 'NodeTree' => '1', - 'NodeParentID' => '453', - 'NodeParentOrder' => '3', - 'NodeType' => 'Radio', - 'NodePromptText' => '

Personal Privacy Options

-

You should control who has access to you private information. That\'s why we\'ve created three unique options for how we collect and share their data.

-

Whichever option you choose, all information you provide will be privately shared with the relevant oversight agencies responsible for investigating complaints against police.

-

How do you want the names of people involved to appear on your public complaint?

', - 'NodePromptAfter' => '', - 'NodeDataStore' => 'Complaints:ComPrivacy', - 'NodeOpts' => '65' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 139, 'NodeTree' => '1', @@ -18990,7 +19137,8 @@ public function run() 'NodeParentOrder' => '1', 'NodeType' => 'Loop Root', 'NodePromptText' => '

Police Departments At The Scene

-

Please identify the departments that were involved. These could also be federal agencies or private security firms.

', +

Please identify the departments that were involved. These could also be federal agencies or private security firms.

+', 'NodePromptNotes' => 'add-police-departments', 'NodePromptAfter' => 'Add Police Departments - Your Complaint::M::::M::::M::', 'NodeDataBranch' => 'Departments', @@ -19022,7 +19170,7 @@ public function run() 'NodeParentID' => '482', 'NodeParentOrder' => '1', 'NodeType' => 'Radio', - 'NodePromptText' => '

Do you want to make a GOLD STAR complaint?

', + 'NodePromptText' => '

Do you want to keep going to make a GOLD LEVEL complaint?

', 'NodePromptAfter' => '', 'NodeDefault' => 'Gold', @@ -19032,69 +19180,45 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 148, 'NodeTree' => '1', - 'NodeParentID' => '196', - 'NodeParentOrder' => '3', - 'NodeType' => 'Loop Root', - 'NodePromptText' => '

Adding Details About What Happened

-

The blue "Next Event Details" button will take you through each event. You can use the gray buttons later to edit anything you need.

', + 'NodeParentID' => '508', + 'NodeType' => 'Loop Cycle', 'NodePromptNotes' => 'event-details', - 'NodePromptAfter' => 'Provide Details on Key Incident Events - Your Complaint::M::::M::::M::', - 'NodeDataBranch' => 'Events', + 'NodeResponseSet' => 'LoopItems::Types of Force', + 'NodeDataBranch' => 'EventSequence', 'NodeDataStore' => 'EventSequence:EveID' ]); DB::table('SL_Node')->insert([ 'NodeID' => 149, 'NodeTree' => '1', - 'NodeParentID' => '148', - 'NodeType' => 'Branch Title', - 'NodePromptText' => 'Stop', - 'NodePromptNotes' => 'review-your-story', - 'NodeDataBranch' => 'Stops' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 150, - 'NodeTree' => '1', - 'NodeParentID' => '148', - 'NodeParentOrder' => '1', + 'NodeParentID' => '6', + 'NodeParentOrder' => '2', 'NodeType' => 'Branch Title', - 'NodePromptText' => 'Search', - 'NodePromptNotes' => 'review-your-story', - 'NodeDataBranch' => 'Searches' + 'NodePromptText' => 'Stops & Searches', + 'NodePromptNotes' => 'review-your-story' ]); DB::table('SL_Node')->insert([ 'NodeID' => 151, 'NodeTree' => '1', - 'NodeParentID' => '148', - 'NodeParentOrder' => '2', + 'NodeParentID' => '6', + 'NodeParentOrder' => '4', 'NodeType' => 'Branch Title', 'NodePromptText' => 'Use of Force', - 'NodePromptNotes' => 'review-your-story', - 'NodeDataBranch' => 'Force' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 152, - 'NodeTree' => '1', - 'NodeParentID' => '148', - 'NodeParentOrder' => '3', - 'NodeType' => 'Branch Title', - 'NodePromptText' => 'Arrest', - 'NodePromptNotes' => 'review-your-story', - 'NodeDataBranch' => 'Arrests' + 'NodePromptNotes' => 'review-your-story' ]); DB::table('SL_Node')->insert([ 'NodeID' => 153, 'NodeTree' => '1', - 'NodeParentID' => '196', - 'NodeParentOrder' => '4', + 'NodeParentID' => '6', + 'NodeParentOrder' => '3', 'NodeType' => 'Branch Title', - 'NodePromptText' => 'Citations', + 'NodePromptText' => 'Arrests & Citations', 'NodePromptNotes' => 'review-your-story' ]); DB::table('SL_Node')->insert([ 'NodeID' => 154, 'NodeTree' => '1', 'NodeParentID' => '5', - 'NodeParentOrder' => '6', + 'NodeParentOrder' => '5', 'NodeType' => 'Branch Title', 'NodePromptText' => 'Other Allegations', 'NodePromptNotes' => 'allegation-intimidation-using-weapon' @@ -19130,7 +19254,7 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '142', 'NodeType' => 'Loop Root', - 'NodePromptText' => '

Who\'s Involved: Police Officers

', + 'NodePromptText' => '

Who\'s Involved: Police Officers

', 'NodePromptNotes' => 'add-police-officers', 'NodePromptAfter' => 'Add Police Officers - Your Complaint::M::::M::::M::', 'NodeDataBranch' => 'Officers', @@ -19357,18 +19481,9 @@ public function run() 'NodeParentID' => '5', 'NodeParentOrder' => '4', 'NodeType' => 'Branch Title', - 'NodePromptText' => 'Arrest', + 'NodePromptText' => 'Arrests & Citations', 'NodePromptNotes' => 'allegation-arrest' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 202, - 'NodeTree' => '1', - 'NodeParentID' => '5', - 'NodeParentOrder' => '5', - 'NodeType' => 'Branch Title', - 'NodePromptText' => 'Citations', - 'NodePromptNotes' => 'allegation-citation' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 203, 'NodeTree' => '1', @@ -19383,13 +19498,15 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '467', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer stop, question, or detain anybody during this incident? This is when officers pull over a vehicle or keep anyone from leaving.', + 'NodePromptText' => '

Stops / Questioning

+

Did an officer stop, question, or detain anybody during this incident? This is when officers pull over a vehicle, or keep anyone from leaving.

', 'NodeDataStore' => 'AllegSilver:AlleSilStopYN' ]); DB::table('SL_Node')->insert([ 'NodeID' => 205, 'NodeTree' => '1', - 'NodeParentID' => '204', + 'NodeParentID' => '2033', + 'NodeParentOrder' => '1', 'NodeType' => 'Radio', 'NodePromptText' => 'Do you think anybody was wrongfully stopped or detained?', 'NodePromptNotes' => '

Example of Wrongful Stop #1: Police are called to a high school after a student is accused of theft. Police and teachers interrogate him as he\'s held against his will. His parents are not contacted until many hours later.

@@ -19410,19 +19527,18 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 207, 'NodeTree' => '1', - 'NodeParentID' => '450', - 'NodeParentOrder' => '1', + 'NodeParentID' => '2038', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which victim(s) were stopped?', 'NodeResponseSet' => 'LoopItems::Victims', - 'NodeDataStore' => 'LinksCivilianAllegations:LnkCivAlleCivID', + 'NodeDataStore' => 'LinksCivilianEvents:LnkCivEveCivID', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 208, 'NodeTree' => '1', 'NodeParentID' => '450', - 'NodeParentOrder' => '2', + 'NodeParentOrder' => '1', 'NodeType' => 'Long Text', 'NodePromptText' => 'What makes you think that this stop was wrongful?', 'NodeDataStore' => 'Allegations:AlleDescription', @@ -19452,7 +19568,7 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '537', 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Which Officer(s)?', + 'NodePromptText' => 'Which officer(s)?', 'NodeResponseSet' => 'LoopItems::Officers', 'NodeDataStore' => 'LinksOfficerAllegations:LnkOffAlleOffID', 'NodeOpts' => '3' @@ -19462,13 +19578,14 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '469', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer conduct any searches during this incident? (This includes all types of searches of people, vehicles, homes, or other property.)', + 'NodePromptText' => '

Searches

+

Did an officer conduct any searches during this incident? (This includes all types of searches of people, vehicles, homes, or other property.)

', 'NodeDataStore' => 'AllegSilver:AlleSilSearchYN' ]); DB::table('SL_Node')->insert([ 'NodeID' => 213, 'NodeTree' => '1', - 'NodeParentID' => '212', + 'NodeParentID' => '2034', 'NodeParentOrder' => '1', 'NodeType' => 'Radio', 'NodePromptText' => 'Do you think anybody was wrongfully searched?', @@ -19489,19 +19606,18 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 215, 'NodeTree' => '1', - 'NodeParentID' => '538', - 'NodeParentOrder' => '1', + 'NodeParentID' => '2039', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which victim(s) were searched?', 'NodeResponseSet' => 'LoopItems::Victims', - 'NodeDataStore' => 'LinksCivilianAllegations:LnkCivAlleCivID', + 'NodeDataStore' => 'LinksCivilianEvents:LnkCivEveCivID', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 216, 'NodeTree' => '1', 'NodeParentID' => '538', - 'NodeParentOrder' => '2', + 'NodeParentOrder' => '1', 'NodeType' => 'Long Text', 'NodePromptText' => 'What makes you think that this search was wrongful?', 'NodeDataStore' => 'Allegations:AlleDescription', @@ -19531,6 +19647,7 @@ public function run() 'NodeID' => 219, 'NodeTree' => '1', 'NodeParentID' => '539', + 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which officer(s) seized or damaged property?', 'NodeResponseSet' => 'LoopItems::Officers', @@ -19541,7 +19658,6 @@ public function run() 'NodeID' => 220, 'NodeTree' => '1', 'NodeParentID' => '539', - 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which victim(s) did this property belong to?', 'NodeResponseSet' => 'LoopItems::Victims', @@ -19564,13 +19680,15 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '471', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer use physical force on anybody during this incident? This includes any use of violent contact up to and including deadly force by an officer.', + 'NodePromptText' => '

Use of Physical Force

+

Did an officer use physical force on anybody during this incident? This includes any use of violent contact up to and including deadly force by an officer.

', 'NodeDataStore' => 'AllegSilver:AlleSilForceYN' ]); DB::table('SL_Node')->insert([ 'NodeID' => 223, 'NodeTree' => '1', - 'NodeParentID' => '222', + 'NodeParentID' => '2035', + 'NodeParentOrder' => '1', 'NodeType' => 'Radio', 'NodePromptText' => 'Do you think the use of physical force was unreasonable?', 'NodePromptNotes' => '

Definition of Unreasonable Force: "Reasonable force" is the amount of effort required by police to compel an unwilling person to comply. So "unreasonable force" is any unnecessary or excessive force beyond what\'s required to do that.

@@ -19591,19 +19709,18 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 225, 'NodeTree' => '1', - 'NodeParentID' => '540', - 'NodeParentOrder' => '1', + 'NodeParentID' => '2040', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which Victim(s)?', 'NodeResponseSet' => 'LoopItems::Victims', - 'NodeDataStore' => 'LinksCivilianAllegations:LnkCivAlleCivID', + 'NodeDataStore' => 'LinksCivilianEvents:LnkCivEveCivID', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 226, 'NodeTree' => '1', 'NodeParentID' => '540', - 'NodeParentOrder' => '2', + 'NodeParentOrder' => '1', 'NodeType' => 'Long Text', 'NodePromptText' => 'What makes you think that this use of physical force was unreasonable?', 'NodeDataStore' => 'Allegations:AlleDescription', @@ -19615,13 +19732,15 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '472', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer arrest anybody during this incident? This means the officers took somebody to the police station.', + 'NodePromptText' => '

Arrests

+

Did an officer arrest anybody during this incident? This means the officers took somebody to the police station.

', 'NodeDataStore' => 'AllegSilver:AlleSilArrestYN' ]); DB::table('SL_Node')->insert([ 'NodeID' => 228, 'NodeTree' => '1', 'NodeParentID' => '1172', + 'NodeParentOrder' => '1', 'NodeType' => 'Radio', 'NodePromptText' => 'Do you think anybody was wrongfully arrested?', 'NodePromptNotes' => 'Example of Wrongful Arrest: A woman asserts her First Amendment rights by video recording on-duty police. An officer arrests her after she refuses to turn off her camera.', @@ -19641,58 +19760,38 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 230, 'NodeTree' => '1', - 'NodeParentID' => '541', - 'NodeParentOrder' => '1', + 'NodeParentID' => '2041', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which Victim(s)?', 'NodeResponseSet' => 'LoopItems::Victims', - 'NodeDataStore' => 'LinksCivilianAllegations:LnkCivAlleCivID', + 'NodeDataStore' => 'LinksCivilianEvents:LnkCivEveCivID', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 231, 'NodeTree' => '1', 'NodeParentID' => '541', - 'NodeParentOrder' => '2', + 'NodeParentOrder' => '1', 'NodeType' => 'Long Text', 'NodePromptText' => 'What makes you think that their arrest was wrongful?', 'NodeDataStore' => 'Allegations:AlleDescription', 'NodeCharLimit' => '150', 'NodeOpts' => '465' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 232, - 'NodeTree' => '1', - 'NodeParentID' => '1172', - 'NodeParentOrder' => '2', - 'NodeType' => 'Radio', - 'NodePromptText' => 'Did the officer fail to read any arrestees their Miranda rights?', - 'NodePromptNotes' => 'This is an allegation.', - 'NodeDataStore' => 'AllegSilver:AlleSilArrestMiranda', - 'NodeOpts' => '3' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 233, - 'NodeTree' => '1', - 'NodeParentID' => '542', - 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Which Victim(s)?', - 'NodeResponseSet' => 'LoopItems::Victims', - 'NodeDataStore' => 'LinksCivilianAllegations:LnkCivAlleCivID', - 'NodeOpts' => '3' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 234, 'NodeTree' => '1', 'NodeParentID' => '473', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did anybody who was not arrested get a ticket or citation?', + 'NodePromptText' => '

Tickets / Citations

+

Did anybody who was not arrested get a ticket or citation?

', 'NodeDataStore' => 'AllegSilver:AlleSilCitationYN' ]); DB::table('SL_Node')->insert([ 'NodeID' => 235, 'NodeTree' => '1', - 'NodeParentID' => '234', + 'NodeParentID' => '2036', + 'NodeParentOrder' => '1', 'NodeType' => 'Radio', 'NodePromptText' => 'Do you think that any citations were wrongful or excessive?', 'NodePromptNotes' => 'Example of Excessive Citation: A motorist gets pulled over and cited for speeding. On the same ticket, the officer also cites him for "illegal window tint," "muffler violation," "seat belt violation," and "illegal lane change."', @@ -19712,19 +19811,18 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 237, 'NodeTree' => '1', - 'NodeParentID' => '543', - 'NodeParentOrder' => '1', + 'NodeParentID' => '2036', 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Which victim(s) were given excessive citations?', + 'NodePromptText' => 'Which victim(s) were given a citation?', 'NodeResponseSet' => 'LoopItems::Victims', - 'NodeDataStore' => 'LinksCivilianAllegations:LnkCivAlleCivID', + 'NodeDataStore' => 'Civilians:CivGivenCitation', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 238, 'NodeTree' => '1', 'NodeParentID' => '543', - 'NodeParentOrder' => '2', + 'NodeParentOrder' => '1', 'NodeType' => 'Long Text', 'NodePromptText' => 'What makes you think that these citations were excessive?', 'NodeDataStore' => 'Allegations:AlleDescription', @@ -19737,7 +19835,7 @@ public function run() 'NodeParentID' => '475', 'NodeParentOrder' => '1', 'NodeType' => 'Radio', - 'NodePromptText' => 'Do you think an officer took actions that did not follow appropriate policy or procedure?', + 'NodePromptText' => 'Do you think an officer took actions that did not follow appropriate policy or procedure? Leave blank if you described this in an earlier allegation.', 'NodePromptNotes' => 'Example of Procedure Violation: An officer parked his police vehicle in a handicap spot. There did not seem to be any emergency to justify this.', 'NodeDataStore' => 'AllegSilver:AlleSilProcedure' ]); @@ -19767,7 +19865,8 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '476', 'NodeType' => 'Radio', - 'NodePromptText' => '

Police are legally allowed to display a weapon if they feel threatened. But it\'s wrongful for police to use a weapon to intimidate people who aren\'t a threat.

+ 'NodePromptText' => '

Display of Weapon

+

Police are legally allowed to display a weapon if they feel threatened. But it\'s wrongful for police to use a weapon to intimidate people who aren\'t a threat.

Do you think an officer displayed a weapon (or a police dog) to wrongfully intimidate anybody? (This does not include any violent use of force. Answers in red are allegations.)

', 'NodePromptNotes' => 'Example: While questioning a pedestrian, the officer pointed a taser at her in a threatening manner.', 'NodeDataStore' => 'AllegSilver:AlleSilIntimidatingWeapon' @@ -19776,6 +19875,7 @@ public function run() 'NodeID' => 244, 'NodeTree' => '1', 'NodeParentID' => '546', + 'NodeParentOrder' => '2', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which officer(s) intimidated?', 'NodeResponseSet' => 'LoopItems::Officers', @@ -19797,7 +19897,6 @@ public function run() 'NodeID' => 246, 'NodeTree' => '1', 'NodeParentID' => '546', - 'NodeParentOrder' => '2', 'NodeType' => 'Radio', 'NodePromptText' => 'What type of weapon?', 'NodeResponseSet' => 'Definition::Intimidation Weapons', @@ -19821,8 +19920,7 @@ public function run() 'NodeParentID' => '854', 'NodeParentOrder' => '1', 'NodeType' => 'Radio', - 'NodePromptText' => '

Do you think an officer sexually assaulted anybody?

-

Sexual assault is any sexual act that a person is forced to engage in against their will. This includes any non-consensual sexual touching.

', + 'NodePromptText' => '

Do you think an officer sexually assaulted anybody? Sexual assault is any sexual act that a person is forced to engage in against their will. This includes any non-consensual sexual touching.

', 'NodePromptNotes' => 'Example of Sexual Assault: An officer put his hand down a motorist\'s pants, groping his genitals. He said he was looking for drugs.', 'NodeDataStore' => 'AllegSilver:AlleSilSexualAssault' ]); @@ -19830,6 +19928,7 @@ public function run() 'NodeID' => 249, 'NodeTree' => '1', 'NodeParentID' => '547', + 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which Officer(s)?', 'NodeResponseSet' => 'LoopItems::Officers', @@ -19840,7 +19939,6 @@ public function run() 'NodeID' => 250, 'NodeTree' => '1', 'NodeParentID' => '547', - 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which Victim(s)?', 'NodeResponseSet' => 'LoopItems::Victims', @@ -19863,7 +19961,8 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '478', 'NodeType' => 'Radio', - 'NodePromptText' => '

Do you think any officer(s) acted in a biased or discriminatory manner?

+ 'NodePromptText' => '

Biased Policing / Discrimination

+

Do you think any officer(s) acted in a biased or discriminatory manner?

An officer\'s conduct was based on a person\'s race, religion, age, gender, sexual orientation, disability, etc.

', 'NodePromptNotes' => 'Example of Discriminatory Conduct: An officer stops a black motorist in a primarily white neighborhood. The officer claimed he fit the description of a suspect.', 'NodeDataStore' => 'AllegSilver:AlleSilBias' @@ -19872,6 +19971,7 @@ public function run() 'NodeID' => 253, 'NodeTree' => '1', 'NodeParentID' => '548', + 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which officer(s) used discrimination?', 'NodeResponseSet' => 'LoopItems::Officers', @@ -19882,7 +19982,6 @@ public function run() 'NodeID' => 254, 'NodeTree' => '1', 'NodeParentID' => '548', - 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which victim(s) were discriminated against?', 'NodeResponseSet' => 'LoopItems::Victims', @@ -19917,7 +20016,8 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '481', 'NodeType' => 'Radio', - 'NodePromptText' => '

Was an officer discourteous in ways not included in other allegations?

+ 'NodePromptText' => '

Discourtesy

+

Was an officer discourteous in ways not included in other allegations?

This includes the use of profanity, offensive language, loss of temper, verbal threats, impatience, or any discourteous behavior.

', 'NodeDataStore' => 'AllegSilver:AlleSilDiscourteous' ]); @@ -19935,6 +20035,7 @@ public function run() 'NodeID' => 263, 'NodeTree' => '1', 'NodeParentID' => '551', + 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which officer(s) were discourteous?', 'NodeResponseSet' => 'LoopItems::Officers', @@ -19971,10 +20072,10 @@ public function run() 'NodePromptText' => '

Congratulations! You\'re almost done.

To make sure your official report gets the respect it deserves, double-check your spelling and grammar. Also, try your best to refer to your allegations within your story.

These are your allegations: [[List of Allegations]]

', - 'NodePromptAfter' => '
Please do not provide addresses, phone numbers, or emails here.

+ 'NodePromptAfter' => '
Please do not provide addresses, phone numbers, or emails here.

', 'NodeDataStore' => 'Complaints:ComSummary', 'NodeCharLimit' => '400', @@ -19994,12 +20095,9 @@ public function run() 'NodeID' => 269, 'NodeTree' => '1', 'NodeParentID' => '528', - 'NodeParentOrder' => '4', + 'NodeParentOrder' => '5', 'NodeType' => 'Checkbox', - 'NodePromptText' => '

Please Confirm

', - 'NodePromptAfter' => '', 'NodeOpts' => '5' ]); @@ -20007,6 +20105,7 @@ public function run() 'NodeID' => 270, 'NodeTree' => '1', 'NodeParentID' => '529', + 'NodeParentOrder' => '3', 'NodeType' => 'Instructions', 'NodePromptText' => '

All Done!

Taking you to your finished complaint ...

' ]); @@ -20014,7 +20113,6 @@ public function run() 'NodeID' => 272, 'NodeTree' => '1', 'NodeParentID' => '551', - 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which victim(s) experience discourtesy?', 'NodeResponseSet' => 'LoopItems::Victims', @@ -20026,7 +20124,8 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '457', 'NodeType' => 'Radio', - 'NodePromptText' => 'Where did this incident begin?', + 'NodePromptText' => '

Scene Information

+

Where did this incident begin?

', 'NodeResponseSet' => 'Definition::Scene Type', 'NodeDataStore' => 'Scenes:ScnType', 'NodeOpts' => '3' @@ -20045,11 +20144,12 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 280, 'NodeTree' => '1', - 'NodeParentID' => '457', - 'NodeParentOrder' => '6', + 'NodeParentID' => '2122', 'NodeType' => 'Uploads', - 'NodePromptText' => 'Please upload any photos, sketches, official police reports, or link to any videos.', - 'NodePromptNotes' => 'These should help describe the scene or show proof of what happened.', + 'NodePromptText' => '

Evidence Upload

+

Please upload any photos, sketches, police reports, warrants, official documents, and links to videos. These should help describe the scene or show proof of what happened. If police injured someone, provide photos and medical records.

+
+WARNING: Only share what you want investigators to see. Do not upload anyone’s private information without their permission.

We recommend that you set the privacy on injury photos to "public." But set medical documents to "private," so they\'re only visible to investigators.
', 'NodeDataStore' => 'Evidence:EvidID', 'NodeCharLimit' => '5', 'NodeOpts' => '3' @@ -20074,61 +20174,53 @@ public function run() 'NodeDataStore' => 'Scenes:ScnCCTVDesc', 'NodeOpts' => '3' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 286, - 'NodeTree' => '1', - 'NodeParentID' => '483', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

Next, you will dive deeper into your incident.

-

This will create a more complete picture of what happened.

It might feel like some questions are being repeated. But this process will help make sure we don\'t miss any important details.

' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 293, 'NodeTree' => '1', - 'NodeParentID' => '512', + 'NodeParentID' => '2030', 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Which officer(s) arrested [LoopItemLabel]?', + 'NodePromptText' => 'Which officer(s) made the arrest(s)?', 'NodeResponseSet' => 'LoopItems::Officers', 'NodeDataStore' => 'LinksOfficerEvents:LnkOffEveOffID' ]); DB::table('SL_Node')->insert([ 'NodeID' => 294, 'NodeTree' => '1', - 'NodeParentID' => '508', + 'NodeParentID' => '2047', 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Which officer(s) used [ForceType] force against [LoopItemLabel]?', + 'NodePromptText' => 'Which officer(s) used [ForceType] force?', 'NodeResponseSet' => 'LoopItems::Officers', 'NodeDataStore' => 'LinksOfficerEvents:LnkOffEveOffID' ]); DB::table('SL_Node')->insert([ 'NodeID' => 295, 'NodeTree' => '1', - 'NodeParentID' => '500', + 'NodeParentID' => '2029', 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Which officer(s) searched [LoopItemLabel]?', + 'NodePromptText' => 'Which officer(s) performed the search?', 'NodeResponseSet' => 'LoopItems::Officers', 'NodeDataStore' => 'LinksOfficerEvents:LnkOffEveOffID' ]); DB::table('SL_Node')->insert([ 'NodeID' => 296, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Which officer(s) stopped [LoopItemLabel]?', + 'NodePromptText' => 'Which officer(s) initiated the stop?', 'NodeResponseSet' => 'LoopItems::Officers', 'NodeDataStore' => 'LinksOfficerEvents:LnkOffEveOffID' ]); DB::table('SL_Node')->insert([ 'NodeID' => 297, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '3', 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Did an officer give a reason for the stop of [LoopItemLabel]?', + 'NodePromptText' => 'Did an officer give a reason for the stop?', 'NodeResponseSet' => 'Definition::Reason for Vehicle Stop', 'NodeDataStore' => 'StopReasons:StopReasReason' ]); @@ -20144,10 +20236,10 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 299, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '2', 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Did an officer give a reason for the stop of [LoopItemLabel]?', + 'NodePromptText' => 'Did an officer give a reason for the stop?', 'NodeResponseSet' => 'Definition::Reason for Pedestrian Stop', 'NodeDataStore' => 'StopReasons:StopReasReason' ]); @@ -20163,10 +20255,10 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 301, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '4', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did [LoopItemLabel] ask to leave?', + 'NodePromptText' => 'Did anybody ask to leave?', 'NodeInternalNotes' => 'NOT Home or Private Residence, or Workplace', 'NodeDataStore' => 'Stops:StopSubjectAskedToLeave' ]); @@ -20175,17 +20267,17 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '301', 'NodeType' => 'Text', - 'NodePromptText' => 'Describe what [LoopItemLabel] asked.', + 'NodePromptText' => 'Describe what they asked.', 'NodeDataStore' => 'Stops:StopSubjectStatementsDesc', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 303, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '5', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer ask for [LoopItemLabel]\'s ID?', + 'NodePromptText' => 'Did an officer ask for anybody\'s ID?', 'NodeDataStore' => 'Stops:StopRequestID' ]); DB::table('SL_Node')->insert([ @@ -20193,17 +20285,17 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '303', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did [LoopItemLabel] provide ID to an officer?', + 'NodePromptText' => 'Did anybody provide ID to an officer?', 'NodeDataStore' => 'Stops:StopRefuseID', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 305, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '6', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did [LoopItemLabel] ask for an officer\'s ID?', + 'NodePromptText' => 'Did anybody ask for an officer\'s ID?', 'NodePromptNotes' => 'Open Police Complaints does not usually recommend doing this.', 'NodeDataStore' => 'Stops:StopRequestOfficerID' ]); @@ -20219,7 +20311,7 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 307, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '13', 'NodeType' => 'Radio', 'NodePromptText' => 'Did an officer enter a private home or workplace?', @@ -20277,19 +20369,19 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 314, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '11', 'NodeType' => 'Radio', - 'NodePromptText' => 'Was [LoopItemLabel] frisked during this stop?', + 'NodePromptText' => 'Was anybody frisked during this stop?', 'NodeDataStore' => 'Stops:StopSubjectFrisk' ]); DB::table('SL_Node')->insert([ 'NodeID' => 315, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '12', 'NodeType' => 'Radio', - 'NodePromptText' => 'Was [LoopItemLabel] handcuffed during this stop?', + 'NodePromptText' => 'Was anybody handcuffed during this stop?', 'NodeDataStore' => 'Stops:StopSubjectHandcuffed', 'NodeOpts' => '3' ]); @@ -20298,26 +20390,17 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '315', 'NodeType' => 'Radio', - 'NodePromptText' => 'Was [LoopItemLabel] injured from being handcuffed?', + 'NodePromptText' => 'Was anybody injured from being handcuffed?', 'NodeDataStore' => 'Stops:StopStopSubjectHandcuffInjYN', 'NodeOpts' => '3' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 317, - 'NodeTree' => '1', - 'NodeParentID' => '316', - 'NodeType' => 'Uploads', - 'NodePromptText' => 'Please upload any injury photos or links to relevant video.', - 'NodeDataStore' => 'Stops:StopID', - 'NodeOpts' => '3' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 319, 'NodeTree' => '1', - 'NodeParentID' => '500', + 'NodeParentID' => '2029', 'NodeParentOrder' => '2', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer give a reason for searching [LoopItemLabel]?', + 'NodePromptText' => 'Did an officer give a reason for searching anybody?', 'NodeDataStore' => 'Searches:SrchStatedReason', 'NodeOpts' => '3' ]); @@ -20333,14 +20416,14 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 321, 'NodeTree' => '1', - 'NodeParentID' => '500', + 'NodeParentID' => '2029', 'NodeType' => 'Instructions', - 'NodePromptText' => '

Search/Seizure of [LoopItemLabel]:

' + 'NodePromptText' => '

More about the Search / Seizure:

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 322, 'NodeTree' => '1', - 'NodeParentID' => '500', + 'NodeParentID' => '2029', 'NodeParentOrder' => '3', 'NodeType' => 'Radio', 'NodePromptText' => 'Did an officer have a search warrant?', @@ -20356,20 +20439,10 @@ public function run() 'NodeDataStore' => 'Searches:SrchOfficerWarrantSay', 'NodeOpts' => '3' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 324, - 'NodeTree' => '1', - 'NodeParentID' => '1153', - 'NodeParentOrder' => '1', - 'NodeType' => 'Uploads', - 'NodePromptText' => 'Upload Warrant Photo, Scan, or PDF', - 'NodeDataStore' => 'EventSequence:EveID', - 'NodeOpts' => '3' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 325, 'NodeTree' => '1', - 'NodeParentID' => '500', + 'NodeParentID' => '2029', 'NodeParentOrder' => '4', 'NodeType' => 'Radio', 'NodePromptText' => 'Did an officer request permission to search anything?', @@ -20388,10 +20461,10 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 328, 'NodeTree' => '1', - 'NodeParentID' => '500', + 'NodeParentID' => '2029', 'NodeParentOrder' => '5', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did [LoopItemLabel] consent to the search?', + 'NodePromptText' => 'Did anybody consent to the search?', 'NodeDataStore' => 'Searches:SrchSubjectConsent', 'NodeOpts' => '3' ]); @@ -20400,14 +20473,14 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '328', 'NodeType' => 'Text', - 'NodePromptText' => 'What did [LoopItemLabel] say or do?', + 'NodePromptText' => 'What did they say or do?', 'NodeDataStore' => 'Searches:SrchSubjectSay', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 330, 'NodeTree' => '1', - 'NodeParentID' => '500', + 'NodeParentID' => '2029', 'NodeParentOrder' => '6', 'NodeType' => 'Radio', 'NodePromptText' => 'Did an officer make threats or lie to get permission to search?', @@ -20426,7 +20499,7 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 335, 'NodeTree' => '1', - 'NodeParentID' => '500', + 'NodeParentID' => '2029', 'NodeParentOrder' => '7', 'NodeType' => 'Radio', 'NodePromptText' => 'Was a K9 (dog) used during this search?', @@ -20435,10 +20508,10 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 336, 'NodeTree' => '1', - 'NodeParentID' => '500', + 'NodeParentID' => '2029', 'NodeParentOrder' => '8', 'NodeType' => 'Radio', - 'NodePromptText' => 'Was [LoopItemLabel] strip searched during this incident? This is a search for concealed items that removes some or all clothing to reveal intimate areas of the body. Please do not include searches that occurred at the police station.', + 'NodePromptText' => 'Was anybody strip searched during this incident? This is a search for concealed items that removes some or all clothing to reveal intimate areas of the body. Please do not include searches that occurred at the police station.', 'NodeDataStore' => 'Searches:SrchStrip', 'NodeOpts' => '3' ]); @@ -20454,7 +20527,7 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 338, 'NodeTree' => '1', - 'NodeParentID' => '505', + 'NodeParentID' => '2027', 'NodeParentOrder' => '1', 'NodeType' => 'Radio', 'NodePromptText' => 'Were any illegal items discovered in this search?', @@ -20473,14 +20546,14 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 343, 'NodeTree' => '1', - 'NodeParentID' => '508', + 'NodeParentID' => '2047', 'NodeType' => 'Instructions', - 'NodePromptText' => '

[ForceType] Force on [LoopItemLabel]:

' + 'NodePromptText' => '

More about the [ForceType]

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 344, 'NodeTree' => '1', - 'NodeParentID' => '508', + 'NodeParentID' => '2047', 'NodeParentOrder' => '2', 'NodeType' => 'Checkbox', 'NodePromptText' => 'What type(s) of control holds were used?', @@ -20491,7 +20564,7 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 345, 'NodeTree' => '1', - 'NodeParentID' => '508', + 'NodeParentID' => '2047', 'NodeParentOrder' => '3', 'NodeType' => 'Checkbox', 'NodePromptText' => 'What type(s) of body weapons were used?', @@ -20502,7 +20575,7 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 346, 'NodeTree' => '1', - 'NodeParentID' => '508', + 'NodeParentID' => '2047', 'NodeParentOrder' => '4', 'NodeType' => 'Checkbox', 'NodePromptText' => 'What type(s) of takedowns were used?', @@ -20513,7 +20586,7 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 347, 'NodeTree' => '1', - 'NodeParentID' => '508', + 'NodeParentID' => '2047', 'NodeParentOrder' => '5', 'NodeType' => 'Text', 'NodePromptText' => 'Describe the gun the best that you can.', @@ -20533,17 +20606,17 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 349, 'NodeTree' => '1', - 'NodeParentID' => '508', + 'NodeParentID' => '2047', 'NodeParentOrder' => '8', 'NodeType' => 'Text:Number', - 'NodePromptText' => 'How many times was [LoopItemLabel] struck with [ForceType] force?', + 'NodePromptText' => 'How many times was anybody struck with [ForceType] force?', 'NodePromptAfter' => '', 'NodeDataStore' => 'Force:ForHowManyTimes' ]); DB::table('SL_Node')->insert([ 'NodeID' => 350, 'NodeTree' => '1', - 'NodeParentID' => '508', + 'NodeParentID' => '2047', 'NodeParentOrder' => '9', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which parts of the body were struck?', @@ -20554,30 +20627,30 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 351, 'NodeTree' => '1', - 'NodeParentID' => '508', + 'NodeParentID' => '2047', 'NodeParentOrder' => '6', 'NodeType' => 'Radio', - 'NodePromptText' => 'Was [LoopItemLabel] handcuffed when [ForceType] force was used?', + 'NodePromptText' => 'Was anybody handcuffed when [ForceType] force was used?', 'NodeDataStore' => 'Force:ForWhileHandcuffed', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 352, 'NodeTree' => '1', - 'NodeParentID' => '508', + 'NodeParentID' => '2047', 'NodeParentOrder' => '7', 'NodeType' => 'Radio', - 'NodePromptText' => 'Was [LoopItemLabel] held down when [ForceType] force was used?', + 'NodePromptText' => 'Was anybody held down when [ForceType] force was used?', 'NodeDataStore' => 'Force:ForWhileHeldDown', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 358, 'NodeTree' => '1', - 'NodeParentID' => '1167', - 'NodeParentOrder' => '2', + 'NodeParentID' => '1444', + 'NodeParentOrder' => '1', 'NodeType' => 'Text', - 'NodePromptText' => 'Describe the injuries more, if needed.', + 'NodePromptText' => '
Describe more, if needed.', 'NodeDataStore' => 'Injuries:InjDescription', 'NodeOpts' => '3' ]); @@ -20585,19 +20658,20 @@ public function run() 'NodeID' => 359, 'NodeTree' => '1', 'NodeParentID' => '1444', - 'NodeType' => 'Checkbox', + 'NodeType' => 'Drop Down', 'NodePromptText' => '
Where on their body did this type of injury happen?', - 'NodeInternalNotes' => '"Where did these injuries happen?" (click areas of body) -"Please upload any injury photos available:" (Upload Tools) ("Limit of " displayed after 1) -"Describe the injury more, if needed:" (Text Field)', + 'NodeInternalNotes' => '"Where did these injuries happen?" (click areas of body) +"Please upload any injury photos available:" (Upload Tools) ("Limit of " displayed after 1) +"Describe the injury more, if needed:" (Text Field)', 'NodeResponseSet' => 'Definition::Body Part', - 'NodeDataStore' => 'InjuryBodyParts:InjBdyPart' + 'NodeDefault' => 'select one or more...', + 'NodeDataStore' => 'InjuryBodyParts:InjBdyPart', + 'NodeOpts' => '53' ]); DB::table('SL_Node')->insert([ 'NodeID' => 362, 'NodeTree' => '1', - 'NodeParentID' => '1170', - 'NodeParentOrder' => '1', + 'NodeParentID' => '2056', 'NodeType' => 'Radio', 'NodePromptText' => 'Did [LoopItemLabel]\'s injuries result in death?', 'NodeDataStore' => 'InjuryCare:InjCareResultInDeath', @@ -20606,10 +20680,10 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 364, 'NodeTree' => '1', - 'NodeParentID' => '1170', - 'NodeParentOrder' => '2', + 'NodeParentID' => '2056', + 'NodeParentOrder' => '1', 'NodeType' => 'Text', - 'NodePromptText' => 'Name of hospital where treated:', + 'NodePromptText' => 'Name of hospital where [LoopItemLabel] was treated:', 'NodeDataStore' => 'InjuryCare:InjCareHospitalTreated', 'NodeOpts' => '3' ]); @@ -20626,63 +20700,51 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 366, 'NodeTree' => '1', - 'NodeParentID' => '1170', - 'NodeParentOrder' => '3', + 'NodeParentID' => '2056', + 'NodeParentOrder' => '2', 'NodeType' => 'Text', - 'NodePromptText' => 'Doctor First Name', + 'NodePromptText' => '[LoopItemLabel]\'s Doctor First Name', 'NodeDataStore' => 'InjuryCare:InjCareDoctorNameFirst', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 367, 'NodeTree' => '1', - 'NodeParentID' => '1170', - 'NodeParentOrder' => '4', + 'NodeParentID' => '2056', + 'NodeParentOrder' => '3', 'NodeType' => 'Text', - 'NodePromptText' => 'Doctor Last Name', + 'NodePromptText' => '[LoopItemLabel]\'s Doctor Last Name', 'NodeDataStore' => 'InjuryCare:InjCareDoctorNameLast', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 368, 'NodeTree' => '1', - 'NodeParentID' => '1170', - 'NodeParentOrder' => '5', + 'NodeParentID' => '2056', + 'NodeParentOrder' => '4', 'NodeType' => 'Email', - 'NodePromptText' => 'Doctor Email', + 'NodePromptText' => '[LoopItemLabel]\'s Doctor Email', 'NodeDataStore' => 'InjuryCare:InjCareDoctorEmail', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 369, 'NodeTree' => '1', - 'NodeParentID' => '1170', - 'NodeParentOrder' => '6', + 'NodeParentID' => '2056', + 'NodeParentOrder' => '5', 'NodeType' => 'Text', - 'NodePromptText' => 'Doctor Phone', + 'NodePromptText' => '[LoopItemLabel]\'s Doctor Phone', 'NodeDataStore' => 'InjuryCare:InjCareDoctorPhone', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 370, 'NodeTree' => '1', - 'NodeParentID' => '1170', - 'NodeParentOrder' => '7', + 'NodeParentID' => '2053', 'NodeType' => 'Radio', 'NodePromptText' => 'Were any medical emergency staff on scene?', 'NodeDataStore' => 'InjuryCare:InjCareEmergencyOnScene' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 371, - 'NodeTree' => '1', - 'NodeParentID' => '1170', - 'NodeParentOrder' => '8', - 'NodeType' => 'Uploads', - 'NodePromptText' => '

Please upload any medical documents related to these injuries.

-

PDF documents are best. But you can also upload scans or photos of paper documents. Only share things that you are comfortable with investigators seeing. Do not upload anybody else\'s private information without their permission.

-

We recommend that you set the privacy on injury photos to "public." But medical documents should be set to "private," so they\'re only visible to investigators.

', - 'NodeDataStore' => 'InjuryCare:InjCareID' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 372, 'NodeTree' => '1', @@ -20745,17 +20807,17 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 378, 'NodeTree' => '1', - 'NodeParentID' => '512', + 'NodeParentID' => '2030', 'NodeType' => 'Instructions', - 'NodePromptText' => '

Arrest of [LoopItemLabel]:

' + 'NodePromptText' => '

More about the Arrest:

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 379, 'NodeTree' => '1', - 'NodeParentID' => '512', + 'NodeParentID' => '2030', 'NodeParentOrder' => '2', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer say why they arrested [LoopItemLabel]?', + 'NodePromptText' => 'Did an officer say why they made the arrest(s)?', 'NodeDataStore' => 'Arrests:ArstStatedReason', 'NodeOpts' => '3' ]); @@ -20768,23 +20830,13 @@ public function run() 'NodeDataStore' => 'Arrests:ArstStatedReasonDesc', 'NodeOpts' => '3' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 381, - 'NodeTree' => '1', - 'NodeParentID' => '512', - 'NodeParentOrder' => '3', - 'NodeType' => 'Radio', - 'NodePromptText' => 'Did the officer read [LoopItemLabel]\'s Miranda rights?', - 'NodeDataStore' => 'Arrests:ArstMiranda', - 'NodeOpts' => '3' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 385, 'NodeTree' => '1', - 'NodeParentID' => '512', - 'NodeParentOrder' => '5', + 'NodeParentID' => '2030', + 'NodeParentOrder' => '4', 'NodeType' => 'Radio', - 'NodePromptText' => 'Were any charges filed against [LoopItemLabel] for this incident?', + 'NodePromptText' => 'Were any charges filed against anybody for this incident?', 'NodeDataStore' => 'Arrests:ArstChargesFiled' ]); DB::table('SL_Node')->insert([ @@ -20792,7 +20844,7 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '1155', 'NodeType' => 'Checkbox', - 'NodePromptText' => 'What charges were filed against [LoopItemLabel]?', + 'NodePromptText' => 'What charges were filed against anybody?', 'NodePromptNotes' => 'These terms vary, so please choose the charges that look the most similar.', 'NodeResponseSet' => 'Definition::Arrest Charges', 'NodeDataStore' => 'Charges:ChrgCharges', @@ -20805,7 +20857,7 @@ public function run() 'NodeParentOrder' => '1', 'NodeType' => 'Text', 'NodePromptText' => 'Were there other charges not on this list?', - 'NodeDataStore' => 'Civilians:CivChargesOther', + 'NodeDataStore' => 'Arrests:ArstChargesOther', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ @@ -20814,14 +20866,14 @@ public function run() 'NodeParentID' => '1155', 'NodeParentOrder' => '2', 'NodeType' => 'Radio', - 'NodePromptText' => 'Were ALL the charges dropped before [LoopItemLabel] was released?', + 'NodePromptText' => 'Were ALL the charges dropped before everybody was released?', 'NodeDataStore' => 'Arrests:ArstNoChargesFiled', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 392, 'NodeTree' => '1', - 'NodeParentID' => '523', + 'NodeParentID' => '2058', 'NodeParentOrder' => '2', 'NodeType' => 'Checkbox', 'NodePromptText' => 'What citation charges were filed against [LoopItemLabel]?', @@ -20833,7 +20885,7 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 393, 'NodeTree' => '1', - 'NodeParentID' => '523', + 'NodeParentID' => '2058', 'NodeParentOrder' => '3', 'NodeType' => 'Checkbox', 'NodePromptText' => 'What citation charges were filed against [LoopItemLabel]?', @@ -20844,7 +20896,7 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 394, 'NodeTree' => '1', - 'NodeParentID' => '523', + 'NodeParentID' => '2058', 'NodeParentOrder' => '4', 'NodeType' => 'Text', 'NodePromptText' => 'Were there other charges not on this list?', @@ -20854,22 +20906,19 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 400, 'NodeTree' => '1', - 'NodeParentID' => '153', - 'NodeType' => 'Loop Root', - 'NodePromptText' => '

Now let\'s reveal important details of the citations given.

', - 'NodePromptNotes' => 'all-citations', - 'NodePromptAfter' => 'Provide Citation Details - Your Complaint::M::::M::::M::', - 'NodeDataBranch' => 'Citations', + 'NodeParentID' => '523', + 'NodeType' => 'Loop Cycle', + 'NodeResponseSet' => 'LoopItems::Victims', + 'NodeDataBranch' => 'Civilians', 'NodeDataStore' => 'Stops:StopID' ]); DB::table('SL_Node')->insert([ 'NodeID' => 402, 'NodeTree' => '1', - 'NodeParentID' => '505', + 'NodeParentID' => '2027', 'NodeParentOrder' => '2', 'NodeType' => 'Radio', - 'NodePromptText' => 'Was any of [LoopItemLabel]\'s property seized?', - 'NodePromptNotes' => 'This does not include illegal items.', + 'NodePromptText' => 'Was anybody\'s property seized? This does not include illegal items.', 'NodeDataStore' => 'Searches:SrchSeized', 'NodeOpts' => '3' ]); @@ -20896,17 +20945,17 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 405, 'NodeTree' => '1', - 'NodeParentID' => '505', + 'NodeParentID' => '2027', 'NodeType' => 'Instructions', - 'NodePromptText' => '

Search/Seizure of [LoopItemLabel]:

' + 'NodePromptText' => '

About more about the Search / Seizure:

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 406, 'NodeTree' => '1', - 'NodeParentID' => '505', + 'NodeParentID' => '2027', 'NodeParentOrder' => '3', 'NodeType' => 'Radio', - 'NodePromptText' => 'Was any of [LoopItemLabel]\'s property damaged?', + 'NodePromptText' => 'Was anybody\'s property damaged?', 'NodeDataStore' => 'Searches:SrchDamage', 'NodeOpts' => '3' ]); @@ -20922,10 +20971,10 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 410, 'NodeTree' => '1', - 'NodeParentID' => '196', - 'NodeParentOrder' => '7', + 'NodeParentID' => '6', + 'NodeParentOrder' => '5', 'NodeType' => 'Branch Title', - 'NodePromptText' => 'Injuries', + 'NodePromptText' => 'Injuries & Medical Care', 'NodePromptNotes' => 'review-your-story' ]); DB::table('SL_Node')->insert([ @@ -20940,48 +20989,28 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 412, 'NodeTree' => '1', - 'NodeParentID' => '523', + 'NodeParentID' => '2058', 'NodeType' => 'Instructions', - 'NodePromptText' => '

Citations against [LoopItemLabel]:

' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 413, - 'NodeTree' => '1', - 'NodeParentID' => '517', - 'NodeParentOrder' => '2', - 'NodeType' => 'Uploads', - 'NodePromptText' => 'Please upload any injury photos or links to relevant video.', - 'NodeDataStore' => 'Injuries:InjID', - 'NodeOpts' => '3' + 'NodePromptText' => '

More about citations against [LoopItemLabel]:

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 414, 'NodeTree' => '1', 'NodeParentID' => '410', 'NodeParentOrder' => '1', - 'NodeType' => 'Loop Root', - 'NodePromptText' => '

Revealing important details everyone\'s medical care.

-

The blue "Next Medical Care Details" button will take you through each person. You can use the gray buttons later to edit anything you need.

', - 'NodePromptNotes' => 'gold-info-all-medical-care', - 'NodePromptAfter' => 'Provide Medical Care Details - Your Complaint::M::::M::::M::', + 'NodeType' => 'Page', + 'NodePromptNotes' => 'gold-details-injury-medical-care', + 'NodePromptAfter' => 'Gold Injury Details - Your Complaint::M::::M::::M::', 'NodeResponseSet' => 'LoopItems::Medical Care', - 'NodeDataBranch' => 'Medical Care', 'NodeDataStore' => 'InjuryCare:InjCareID' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 415, - 'NodeTree' => '1', - 'NodeParentID' => '1170', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

[LoopItemLabel]\'s Medical Care

' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 416, 'NodeTree' => '1', 'NodeParentID' => '463', 'NodeType' => 'Instructions', - 'NodePromptText' => '

Who\'s Involved: Police Officers

-

Next, you\'ll share info about the police departments and officers, or private security firms, linked to the incident. This will help us get your complaint to the right place! Most questions are optional.

' + 'NodePromptText' => '

Who\'s Involved: Police Officers

+

Next, you\'ll share info about the police departments, officers, or private security linked to the incident. This will help us get your complaint to the right place. Most questions are optional.

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 419, @@ -21023,20 +21052,20 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 424, 'NodeTree' => '1', - 'NodeParentID' => '523', + 'NodeParentID' => '2058', 'NodeParentOrder' => '1', 'NodeType' => 'Text', 'NodePromptText' => 'What is the citation number?', - 'NodeDataStore' => 'Stops:StopCitationNumber', + 'NodeDataStore' => 'Civilians:CivCitationNumber', 'NodeOpts' => '3' ]); DB::table('SL_Node')->insert([ 'NodeID' => 425, 'NodeTree' => '1', - 'NodeParentID' => '862', + 'NodeParentID' => '2119', 'NodeParentOrder' => '3', 'NodeType' => 'Radio', - 'NodePromptText' => 'Were any officers injured during this use of force incident?', + 'NodePromptText' => 'Were any officers injured during this incident?', 'NodeDataStore' => 'Complaints:ComOfficerInjured' ]); DB::table('SL_Node')->insert([ @@ -21053,7 +21082,8 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '475', 'NodeType' => 'Radio', - 'NodePromptText' => 'Do you think an officer neglected their duty by failing to take appropriate action? These are things an officer should have done, but didn\'t do.', + 'NodePromptText' => '

Wrongful Action or Inaction

+

Do you think an officer neglected their duty by failing to take appropriate action? These are things an officer should have done but didn\'t do.

', 'NodePromptNotes' => 'Example of Neglect of Duty: A woman is groped on the street by an unknown man. When the police arrive, they refuse to file an official report or investigate.', 'NodeDataStore' => 'AllegSilver:AlleSilNeglectDuty' ]); @@ -21148,7 +21178,7 @@ public function run() 'NodeParentID' => '443', 'NodeParentOrder' => '1', 'NodeType' => 'Radio', - 'NodePromptText' => 'Does anybody involved want us to try to match them with a lawyer?', + 'NodePromptText' => 'Does anybody involved want us to try to match them with attorneys and legal experts?', 'NodePromptNotes' => 'If we find a match, we will share your complaint and contact information with them.', 'NodeDataStore' => 'Complaints:ComAttorneyWant', 'NodeOpts' => '15' @@ -21169,8 +21199,7 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '461', 'NodeType' => 'Instructions', - 'NodePromptText' => '

Victim #[LoopItemCnt]:

', - 'NodePromptNotes' => 'Most questions are optional.' + 'NodePromptText' => '

Victim #[LoopItemCnt]:

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 447, @@ -21373,7 +21402,8 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 473, 'NodeTree' => '1', - 'NodeParentID' => '202', + 'NodeParentID' => '201', + 'NodeParentOrder' => '1', 'NodeType' => 'Page', 'NodePromptText' => 'Allegation: Excessive Citation', 'NodePromptNotes' => 'allegation-citation', @@ -21428,25 +21458,6 @@ public function run() 'NodePromptAfter' => 'GO GOLD! - Your Complaint::M::::M::::M::', 'NodeCharLimit' => '-1' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 483, - 'NodeTree' => '1', - 'NodeParentID' => '196', - 'NodeType' => 'Page', - 'NodePromptText' => 'Next: What Happened, Gold Version', - 'NodePromptNotes' => 'next-what-happened-gold', - 'NodePromptAfter' => 'Next: What Happened, Gold Version - Your Complaint::M::::M::::M::' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 484, - 'NodeTree' => '1', - 'NodeParentID' => '196', - 'NodeParentOrder' => '1', - 'NodeType' => 'Page', - 'NodePromptText' => 'What Happened (Gold)', - 'NodePromptNotes' => 'did-these-things-happen-gold', - 'NodePromptAfter' => 'What Happened (Gold) - Your Complaint::M::::M::::M::' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 488, 'NodeTree' => '1', @@ -21459,7 +21470,8 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 500, 'NodeTree' => '1', - 'NodeParentID' => '150', + 'NodeParentID' => '149', + 'NodeParentOrder' => '2', 'NodeType' => 'Page', 'NodePromptText' => 'Search: Reason Given, Content', 'NodePromptNotes' => 'gold-info-search-and-consent', @@ -21468,8 +21480,8 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 505, 'NodeTree' => '1', - 'NodeParentID' => '150', - 'NodeParentOrder' => '4', + 'NodeParentID' => '149', + 'NodeParentOrder' => '1', 'NodeType' => 'Page', 'NodePromptText' => 'Search: Property Damage/Seizure', 'NodePromptNotes' => 'gold-info-property-seized-or-damaged', @@ -21479,15 +21491,16 @@ public function run() 'NodeID' => 508, 'NodeTree' => '1', 'NodeParentID' => '151', + 'NodeParentOrder' => '1', 'NodeType' => 'Page', 'NodePromptText' => 'Gold Info: Use of Force', - 'NodePromptNotes' => 'gold-info-use-of-force', - 'NodePromptAfter' => 'Gold Info: Use of Force - Your Complaint::M::::M::::M::' + 'NodePromptNotes' => 'gold-details-use-of-force', + 'NodePromptAfter' => 'Gold Details: Use of Force - Your Complaint::M::::M::::M::' ]); DB::table('SL_Node')->insert([ 'NodeID' => 512, 'NodeTree' => '1', - 'NodeParentID' => '152', + 'NodeParentID' => '153', 'NodeType' => 'Page', 'NodePromptText' => 'Arrest: Reason Given, Miranda Rights', 'NodePromptNotes' => 'gold-info-arrest', @@ -21505,7 +21518,7 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 520, 'NodeTree' => '1', - 'NodeParentID' => '1167', + 'NodeParentID' => '1162', 'NodeType' => 'Radio', 'NodePromptText' => '

Did [LoopItemLabel] receive medical care?

', 'NodeDataStore' => 'Civilians:CivHasInjuryCare' @@ -21513,7 +21526,8 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 523, 'NodeTree' => '1', - 'NodeParentID' => '400', + 'NodeParentID' => '153', + 'NodeParentOrder' => '1', 'NodeType' => 'Page', 'NodePromptText' => 'Citation Details', 'NodePromptNotes' => 'gold-info-citations', @@ -21611,15 +21625,6 @@ public function run() 'NodeDataBranch' => 'Allegations', 'NodeDataStore' => 'Allegations:AlleType' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 542, - 'NodeTree' => '1', - 'NodeParentID' => '232', - 'NodeType' => 'Data Manip: Wrap', - 'NodeResponseSet' => '131', - 'NodeDataBranch' => 'Allegations', - 'NodeDataStore' => 'Allegations:AlleType' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 543, 'NodeTree' => '1', @@ -21692,15 +21697,6 @@ public function run() 'NodeDataBranch' => 'Allegations', 'NodeDataStore' => 'Allegations:AlleType' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 556, - 'NodeTree' => '1', - 'NodeParentID' => '381', - 'NodeType' => 'Data Manip: Wrap', - 'NodeResponseSet' => '131', - 'NodeDataBranch' => 'Allegations', - 'NodeDataStore' => 'Allegations:AlleType' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 561, 'NodeTree' => '1', @@ -21733,16 +21729,7 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '458', 'NodeType' => 'Instructions', - 'NodePromptText' => '

About you:

' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 579, - 'NodeTree' => '1', - 'NodeParentID' => '512', - 'NodeParentOrder' => '6', - 'NodeType' => 'Hidden Field', - 'NodeDefault' => 'Y', - 'NodeDataStore' => 'EventSequence:EveUserFinished' + 'NodePromptText' => '

About You

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 580, @@ -21766,7 +21753,7 @@ public function run() 'NodeID' => 591, 'NodeTree' => '1', 'NodeParentID' => '1172', - 'NodeParentOrder' => '1', + 'NodeParentOrder' => '2', 'NodeType' => 'Radio', 'NodePromptText' => 'Do you think the arrest charges filed against anybody were a form of retaliation?', 'NodePromptNotes' => 'Example of Retaliatory Charges: Upset about the arrest of his wife, a man accidentally shoves an officer. Another officer responds by violently arresting the man. He\'s charged with "disturbing the peace," "resisting arrest," and "assaulting an officer."', @@ -21785,6 +21772,7 @@ public function run() 'NodeID' => 593, 'NodeTree' => '1', 'NodeParentID' => '592', + 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which officer(s) used retaliation?', 'NodeResponseSet' => 'LoopItems::Officers', @@ -21794,7 +21782,6 @@ public function run() 'NodeID' => 594, 'NodeTree' => '1', 'NodeParentID' => '592', - 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which victim(s) experienced retaliation?', 'NodeResponseSet' => 'LoopItems::Victims', @@ -21823,10 +21810,10 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 600, 'NodeTree' => '1', - 'NodeParentID' => '512', - 'NodeParentOrder' => '4', + 'NodeParentID' => '2030', + 'NodeParentOrder' => '3', 'NodeType' => 'Radio', - 'NodePromptText' => 'Was [LoopItemLabel] strip searched at the police station? This is a search for concealed items that removes some or all clothing to reveal intimate areas of the body.', + 'NodePromptText' => 'Was anybody strip searched at the police station? This is a search for concealed items that removes some or all clothing to reveal intimate areas of the body.', 'NodeDataStore' => 'Arrests:ArstStrip' ]); DB::table('SL_Node')->insert([ @@ -21902,23 +21889,13 @@ public function run() 'NodeParentID' => '865', 'NodeType' => 'Radio', 'NodePromptText' => 'Did [LoopItemLabel] have a weapon?', - 'NodeDataStore' => 'Civilians:CivVictimHadWeapon' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 617, - 'NodeTree' => '1', - 'NodeParentID' => '1156', - 'NodeType' => 'Radio', - 'NodePromptText' => 'What type of weapon?', 'NodeResponseSet' => 'Definition::Civilian Weapons', - 'NodeDataStore' => 'Civilians:CivVictimWhatWeapon', - 'NodeTextSuggest' => 'Intimidation Weapons' + 'NodeDataStore' => 'Civilians:CivVictimWhatWeapon' ]); DB::table('SL_Node')->insert([ 'NodeID' => 618, 'NodeTree' => '1', - 'NodeParentID' => '1156', - 'NodeParentOrder' => '1', + 'NodeParentID' => '616', 'NodeType' => 'Radio', 'NodePromptText' => 'Did [LoopItemLabel] use the weapon?', 'NodeResponseSet' => 'Definition::Intimidating Displays Of Weapon', @@ -21927,38 +21904,38 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 620, 'NodeTree' => '1', - 'NodeParentID' => '862', + 'NodeParentID' => '2119', 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Select any of these types of force used against an officer:', + 'NodePromptText' => 'Select any of these types of force used against an officer. (Leave blank if none.)', 'NodeResponseSet' => 'Definition::Force Type - Body Weapons', 'NodeDataStore' => 'CivWeapons:CivWeapBodyWeapon' ]); DB::table('SL_Node')->insert([ 'NodeID' => 622, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '7', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer give [LoopItemLabel] an alcohol breath test?', + 'NodePromptText' => 'Did an officer give anybody an alcohol breath test?', 'NodeDataStore' => 'Stops:StopBreathAlcohol' ]); DB::table('SL_Node')->insert([ 'NodeID' => 623, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '8', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer give [LoopItemLabel] a marijuana breath test?', + 'NodePromptText' => 'Did an officer give anybody a marijuana breath test?', 'NodeDataStore' => 'Stops:StopBreathCannabis' ]); DB::table('SL_Node')->insert([ 'NodeID' => 624, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '9', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer collect [LoopItemLabel]\'s saliva?', + 'NodePromptText' => 'Did an officer collect anybody\'s saliva?', 'NodeDataStore' => 'Stops:StopSalivaTest' ]); DB::table('SL_Node')->insert([ @@ -21966,7 +21943,7 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '622', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did the officer say [LoopItemLabel] failed an alcohol breath test?', + 'NodePromptText' => 'Did the officer say anybody failed an alcohol breath test?', 'NodeDataStore' => 'Stops:StopBreathAlcoholFailed' ]); DB::table('SL_Node')->insert([ @@ -21974,16 +21951,16 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '623', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did the officer say [LoopItemLabel] failed a marijuana breath test?', + 'NodePromptText' => 'Did the officer say anybody failed a marijuana breath test?', 'NodeDataStore' => 'Stops:StopBreathCannabisFailed' ]); DB::table('SL_Node')->insert([ 'NodeID' => 627, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeParentOrder' => '10', 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer give [LoopItemLabel] any other sobriety tests?', + 'NodePromptText' => 'Did an officer give anybody any other sobriety tests?', 'NodeDataStore' => 'Stops:StopSobrietyOther' ]); DB::table('SL_Node')->insert([ @@ -22224,15 +22201,15 @@ public function run() 'NodeTree' => '1', 'NodeParentID' => '482', 'NodeType' => 'Instructions', - 'NodePromptText' => ' -

Great Job! Want To Go Gold? (It\'s Free!)

-

You have completed a solid complaint. This includes basic info that most departments need to investigate your complaint.

-

But here are the benefits of taking a few more minutes to create a GOLD STAR complaint ...

+ 'NodePromptText' => ' +

Want To Go Gold?

+

Great Job! You have completed a solid complaint. This includes basic info that most departments need to investigate your complaint.

+

But here are the benefits of taking a few more minutes to create a free GOLD LEVEL complaint ...

    -
  • Dive deeper into your incident to paint a more complete picture
  • +
  • Dive deeper into your incident to see a more complete picture
  • Create a more complete complaint that\'s even stronger for investigators
  • -
  • Receive custom information on the many things you can learn from this police encounter
  • -
  • Helps us to better track problematic police behavior in your community and nationwide!
  • +
  • Get recommended articles and videos based on your report
  • +
  • Helps us to better track problematic police behavior in your community and nationwide
', 'NodeOpts' => '37' ]); @@ -22313,32 +22290,29 @@ public function run() DB::table('SL_Node')->insert([ 'NodeID' => 687, 'NodeTree' => '1', - 'NodeParentID' => '528', + 'NodeParentID' => '2124', 'NodeType' => 'Instructions', 'NodePromptText' => '

Confirm Your Complaint

Below is a preview of your finished complaint. Remember that we will never publish anyone\'s private information. This includes addresses, phone numbers, emails, etc.

-
-

This is what police oversight investigators will see:

-
' +

This is what police oversight investigators will see:

+' ]); DB::table('SL_Node')->insert([ 'NodeID' => 688, 'NodeTree' => '1', - 'NodeParentID' => '528', + 'NodeParentID' => '2124', 'NodeParentOrder' => '1', 'NodeType' => 'Instructions', 'NodePromptText' => '

Confirm Your Complaint

Remember that we will never publish anything in your private complaint that could be used for personal identification. This includes your story and all open-ended questions.

-
-

This is what police oversight investigators will see:

-
' +

This is what police oversight investigators will see:

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 694, 'NodeTree' => '1', 'NodeParentID' => '464', 'NodeType' => 'Instructions', - 'NodePromptText' => '

Find & Select A Police Department

+ 'NodePromptText' => '

Find & Select a Police Department

Please search for a police department, agency, or private security firm at the scene. Try typing the department name, city, or county. Then select the correct department below. *required

' ]); DB::table('SL_Node')->insert([ @@ -22350,20 +22324,12 @@ public function run() 'NodePromptText' => 'The Scene', 'NodePromptNotes' => 'the-scene' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 708, - 'NodeTree' => '1', - 'NodeParentID' => '454', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

Your Story Matters

-

Please create a login. It will let you finish your complaint later, if we get interrupted. It is also important so we can contact you about the progress of your complaint.

' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 715, 'NodeTree' => '1', - 'NodeParentID' => '488', + 'NodeParentID' => '2026', 'NodeType' => 'Instructions', - 'NodePromptText' => '

Stop/Questioning of [LoopItemLabel]:

' + 'NodePromptText' => '

More about the Stop / Questioning:

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 726, @@ -22371,7 +22337,7 @@ public function run() 'NodeParentID' => '1199', 'NodeType' => 'Text', 'NodePromptText' => 'Please give a name or a nickname for this victim:', - 'NodePromptNotes' => 'This shortcut will help us refer to them in later questions. For example, "Jordan" or "Red Hat Man." Please try to keep this professional. ;-)', + 'NodePromptNotes' => 'This shortcut will help us refer to them in later questions. For example, "Jordan" or "Red Hat Man." Please try to keep this professional.', 'NodeDataStore' => 'PersonContact:PrsnNickname', 'NodeOpts' => '41' ]); @@ -22381,7 +22347,7 @@ public function run() 'NodeParentID' => '1201', 'NodeType' => 'Text', 'NodePromptText' => 'Please give a name or a nickname for this witness:', - 'NodePromptNotes' => 'This shortcut will help us refer to them in later questions. For example, "Jordan" or "Red Hat Man". Please try to keep this professional. ;-)', + 'NodePromptNotes' => 'This shortcut will help us refer to them in later questions. For example, "Jordan" or "Red Hat Man". Please try to keep this professional.', 'NodeDataStore' => 'PersonContact:PrsnNickname', 'NodeOpts' => '41' ]); @@ -22391,7 +22357,7 @@ public function run() 'NodeParentID' => '1203', 'NodeType' => 'Text', 'NodePromptText' => 'Please give a name or a nickname for this officer:', - 'NodePromptNotes' => 'This shortcut will help us refer to them in later questions. (For example, "Tall Cop" or "Undercover Woman.") Please keep this PG-13!', + 'NodePromptNotes' => 'This shortcut will help us refer to them in later questions. (For example, "Tall Cop" or "Undercover Woman.") Please try to keep this professional.', 'NodeDataStore' => 'PersonContact:PrsnNickname', 'NodeOpts' => '41' ]); @@ -22403,116 +22369,22 @@ public function run() 'NodeType' => 'Data Manip: Wrap', 'NodeDataBranch' => 'PhysicalDesc' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 731, - 'NodeTree' => '1', - 'NodeParentID' => '484', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

What Happened?

-

Select which types of events happened to which victims during this incident. This will map out much of your custom, gold star complaint.

' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 732, - 'NodeTree' => '1', - 'NodeParentID' => '484', - 'NodeParentOrder' => '2', - 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Did an officer pull over a vehicle, detain, frisk, or question anybody?', - 'NodeResponseSet' => 'LoopItems::Victims' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 733, - 'NodeTree' => '1', - 'NodeParentID' => '484', - 'NodeParentOrder' => '6', - 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Did an officer search anybody\'s vehicle, home, person, or property? Or was any property seized?', - 'NodeResponseSet' => 'LoopItems::Victims' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 734, - 'NodeTree' => '1', - 'NodeParentID' => '484', - 'NodeParentOrder' => '11', - 'NodeType' => 'Loop Cycle', - 'NodeResponseSet' => 'LoopItems::Victims', - 'NodeDataBranch' => 'Civilians' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 735, - 'NodeTree' => '1', - 'NodeParentID' => '484', - 'NodeParentOrder' => '14', - 'NodeType' => 'Loop Cycle', - 'NodeResponseSet' => 'LoopItems::Victims', - 'NodeDataBranch' => 'Civilians' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 736, - 'NodeTree' => '1', - 'NodeParentID' => '484', - 'NodeParentOrder' => '3', - 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Did an officer stop, detain, frisk, or question anybody?', - 'NodeResponseSet' => 'LoopItems::Victims' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 737, - 'NodeTree' => '1', - 'NodeParentID' => '484', - 'NodeParentOrder' => '5', - 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer pull over a vehicle, detain, frisk, or question [LoopItemLabel:Victims]?', - 'NodeOpts' => '5' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 738, - 'NodeTree' => '1', - 'NodeParentID' => '484', - 'NodeParentOrder' => '4', - 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer stop, detain, frisk, or question [LoopItemLabel:Victims]?', - 'NodeOpts' => '5' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 739, - 'NodeTree' => '1', - 'NodeParentID' => '484', - 'NodeParentOrder' => '7', - 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer search a vehicle, home, person, or property? Or was any property seized?', - 'NodeOpts' => '5' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 740, - 'NodeTree' => '1', - 'NodeParentID' => '734', - 'NodeType' => 'Radio', - 'NodePromptText' => 'Did an officer use any weapons or physical force against [LoopItemLabel]?', - 'NodeOpts' => '5' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 741, - 'NodeTree' => '1', - 'NodeParentID' => '735', - 'NodeType' => 'Radio', - 'NodePromptText' => 'Did any of these things happen to [LoopItemLabel] during this incident?', - 'NodeOpts' => '5' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 742, 'NodeTree' => '1', - 'NodeParentID' => '740', + 'NodeParentID' => '2032', + 'NodeParentOrder' => '2', 'NodeType' => 'Checkbox', - 'NodePromptText' => 'Which types of force were used against [LoopItemLabel]?', + 'NodePromptText' => 'Which types of force were used by an officer?', 'NodeResponseSet' => 'Definition::Force Type', + 'NodeDataStore' => 'Force:ForType', 'NodeOpts' => '5' ]); DB::table('SL_Node')->insert([ 'NodeID' => 743, 'NodeTree' => '1', - 'NodeParentID' => '484', - 'NodeParentOrder' => '12', + 'NodeParentID' => '2032', + 'NodeParentOrder' => '3', 'NodeType' => 'Radio', 'NodePromptText' => 'Did an officer use any weapons or physical force against a pet or other animal?' ]); @@ -22668,13 +22540,18 @@ public function run() 'NodeID' => 767, 'NodeTree' => '1', 'NodeParentID' => '528', - 'NodeParentOrder' => '5', + 'NodeParentOrder' => '4', 'NodeType' => 'Checkbox', - 'NodePromptAfter' => ' + 'NodePromptText' => '

Please Confirm

', + 'NodePromptAfter' => ' ', - 'NodeOpts' => '5' + 'NodeOpts' => '65' ]); DB::table('SL_Node')->insert([ 'NodeID' => 769, @@ -22690,19 +22567,18 @@ public function run() 'NodeID' => 770, 'NodeTree' => '7', 'NodeParentID' => '1008', + 'NodeParentOrder' => '1', 'NodeType' => 'Instructions', - 'NodePromptText' => '

 

-

Filing Your Complaint

-

This free web app will allow you to ...

+ 'NodePromptText' => '

This free web app will help you to ...

  • Prepare and save a complete police misconduct report.
  • File your report with the right police oversight agency.
  • -
  • Get matched with civil rights attorneys.
  • +
  • Get matched with legal help.
  • Publish your complaint online and share on social media.
  • Upload photos, documents, video, and other evidence.
-

By completing this process, you must confirm that, to the best of your knowledge, the information in this complaint is truthful and accurate.

-
+

By completing this process, you confirm that, to the best of your knowledge, the information in this complaint is truthful and accurate.

+

Your Privacy Options:

When you begin your new complaint, you\'ll have three privacy options to control what personal information you want to share.

    @@ -22711,26 +22587,19 @@ public function run()
  • No Names Public
    You don’t want to publish any names to this website. This includes police officers’ names and badge numbers too.
  • -Anonymous
    You need your complaint to be completely anonymous, even though it will be harder to investigate. No names will be published on this website. Neither Open Police staff nor investigators will be able to contact you. Any details that could be used for personal identification may be deleted from the database.
  • +Anonymous
    You need your complaint to be anonymous, even though it will be harder to investigate. No names will be published on this website. Neither Open Police staff nor investigators will be able to contact you. Any details that could be used for personal identification may be deleted from the database.
', - 'NodePromptAfter' => '' + 'NodePromptAfter' => '', + 'NodeOpts' => '89' ]); DB::table('SL_Node')->insert([ 'NodeID' => 771, 'NodeTree' => '7', 'NodeParentID' => '1008', - 'NodeParentOrder' => '1', + 'NodeParentOrder' => '2', 'NodeType' => 'Instructions Raw', - 'NodePromptText' => ' -
-
- -
-
' + 'NodePromptText' => 'I Understand, Begin My Complaint +Log Back In, Continue My Complaint' ]); DB::table('SL_Node')->insert([ 'NodeID' => 774, @@ -22745,10 +22614,9 @@ public function run() 'NodeID' => 775, 'NodeTree' => '8', 'NodeParentID' => '1009', + 'NodeParentOrder' => '1', 'NodeType' => 'Instructions', - 'NodePromptText' => '

 

-

Filing Your Compliment

-

This free web app will allow you to ...

+ 'NodePromptText' => '

This free web app will allow you to ...

  • Prepare and save a precise and complete police commendation
  • File your official report as easily as possible and within a department’s policies
  • @@ -22763,50 +22631,34 @@ public function run()
  • No Names Public
    You don’t want to publish any names to this website. This includes police officers’ names and badge numbers too.
  • -Anonymous
    You need your compliment to be completely anonymous, even though it will be harder to investigate. No names will be published on this website. Neither Open Police staff nor investigators will be able to contact you. Any details that could be used for personal identification may be deleted from the database.
  • -
' +Anonymous
You need your compliment to be anonymous, even though it will be harder to investigate. No names will be published on this website. Neither Open Police staff nor investigators will be able to contact you. Any details that could be used for personal identification may be deleted from the database. +
', + 'NodePromptAfter' => '', + 'NodeOpts' => '89' ]); DB::table('SL_Node')->insert([ 'NodeID' => 776, 'NodeTree' => '8', 'NodeParentID' => '1009', - 'NodeParentOrder' => '1', + 'NodeParentOrder' => '2', 'NodeType' => 'Instructions Raw', - 'NodePromptText' => ' -
-
- -
-
' + 'NodePromptText' => 'I Understand, Begin A New Compliment +Log Back In, Continue My Compliment' ]); DB::table('SL_Node')->insert([ 'NodeID' => 778, 'NodeTree' => '1', 'NodeParentID' => '1009', - 'NodeParentOrder' => '4', + 'NodeParentOrder' => '5', 'NodeType' => 'Instructions' ]); DB::table('SL_Node')->insert([ - 'NodeID' => 783, + 'NodeID' => 784, 'NodeTree' => '1', 'NodeParentID' => '528', 'NodeParentOrder' => '3', - 'NodeType' => 'Big Button', - 'NodeResponseSet' => 'Default', - 'NodeDefault' => 'See how your complaint will appear to the public', - 'NodeOpts' => '2021' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 784, - 'NodeTree' => '1', - 'NodeParentID' => '783', 'NodeType' => 'Instructions', - 'NodePromptText' => '

This is what visitors to OpenPolice.org will see:

-
', + 'NodePromptText' => ' Click here to preview what visitors to OpenPolice.org will see after your complaint is published.', 'NodePromptAfter' => '' ]); DB::table('SL_Node')->insert([ @@ -22902,7 +22754,7 @@ public function run() 'NodeID' => 792, 'NodeTree' => '11', 'NodeParentID' => '791', - 'NodeParentOrder' => '5', + 'NodeParentOrder' => '2', 'NodeType' => 'Instructions', 'NodePromptText' => '

Announcement

Getting closer to a fully @@ -22975,7 +22827,7 @@ functional OpenPolice.org!

'NodeTree' => '1', 'NodeParentID' => '810', 'NodeType' => 'Instructions', - 'NodePromptText' => '

Who\'s Involved

+ 'NodePromptText' => '

Who\'s Involved

Next, you\'ll share info about yourself. Then you\'ll share info about any other civilians who witnessed the incident. This will help investigators identify and contact anyone who was involved.

' ]); DB::table('SL_Node')->insert([ @@ -23070,7 +22922,7 @@ functional OpenPolice.org!

Complainants who select No Names Public will provide everything investigators need — but only their anonymized data will be published on the OpenPolice.org. For reciprocity purposes, neither civilian nor police officer names will be published. Only the multiple-choice responses will be published. (This does not include responses to open-ended questions, which could reveal identities.)

 

3. Anonymous

-

The complainant needs to be completely anonymous, even though it might limit investigation.

+

The complainant needs to be anonymous, even though it might limit investigation.

For complainants who select Anonymous, no personal information about them is requested or collected. Neither OPC staff nor investigators will be able to contact the complainant. While this makes it harder for oversight agencies to investigate, it’s an important option for complainants fearful of retaliation.

Complainants’ multiple-choice responses will be published. (This does not include responses to open-ended questions, which could reveal identities.) Any details that could be used for personal identification may be deleted from OPC\'s database.

@@ -23782,8 +23634,8 @@ functional OpenPolice.org!

'NodeTree' => '1', 'NodeParentID' => '854', 'NodeType' => 'Radio', - 'NodePromptText' => 'Do you think an officer sexually harassed anybody? -

This includes the use of unwanted sexual advances or obscene remarks.', + 'NodePromptText' => '

Sexual Harassment / Assault

+

Do you think an officer sexually harassed anybody? This includes the use of unwanted sexual advances or obscene remarks.

', 'NodeDataStore' => 'AllegSilver:AlleSilSexualHarass' ]); DB::table('SL_Node')->insert([ @@ -23807,6 +23659,7 @@ functional OpenPolice.org!

'NodeID' => 855, 'NodeTree' => '1', 'NodeParentID' => '853', + 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which Officer(s)?', 'NodeResponseSet' => 'LoopItems::Officers', @@ -23816,7 +23669,6 @@ functional OpenPolice.org!

'NodeID' => 856, 'NodeTree' => '1', 'NodeParentID' => '853', - 'NodeParentOrder' => '1', 'NodeType' => 'Checkbox', 'NodePromptText' => 'Which Victim(s)?', 'NodeResponseSet' => 'LoopItems::Victims', @@ -23846,13 +23698,14 @@ functional OpenPolice.org!

'NodeParentID' => '858', 'NodeParentOrder' => '2', 'NodeType' => 'Instructions', - 'NodePromptText' => '

(Chart of All Police Department Accessibility Scores)

' + 'NodePromptText' => '

(Chart of All Police Department Accessibility Scores)

', + 'NodeOpts' => '97' ]); DB::table('SL_Node')->insert([ 'NodeID' => 862, 'NodeTree' => '1', - 'NodeParentID' => '196', - 'NodeParentOrder' => '5', + 'NodeParentID' => '151', + 'NodeParentOrder' => '2', 'NodeType' => 'Page', 'NodePromptNotes' => 'chase', 'NodePromptAfter' => 'Chase - Your Complaint::M::::M::::M::' @@ -23861,6 +23714,7 @@ functional OpenPolice.org!

'NodeID' => 863, 'NodeTree' => '1', 'NodeParentID' => '862', + 'NodeParentOrder' => '1', 'NodeType' => 'Loop Cycle', 'NodeResponseSet' => 'LoopItems::Victims', 'NodeDataBranch' => 'Civilians' @@ -23868,21 +23722,12 @@ functional OpenPolice.org!

DB::table('SL_Node')->insert([ 'NodeID' => 865, 'NodeTree' => '1', - 'NodeParentID' => '862', + 'NodeParentID' => '2119', 'NodeParentOrder' => '2', 'NodeType' => 'Loop Cycle', 'NodeResponseSet' => 'LoopItems::Victims', 'NodeDataBranch' => 'Civilians' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 866, - 'NodeTree' => '1', - 'NodeParentID' => '484', - 'NodeParentOrder' => '1', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

What Happened?

-

Confirm which types of events happened during this incident. This will map out much of your custom, gold star complaint.

' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 867, 'NodeTree' => '5', @@ -24058,7 +23903,7 @@ functional OpenPolice.org!

'NodeParentID' => '878', 'NodeParentOrder' => '6', 'NodeType' => 'Text', - 'NodePromptText' => 'Zip', + 'NodePromptText' => 'Zip Code', 'NodeDataStore' => 'Incidents:IncAddressZip' ]); DB::table('SL_Node')->insert([ @@ -24234,7 +24079,7 @@ functional OpenPolice.org!

'NodeParentID' => '899', 'NodeParentOrder' => '5', 'NodeType' => 'Text', - 'NodePromptText' => 'Zip', + 'NodePromptText' => 'Zip Code', 'NodeDataStore' => 'PersonContact:PrsnAddressZip' ]); DB::table('SL_Node')->insert([ @@ -24802,9 +24647,7 @@ functional OpenPolice.org!

'NodeType' => 'Instructions', 'NodePromptText' => '

Confirm Your Compliment

Below is a preview of your finished compliment. Remember that we will never publish anyone\'s private information. This includes addresses, phone numbers, emails, etc.

-
-

This is what police oversight investigators will see:

-
' +

This is what police oversight investigators will see:

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 966, @@ -24913,7 +24756,7 @@ functional OpenPolice.org!

'NodeID' => 977, 'NodeTree' => '8', 'NodeParentID' => '1009', - 'NodeParentOrder' => '3', + 'NodeParentOrder' => '4', 'NodeType' => 'Incomplete Sess Check', 'NodePromptText' => '', + 'NodePromptAfter' => '
', 'NodeResponseSet' => '1' ]); DB::table('SL_Node')->insert([ @@ -25116,17 +24959,11 @@ functional OpenPolice.org!

'NodeTree' => '22', 'NodeParentID' => '1776', 'NodeParentOrder' => '2', - 'NodeType' => 'Incomplete Sess Check', + 'NodeType' => 'Instructions Raw', + 'NodePromptText' => 'Share A New Story', + 'NodePromptAfter' => '', 'NodeResponseSet' => '1' ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1004, - 'NodeTree' => '22', - 'NodeParentID' => '1776', - 'NodeParentOrder' => '3', - 'NodeType' => 'Incomplete Sess Check', - 'NodeResponseSet' => '5' - ]); DB::table('SL_Node')->insert([ 'NodeID' => 1005, 'NodeTree' => '23', @@ -25212,7 +25049,7 @@ functional OpenPolice.org!

Prepare a complete report

Police encounters can be stressful and complex. Our web app will help you organize and discover all of the crucial details that make your story unique.

-

BUILD YOUR REPORT

+

BUILD YOUR REPORT


' @@ -25246,139 +25083,6 @@ functional OpenPolice.org!

LEARN MORE


' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1031, - 'NodeTree' => '12', - 'NodeParentID' => '1438', - 'NodeParentOrder' => '1', - 'NodeType' => 'Layout Row', - 'NodeCharLimit' => '3' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1032, - 'NodeTree' => '12', - 'NodeParentID' => '1031', - 'NodeType' => 'Layout Column', - 'NodeCharLimit' => '4' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1033, - 'NodeTree' => '12', - 'NodeParentID' => '1031', - 'NodeParentOrder' => '1', - 'NodeType' => 'Layout Column', - 'NodeCharLimit' => '4' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1034, - 'NodeTree' => '12', - 'NodeParentID' => '1031', - 'NodeParentOrder' => '2', - 'NodeType' => 'Layout Column', - 'NodeCharLimit' => '4' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1035, - 'NodeTree' => '12', - 'NodeParentID' => '1032', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

 

- -
-

Openness

-

Police misconduct victims should never have to deal with rude or intimidating police station employees. That\'s the opposite of openness — because openness requires accessibility. OPC is always easy to use and easy to understand. And, of course, we’re always open to receive your complaint!

-
' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1036, - 'NodeTree' => '12', - 'NodeParentID' => '1033', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

 

- -
-

Empowerment

-

The people who report misconduct should be at the center of the police oversight process. Filing a complaint is not the end of the road for OPC users. We keep in touch because we care about how well — or how poorly — your department responds to your complaint. Your story is too important to be ignored!

-
' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1037, - 'NodeTree' => '12', - 'NodeParentID' => '1034', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

 

- -
-

Completeness

-

Police encounters can be chaotic, and the law is complex. That’s why people who report misconduct often miss important things or pick allegations that aren’t quite right. OPC helps you find and organize the details that matter most. We also know the law inside and out, so we\'ll make sure your allegations match the facts of your story.

-
' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1038, - 'NodeTree' => '12', - 'NodeParentID' => '1438', - 'NodeType' => 'Layout Row', - 'NodeCharLimit' => '3' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1039, - 'NodeTree' => '12', - 'NodeParentID' => '1038', - 'NodeType' => 'Layout Column', - 'NodeCharLimit' => '4' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1040, - 'NodeTree' => '12', - 'NodeParentID' => '1038', - 'NodeParentOrder' => '1', - 'NodeType' => 'Layout Column', - 'NodeCharLimit' => '4' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1041, - 'NodeTree' => '12', - 'NodeParentID' => '1038', - 'NodeParentOrder' => '2', - 'NodeType' => 'Layout Column', - 'NodeCharLimit' => '4' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1042, - 'NodeTree' => '12', - 'NodeParentID' => '1039', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

 

- -
-

Universality

-

Each one of the 18,000 police departments in the U.S. collects complaints in its own unique way. This poor data consistency creates huge headaches for researchers. To gain better insight into police behavior across the country, we\'re helping to establish national police complaint data standards.

-
' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1043, - 'NodeTree' => '12', - 'NodeParentID' => '1040', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

 

- -
-

Objectivity

-

We strive to be fair and neutral in the way we collect and share data. We cannot check the accuracy of complaint allegations, so we never assume that they are true or false. We only present questions and response options that are non-leading. And we always encourage users to share information that’s accurate and truthful.

-
' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1044, - 'NodeTree' => '12', - 'NodeParentID' => '1041', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

 

- -
-

Transparency

-

Many state and local laws conceal government-collected police misconduct records from public view. To counter this problem, OPC enables users to publish uncensored complaints online. Because the best antidote to state secrecy is public transparency!

-
' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1045, @@ -25783,8 +25487,9 @@ functional OpenPolice.org!

DB::table('SL_Node')->insert([ 'NodeID' => 1090, 'NodeTree' => '1', - 'NodeParentID' => '976', + 'NodeParentID' => '529', 'NodeType' => 'Send Email', + 'NodePromptNotes' => '::TO::-69::CC::::BCC::', 'NodePromptAfter' => '::TO::-69::CC::::BCC::', 'NodeResponseSet' => '1', 'NodeDefault' => '5' @@ -25813,8 +25518,8 @@ functional OpenPolice.org!

'NodeID' => 1096, 'NodeTree' => '24', 'NodeType' => 'Page', - 'NodePromptNotes' => 'sharing-your-story', - 'NodePromptAfter' => 'Sharing Your Story: Complaints and Compliments::M::::M::::M::', + 'NodePromptNotes' => 'complaint-or-compliment', + 'NodePromptAfter' => 'Complaint or Compliment: Sharing Your Story::M::::M::::M::', 'NodeCharLimit' => '-1' ]); DB::table('SL_Node')->insert([ @@ -25823,15 +25528,15 @@ functional OpenPolice.org!

'NodeParentID' => '1096', 'NodeParentOrder' => '1', 'NodeType' => 'Instructions', - 'NodePromptText' => '

 

+ 'NodePromptText' => '

Do you have a complaint or a compliment about the police?

-

 

+

Share a Complaint

-

 

+

Share a Compliment

-

 

', +

', 'NodeOpts' => '67' ]); DB::table('SL_Node')->insert([ @@ -25867,9 +25572,11 @@ functional OpenPolice.org!

  • Home Page
  • About Us
  • -
  • Share Your Story (public soon)
      +
    • Share Your Story (public soon)
      • Filing Your Complaint
      • Filing Your Compliment
      • OPC User Privacy Options
      • @@ -25908,20 +25615,10 @@ functional OpenPolice.org!

        'NodeID' => 1107, 'NodeTree' => '12', 'NodeParentID' => '793', - 'NodeParentOrder' => '11', + 'NodeParentOrder' => '12', 'NodeType' => 'Instructions', - 'NodePromptText' => '

        How we stack up against most police departments

        - -

        There are about 18,000 police departments in the United States. Each one collects, stores, and shares its civilian complaints data in its own way. While some try to provide an open and transparent process — most departments fail to deliver.

        - -

        ', - 'NodePromptAfter' => '', - 'NodeDefault' => '#EDF8FF;;#000;;#FFF;;;;w100;;N;;left;;auto', - 'NodeOpts' => '4757' + 'NodePromptText' => '

         

        How we stack up against most police departments

        ', + 'NodeOpts' => '67' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1108, @@ -25978,17 +25675,17 @@ functional OpenPolice.org!

        ]); DB::table('SL_Node')->insert([ 'NodeID' => 1114, - 'NodeTree' => '24', - 'NodeParentID' => '1096', + 'NodeTree' => '70', + 'NodeParentID' => '2094', 'NodeType' => 'Instructions', - 'NodePromptText' => '

         

        + 'NodePromptText' => '

        -

        Sorry, but this isn't quite ready for the public yet.

        ', +

        Sorry, but this isn\'t quite ready for the public yet.

        ', 'NodeOpts' => '67' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1120, - 'NodeTree' => '24', + 'NodeTree' => '70', 'NodeParentID' => '1114', 'NodeType' => 'Instructions Raw', 'NodePromptText' => '

        @@ -26059,15 +25756,28 @@ functional OpenPolice.org!

        #homeHero2 { margin-top: 15px; } #blockWrap[[nID]] { text-shadow: -1px 1px 1px #000; min-height: 530px; } #blockWrap[[nID]] a.btn:link, #blockWrap[[nID]] a.btn:visited, #blockWrap[[nID]] a.btn:active, #blockWrap[[nID]] a.btn:hover { width: 360px; } +#blockWrap2010 { margin-top: -17px; } +#deferNode2011 { height: 772px; } +#homeDemoVid { height: 600px; } +#deferAnim2011 { margin-top: 250px; } +@media screen and (max-width: 1200px) { +#deferNode2011 { height: 672px; } +#homeDemoVid { height: 500px; } +} @media screen and (max-width: 992px) { #homeLogo { width: 90%; } #homeHeroTop, #homeHeroBot { height: 20px; } +#deferNode2011 { height: 602px; } +#homeDemoVid { height: 380px; } +#deferAnim2011 { margin-top: 200px; } } @media screen and (max-width: 768px) { #homeHeroBox { background: url(/survloop/uploads/trans-black-50.png); } #homeHeroHead { font-size: 1.75rem; } #homeHero2 { font-size: 1.3rem; } +#deferNode2011 { height: 472px; } +#homeDemoVid { height: 250px; } } @media screen and (max-width: 480px) { #homeHeroTop, #homeHeroBot { height: 0px; } @@ -26075,18 +25785,21 @@ functional OpenPolice.org!

        #blockWrap[[nID]] { background-size: auto 100%; overflow: visible; } #homeHeroHead { font-size: 1.3rem; } #homeHero2 { font-size: 1rem; } +#deferNode2011 { height: 470px; } +#homeDemoVid { height: 205px; } } ', - 'NodeResponseSet' => '/sharing-your-story?test=1', - 'NodeDefault' => '#000;;#EDF8FF;;#FFF;;/openpolice/open-police-hero-1J.jpg;;w100;;P;;center;;h100', +}); +', + 'NodeResponseSet' => '/complaint-or-compliment', + 'NodeDefault' => '#333333;;#EDF8FF;;#FFF;;/openpolice/open-police-hero-1J.jpg;;w100;;P;;center;;h100', 'NodeOpts' => '71' ]); DB::table('SL_Node')->insert([ @@ -26137,16 +25850,16 @@ function checkLogoScroll() { 'NodeTree' => '12', 'NodeParentID' => '793', 'NodeParentOrder' => '1', - 'NodeType' => 'Instructions', + 'NodeType' => 'Instructions Raw', 'NodePromptText' => '

        Your Story is Too Important to be Ignored

        Prepare, file, and track reports of police misconduct.

        +SHARE YOUR STORY DONATE
        +SHARE YOUR STORY DONATE
', @@ -26159,12 +25872,23 @@ function checkLogoScroll() { #homeLogo { width: 65%; margin-right: -15px; } #homeHeroBox { background: none; text-shadow: -1px 1px 1px #000; padding: 15px 0px; } #homeHero2 { margin-top: 15px; } -#blockWrap[[nID]] { text-shadow: -1px 1px 1px #000; min-height: 530px; } +#blockWrap[[nID]] { background: #333; text-shadow: -1px 1px 1px #000; min-height: 530px; } #blockWrap[[nID]] a.btn:link, #blockWrap[[nID]] a.btn:visited, #blockWrap[[nID]] a.btn:active, #blockWrap[[nID]] a.btn:hover { width: 360px; } +#blockWrap2010 { margin-top: -17px; } +#deferNode2011 { height: 772px; } +#homeDemoVid { height: 600px; } +#deferAnim2011 { margin-top: 250px; } +@media screen and (max-width: 1200px) { +#deferNode2011 { height: 672px; } +#homeDemoVid { height: 500px; } +} @media screen and (max-width: 992px) { #homeLogo { width: 90%; } #homeHeroTop, #homeHeroBot { height: 20px; } +#deferNode2011 { height: 602px; } +#homeDemoVid { height: 380px; } +#deferAnim2011 { margin-top: 200px; } } @media screen and (max-width: 768px) { #btnBig { display: none; } @@ -26173,6 +25897,8 @@ function checkLogoScroll() { #homeHeroBox { background: url(/survloop/uploads/trans-black-50.png); } #homeHeroHead { font-size: 1.75rem; } #homeHero2 { font-size: 1.3rem; } +#deferNode2011 { height: 472px; } +#homeDemoVid { height: 250px; } } @media screen and (max-width: 480px) { #btnSm { margin-top: 10px; } @@ -26182,6 +25908,8 @@ function checkLogoScroll() { #blockWrap[[nID]] a.btn:link, #blockWrap[[nID]] a.btn:visited, #blockWrap[[nID]] a.btn:active, #blockWrap[[nID]] a.btn:hover { width: 250px; } #homeHeroHead { font-size: 1.3rem; } #homeHero2 { font-size: 1rem; } +#deferNode2011 { height: 470px; } +#homeDemoVid { height: 205px; } } +' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1863, 'NodeTree' => '21', 'NodeParentID' => '1864', 'NodeType' => 'Instructions Raw', - 'NodePromptText' => '

(Map of All Police Department Accessibility Scores)

' + 'NodePromptText' => '

(Map of All Police Department Accessibility Scores)

', + 'NodeOpts' => '97' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1864, @@ -31384,13 +31031,16 @@ function checkYouFatal() { 'NodeID' => 1865, 'NodeTree' => '12', 'NodeParentID' => '793', - 'NodeParentOrder' => '12', - 'NodeType' => 'Page Block' + 'NodeParentOrder' => '11', + 'NodeType' => 'Page Block', + 'NodeDefault' => '#EDF8FF;;#333;;#416CBD;;;;w100;;N;;left;;auto', + 'NodeOpts' => '71' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1866, 'NodeTree' => '12', 'NodeParentID' => '1865', + 'NodeParentOrder' => '1', 'NodeType' => 'Layout Row', 'NodeCharLimit' => '3' ]); @@ -31399,7 +31049,7 @@ function checkYouFatal() { 'NodeTree' => '12', 'NodeParentID' => '1866', 'NodeType' => 'Layout Column', - 'NodeCharLimit' => '3' + 'NodeCharLimit' => '4' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1868, @@ -31407,7 +31057,7 @@ function checkYouFatal() { 'NodeParentID' => '1866', 'NodeParentOrder' => '1', 'NodeType' => 'Layout Column', - 'NodeCharLimit' => '3' + 'NodeCharLimit' => '4' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1869, @@ -31415,69 +31065,55 @@ function checkYouFatal() { 'NodeParentID' => '1866', 'NodeParentOrder' => '2', 'NodeType' => 'Layout Column', - 'NodeCharLimit' => '3' + 'NodeCharLimit' => '4' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1870, 'NodeTree' => '12', - 'NodeParentID' => '1867', + 'NodeParentID' => '2103', 'NodeType' => 'Instructions Raw', - 'NodePromptText' => '

-

-
-

"I\'ve never used a police complaints software before, but I\'m feelin\' this!"

-

Katryna Lawson

', - 'NodePromptAfter' => '' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1871, - 'NodeTree' => '12', - 'NodeParentID' => '1866', - 'NodeParentOrder' => '3', - 'NodeType' => 'Layout Column', - 'NodeCharLimit' => '3' + 'NodePromptText' => '
+
+

I\'ve never used a police complaints software before — but I\'m feelin\' this!

+

Katryna Lawson
OpenPolice.org User

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1872, 'NodeTree' => '12', - 'NodeParentID' => '1868', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

-

-
-

"Interdum et malesuada fames ac ante ipsum primis in faucibus. Curabitur facilisis a mi a gravida. Ut egestas felis in elit convallis tristique."

-

Norm Stamper

' + 'NodeParentID' => '2102', + 'NodeType' => 'Instructions Raw', + 'NodePromptText' => '
+
+

Interdum et malesuada fames ac ante ipsum primis in faucibus. Curabitur facilisis a mi a gravida. Ut egestas felis in elit convallis tristique.

+

Norm Stamper
Former Chief of Police, Seattle PD

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1873, 'NodeTree' => '12', - 'NodeParentID' => '1871', - 'NodeType' => 'Instructions', - 'NodePromptText' => '

-

-
-

"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sodales erat non ipsum ultricies efficitur."

-

Billy Murphy

' + 'NodeParentID' => '1865', + 'NodeType' => 'Instructions Raw', + 'NodePromptText' => '

What others say

', + 'NodePromptAfter' => '' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1874, 'NodeTree' => '12', - 'NodeParentID' => '1869', + 'NodeParentID' => '2101', 'NodeType' => 'Instructions', - 'NodePromptText' => '

-

-
-

"Police secrecy laws create a void where there should be public transparency. Open Police Complaints is building a bridge across that void."

-

Cynthia Conti-Cook

' - ]); - DB::table('SL_Node')->insert([ - 'NodeID' => 1875, - 'NodeTree' => '12', - 'NodeParentID' => '1865', - 'NodeParentOrder' => '1', - 'NodeType' => 'Instructions Raw', - 'NodePromptText' => '

-
' + 'NodePromptText' => '
+
+

OPC helps people thoroughly document police misconduct. This is vital for making this data transparent and accessible to the public.

+

Cynthia Conti-Cook
Staff Attorney, New York Legal Aid Society

' ]); DB::table('SL_Node')->insert([ 'NodeID' => 1876, @@ -31682,7 +31318,7 @@ function checkYouFatal() { complainant to confirm their identity and corroborate their testimony. Then, within a reasonable period of time, our users expect to receive a final disposition letter that includes the details of your investigation\'s findings.

We encourage users to upload investigation findings and attach them to their complaints. This allows OpenPolice.org -visitors to see which allegations were considered sustained or unfound.

+visitors to see which allegations were sustained or unfounded.

If your oversight agency creates an authenticated user account on OpenPolice.org, you will also be able to instantly upload the findings of your investigations. Participating in this clearinghouse for complaints is a great way to engage with the community and build trust.

@@ -31745,8 +31381,7 @@ function checkYouFatal() {
  • Requests must include the name and contact information of both subject officers and their attorneys.
  • If your request fulfills all the above requirements, we will submit it to our pro bono legal team for review.

    - -', +', 'NodeOpts' => '67' ]); DB::table('SL_Node')->insert([ @@ -31822,7 +31457,7 @@ function bodyOnScroll() { DB::table('SL_Node')->insert([ 'NodeID' => 1893, 'NodeTree' => '22', - 'NodeParentID' => '1000', + 'NodeParentID' => '2048', 'NodeType' => 'Instructions Raw', 'NodePromptText' => '

    Your Complaints & Compliments

    ' ]); @@ -32117,7 +31752,7 @@ function bodyOnScroll() { 'NodeParentID' => '1921', 'NodeType' => 'Page', 'NodePromptNotes' => 'info', - 'NodePromptAfter' => 'Attorney Profile::M::::M::::M::', + 'NodePromptAfter' => 'Partner Profile::M::::M::::M::', 'NodeCharLimit' => '-1' ]); DB::table('SL_Node')->insert([ @@ -32130,11 +31765,10 @@ function bodyOnScroll() { DB::table('SL_Node')->insert([ 'NodeID' => 1924, 'NodeTree' => '58', - 'NodeParentID' => '1932', - 'NodeParentOrder' => '2', + 'NodeParentID' => '1922', 'NodeType' => 'Instructions', - 'NodePromptText' => '

    Edit Attorney Profile

    ', - 'NodePromptAfter' => ' + 'NodePromptText' => '

    Edit Partner Profile

    ', + 'NodePromptAfter' => ' ' ]); @@ -32425,7 +32060,7 @@ function loadAttProf() { 'NodeID' => 1956, 'NodeTree' => '58', 'NodeParentID' => '1954', - 'NodeParentOrder' => '1', + 'NodeParentOrder' => '2', 'NodeType' => 'Instructions Raw', 'NodePromptText' => '
    +' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2117, + 'NodeTree' => '58', + 'NodeParentID' => '1954', + 'NodeParentOrder' => '3', + 'NodeType' => 'Data Manip: Close Sess', + 'NodeResponseSet' => '58' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2118, + 'NodeTree' => '58', + 'NodeParentID' => '2073', + 'NodeParentOrder' => '4', + 'NodeType' => 'Hidden Field', + 'NodeDefault' => '219', + 'NodeDataStore' => 'Partners:PartType' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2119, + 'NodeTree' => '1', + 'NodeParentID' => '151', + 'NodeParentOrder' => '3', + 'NodeType' => 'Page', + 'NodePromptNotes' => 'force-against-officer', + 'NodePromptAfter' => 'Force Against an Officer::M::::M::::M::' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2120, + 'NodeTree' => '1', + 'NodeParentID' => '862', + 'NodeType' => 'Instructions', + 'NodePromptText' => '

    Questions about Police Chases

    ' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2121, + 'NodeTree' => '1', + 'NodeParentID' => '2119', + 'NodeType' => 'Instructions', + 'NodePromptText' => '

    Use of Force against an Officer

    ' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2122, + 'NodeTree' => '1', + 'NodeParentID' => '707', + 'NodeParentOrder' => '1', + 'NodeType' => 'Page', + 'NodePromptNotes' => 'uploads', + 'NodePromptAfter' => 'Upload Documentation::M::::M::::M::' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2123, + 'NodeTree' => '1', + 'NodeParentID' => '528', + 'NodeType' => 'Instructions', + 'NodePromptText' => '

    Confirm Your Complaint

    +

    Below is what attorneys and legal experts will see:

    ' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2124, + 'NodeTree' => '1', + 'NodeParentID' => '528', + 'NodeParentOrder' => '1', + 'NodeType' => 'Page Block' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2125, + 'NodeTree' => '1', + 'NodeParentID' => '528', + 'NodeParentOrder' => '6', + 'NodeType' => 'Checkbox', + 'NodePromptAfter' => '', + 'NodeOpts' => '5' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2126, + 'NodeTree' => '1', + 'NodeParentID' => '528', + 'NodeParentOrder' => '7', + 'NodeType' => 'Checkbox', + 'NodePromptAfter' => '', + 'NodeOpts' => '5' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2127, + 'NodeTree' => '1', + 'NodeParentID' => '2050', + 'NodeParentOrder' => '1', + 'NodeType' => 'Instructions Raw', + 'NodePromptText' => '' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2128, + 'NodeTree' => '1', + 'NodeParentID' => '4', + 'NodeParentOrder' => '6', + 'NodeType' => 'Loop Root', + 'NodePromptText' => '

    Vehicles at the Scene

    +

    Please share information about civilian and police vehicles involved in the incident. This includes cars, trucks, vans, motorcycles, bicycles, boats, or other.

    +

    If there were no vehicles involved, go to the next section.

    ', + 'NodePromptNotes' => 'add-vehicles', + 'NodePromptAfter' => 'Add Vehicles That Were Involved::M::::M::::M::', + 'NodeDataBranch' => 'Vehicles', + 'NodeDataStore' => 'Vehicles:VehicID' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2129, + 'NodeTree' => '1', + 'NodeParentID' => '1421', + 'NodeType' => 'Instructions', + 'NodePromptText' => '

    Vehicle #[LoopItemCnt]:

    ', + 'NodePromptAfter' => ' +' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2130, + 'NodeTree' => '1', + 'NodeParentID' => '2142', + 'NodeType' => 'Checkbox', + 'NodePromptText' => '

    [LoopItemLabel]

    +

    Who was riding this vehicle during this incident?

    ', + 'NodePromptAfter' => '', + 'NodeResponseSet' => 'Table::Civilians', + 'NodeDataStore' => 'LinksCivilianVehicles:LnkCivVehicCivID' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2131, + 'NodeTree' => '1', + 'NodeParentID' => '2130', + 'NodeType' => 'Layout Sub-Response', + 'NodeDataBranch' => 'LinksCivilianVehicles' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2132, + 'NodeTree' => '1', + 'NodeParentID' => '2131', + 'NodeType' => 'Radio', + 'NodePromptAfter' => '', + 'NodeResponseSet' => 'Definition::Vehicle Roles', + 'NodeDataStore' => 'LinksCivilianVehicles:LnkCivVehicRole' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2133, + 'NodeTree' => '1', + 'NodeParentID' => '2142', + 'NodeParentOrder' => '1', + 'NodeType' => 'Checkbox', + 'NodePromptAfter' => '', + 'NodeResponseSet' => 'Table::Officers', + 'NodeDataStore' => 'LinksOfficerVehicles:LnkOffVehicOffID' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2140, + 'NodeTree' => '1', + 'NodeParentID' => '1421', + 'NodeParentOrder' => '2', + 'NodeType' => 'Radio', + 'NodePromptText' => 'Was this an officer\'s vehicle?', + 'NodeDataStore' => 'Vehicles:VehicIsCivilian', + 'NodeOpts' => '5' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2141, + 'NodeTree' => '1', + 'NodeParentID' => '2140', + 'NodeType' => 'Page Block' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2142, + 'NodeTree' => '1', + 'NodeParentID' => '2143', + 'NodeParentOrder' => '1', + 'NodeType' => 'Loop Cycle', + 'NodeResponseSet' => 'LoopItems::Vehicles', + 'NodeDataBranch' => 'Vehicles' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2143, + 'NodeTree' => '1', + 'NodeParentID' => '4', + 'NodeParentOrder' => '7', + 'NodeType' => 'Page', + 'NodePromptNotes' => 'vehicle-roles', + 'NodePromptAfter' => 'Vehicle Roles::M::::M::::M::' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2144, + 'NodeTree' => '1', + 'NodeParentID' => '2143', + 'NodeType' => 'Instructions', + 'NodePromptText' => '

    Vehicle Use

    +

    This does not include police searches.

    ' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2146, + 'NodeTree' => '1', + 'NodeParentID' => '2133', + 'NodeType' => 'Layout Sub-Response', + 'NodeDataBranch' => 'LinksOfficerVehicles' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2147, + 'NodeTree' => '1', + 'NodeParentID' => '2146', + 'NodeType' => 'Radio', + 'NodePromptAfter' => '', + 'NodeResponseSet' => 'Definition::Vehicle Roles', + 'NodeDataStore' => 'LinksOfficerVehicles:LnkOffVehicRole' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2149, + 'NodeTree' => '73', + 'NodeType' => 'Page', + 'NodePromptNotes' => 'partners', + 'NodePromptAfter' => 'OPC Partners::M::::M::::M::', + 'NodeCharLimit' => '-1' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2150, + 'NodeTree' => '73', + 'NodeParentID' => '2149', + 'NodeType' => 'Instructions', + 'NodePromptText' => '

    OPC Partners Listings...

    +


    ' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2151, + 'NodeTree' => '60', + 'NodeParentID' => '1938', + 'NodeType' => 'Page Block' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2152, + 'NodeTree' => '44', + 'NodeParentID' => '1417', + 'NodeType' => 'Page Block' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2153, + 'NodeTree' => '46', + 'NodeParentID' => '1419', + 'NodeType' => 'Page Block' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2154, + 'NodeTree' => '36', + 'NodeParentID' => '1223', + 'NodeParentOrder' => '1', + 'NodeType' => 'Page Block', + 'NodeOpts' => '89' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2155, + 'NodeTree' => '36', + 'NodeParentID' => '1273', + 'NodeType' => 'Page Block', + 'NodeOpts' => '89' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2156, + 'NodeTree' => '36', + 'NodeParentID' => '1273', + 'NodeParentOrder' => '1', + 'NodeType' => 'Page Block', + 'NodeOpts' => '89' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2157, + 'NodeTree' => '36', + 'NodeParentID' => '1223', + 'NodeParentOrder' => '3', + 'NodeType' => 'Page Block', + 'NodeOpts' => '89' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2158, + 'NodeTree' => '36', + 'NodeParentID' => '1223', + 'NodeParentOrder' => '4', + 'NodeType' => 'Page Block', + 'NodeOpts' => '89' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2159, + 'NodeTree' => '36', + 'NodeParentID' => '1223', + 'NodeParentOrder' => '5', + 'NodeType' => 'Page Block', + 'NodeOpts' => '89' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2161, + 'NodeTree' => '36', + 'NodeParentID' => '1223', + 'NodeParentOrder' => '6', + 'NodeType' => 'Page Block', + 'NodeOpts' => '89' + ]); + DB::table('SL_Node')->insert([ + 'NodeID' => 2162, + 'NodeTree' => '36', + 'NodeParentID' => '2154', + 'NodeType' => 'Instructions', + 'NodePromptText' => '

    Department Main Contact Info

    ' + ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1, @@ -33326,30 +34042,6 @@ function loadAttProf() { 'NodeResEng' => 'Not sure', 'NodeResValue' => '?' ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 51, - 'NodeResNode' => '138', - 'NodeResEng' => '

    Full Transparency

    -

    Publish all names of civilians and police officers on this website

    ', - 'NodeResValue' => '304' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 52, - 'NodeResNode' => '138', - 'NodeResOrd' => '1', - 'NodeResEng' => '

    No Names Public

    -

    Do not publish names of civilians and police officers on this website. This includes police officers\' names and badge numbers too.

    ', - 'NodeResValue' => '305' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 53, - 'NodeResNode' => '138', - 'NodeResOrd' => '2', - 'NodeResEng' => '

    Anonymous

    -

    Keep my complaint to be completely anonymous, even though it will be harder to investigate. Neither OPC staff nor investigators will be able to contact you.

    -

    Any details that could be used for personal identification may be deleted from the database.

    ', - 'NodeResValue' => '306' - ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 55, 'NodeResNode' => '163', @@ -33430,7 +34122,7 @@ function loadAttProf() { 'NodeResNode' => '204', 'NodeResEng' => 'Yes', 'NodeResValue' => 'Y', - 'NodeResShowKids' => '205' + 'NodeResShowKids' => '2033' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 76, @@ -33514,7 +34206,7 @@ function loadAttProf() { 'NodeResNode' => '212', 'NodeResEng' => 'Yes', 'NodeResValue' => 'Y', - 'NodeResShowKids' => '213' + 'NodeResShowKids' => '2034' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 91, @@ -33598,7 +34290,7 @@ function loadAttProf() { 'NodeResNode' => '222', 'NodeResEng' => 'Yes', 'NodeResValue' => 'Y', - 'NodeResShowKids' => '223' + 'NodeResShowKids' => '2035' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 107, @@ -33677,33 +34369,12 @@ function loadAttProf() { 'NodeResEng' => 'Not sure', 'NodeResValue' => '?' ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 122, - 'NodeResNode' => '232', - 'NodeResEng' => 'Yes', - 'NodeResValue' => 'Y', - 'NodeResShowKids' => '542' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 123, - 'NodeResNode' => '232', - 'NodeResOrd' => '1', - 'NodeResEng' => 'No', - 'NodeResValue' => 'N' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 124, - 'NodeResNode' => '232', - 'NodeResOrd' => '2', - 'NodeResEng' => 'Not sure', - 'NodeResValue' => '?' - ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 126, 'NodeResNode' => '234', 'NodeResEng' => 'Yes', 'NodeResValue' => 'Y', - 'NodeResShowKids' => '235' + 'NodeResShowKids' => '2036' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 127, @@ -33871,7 +34542,7 @@ function loadAttProf() { DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 166, 'NodeResNode' => '269', - 'NodeResEng' => 'Yes, I want to submit my complaint to the appropriate police oversight agencies. I also want to publish my complaint data on this website.', + 'NodeResEng' => 'Yes, I want to submit my complaint to the appropriate police oversight agencies.', 'NodeResValue' => 'Y' ]); DB::table('SL_NodeResponses')->insert([ @@ -34415,12 +35086,6 @@ function loadAttProf() { 'NodeResEng' => 'Not sure', 'NodeResValue' => '?' ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 271, - 'NodeResNode' => '381', - 'NodeResEng' => 'Yes', - 'NodeResValue' => 'Y' - ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 277, 'NodeResNode' => '385', @@ -35035,21 +35700,6 @@ function loadAttProf() { 'NodeResEng' => 'Over 84', 'NodeResValue' => '109' ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 514, - 'NodeResNode' => '381', - 'NodeResOrd' => '1', - 'NodeResEng' => 'No (This is an allegation.)', - 'NodeResValue' => 'N', - 'NodeResShowKids' => '556' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 517, - 'NodeResNode' => '381', - 'NodeResOrd' => '2', - 'NodeResEng' => 'Not sure', - 'NodeResValue' => '?' - ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 524, 'NodeResNode' => '563', @@ -35550,26 +36200,6 @@ function loadAttProf() { 'NodeResEng' => 'Weapons Violation', 'NodeResValue' => '412' ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 733, - 'NodeResNode' => '617', - 'NodeResEng' => 'Gun', - 'NodeResValue' => '415' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 734, - 'NodeResNode' => '617', - 'NodeResOrd' => '1', - 'NodeResEng' => 'Knife', - 'NodeResValue' => '416' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 735, - 'NodeResNode' => '617', - 'NodeResOrd' => '2', - 'NodeResEng' => 'Other', - 'NodeResValue' => '417' - ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 742, 'NodeResNode' => '613', @@ -35600,24 +36230,24 @@ function loadAttProf() { DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 746, 'NodeResNode' => '616', - 'NodeResEng' => 'Yes', - 'NodeResValue' => 'Y', - 'NodeResShowKids' => '1156' + 'NodeResEng' => 'No weapon', + 'NodeResValue' => '582' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 747, 'NodeResNode' => '616', 'NodeResOrd' => '1', - 'NodeResEng' => 'No', - 'NodeResValue' => 'N' + 'NodeResEng' => 'Gun', + 'NodeResValue' => '415', + 'NodeResShowKids' => '618' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 748, 'NodeResNode' => '616', 'NodeResOrd' => '2', - 'NodeResEng' => 'Not sure', - 'NodeResValue' => '?', - 'NodeResShowKids' => '1156' + 'NodeResEng' => 'Knife', + 'NodeResValue' => '416', + 'NodeResShowKids' => '618' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 779, @@ -36019,85 +36649,6 @@ function loadAttProf() { 'NodeResEng' => 'Unknown', 'NodeResValue' => '169' ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 878, - 'NodeResNode' => '735', - 'NodeResEng' => 'Arrested', - 'NodeResValue' => 'Arrests' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 879, - 'NodeResNode' => '735', - 'NodeResOrd' => '1', - 'NodeResEng' => 'Citation', - 'NodeResValue' => 'Citations' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 880, - 'NodeResNode' => '735', - 'NodeResOrd' => '2', - 'NodeResEng' => 'Written Warning', - 'NodeResValue' => 'Warnings' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 881, - 'NodeResNode' => '735', - 'NodeResOrd' => '3', - 'NodeResEng' => 'None of these', - 'NodeResValue' => 'None' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 882, - 'NodeResNode' => '737', - 'NodeResEng' => 'Yes', - 'NodeResValue' => 'Y' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 883, - 'NodeResNode' => '738', - 'NodeResEng' => 'Yes', - 'NodeResValue' => 'Y' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 884, - 'NodeResNode' => '739', - 'NodeResEng' => 'Yes', - 'NodeResValue' => 'Y' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 885, - 'NodeResNode' => '740', - 'NodeResEng' => 'Yes', - 'NodeResValue' => 'Y', - 'NodeResShowKids' => '742' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 886, - 'NodeResNode' => '741', - 'NodeResEng' => 'Arrested', - 'NodeResValue' => 'Arrests' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 887, - 'NodeResNode' => '741', - 'NodeResOrd' => '1', - 'NodeResEng' => 'Citation', - 'NodeResValue' => 'Citations' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 888, - 'NodeResNode' => '741', - 'NodeResOrd' => '2', - 'NodeResEng' => 'Written Warning', - 'NodeResValue' => 'Warnings' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 889, - 'NodeResNode' => '741', - 'NodeResOrd' => '3', - 'NodeResEng' => 'None of these', - 'NodeResValue' => 'None' - ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 900, 'NodeResNode' => '743', @@ -36105,158 +36656,6 @@ function loadAttProf() { 'NodeResValue' => 'Y', 'NodeResShowKids' => '1152' ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 911, - 'NodeResNode' => '744', - 'NodeResEng' => 'Grabbing or Control Hold', - 'NodeResValue' => '227' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 912, - 'NodeResNode' => '744', - 'NodeResOrd' => '1', - 'NodeResEng' => 'Pushing', - 'NodeResValue' => '443' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 913, - 'NodeResNode' => '744', - 'NodeResOrd' => '2', - 'NodeResEng' => 'Body Weapons (Punch, Kick, etc)', - 'NodeResValue' => '228' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 914, - 'NodeResNode' => '744', - 'NodeResOrd' => '3', - 'NodeResEng' => 'Takedown', - 'NodeResValue' => '229' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 915, - 'NodeResNode' => '744', - 'NodeResOrd' => '4', - 'NodeResEng' => 'Baton Strike', - 'NodeResValue' => '230' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 916, - 'NodeResNode' => '744', - 'NodeResOrd' => '5', - 'NodeResEng' => 'Taser', - 'NodeResValue' => '231' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 917, - 'NodeResNode' => '744', - 'NodeResOrd' => '6', - 'NodeResEng' => 'Gun', - 'NodeResValue' => '232' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 918, - 'NodeResNode' => '744', - 'NodeResOrd' => '7', - 'NodeResEng' => 'Mace or Pepper Spray', - 'NodeResValue' => '233' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 919, - 'NodeResNode' => '744', - 'NodeResOrd' => '8', - 'NodeResEng' => 'K9 (Dog) Bite', - 'NodeResValue' => '234' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 920, - 'NodeResNode' => '744', - 'NodeResOrd' => '9', - 'NodeResEng' => 'Vehicle', - 'NodeResValue' => '235' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 921, - 'NodeResNode' => '742', - 'NodeResEng' => 'Grabbing or Control Hold', - 'NodeResValue' => '227' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 922, - 'NodeResNode' => '742', - 'NodeResOrd' => '1', - 'NodeResEng' => 'Pushing', - 'NodeResValue' => '443' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 923, - 'NodeResNode' => '742', - 'NodeResOrd' => '2', - 'NodeResEng' => 'Body Weapons (Punch, Kick, etc)', - 'NodeResValue' => '228' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 924, - 'NodeResNode' => '742', - 'NodeResOrd' => '3', - 'NodeResEng' => 'Takedown', - 'NodeResValue' => '229' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 925, - 'NodeResNode' => '742', - 'NodeResOrd' => '4', - 'NodeResEng' => 'Baton Strike', - 'NodeResValue' => '230' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 926, - 'NodeResNode' => '742', - 'NodeResOrd' => '5', - 'NodeResEng' => 'Taser', - 'NodeResValue' => '231' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 927, - 'NodeResNode' => '742', - 'NodeResOrd' => '6', - 'NodeResEng' => 'Gun', - 'NodeResValue' => '232' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 928, - 'NodeResNode' => '742', - 'NodeResOrd' => '7', - 'NodeResEng' => 'Mace or Pepper Spray', - 'NodeResValue' => '233' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 929, - 'NodeResNode' => '742', - 'NodeResOrd' => '8', - 'NodeResEng' => 'K9 (Dog) Bite', - 'NodeResValue' => '234' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 930, - 'NodeResNode' => '742', - 'NodeResOrd' => '9', - 'NodeResEng' => 'Vehicle', - 'NodeResValue' => '235' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 931, - 'NodeResNode' => '742', - 'NodeResOrd' => '10', - 'NodeResEng' => 'Other', - 'NodeResValue' => '236' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 932, - 'NodeResNode' => '744', - 'NodeResOrd' => '10', - 'NodeResEng' => 'Other', - 'NodeResValue' => '236' - ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 934, 'NodeResNode' => '43', @@ -36710,34 +37109,6 @@ function loadAttProf() { 'NodeResEng' => 'Fired or Discharged Weapon', 'NodeResValue' => '280' ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1000, - 'NodeResNode' => '738', - 'NodeResOrd' => '1', - 'NodeResEng' => 'No', - 'NodeResValue' => 'N' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1001, - 'NodeResNode' => '737', - 'NodeResOrd' => '1', - 'NodeResEng' => 'No', - 'NodeResValue' => 'N' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1002, - 'NodeResNode' => '739', - 'NodeResOrd' => '1', - 'NodeResEng' => 'No', - 'NodeResValue' => 'N' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1003, - 'NodeResNode' => '740', - 'NodeResOrd' => '1', - 'NodeResEng' => 'No', - 'NodeResValue' => 'N' - ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1004, 'NodeResNode' => '743', @@ -37408,7 +37779,7 @@ function loadAttProf() { 'NodeResNode' => '1162', 'NodeResEng' => 'Yes', 'NodeResValue' => 'Y', - 'NodeResShowKids' => '1167' + 'NodeResShowKids' => '520' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1103, @@ -37440,126 +37811,126 @@ function loadAttProf() { DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1107, 'NodeResNode' => '1163', - 'NodeResOrd' => '2', + 'NodeResOrd' => '3', 'NodeResEng' => 'Compound fracture', 'NodeResValue' => '258' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1108, 'NodeResNode' => '1163', - 'NodeResOrd' => '3', + 'NodeResOrd' => '4', 'NodeResEng' => 'In-patient hospital stay required', 'NodeResValue' => '259' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1109, 'NodeResNode' => '1163', - 'NodeResOrd' => '4', + 'NodeResOrd' => '5', 'NodeResEng' => 'Blood loss requiring transfusion', 'NodeResValue' => '260' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1110, 'NodeResNode' => '1163', - 'NodeResOrd' => '5', + 'NodeResOrd' => '6', 'NodeResEng' => 'Major concussion', 'NodeResValue' => '261' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1111, 'NodeResNode' => '1163', - 'NodeResOrd' => '6', + 'NodeResOrd' => '8', 'NodeResEng' => 'Longer than brief loss of consciousness', 'NodeResValue' => '262' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1112, 'NodeResNode' => '1163', - 'NodeResOrd' => '7', + 'NodeResOrd' => '10', 'NodeResEng' => 'Debilitating chronic pain', 'NodeResValue' => '263' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1113, 'NodeResNode' => '1163', - 'NodeResOrd' => '8', + 'NodeResOrd' => '11', 'NodeResEng' => 'Damage to organ (other than skin)', 'NodeResValue' => '264' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1114, 'NodeResNode' => '1163', - 'NodeResOrd' => '9', - 'NodeResEng' => 'Effective Tasings', + 'NodeResOrd' => '12', + 'NodeResEng' => 'Taser Wounds', 'NodeResValue' => '265' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1115, 'NodeResNode' => '1163', - 'NodeResOrd' => '10', + 'NodeResOrd' => '2', 'NodeResEng' => 'Minor bone broken', 'NodeResValue' => '266' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1116, 'NodeResNode' => '1163', - 'NodeResOrd' => '11', + 'NodeResOrd' => '13', 'NodeResEng' => 'Major laceration requiring stitches', 'NodeResValue' => '267' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1117, 'NodeResNode' => '1163', - 'NodeResOrd' => '12', + 'NodeResOrd' => '7', 'NodeResEng' => 'Minor concussion', 'NodeResValue' => '268' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1118, 'NodeResNode' => '1163', - 'NodeResOrd' => '13', + 'NodeResOrd' => '9', 'NodeResEng' => 'Brief loss of consciousness', 'NodeResValue' => '269' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1119, 'NodeResNode' => '1163', - 'NodeResOrd' => '14', + 'NodeResOrd' => '15', 'NodeResEng' => 'Chipped or lost tooth', 'NodeResValue' => '270' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1120, 'NodeResNode' => '1163', - 'NodeResOrd' => '15', + 'NodeResOrd' => '16', 'NodeResEng' => 'Major abrasion', 'NodeResValue' => '271' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1121, 'NodeResNode' => '1163', - 'NodeResOrd' => '16', + 'NodeResOrd' => '18', 'NodeResEng' => 'Sprain', 'NodeResValue' => '272' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1122, 'NodeResNode' => '1163', - 'NodeResOrd' => '17', + 'NodeResOrd' => '19', 'NodeResEng' => 'Bruising', 'NodeResValue' => '273' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1123, 'NodeResNode' => '1163', - 'NodeResOrd' => '18', + 'NodeResOrd' => '14', 'NodeResEng' => 'Minor laceration', 'NodeResValue' => '274' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1124, 'NodeResNode' => '1163', - 'NodeResOrd' => '19', + 'NodeResOrd' => '17', 'NodeResEng' => 'Minor abrasion', 'NodeResValue' => '275' ]); @@ -38039,40 +38410,6 @@ function loadAttProf() { 'NodeResEng' => 'Not sure', 'NodeResValue' => '?' ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1226, - 'NodeResNode' => '1424', - 'NodeResEng' => 'Car', - 'NodeResValue' => '355' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1227, - 'NodeResNode' => '1424', - 'NodeResOrd' => '1', - 'NodeResEng' => 'Motorcycle', - 'NodeResValue' => '358' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1228, - 'NodeResNode' => '1424', - 'NodeResOrd' => '2', - 'NodeResEng' => 'Bicycle', - 'NodeResValue' => '356' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1229, - 'NodeResNode' => '1424', - 'NodeResOrd' => '3', - 'NodeResEng' => 'Boat', - 'NodeResValue' => '357' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1230, - 'NodeResNode' => '1424', - 'NodeResOrd' => '4', - 'NodeResEng' => 'Other', - 'NodeResValue' => '407' - ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1231, 'NodeResNode' => '1430', @@ -38084,7 +38421,8 @@ function loadAttProf() { 'NodeResNode' => '1430', 'NodeResOrd' => '1', 'NodeResEng' => 'No', - 'NodeResValue' => 'N' + 'NodeResValue' => 'N', + 'NodeResShowKids' => '1434' ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1233, @@ -38093,47 +38431,6 @@ function loadAttProf() { 'NodeResEng' => 'Not sure', 'NodeResValue' => '?' ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1234, - 'NodeResNode' => '1431', - 'NodeResEng' => 'Car', - 'NodeResValue' => '360' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1235, - 'NodeResNode' => '1431', - 'NodeResOrd' => '1', - 'NodeResEng' => 'Van', - 'NodeResValue' => '361' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1236, - 'NodeResNode' => '1431', - 'NodeResOrd' => '2', - 'NodeResEng' => 'Motorcycle', - 'NodeResValue' => '362' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1237, - 'NodeResNode' => '1431', - 'NodeResOrd' => '3', - 'NodeResEng' => 'Bicycle', - 'NodeResValue' => '363' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1238, - 'NodeResNode' => '1431', - 'NodeResOrd' => '4', - 'NodeResEng' => 'Boat', - 'NodeResValue' => '364' - ]); - DB::table('SL_NodeResponses')->insert([ - 'NodeResID' => 1239, - 'NodeResNode' => '1431', - 'NodeResOrd' => '5', - 'NodeResEng' => 'Other', - 'NodeResValue' => '365' - ]); DB::table('SL_NodeResponses')->insert([ 'NodeResID' => 1240, 'NodeResNode' => '767', @@ -38782,6 +39079,445 @@ function loadAttProf() { 'NodeResEng' => 'I want to correct an inaccuracy', 'NodeResValue' => 'Correct inaccuracy' ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1376, + 'NodeResNode' => '742', + 'NodeResEng' => 'Grabbing or Control Hold', + 'NodeResValue' => '227' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1377, + 'NodeResNode' => '742', + 'NodeResOrd' => '1', + 'NodeResEng' => 'Pushing', + 'NodeResValue' => '443' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1378, + 'NodeResNode' => '742', + 'NodeResOrd' => '2', + 'NodeResEng' => 'Body Weapons (Punch, Kick, Elbow, etc)', + 'NodeResValue' => '228' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1379, + 'NodeResNode' => '742', + 'NodeResOrd' => '3', + 'NodeResEng' => 'Takedown', + 'NodeResValue' => '229' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1380, + 'NodeResNode' => '742', + 'NodeResOrd' => '4', + 'NodeResEng' => 'Baton Strike', + 'NodeResValue' => '230' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1381, + 'NodeResNode' => '742', + 'NodeResOrd' => '5', + 'NodeResEng' => 'Taser', + 'NodeResValue' => '231' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1382, + 'NodeResNode' => '742', + 'NodeResOrd' => '6', + 'NodeResEng' => 'Gun', + 'NodeResValue' => '232' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1383, + 'NodeResNode' => '742', + 'NodeResOrd' => '7', + 'NodeResEng' => 'Mace or Pepper Spray', + 'NodeResValue' => '233' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1384, + 'NodeResNode' => '742', + 'NodeResOrd' => '8', + 'NodeResEng' => 'K9 (Dog) Bite', + 'NodeResValue' => '234' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1385, + 'NodeResNode' => '742', + 'NodeResOrd' => '9', + 'NodeResEng' => 'Vehicle', + 'NodeResValue' => '235' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1386, + 'NodeResNode' => '742', + 'NodeResOrd' => '10', + 'NodeResEng' => 'Other', + 'NodeResValue' => '236' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1387, + 'NodeResNode' => '744', + 'NodeResEng' => 'Grabbing or Control Hold', + 'NodeResValue' => '227' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1388, + 'NodeResNode' => '744', + 'NodeResOrd' => '1', + 'NodeResEng' => 'Pushing', + 'NodeResValue' => '443' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1389, + 'NodeResNode' => '744', + 'NodeResOrd' => '2', + 'NodeResEng' => 'Body Weapons (Punch, Kick, Elbow, etc)', + 'NodeResValue' => '228' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1390, + 'NodeResNode' => '744', + 'NodeResOrd' => '3', + 'NodeResEng' => 'Takedown', + 'NodeResValue' => '229' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1391, + 'NodeResNode' => '744', + 'NodeResOrd' => '4', + 'NodeResEng' => 'Baton Strike', + 'NodeResValue' => '230' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1392, + 'NodeResNode' => '744', + 'NodeResOrd' => '5', + 'NodeResEng' => 'Taser', + 'NodeResValue' => '231' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1393, + 'NodeResNode' => '744', + 'NodeResOrd' => '6', + 'NodeResEng' => 'Gun', + 'NodeResValue' => '232' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1394, + 'NodeResNode' => '744', + 'NodeResOrd' => '7', + 'NodeResEng' => 'Mace or Pepper Spray', + 'NodeResValue' => '233' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1395, + 'NodeResNode' => '744', + 'NodeResOrd' => '8', + 'NodeResEng' => 'K9 (Dog) Bite', + 'NodeResValue' => '234' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1396, + 'NodeResNode' => '744', + 'NodeResOrd' => '9', + 'NodeResEng' => 'Vehicle', + 'NodeResValue' => '235' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1397, + 'NodeResNode' => '744', + 'NodeResOrd' => '10', + 'NodeResEng' => 'Other', + 'NodeResValue' => '236' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1398, + 'NodeResNode' => '2044', + 'NodeResEng' => 'Grabbing or Control Hold', + 'NodeResValue' => '227' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1399, + 'NodeResNode' => '2044', + 'NodeResOrd' => '1', + 'NodeResEng' => 'Pushing', + 'NodeResValue' => '443' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1400, + 'NodeResNode' => '2044', + 'NodeResOrd' => '2', + 'NodeResEng' => 'Body Weapons (Punch, Kick, Elbow, etc)', + 'NodeResValue' => '228' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1401, + 'NodeResNode' => '2044', + 'NodeResOrd' => '3', + 'NodeResEng' => 'Takedown', + 'NodeResValue' => '229' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1402, + 'NodeResNode' => '2044', + 'NodeResOrd' => '4', + 'NodeResEng' => 'Baton Strike', + 'NodeResValue' => '230' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1403, + 'NodeResNode' => '2044', + 'NodeResOrd' => '5', + 'NodeResEng' => 'Taser', + 'NodeResValue' => '231' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1404, + 'NodeResNode' => '2044', + 'NodeResOrd' => '6', + 'NodeResEng' => 'Gun', + 'NodeResValue' => '232' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1405, + 'NodeResNode' => '2044', + 'NodeResOrd' => '7', + 'NodeResEng' => 'Mace or Pepper Spray', + 'NodeResValue' => '233' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1406, + 'NodeResNode' => '2044', + 'NodeResOrd' => '8', + 'NodeResEng' => 'K9 (Dog) Bite', + 'NodeResValue' => '234' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1407, + 'NodeResNode' => '2044', + 'NodeResOrd' => '9', + 'NodeResEng' => 'Vehicle', + 'NodeResValue' => '235' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1408, + 'NodeResNode' => '2044', + 'NodeResOrd' => '10', + 'NodeResEng' => 'Other', + 'NodeResValue' => '236' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1409, + 'NodeResNode' => '616', + 'NodeResOrd' => '3', + 'NodeResEng' => 'Other', + 'NodeResValue' => '417', + 'NodeResShowKids' => '618' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1410, + 'NodeResNode' => '616', + 'NodeResOrd' => '4', + 'NodeResEng' => 'Not sure', + 'NodeResValue' => '583', + 'NodeResShowKids' => '618' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1411, + 'NodeResNode' => '2074', + 'NodeResEng' => 'Attorney', + 'NodeResValue' => '219' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1412, + 'NodeResNode' => '2074', + 'NodeResOrd' => '1', + 'NodeResEng' => 'Academic', + 'NodeResValue' => '220' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1413, + 'NodeResNode' => '2074', + 'NodeResOrd' => '2', + 'NodeResEng' => 'Journalist', + 'NodeResValue' => '221' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1414, + 'NodeResNode' => '2074', + 'NodeResOrd' => '3', + 'NodeResEng' => 'Researcher', + 'NodeResValue' => '222' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1415, + 'NodeResNode' => '2074', + 'NodeResOrd' => '4', + 'NodeResEng' => 'Police Department', + 'NodeResValue' => '516' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1416, + 'NodeResNode' => '2074', + 'NodeResOrd' => '5', + 'NodeResEng' => 'Oversight Agency', + 'NodeResValue' => '517' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1417, + 'NodeResNode' => '2074', + 'NodeResOrd' => '6', + 'NodeResEng' => 'Organization', + 'NodeResValue' => '584' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1418, + 'NodeResNode' => '2125', + 'NodeResEng' => 'Yes, I want to share my complaint with attorneys and legal experts who can help.', + 'NodeResValue' => 'Y' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1419, + 'NodeResNode' => '2126', + 'NodeResEng' => 'Yes, I want to publish my complaint data on this website.', + 'NodeResValue' => 'Yes, I want to publish my complaint data on this website.' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1420, + 'NodeResNode' => '349', + 'NodeResOrd' => '-1', + 'NodeResValue' => '0' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1421, + 'NodeResNode' => '2132', + 'NodeResEng' => 'Driver', + 'NodeResValue' => '593' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1422, + 'NodeResNode' => '2132', + 'NodeResOrd' => '1', + 'NodeResEng' => 'Passenger', + 'NodeResValue' => '594' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1429, + 'NodeResNode' => '1431', + 'NodeResEng' => 'Car', + 'NodeResValue' => '360' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1430, + 'NodeResNode' => '1431', + 'NodeResOrd' => '1', + 'NodeResEng' => 'Truck', + 'NodeResValue' => '592' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1431, + 'NodeResNode' => '1431', + 'NodeResOrd' => '2', + 'NodeResEng' => 'Van', + 'NodeResValue' => '361' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1432, + 'NodeResNode' => '1431', + 'NodeResOrd' => '3', + 'NodeResEng' => 'Motorcycle', + 'NodeResValue' => '362' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1433, + 'NodeResNode' => '1431', + 'NodeResOrd' => '4', + 'NodeResEng' => 'Bicycle', + 'NodeResValue' => '363' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1434, + 'NodeResNode' => '1431', + 'NodeResOrd' => '5', + 'NodeResEng' => 'Boat', + 'NodeResValue' => '364' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1435, + 'NodeResNode' => '1431', + 'NodeResOrd' => '6', + 'NodeResEng' => 'Other', + 'NodeResValue' => '365' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1436, + 'NodeResNode' => '2140', + 'NodeResEng' => 'Yes', + 'NodeResValue' => '0', + 'NodeResShowKids' => '2141' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1437, + 'NodeResNode' => '2140', + 'NodeResOrd' => '1', + 'NodeResEng' => 'No', + 'NodeResValue' => '1' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1438, + 'NodeResNode' => '2147', + 'NodeResEng' => 'Driver', + 'NodeResValue' => '593' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1439, + 'NodeResNode' => '2147', + 'NodeResOrd' => '1', + 'NodeResEng' => 'Passenger', + 'NodeResValue' => '594' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1440, + 'NodeResNode' => '2085', + 'NodeResEng' => 'Assist Complainants Using OpenPolice.org', + 'NodeResValue' => '588' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1441, + 'NodeResNode' => '2085', + 'NodeResOrd' => '1', + 'NodeResEng' => 'Services or Support for Police Brutality Victims', + 'NodeResValue' => '585' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1442, + 'NodeResNode' => '2085', + 'NodeResOrd' => '2', + 'NodeResEng' => 'Education About Police or Corrections', + 'NodeResValue' => '587' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1443, + 'NodeResNode' => '2085', + 'NodeResOrd' => '3', + 'NodeResEng' => 'Legal Assistance', + 'NodeResValue' => '589' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1444, + 'NodeResNode' => '2085', + 'NodeResOrd' => '4', + 'NodeResEng' => 'Legal Representation', + 'NodeResValue' => '590' + ]); + DB::table('SL_NodeResponses')->insert([ + 'NodeResID' => 1445, + 'NodeResNode' => '2085', + 'NodeResOrd' => '5', + 'NodeResEng' => 'Political or Legislative Action', + 'NodeResValue' => '586' + ]); DB::table('SL_Conditions')->insert([ 'CondID' => 1, @@ -38879,8 +39615,9 @@ function loadAttProf() { 'CondOperator' => 'EXISTS>', 'CondOperDeet' => '1', 'CondField' => '0', - 'CondTable' => '102', - 'CondLoop' => '1' + 'CondTable' => '0', + 'CondLoop' => '1', + 'CondOpts' => '2' ]); DB::table('SL_Conditions')->insert([ 'CondID' => 10, @@ -38944,23 +39681,12 @@ function loadAttProf() { 'CondTable' => '116', 'CondLoop' => '6' ]); - DB::table('SL_Conditions')->insert([ - 'CondID' => 17, - 'CondDatabase' => '1', - 'CondTag' => '#EventIsForceAnimal', - 'CondDesc' => 'Current event (being edited) is a use of force against an animal.', - 'CondOperator' => '}', - 'CondOperDeet' => '0', - 'CondField' => '860', - 'CondTable' => '137', - 'CondLoop' => '0' - ]); DB::table('SL_Conditions')->insert([ 'CondID' => 18, 'CondDatabase' => '1', 'CondTag' => '#HasInjury', 'CondDesc' => 'Complaint has at least one injury described.', - 'CondOperator' => 'EXISTS>', + 'CondOperator' => 'CUSTOM', 'CondOperDeet' => '0', 'CondField' => '0', 'CondTable' => '117', @@ -39056,48 +39782,6 @@ function loadAttProf() { 'CondTable' => '0', 'CondLoop' => '0' ]); - DB::table('SL_Conditions')->insert([ - 'CondID' => 27, - 'CondDatabase' => '1', - 'CondTag' => '#EventIsStop', - 'CondDesc' => 'Current event (being edited) is a stop.', - 'CondOperDeet' => '0', - 'CondField' => '1154', - 'CondTable' => '137', - 'CondLoop' => '0' - ]); - DB::table('SL_Conditions')->insert([ - 'CondID' => 28, - 'CondDatabase' => '1', - 'CondTag' => '#PreviousEnteredStops', - 'CondDesc' => 'Complainant has already entered at least one other stop event.', - 'CondOperator' => 'CUSTOM', - 'CondOperDeet' => '0', - 'CondField' => '0', - 'CondTable' => '0', - 'CondLoop' => '0' - ]); - DB::table('SL_Conditions')->insert([ - 'CondID' => 29, - 'CondDatabase' => '1', - 'CondTag' => '#EventIsSearch', - 'CondDesc' => 'Current event (being edited) is a search.', - 'CondOperDeet' => '0', - 'CondField' => '1154', - 'CondTable' => '137', - 'CondLoop' => '0' - ]); - DB::table('SL_Conditions')->insert([ - 'CondID' => 30, - 'CondDatabase' => '1', - 'CondTag' => '#PreviousEnteredSearches', - 'CondDesc' => 'Complainant has already entered at least one other search event.', - 'CondOperator' => 'CUSTOM', - 'CondOperDeet' => '0', - 'CondField' => '0', - 'CondTable' => '0', - 'CondLoop' => '0' - ]); DB::table('SL_Conditions')->insert([ 'CondID' => 31, 'CondDatabase' => '1', @@ -39108,38 +39792,6 @@ function loadAttProf() { 'CondTable' => '137', 'CondLoop' => '0' ]); - DB::table('SL_Conditions')->insert([ - 'CondID' => 32, - 'CondDatabase' => '1', - 'CondTag' => '#PreviousEnteredForce', - 'CondDesc' => 'Complainant has already entered at least one other use of force event.', - 'CondOperator' => 'CUSTOM', - 'CondOperDeet' => '0', - 'CondField' => '0', - 'CondTable' => '0', - 'CondLoop' => '0' - ]); - DB::table('SL_Conditions')->insert([ - 'CondID' => 33, - 'CondDatabase' => '1', - 'CondTag' => '#EventIsArrest', - 'CondDesc' => 'Current event (being edited) is an arrest.', - 'CondOperDeet' => '0', - 'CondField' => '1154', - 'CondTable' => '137', - 'CondLoop' => '0' - ]); - DB::table('SL_Conditions')->insert([ - 'CondID' => 34, - 'CondDatabase' => '1', - 'CondTag' => '#PreviousEnteredArrests', - 'CondDesc' => 'Complainant has already entered at least one other arrest event.', - 'CondOperator' => 'CUSTOM', - 'CondOperDeet' => '0', - 'CondField' => '0', - 'CondTable' => '0', - 'CondLoop' => '0' - ]); DB::table('SL_Conditions')->insert([ 'CondID' => 35, 'CondDatabase' => '1', @@ -39226,16 +39878,6 @@ function loadAttProf() { 'CondTable' => '102', 'CondLoop' => '0' ]); - DB::table('SL_Conditions')->insert([ - 'CondID' => 43, - 'CondDatabase' => '1', - 'CondTag' => '#StopGivenCitation', - 'CondDesc' => 'Current stop resulting in citation charges.', - 'CondOperDeet' => '0', - 'CondField' => '1084', - 'CondTable' => '121', - 'CondLoop' => '0' - ]); DB::table('SL_Conditions')->insert([ 'CondID' => 44, 'CondDatabase' => '1', @@ -39841,6 +40483,69 @@ function loadAttProf() { 'CondLoop' => '0', 'CondOpts' => '2' ]); + DB::table('SL_Conditions')->insert([ + 'CondID' => 125, + 'CondDatabase' => '1', + 'CondTag' => '#ForceHasType', + 'CondDesc' => 'Use of current force record includes a type of force.', + 'CondOperDeet' => '0', + 'CondField' => '256', + 'CondTable' => '116', + 'CondLoop' => '0' + ]); + DB::table('SL_Conditions')->insert([ + 'CondID' => 126, + 'CondDatabase' => '1', + 'CondTag' => '#CivHasMedicalCare', + 'CondDesc' => 'Current civilian received medical care for injuries.', + 'CondOperDeet' => '0', + 'CondField' => '1437', + 'CondTable' => '102', + 'CondLoop' => '0', + 'CondOpts' => '2' + ]); + DB::table('SL_Conditions')->insert([ + 'CondID' => 127, + 'CondDatabase' => '1', + 'CondTag' => '#CivHasCitation', + 'CondDesc' => 'The current civilian was given a citation.', + 'CondOperDeet' => '0', + 'CondField' => '1084', + 'CondTable' => '102', + 'CondLoop' => '0' + ]); + DB::table('SL_Conditions')->insert([ + 'CondID' => 128, + 'CondDatabase' => '1', + 'CondTag' => '#PartnerIsAttorney', + 'CondDesc' => 'Current partner is an attorney.', + 'CondOperDeet' => '0', + 'CondField' => '988', + 'CondTable' => '110', + 'CondLoop' => '0' + ]); + DB::table('SL_Conditions')->insert([ + 'CondID' => 129, + 'CondDatabase' => '1', + 'CondTag' => '#PartnerIsOrg', + 'CondDesc' => 'Current partner is an organization.', + 'CondOperDeet' => '0', + 'CondField' => '988', + 'CondTable' => '110', + 'CondLoop' => '0' + ]); + DB::table('SL_Conditions')->insert([ + 'CondID' => 135, + 'CondDatabase' => '1', + 'CondTag' => '#HasMultipleCivilians', + 'CondDesc' => 'Complaint has Victims and Witnesses totalling more than one.', + 'CondOperator' => 'EXISTS>', + 'CondOperDeet' => '1', + 'CondField' => '0', + 'CondTable' => '0', + 'CondLoop' => '25', + 'CondOpts' => '2' + ]); DB::table('SL_ConditionsVals')->insert([ 'CondValID' => 1, @@ -39877,36 +40582,16 @@ function loadAttProf() { 'CondValCondID' => '12', 'CondValValue' => '350' ]); - DB::table('SL_ConditionsVals')->insert([ - 'CondValID' => 14, - 'CondValCondID' => '17', - 'CondValValue' => 'Y' - ]); DB::table('SL_ConditionsVals')->insert([ 'CondValID' => 17, 'CondValCondID' => '21', 'CondValValue' => '307' ]); - DB::table('SL_ConditionsVals')->insert([ - 'CondValID' => 18, - 'CondValCondID' => '27', - 'CondValValue' => 'Stops' - ]); - DB::table('SL_ConditionsVals')->insert([ - 'CondValID' => 19, - 'CondValCondID' => '29', - 'CondValValue' => 'Searches' - ]); DB::table('SL_ConditionsVals')->insert([ 'CondValID' => 20, 'CondValCondID' => '31', 'CondValValue' => 'Force' ]); - DB::table('SL_ConditionsVals')->insert([ - 'CondValID' => 21, - 'CondValCondID' => '33', - 'CondValValue' => 'Arrests' - ]); DB::table('SL_ConditionsVals')->insert([ 'CondValID' => 23, 'CondValCondID' => '39', @@ -39932,11 +40617,6 @@ function loadAttProf() { 'CondValCondID' => '42', 'CondValValue' => 'Y' ]); - DB::table('SL_ConditionsVals')->insert([ - 'CondValID' => 28, - 'CondValCondID' => '43', - 'CondValValue' => 'Y' - ]); DB::table('SL_ConditionsVals')->insert([ 'CondValID' => 29, 'CondValCondID' => '36', @@ -40307,6 +40987,81 @@ function loadAttProf() { 'CondValCondID' => '119', 'CondValValue' => '199' ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 145, + 'CondValCondID' => '125', + 'CondValValue' => '227' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 146, + 'CondValCondID' => '125', + 'CondValValue' => '443' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 147, + 'CondValCondID' => '125', + 'CondValValue' => '228' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 148, + 'CondValCondID' => '125', + 'CondValValue' => '229' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 149, + 'CondValCondID' => '125', + 'CondValValue' => '230' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 150, + 'CondValCondID' => '125', + 'CondValValue' => '231' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 151, + 'CondValCondID' => '125', + 'CondValValue' => '232' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 152, + 'CondValCondID' => '125', + 'CondValValue' => '233' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 153, + 'CondValCondID' => '125', + 'CondValValue' => '234' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 154, + 'CondValCondID' => '125', + 'CondValValue' => '235' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 155, + 'CondValCondID' => '125', + 'CondValValue' => '236' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 156, + 'CondValCondID' => '126', + 'CondValValue' => 'Y' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 157, + 'CondValCondID' => '127', + 'CondValValue' => 'Y' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 158, + 'CondValCondID' => '128', + 'CondValValue' => '219' + ]); + DB::table('SL_ConditionsVals')->insert([ + 'CondValID' => 159, + 'CondValCondID' => '129', + 'CondValValue' => '584' + ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 1, @@ -40503,11 +41258,6 @@ function loadAttProf() { 'CondNodeCondID' => '2', 'CondNodeNodeID' => '48' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 43, - 'CondNodeCondID' => '4', - 'CondNodeNodeID' => '148' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 44, 'CondNodeCondID' => '4', @@ -40623,31 +41373,11 @@ function loadAttProf() { 'CondNodeCondID' => '8', 'CondNodeNodeID' => '593' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 68, - 'CondNodeCondID' => '9', - 'CondNodeNodeID' => '207' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 69, - 'CondNodeCondID' => '9', - 'CondNodeNodeID' => '215' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 70, 'CondNodeCondID' => '9', 'CondNodeNodeID' => '220' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 71, - 'CondNodeCondID' => '9', - 'CondNodeNodeID' => '225' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 72, - 'CondNodeCondID' => '9', - 'CondNodeNodeID' => '230' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 73, 'CondNodeCondID' => '9', @@ -40799,101 +41529,6 @@ function loadAttProf() { 'CondNodeCondID' => '26', 'CondNodeNodeID' => '260' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 113, - 'CondNodeCondID' => '27', - 'CondNodeNodeID' => '487' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 114, - 'CondNodeCondID' => '27', - 'CondNodeNodeID' => '486' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 115, - 'CondNodeCondID' => '27', - 'CondNodeNodeID' => '488' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 116, - 'CondNodeCondID' => '27', - 'CondNodeNodeID' => '489' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 117, - 'CondNodeCondID' => '27', - 'CondNodeNodeID' => '490' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 118, - 'CondNodeCondID' => '27', - 'CondNodeNodeID' => '491' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 119, - 'CondNodeCondID' => '27', - 'CondNodeNodeID' => '492' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 120, - 'CondNodeCondID' => '27', - 'CondNodeNodeID' => '493' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 121, - 'CondNodeCondID' => '28', - 'CondNodeNodeID' => '486' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 122, - 'CondNodeCondID' => '29', - 'CondNodeNodeID' => '495' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 123, - 'CondNodeCondID' => '29', - 'CondNodeNodeID' => '494' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 124, - 'CondNodeCondID' => '29', - 'CondNodeNodeID' => '500' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 125, - 'CondNodeCondID' => '29', - 'CondNodeNodeID' => '501' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 126, - 'CondNodeCondID' => '29', - 'CondNodeNodeID' => '502' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 127, - 'CondNodeCondID' => '29', - 'CondNodeNodeID' => '503' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 128, - 'CondNodeCondID' => '29', - 'CondNodeNodeID' => '504' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 129, - 'CondNodeCondID' => '29', - 'CondNodeNodeID' => '505' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 130, - 'CondNodeCondID' => '29', - 'CondNodeNodeID' => '506' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 131, - 'CondNodeCondID' => '30', - 'CondNodeNodeID' => '494' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 132, 'CondNodeCondID' => '31', @@ -40909,11 +41544,6 @@ function loadAttProf() { 'CondNodeCondID' => '31', 'CondNodeNodeID' => '507' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 135, - 'CondNodeCondID' => '31', - 'CondNodeNodeID' => '508' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 136, 'CondNodeCondID' => '31', @@ -40924,56 +41554,6 @@ function loadAttProf() { 'CondNodeCondID' => '31', 'CondNodeNodeID' => '511' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 139, - 'CondNodeCondID' => '32', - 'CondNodeNodeID' => '496' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 140, - 'CondNodeCondID' => '33', - 'CondNodeNodeID' => '497' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 141, - 'CondNodeCondID' => '33', - 'CondNodeNodeID' => '499' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 142, - 'CondNodeCondID' => '33', - 'CondNodeNodeID' => '512' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 143, - 'CondNodeCondID' => '33', - 'CondNodeNodeID' => '513' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 144, - 'CondNodeCondID' => '33', - 'CondNodeNodeID' => '514' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 145, - 'CondNodeCondID' => '33', - 'CondNodeNodeID' => '515' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 146, - 'CondNodeCondID' => '33', - 'CondNodeNodeID' => '516' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 147, - 'CondNodeCondID' => '33', - 'CondNodeNodeID' => '599' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 148, - 'CondNodeCondID' => '34', - 'CondNodeNodeID' => '497' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 149, 'CondNodeCondID' => '35', @@ -40984,11 +41564,6 @@ function loadAttProf() { 'CondNodeCondID' => '37', 'CondNodeNodeID' => '516' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 152, - 'CondNodeCondID' => '38', - 'CondNodeNodeID' => '517' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 153, 'CondNodeCondID' => '39', @@ -41014,11 +41589,6 @@ function loadAttProf() { 'CondNodeCondID' => '42', 'CondNodeLoopID' => '7' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 158, - 'CondNodeCondID' => '43', - 'CondNodeLoopID' => '15' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 159, 'CondNodeCondID' => '44', @@ -41034,11 +41604,6 @@ function loadAttProf() { 'CondNodeCondID' => '44', 'CondNodeNodeID' => '611' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 162, - 'CondNodeCondID' => '27', - 'CondNodeNodeID' => '621' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 167, 'CondNodeCondID' => '8', @@ -41386,17 +41951,6 @@ function loadAttProf() { 'CondNodeNodeID' => '-3', 'CondNodeLoopID' => '-1' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 280, - 'CondNodeCondID' => '62', - 'CondNodeNodeID' => '1097' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 281, - 'CondNodeCondID' => '62', - 'CondNodeNodeID' => '1114', - 'CondNodeLoopID' => '-1' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 282, 'CondNodeCondID' => '62', @@ -41695,41 +42249,6 @@ function loadAttProf() { 'CondNodeCondID' => '1', 'CondNodeNodeID' => '1412' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 356, - 'CondNodeCondID' => '1', - 'CondNodeNodeID' => '1426' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 357, - 'CondNodeCondID' => '1', - 'CondNodeNodeID' => '1427' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 358, - 'CondNodeCondID' => '1', - 'CondNodeNodeID' => '1428' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 359, - 'CondNodeCondID' => '1', - 'CondNodeNodeID' => '1429' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 360, - 'CondNodeCondID' => '1', - 'CondNodeNodeID' => '1432' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 361, - 'CondNodeCondID' => '1', - 'CondNodeNodeID' => '1433' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 362, - 'CondNodeCondID' => '1', - 'CondNodeNodeID' => '1434' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 363, 'CondNodeCondID' => '105', @@ -41767,32 +42286,11 @@ function loadAttProf() { 'CondNodeNodeID' => '1519', 'CondNodeLoopID' => '-1' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 381, - 'CondNodeCondID' => '27', - 'CondNodeNodeID' => '1575' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 382, - 'CondNodeCondID' => '29', - 'CondNodeNodeID' => '1576' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 383, 'CondNodeCondID' => '31', 'CondNodeNodeID' => '1577' ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 384, - 'CondNodeCondID' => '33', - 'CondNodeNodeID' => '1578' - ]); - DB::table('SL_ConditionsNodes')->insert([ - 'CondNodeID' => 385, - 'CondNodeCondID' => '17', - 'CondNodeNodeID' => '351', - 'CondNodeLoopID' => '-1' - ]); DB::table('SL_ConditionsNodes')->insert([ 'CondNodeID' => 393, 'CondNodeCondID' => '113', @@ -41876,6 +42374,288 @@ function loadAttProf() { 'CondNodeNodeID' => '453', 'CondNodeLoopID' => '-1' ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 443, + 'CondNodeCondID' => '77', + 'CondNodeNodeID' => '150' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 444, + 'CondNodeCondID' => '44', + 'CondNodeNodeID' => '152' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 447, + 'CondNodeCondID' => '31', + 'CondNodeLoopID' => '6' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 449, + 'CondNodeCondID' => '9', + 'CondNodeNodeID' => '2038' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 450, + 'CondNodeCondID' => '9', + 'CondNodeNodeID' => '2039' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 453, + 'CondNodeCondID' => '9', + 'CondNodeNodeID' => '742' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 454, + 'CondNodeCondID' => '9', + 'CondNodeNodeID' => '2044', + 'CondNodeLoopID' => '-1' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 455, + 'CondNodeCondID' => '125', + 'CondNodeNodeID' => '2047' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 457, + 'CondNodeCondID' => '9', + 'CondNodeNodeID' => '2040' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 458, + 'CondNodeCondID' => '9', + 'CondNodeNodeID' => '2041' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 459, + 'CondNodeCondID' => '96', + 'CondNodeNodeID' => '2050' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 460, + 'CondNodeCondID' => '126', + 'CondNodeNodeID' => '2051' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 463, + 'CondNodeCondID' => '20', + 'CondNodeNodeID' => '2054' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 464, + 'CondNodeCondID' => '126', + 'CondNodeNodeID' => '2056' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 467, + 'CondNodeCondID' => '77', + 'CondNodeNodeID' => '505' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 468, + 'CondNodeCondID' => '76', + 'CondNodeNodeID' => '488' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 469, + 'CondNodeCondID' => '77', + 'CondNodeNodeID' => '500' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 471, + 'CondNodeCondID' => '44', + 'CondNodeNodeID' => '512' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 472, + 'CondNodeCondID' => '18', + 'CondNodeNodeID' => '414' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 473, + 'CondNodeCondID' => '78', + 'CondNodeNodeID' => '2032' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 474, + 'CondNodeCondID' => '78', + 'CondNodeNodeID' => '508' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 475, + 'CondNodeCondID' => '127', + 'CondNodeNodeID' => '2058' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 476, + 'CondNodeCondID' => '79', + 'CondNodeNodeID' => '523' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 481, + 'CondNodeCondID' => '128', + 'CondNodeNodeID' => '1964' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 482, + 'CondNodeCondID' => '129', + 'CondNodeNodeID' => '2075' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 484, + 'CondNodeCondID' => '129', + 'CondNodeNodeID' => '2076' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 485, + 'CondNodeCondID' => '128', + 'CondNodeNodeID' => '2081' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 486, + 'CondNodeCondID' => '128', + 'CondNodeNodeID' => '2082' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 487, + 'CondNodeCondID' => '129', + 'CondNodeNodeID' => '2083' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 488, + 'CondNodeCondID' => '129', + 'CondNodeNodeID' => '2084' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 492, + 'CondNodeCondID' => '39', + 'CondNodeNodeID' => '454' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 493, + 'CondNodeCondID' => '7', + 'CondNodeNodeID' => '862' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 494, + 'CondNodeCondID' => '7', + 'CondNodeNodeID' => '508' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 495, + 'CondNodeCondID' => '7', + 'CondNodeNodeID' => '2032' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 496, + 'CondNodeCondID' => '7', + 'CondNodeNodeID' => '523' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 497, + 'CondNodeCondID' => '7', + 'CondNodeNodeID' => '512' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 498, + 'CondNodeCondID' => '7', + 'CondNodeNodeID' => '500' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 499, + 'CondNodeCondID' => '7', + 'CondNodeNodeID' => '2054' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 500, + 'CondNodeCondID' => '7', + 'CondNodeNodeID' => '505' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 501, + 'CondNodeCondID' => '7', + 'CondNodeNodeID' => '488' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 502, + 'CondNodeCondID' => '7', + 'CondNodeNodeID' => '414' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 503, + 'CondNodeCondID' => '7', + 'CondNodeNodeID' => '517' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 512, + 'CondNodeCondID' => '56', + 'CondNodeNodeID' => '1794' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 513, + 'CondNodeCondID' => '7', + 'CondNodeNodeID' => '2119' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 514, + 'CondNodeCondID' => '103', + 'CondNodeNodeID' => '1794' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 515, + 'CondNodeCondID' => '101', + 'CondNodeNodeID' => '1794', + 'CondNodeLoopID' => '-1' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 516, + 'CondNodeCondID' => '99', + 'CondNodeNodeID' => '2123' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 517, + 'CondNodeCondID' => '99', + 'CondNodeNodeID' => '2124', + 'CondNodeLoopID' => '-1' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 518, + 'CondNodeCondID' => '99', + 'CondNodeNodeID' => '269', + 'CondNodeLoopID' => '-1' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 519, + 'CondNodeCondID' => '99', + 'CondNodeNodeID' => '2125' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 521, + 'CondNodeCondID' => '97', + 'CondNodeNodeID' => '2127', + 'CondNodeLoopID' => '-1' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 524, + 'CondNodeCondID' => '135', + 'CondNodeNodeID' => '2138', + 'CondNodeLoopID' => '-1' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 525, + 'CondNodeCondID' => '8', + 'CondNodeNodeID' => '2137', + 'CondNodeLoopID' => '-1' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 526, + 'CondNodeCondID' => '105', + 'CondNodeNodeID' => '-3' + ]); + DB::table('SL_ConditionsNodes')->insert([ + 'CondNodeID' => 527, + 'CondNodeCondID' => '105', + 'CondNodeNodeID' => '2143' + ]); DB::table('SL_ConditionsArticles')->insert([ 'ArticleID' => 2, @@ -42131,11 +42911,10 @@ function loadAttProf() { 'DataLoopID' => 6, 'DataLoopTree' => '1', 'DataLoopRoot' => '148', - 'DataLoopPlural' => 'Events', - 'DataLoopSingular' => 'Event', + 'DataLoopPlural' => 'Types of Force', + 'DataLoopSingular' => 'Type of Force', 'DataLoopTable' => 'EventSequence', 'DataLoopSortFld' => 'EveOrder', - 'DataLoopDoneFld' => 'EventSequence:EveUserFinished', 'DataLoopIsStep' => '1', 'DataLoopAutoGen' => '0' ]); @@ -42158,18 +42937,7 @@ function loadAttProf() { 'DataLoopRoot' => '400', 'DataLoopPlural' => 'Citations', 'DataLoopSingular' => 'Citation', - 'DataLoopTable' => 'Stops', - 'DataLoopDoneFld' => 'Stops:StopChargesOther', - 'DataLoopIsStep' => '1', - 'DataLoopAutoGen' => '0' - ]); - DB::table('SL_DataLoop')->insert([ - 'DataLoopID' => 16, - 'DataLoopTree' => '1', - 'DataLoopRoot' => '414', - 'DataLoopPlural' => 'Medical Care', - 'DataLoopSingular' => 'Medical Care', - 'DataLoopTable' => 'InjuryCare', + 'DataLoopTable' => 'Civilians', 'DataLoopIsStep' => '1', 'DataLoopAutoGen' => '0' ]); @@ -42247,14 +43015,6 @@ function loadAttProf() { 'DataLoopTable' => 'Civilians', 'DataLoopIsStep' => '1' ]); - DB::table('SL_DataLoop')->insert([ - 'DataLoopID' => 26, - 'DataLoopTree' => '1', - 'DataLoopRoot' => '1501', - 'DataLoopPlural' => 'Injuries', - 'DataLoopSingular' => 'Injury', - 'DataLoopTable' => 'Injuries' - ]); DB::table('SL_DataLoop')->insert([ 'DataLoopID' => 27, 'DataLoopTree' => '1', @@ -42266,10 +43026,12 @@ function loadAttProf() { DB::table('SL_DataLoop')->insert([ 'DataLoopID' => 28, 'DataLoopTree' => '1', - 'DataLoopRoot' => '1489', + 'DataLoopRoot' => '2128', 'DataLoopPlural' => 'Vehicles', 'DataLoopSingular' => 'Vehicle', - 'DataLoopTable' => 'Vehicles' + 'DataLoopTable' => 'Vehicles', + 'DataLoopMaxLimit' => '3', + 'DataLoopWarnLimit' => '2' ]); DB::table('SL_DataLoop')->insert([ 'DataLoopID' => 29, @@ -42570,14 +43332,6 @@ function loadAttProf() { 'DataHelpKeyField' => 'PhysRacePhysDescID', 'DataHelpValueField' => 'PhysRaceRace' ]); - DB::table('SL_DataHelpers')->insert([ - 'DataHelpID' => 32, - 'DataHelpTree' => '1', - 'DataHelpParentTable' => 'EventSequence', - 'DataHelpTable' => 'Charges', - 'DataHelpKeyField' => 'ChrgEventID', - 'DataHelpValueField' => 'ChrgCharges' - ]); DB::table('SL_DataHelpers')->insert([ 'DataHelpID' => 33, 'DataHelpTree' => '1', @@ -42617,13 +43371,6 @@ function loadAttProf() { 'DataHelpKeyField' => 'CivWeapComID', 'DataHelpValueField' => 'CivWeapBodyWeapon' ]); - DB::table('SL_DataHelpers')->insert([ - 'DataHelpID' => 38, - 'DataHelpTree' => '1', - 'DataHelpParentTable' => 'Civilians', - 'DataHelpTable' => 'Charges', - 'DataHelpKeyField' => 'ChrgCivID' - ]); DB::table('SL_DataHelpers')->insert([ 'DataHelpID' => 39, 'DataHelpTree' => '58', @@ -42647,16 +43394,37 @@ function loadAttProf() { 'DataHelpKeyField' => 'PrtStaPartID', 'DataHelpValueField' => 'PrtStaState' ]); - - DB::table('SL_DataLinks')->insert([ - 'DataLinkID' => 1, - 'DataLinkTree' => '1', - 'DataLinkTable' => '163' + DB::table('SL_DataHelpers')->insert([ + 'DataHelpID' => 42, + 'DataHelpTree' => '1', + 'DataHelpParentTable' => 'Civilians', + 'DataHelpTable' => 'Charges', + 'DataHelpKeyField' => 'ChrgCivID', + 'DataHelpValueField' => 'ChrgCharges' + ]); + DB::table('SL_DataHelpers')->insert([ + 'DataHelpID' => 43, + 'DataHelpTree' => '58', + 'DataHelpParentTable' => 'Partners', + 'DataHelpTable' => 'PartnerCapac', + 'DataHelpKeyField' => 'PrtCapPartID', + 'DataHelpValueField' => 'PrtCapCapacity' + ]); + DB::table('SL_DataHelpers')->insert([ + 'DataHelpID' => 44, + 'DataHelpTree' => '1', + 'DataHelpParentTable' => 'Vehicles', + 'DataHelpTable' => 'LinksCivilianVehicles', + 'DataHelpKeyField' => 'LnkCivVehicVehicID', + 'DataHelpValueField' => 'LnkCivVehicCivID' ]); - DB::table('SL_DataLinks')->insert([ - 'DataLinkID' => 4, - 'DataLinkTree' => '1', - 'DataLinkTable' => '155' + DB::table('SL_DataHelpers')->insert([ + 'DataHelpID' => 45, + 'DataHelpTree' => '1', + 'DataHelpParentTable' => 'Vehicles', + 'DataHelpTable' => 'LinksOfficerVehicles', + 'DataHelpKeyField' => 'LnkOffVehicVehicID', + 'DataHelpValueField' => 'LnkOffVehicOffID' ]); - + } } \ No newline at end of file diff --git a/src/Models/OPLinksOfficerVehicles.php b/src/Models/OPLinksOfficerVehicles.php index bc7d54d..cf359d5 100644 --- a/src/Models/OPLinksOfficerVehicles.php +++ b/src/Models/OPLinksOfficerVehicles.php @@ -12,6 +12,7 @@ class OPLinksOfficerVehicles extends Model [ 'LnkOffVehicOffID', 'LnkOffVehicVehicID', + 'LnkOffVehicRole', ]; // END SurvLoop auto-generated portion of Model diff --git a/src/Models/OPPartners.php b/src/Models/OPPartners.php index 85da82f..3428879 100644 --- a/src/Models/OPPartners.php +++ b/src/Models/OPPartners.php @@ -21,7 +21,7 @@ class OPPartners extends Model 'PartCompanyWebsite', 'PartBioUrl', 'PartHelpReqs', - 'PartGeoDesc', + 'PartGeoDesc', 'PartPhotoUrl', 'PartAlerts', 'PartVersionAB', diff --git a/src/Models/OPUsers.php b/src/Models/OPUsers.php new file mode 100644 index 0000000..c947114 --- /dev/null +++ b/src/Models/OPUsers.php @@ -0,0 +1,17 @@ +AP)gwd=(@(b3P(&&|!v%gf8j$;rpZ z$Hm3P!^6YD!NI@3zrDS^ySux&xw*8ow6e0Yu&}VMuCA=Ctg5Q2sHmu>rlzE%q@tpt zprD|ho}QbVo0*xJmzS57m6ef^k&lm$jg5_qi;IbgiHC=Wg@uKKgM)#Afqs5|e0+R( zczAYpc5-rZaBy&LZfqHa0XgG%zqQE-o%CEG#K0DJLf< zB_$;zBO@UpAs-(f9UUDT8yguJ85b896%`c|6B7{;5f2X!3=9kk3JM4a2nGfQ1Ox;E z0s;U40F@FkQ~&?~0b)x>L;#2d9Y_EG010qNS#tmY3c~;Z3c~?3DI}`^000McNliru z;{pc~6$1(lXypI^3B*Z6K~#9!?VXKx)HV{pb@i6|j;kpx-d++f$$|?7H*KOV#1sN9 z#Yvl@5HR$bx(C7Gqv-$t1J06cukH1RysNdGSL?mJI9YrBlRPsTX+|=@XS#qMzsK+K zd;A{1$N#(IBM0gl0E%uv=pcmrvx4ut&`?29(R3Z!DCjPJ;FOT3i)uPS7x9q+IE&(R z4j<{DLGinV?>B-60CfuARlpg>cRjVf!-Z_wOPBf9=J33 zUL$S**{{yvTQy=5VFRn1_%*Vl!}uVB?{@^hPIhz@9T*vW)De8Ewu1#3?vCNt+8sZK zKj;#Esq75mgZPZ7d$9B_;g`vd<|o1vRU~pPbgN7FB@V;D!^0RqGC7EenQnIozs%Qk zLsuwjb=%BT19}~@`z4BNV;_1^)nFv_2u8l9+8L+8DfK5IP~vVj(%neQ5xvOi1io78 z4Wrb+ik>wLs5YoX-G`G-4AoH~y_Gdd9vjZMP$_j32bBZ%Eb!(< z@Rxl2pn3}A>qq-vy&Dt3O;?{o-f&_;xk^`9Jr+!dnkB(l#V+{{JqHw>RbE z7hBEv)8B?4Li|V9XRmvBee7QPARE7UcE^Z6zH<|Y_$L=;FTDBV`1xnYvhj;&HIwdi z^)bQ6SD)msdwcnh@$;=+$@qS;zYtH|e+Z2W!M{Dz!5$fS{Cw}4WPG!F_UzdgnBpH9 z`3vvf3h`g9ol3eCO-zg@p8UQt2?u%8N!arV_j;)xlL-GGwJC=bD>toFiU>YB< zOgXKG2|l*&OThQb!=QFDPINQ)n^W)jf8EYuo0a&?;e5OLI*0E?V&z4=5k6LbZx=tPj>55V`jZWu z!+*cQOy}*JS^Vqw+QqNQzF;2b&Q2a5f6Gk#`hFHa>&-16U*pLWx%_wrpUqai|Kv1_ ze|r91oA`cRh9EiV<;t5G{F4>p>OB1q&f?>>$8F-*X6}$a^-%&n#m5`Op}4)3$GzDY!4stxWr<_j-Hy968E<*-$bRtMwPN_;li- zC47#AM^s{;LJRZqb3BVrr+wPN=gGOFF28RMvNI4SF{rzjQCz-!kQ`b!+rsBb^^GUU z_a>v^Py^a zF4*=B@GUO<>SPPgO4UHK_F5cm@ue!)C+hfzvhxSSIOWh6h|jy0mB!V*Io6?7#kd#8*Bi)=73MG8I;gzw9t=h0mrd{+`a5`zyV;oD;H4N3S=48AG}-xPx{iJr%D0%0yg zSMlAmjSqW#iTKvp#@A)xTW1?zOt&Sg(-q|NNK;)g9;YmSnP;rd<1|PzJ*FUh?%92@ zMc7bXO8XB4h9_nt;+>Ek{;)I}cF$}!N=Nc1YRBwO(-dsaYOMy&67Xpa2Hk1=dDd+O zljT<+wLOJs{1z%O5E~e6xdOaxzraobORT_ z;3QXrH2E&#+bgMASXbBMO*W7NMdDBAOiL4-0+Ot+cx)}cR^C0K zOw=$P`Gm=LBhX}*=H~bTnr&XXZ;TcY2qg##-tff!L%u=Lb%kYmS>ze`uH*U0BUkzk zaVlc`@LPo8)771r-IRFh9tpT8zLm5TT~kNgW#tJCW#~SMr$UkiXDh(a!;>R?Jxa=D zoHXfHN%n^a(Tj@|7SM48;p8dL;YwVXB@u+4u7J zbZJoP29W+6(K_ild^EKx8lv(Jlh&tdo5#nHDup2Ynq9EDCB^?20-@=61gQm8Yl)0`fbC%AQVUBWK%^f~h{lo% z+w@avmt5Kbije)~x?BYTbPss~d)=iLkF0bx=l9)uhq=e^@q7FpzsK+Kd;A{1$M5lb p{2sr@@9}&59>2%$@&D%d{|B;F$L_wE6tw^V002ovPDHLkV1gw(%5nez literal 0 HcmV?d00001 diff --git a/src/Uploads/legalaidnyc.jpg b/src/Uploads/legalaidnyc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1dc1fb64605d90c44a8cebcd7cd3a14876246f70 GIT binary patch literal 4274 zcmbtWcT`i`(myFc=m||a2`!PDP(*qQy`usFL_rWDMXCyVr6?f1OS=NnHGmO}ND=7* z0){4{f{0i^P!NcKV7{pLyYKz+*8A4?-kh`c+G}R^Z=HQ+<~KusPM-(hmZlb_00;yE z%oz_r{{iqChx&Mi`*8FvenYZn^{^}Drz`5JD58eSy-C=1Oahyaw519lDxc< zW>^f??EfwFZU6xT27mzw2myc*AP53P?*&8v5CCCZ0R;RlP$p&wnB}LD@1NDb?erG_ z2LuFw;Se|gfQJ4)^dE1gauePkuu^e0EvN4Mz!NXN_P{y-Y#26F6f!lP7JLb`_5Vv~EW_5m*N$fc#jTSPa}h3T95!kmvDc1RTI1-9*@gJ}M1 zOO16kc61=>CA_22LH}EG&xYd`x>%N7VUk)|KF-^8!tsE3{qhmF8)4~t7P0%QYYUnx zm+XwTg?C*f2+q2y%MX3fiT+FW>pWVinz9KprZfjt-@SV8XL=fChh2A>%#${mBl1qA z9^pHYupQZU-K{lEcZ0-CCk_K&*PDRE(qEMX+39>ww6c&PEp6W=NZcy46gJ z|Mw`(FB0t{=ihR^pk64UjWQEduiv-&b8dKowi#Od((=PO`xm!;2#}%Cv@3oN0e@N) z(T3YsUq2pS)>m9x@^F0}FFHhV*z-e<=xp!4d;id76D9kNx%Fr~ui^UEy6qCO(DqjL zr(BOoeO!pasA$m|=0nonrPHlT*#z$&Hfu|#kIrA3R$4tz<~dc(Ga4FIA(;#kJ>Dw0 zBRWYF?x6Mc+L9fW$LN4t&<|g}&peRh_ul8z0olxbyx#O6XZXzNQA+CWlTJ{k<=2R? z{z7?a#}fkYS~1x-2r+$ixW3#GMa2$pq*}F9T6M5<2nTlq9kBgL3W$H=ieI^v`74tc zETRt*js7uUR1BKdtiDLwF)`AiP=aL^d;Y2|oi zCW$T8zrw=lXeIU1H3<$NAT%RbykN$8vGh55Cnw%1WqUF9W=of|!-A0VN>UlBWL_87 zSS{7#qdBaiV#hBo9CS={0-4+2QO4w?E-s=azpPvN&1P4@PJ#hrSmAi5mdf%+?5f|D zf{`HZ#fs!&YmH6mb>h;n=o|l(`oa3{H3ghH%bMtv9-6>S*KZ{dj^<=!e||8-7Mjb_gtUj zi{;NNyq(m=6x*Bn6LbKvQIo{wr^R1wD-@0w7h$R9*H^h;kb`NNoaYQXx;o7*?dp1x zX1n%fa79bG(mrr!md*drbf{g(?5Qfx>3V@RC){=#c%1x{)w(;7dZ%^(hHK4%IbK`| zaFgeXCo0Xydsb|HE?uGn*LEgWD^Io^Ro1?uc6@k+ar>UQ*_!X@Bf;L<+5Qj$C%l>X zV_=F|Of{QUG>r+YTS;+wR;XfOGCEn~`Is`oMr&L{1x@VdWpILhWv)?KMXBmiO6Iz) z@d>m>M5XJ1B!4QWq_298V8_(Ngx_X&AdZyWN-k+|=@9*Z14wg$HT!iMg!9hwdxsuH zumw!nob@LqN0@e|D`NC2yq~HQG6E8oitbmcZH4+9Cy2FtcXyuYsmRH@6BE^ZtjYVJ$l;!Rn;FoqJ|nWmGD==Ikqcn+N82XQzjfW_9zMX2rD6&e!O` zgInudiI3IAMW3LK?VxF}qh|vB-pGBq8kEt%)E(R{xbAyY?nv!P-z?k8X%^iXpRSY7 za3WP+Vb8|vs-S7Y0;pl_NRFOIpiyUE5j-R zbyK7R+O?cE@k6Bc_r2n_jdwh_rFXc{w1{!n=-J}05`1&O=DnvUGVEzG4@E2dA|qtl z(i-w~^|<4r@Qk{kgpwPk&{tna;NQj{PV@37UVXWM9ohFPe5b5&&9U#}!&7yO61*W1 zk#eD%?IYp4ZK$2_%oj}%=YoyA^YUDix|em0pQnB^QGlB-_dO9?by!-v#M4|q6Sj|j zF93H;*ndm2clqJFYd0L&wwPQRecShyWEc*JJr-Ti=K4}tQJvZ0B3}59pAM45vXdb+ z`O3<^U=Gv9l7Z@(V&=DQ7Gho0CMQBuHr*w60RKerF!%Hf(`zrOXs}u@ z;aS!}YZcZ}~pOy>__wRGaVXmXGrYcR61F#!zf z40eT9wp~prr$zfzv~R5yank`$vS~vPb;xK7)A$x9FDY_RX`R5HNt2M#y~xIy>Q!ij zrW)Z0UCES55`?p-xEc+mp5DJ&l) z#owUisiZ)8XQns(w!Tl_>X~@$HDqZt?d_2toP|@-bUPXn*dCz$qV9I(TYF)h$sJ|6 zj~PXPfywOP1@uB95;@iMW{>iz*~z0dg69>}30pnC#JZ$V#jgqZJk=jlBZ^P~_=BgC zl#S%(d0RAv^-!^m*sZZo-)_Y>civT*D|J+8gfh9o($XKeQ^ z3ub*AVmSH8IhQlb%U{LzQt5z$dzr~DN|RJosr1TT*7V-&n~dA;Co`*dpeMf_${`d{I?8b(AxcE?KV>=%)PFZ!0^_x2JLe&ju?pY(5XCGk- zY87coLe_;8ml;%m)`#S?2Yj3nkuNQ&7p6IEmboI?ELw#Xi}fu0p7jUFMC z7ph9kX0=;?P~yw*!}G~$DeV?kwzD6fFh33`u#O}l42ly3?-!N@_l^m8k8cw#EqF@* zuuE1CauitU|4u=kiOp=Rk&6Btd);H}+@QtIE0ySZ`$vb;d@9UW=MBTyi(pPjFQ$ka lOJ@%&z~}3j;#hs7h?h~!v$j{}RJ@1lc?sHd03A)A`5%&a - -@extends('vendor.survloop.master') - -@section('content') - -

    - Academic - @if ($academic->isNotEmpty()) - ({{ number_format(sizeof($academic)) }}) - @endif -

    - -
    - - -

    Coming Soon

    - - -
    - -@endsection \ No newline at end of file diff --git a/src/Views/admin/lists/depts.blade.php b/src/Views/admin/lists/depts.blade.php deleted file mode 100755 index 0b4d88a..0000000 --- a/src/Views/admin/lists/depts.blade.php +++ /dev/null @@ -1,40 +0,0 @@ - - -@extends('vendor.survloop.master') - -@section('content') - -

    - Police Departments with Complaints - ({{ number_format(sizeof($departments)) }}) -

    - - Add New Department -All Departments - -
    - - - - -@forelse($departments as $dept) - - - - - - - -@empty - -@endforelse - -
    NameCity, State# of Complaints# of Allegations
    {{ $dept->DeptName }}{{ $dept->DeptAddressCity }}, {{ $dept->DeptAddressState }}DeptID])) ?>DeptID])) ?>
    No departments found.
    - - -

    Coming Soon

    - - -
    - -@endsection \ No newline at end of file diff --git a/src/Views/admin/lists/legal.blade.php b/src/Views/admin/lists/legal.blade.php deleted file mode 100755 index a12bd35..0000000 --- a/src/Views/admin/lists/legal.blade.php +++ /dev/null @@ -1,22 +0,0 @@ - - -@extends('vendor.survloop.master') - -@section('content') - -

    - Attorneys - @if ($attorneys->isNotEmpty()) - ({{ number_format(sizeof($attorneys)) }}) - @endif -

    - -
    - - -

    Coming Soon

    - - -
    - -@endsection \ No newline at end of file diff --git a/src/Views/admin/lists/media.blade.php b/src/Views/admin/lists/media.blade.php deleted file mode 100755 index 29cd03c..0000000 --- a/src/Views/admin/lists/media.blade.php +++ /dev/null @@ -1,22 +0,0 @@ - - -@extends('vendor.survloop.master') - -@section('content') - -

    - Journalists - @if ($journalists->isNotEmpty()) - ({{ number_format(sizeof($journalists)) }}) - @endif -

    - -
    - - -

    Coming Soon

    - - -
    - -@endsection \ No newline at end of file diff --git a/src/Views/admin/lists/officers.blade.php b/src/Views/admin/lists/officers.blade.php deleted file mode 100755 index 8986c84..0000000 --- a/src/Views/admin/lists/officers.blade.php +++ /dev/null @@ -1,22 +0,0 @@ - - -@extends('vendor.survloop.master') - -@section('content') - -

    - Police Officers - @if ($officers->isNotEmpty()) - ({{ number_format(sizeof($officers)) }}) - @endif -

    - -
    - - -

    Coming Soon

    - - -
    - -@endsection \ No newline at end of file diff --git a/src/Views/admin/lists/overs.blade.php b/src/Views/admin/lists/overs.blade.php deleted file mode 100755 index 6943812..0000000 --- a/src/Views/admin/lists/overs.blade.php +++ /dev/null @@ -1,52 +0,0 @@ - - -@extends('vendor.survloop.master') - -@section('content') - -

    - Oversight Agencies - ({{ number_format(sizeof($oversights)) }}) -

    - - Add Oversight Agency - -
    - - - - - - - - - - -@forelse($oversights as $over) - - - - - - - -@empty - -@endforelse - -
    Agency Name
    Police Department
    City, StateWebsite
    Phone
    - -
    {{ $over->OverAgncName }}
    -
    {{ $over->DeptName }}
    -
    -
    - {{ $over->OverAddressCity }}, {{ $over->OverAddressState }} - - urlPreview($over->OverWebsite) ?>
    - {{ $over->OverPhoneWork }} -
    No oversight agencies found.
    - - -
    - -@endsection \ No newline at end of file diff --git a/src/Views/admin/volun/volun.blade.php b/src/Views/admin/volun/volun.blade.php deleted file mode 100755 index 1946901..0000000 --- a/src/Views/admin/volun/volun.blade.php +++ /dev/null @@ -1,161 +0,0 @@ - - -@extends('vendor.survloop.master') - -@section('content') - -
    - - - - - - - - - - - - - - - -@forelse($printVoluns[0] as $i => $volun) - - - - - - - - - - - - -@empty - -@endforelse - -
    NameStarsAverage Time
    Per Dept
    Online
    Research
    Called
    Department
    Called
    Internal Affairs
    Unique
    Departments
    StateEmailPhone
    {{ (1+$i) }} {!! $volun[1]->printUsername(true, '/dashboard/volun/user/') !!} - @if ($volun[0]->UserInfoStars > 0) - {{ number_format($volun[0]->UserInfoStars) }} - @else - 0 - @endif - - @if (($volun[0]->UserInfoAvgTimeDept/60) < 10) - {{ number_format($volun[0]->UserInfoAvgTimeDept/60, 1) }} - @else - {{ number_format($volun[0]->UserInfoAvgTimeDept/60, 0) }} - @endif - min{{ number_format($volun[0]->UserInfoStars1) }} @if ($volun[0]->UserInfoStars1 > 0) @endif {{ number_format($volun[0]->UserInfoStars2) }} @if ($volun[0]->UserInfoStars2 > 0) @endif {{ number_format($volun[0]->UserInfoStars3) }} @if ($volun[0]->UserInfoStars3 > 0) @endif {{ number_format($volun[0]->UserInfoDepts) }} @if (isset($volun[2]->PrsnAddressState)) {{ $volun[2]->PrsnAddressState }} @else - @endif @if (isset($volun[2]->PrsnEmail)) {{ $volun[2]->PrsnEmail }} @endif @if (isset($volun[2]->PrsnPhoneMobile)) {{ $volun[2]->PrsnPhoneMobile }} @endif
    No stats found.
    -

    Evaluators ( {{ number_format(sizeof($printVoluns[1])) }} )

    - - - - - - - - - - - - - - -@forelse($printVoluns[1] as $i => $volun) - - - - - - - - - - - - -@empty - -@endforelse - -
    NameStarsAverage Time
    Per Dept
    Online
    Research
    Called
    Department
    Called
    Internal Affairs
    Unique
    Departments
    StateEmailPhone
    {!! $volun[1]->printUsername(true, '/dashboard/volun/user/') !!} - @if ($volun[0]->UserInfoStars > 0) - {{ number_format($volun[0]->UserInfoStars) }} - @else - 0 - @endif - - @if (($volun[0]->UserInfoAvgTimeDept/60) < 10) - {{ number_format($volun[0]->UserInfoAvgTimeDept/60, 1) }} - @else - {{ number_format($volun[0]->UserInfoAvgTimeDept/60, 0) }} - @endif - min{{ number_format($volun[0]->UserInfoStars1) }} - @if ($volun[0]->UserInfoStars1 > 0) @endif {{ number_format($volun[0]->UserInfoStars2) }} - @if ($volun[0]->UserInfoStars2 > 0) @endif {{ number_format($volun[0]->UserInfoStars3) }} - @if ($volun[0]->UserInfoStars3 > 0) @endif - {{ number_format($volun[0]->UserInfoDepts) }} @if (isset($volun[2]->PrsnAddressState)) {{ $volun[2]->PrsnAddressState }} - @else - @endif @if (isset($volun[2]->PrsnEmail)) {{ $volun[2]->PrsnEmail }} @endif @if (isset($volun[2]->PrsnPhoneMobile)) {{ $volun[2]->PrsnPhoneMobile }} @endif
    No stats found.
    -

    Admin ( {{ number_format(sizeof($printVoluns[2])) }} )

    - - - - - - - - - - - - - - -@forelse($printVoluns[2] as $i => $volun) - - - - - - - - - - - - -@empty - -@endforelse - -
    NameStarsAverage Time
    Per Dept
    Online
    Research
    Called
    Department
    Called
    Internal Affairs
    Unique
    Departments
    StateEmailPhone
    {!! $volun[1]->printUsername(true, '/dashboard/volun/user/') !!} - @if ($volun[0]->UserInfoStars > 0) - {{ number_format($volun[0]->UserInfoStars) }} - @else - 0 - @endif - - @if (($volun[0]->UserInfoAvgTimeDept/60) < 10) - {{ number_format($volun[0]->UserInfoAvgTimeDept/60, 1) }} - @else - {{ number_format($volun[0]->UserInfoAvgTimeDept/60, 0) }} - @endif - min{{ number_format($volun[0]->UserInfoStars1) }} @if ($volun[0]->UserInfoStars1 > 0) @endif {{ number_format($volun[0]->UserInfoStars2) }} @if ($volun[0]->UserInfoStars2 > 0) @endif {{ number_format($volun[0]->UserInfoStars3) }} @if ($volun[0]->UserInfoStars3 > 0) @endif {{ number_format($volun[0]->UserInfoDepts) }} @if (isset($volun[2]->PrsnAddressState)) {{ $volun[2]->PrsnAddressState }} @else - @endif @if (isset($volun[2]->PrsnEmail)) {{ $volun[2]->PrsnEmail }} @endif @if (isset($volun[2]->PrsnPhoneMobile)) {{ $volun[2]->PrsnPhoneMobile }} @endif
    No stats found.
    - -
    - -@endsection \ No newline at end of file diff --git a/src/Views/admin/volun/volunDepts.blade.php b/src/Views/admin/volun/volunDepts.blade.php deleted file mode 100755 index b08cf6b..0000000 --- a/src/Views/admin/volun/volunDepts.blade.php +++ /dev/null @@ -1,89 +0,0 @@ - - -@extends('vendor.survloop.master') - -@section('content') - -
    -
    - -

    Department Data Mining Stats

    - - - - - -
    -
    - - - - - - - - - - - @foreach ($statTots as $statTot) - - @endforeach - - - - @foreach ($statTots as $statTot) - - @endforeach - - - - @foreach ($statTots as $statTot) - - @endforeach - - - - @foreach ($statTots as $statTot) - - @endforeach - - - - @foreach ($statTots as $statTot) - - @endforeach - - - - @foreach ($statTots as $statTot) - - @endforeach - -
     {{ $statTots[0][0] }}{{ $statTots[1][0] }}{{ $statTots[2][0] }}
    Distinct Volunteers
    Distinct Departments
    Online Research
    Department Calls
    Internal Affairs Calls
    Total Edits/Saves
    - -
    -
    - - -
    -

    100 Most Recent Department Edits

    - - - {!! $recentEdits !!} -
    Edit DetailsDepartment InfoInternal AffairsCivilian Oversight
    - -
    - -@endsection \ No newline at end of file diff --git a/src/Views/admin/volun/volunProfile.blade.php b/src/Views/admin/volun/volunProfile.blade.php deleted file mode 100755 index 8923730..0000000 --- a/src/Views/admin/volun/volunProfile.blade.php +++ /dev/null @@ -1,21 +0,0 @@ - - -@extends('vendor.survloop.master') - -@section('content') - -

    Volunteer Profile: {!! $userObj->printUsername(true, '/dashboard/volun/user/') !!}

    - -Back to List - - -

    All Department Edits

    - - - {!! $recentEdits !!} -
    Edit DetailsDepartment InfoInternal AffairsCivilian Oversight
    - -
    - -@endsection \ No newline at end of file diff --git a/src/Views/ajax/search-police-dept.blade.php b/src/Views/ajax/search-police-dept.blade.php index 5327140..6f89ed3 100755 --- a/src/Views/ajax/search-police-dept.blade.php +++ b/src/Views/ajax/search-police-dept.blade.php @@ -1,94 +1,74 @@ @if (!isset($depts) || !$depts || sizeof($depts) == 0) - @else -
    @foreach($depts as $i => $dept) - @if ($dept->DeptType == 366) -

    {{ $dept->DeptName }}

    -
    (Federal)
    - @else -

    {{ str_replace('Department', 'Dept', ucwords(strtolower($dept->DeptName))) }}

    - @endif -
    -
    - Select -
    -
    - {{ $dept->DeptAddress }} - @if (trim($dept->DeptAddress2) != '') -
    {{ $dept->DeptAddress2 }} - @endif -
    {{ $dept->DeptAddressCity }}, {{ $dept->DeptAddressState }} {{ $dept->DeptAddressZip }} - @if (trim($dept->DeptAddressCounty) != '') -
    {{ $dept->DeptAddressCounty }} County - @endif +
    + @if ($dept->DeptType == 366) +

    {{ $dept->DeptName }}

    +
    (Federal)
    + @else +

    {{ str_replace('Department', 'Dept', ucwords(strtolower($dept->DeptName))) }}

    + @endif +
    +
    + {!! $GLOBALS["SL"]->printRowAddy($dept, 'Dept') !!} + @if (trim($dept->DeptAddressCounty) != '')
    {{ $dept->DeptAddressCounty }} County @endif +
    +
    + Select +
    -
    @endforeach -
    @endif -
    -

    - Tips for finding the right department: -

    -
      -
    • Try typing the name of the county instead of the city
    • -
    • Make sure you select the right state
    • -
    • Double-check spelling of the department name
    • -
    -

    - If you are not sure what police department was involved, - click here to select a department place holder. -

    - If you still can't find the right department, - click here to add it to our database. -

    -
    +

    Tips for finding the right department

    +
      +
    • Type the name of the county instead of the city
    • +
    • Make sure you select the right state
    • +
    • Double-check spelling of the department name
    • +
    +

    + If you can't find the right department, + click here to add it to our database. +

    + If you don't know the department name, + click here to use a temporary place holder. +

    -
    - -
    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/src/Views/nodes/.1217-volun-home-your-info.blade.php.marks b/src/Views/nodes/.1217-volun-home-your-info.blade.php.marks new file mode 100644 index 0000000..9149578 --- /dev/null +++ b/src/Views/nodes/.1217-volun-home-your-info.blade.php.marks @@ -0,0 +1,2 @@ +! +;1389;1389 diff --git a/src/Views/nodes/1211-volun-home-all-depts.blade.php b/src/Views/nodes/1211-volun-home-all-depts.blade.php index 0bee0f2..ab2bf61 100644 --- a/src/Views/nodes/1211-volun-home-all-depts.blade.php +++ b/src/Views/nodes/1211-volun-home-all-depts.blade.php @@ -1,67 +1,47 @@ -@if ($GLOBALS["SL"]->REQ->has('s') && trim($GLOBALS["SL"]->REQ->get('s')) != '') -

    Department Search: - {{ $GLOBALS["SL"]->REQ->get('s') }}

    - Clear Search & Show All Departments -@else -

    All Departments

    -
    -
    - Filter by
    - -
    - Sort by
    - -
    -
    +

    All Departments

    +
    +
    + Search Phrase
    + tabInd() !!} + @if ($GLOBALS["SL"]->REQ->has('s') && trim($GLOBALS["SL"]->REQ->get('s')) != '') + value="{!! trim($GLOBALS["SL"]->REQ->get('s')) !!}" @else value="" @endif > +
    + Filter by
    + +
    + Sort by
    + +
    -@endif - -
    -
    Accessibility Score
    Last Verified
    - Police Department Name,
    City, State -
    - -
    +@if (sizeof($deptPriorityRows) > 0) + {!! view('vendor.openpolice.volun.dept-rows', [ "deptRows" => $deptRows ])->render() !!} +@else + No departments found. +@endif + +

    Need to add a new police department to the database?

    @@ -76,13 +56,13 @@
    - +
    -
    @@ -91,7 +71,7 @@
    - diff --git a/src/Views/nodes/1217-volun-home-your-info.blade.php b/src/Views/nodes/1217-volun-home-your-info.blade.php index b02f33c..03a609e 100644 --- a/src/Views/nodes/1217-volun-home-your-info.blade.php +++ b/src/Views/nodes/1217-volun-home-your-info.blade.php @@ -1,27 +1,27 @@ @if (!isset($yourContact->PrsnAddressState) || !$yourContact->PrsnAddressState || trim($yourContact->PrsnAddressState) == '') -
    + -
    +

    Info About You

    -
    +
    +@else +
    @endif \ No newline at end of file diff --git a/src/Views/nodes/1225-volun-dept-edit-header.blade.php b/src/Views/nodes/1225-volun-dept-edit-header.blade.php index 44dc34a..a68be9f 100644 --- a/src/Views/nodes/1225-volun-dept-edit-header.blade.php +++ b/src/Views/nodes/1225-volun-dept-edit-header.blade.php @@ -16,21 +16,11 @@ {!! $editsSummary[0] !!}
    -
    -
    -

    Department Main Contact Info

    -
    -
    -@if ($isDash) - -
    -@endif \ No newline at end of file diff --git a/src/Views/nodes/1418-admin-complaints-listing-ajax.blade.php b/src/Views/nodes/1418-admin-complaints-listing-ajax.blade.php index 3b44783..dbca313 100644 --- a/src/Views/nodes/1418-admin-complaints-listing-ajax.blade.php +++ b/src/Views/nodes/1418-admin-complaints-listing-ajax.blade.php @@ -16,23 +16,8 @@ return true; }); -$(document).on({ - mouseenter: function () { - var cid = $(this).attr("data-cid"); - $("#clkBox"+cid+"a").css("background-color", "#EDF8FF"); - $("#clkBox"+cid+"b").css("background-color", "#EDF8FF"); - }, - mouseleave: function () { - var cid = $(this).attr("data-cid"); - $("#clkBox"+cid+"a").css("background-color", "#FFF"); - $("#clkBox"+cid+"b").css("background-color", "#FFF"); - } -}, ".clkBox"); - @forelse ($ajaxRefreshs as $i => $c) - setTimeout(function() { document.getElementById('hidFrameID').src="/complaint/read-{{ $c }}?refresh=1"; }, {{ (3000*$i) }}); -@empty -@endforelse +@empty @endforelse \ No newline at end of file diff --git a/src/Views/nodes/1418-admin-complaints-listing.blade.php b/src/Views/nodes/1418-admin-complaints-listing.blade.php index 9f061ce..67f240b 100755 --- a/src/Views/nodes/1418-admin-complaints-listing.blade.php +++ b/src/Views/nodes/1418-admin-complaints-listing.blade.php @@ -1,16 +1,18 @@ - +
    @if (isset($fltDept) && intVal($fltDept) > 0)

    All Department Complaints

    @elseif ($listView == 'incomplete') + Full Survey Map

    All Incomplete Complaints

    @else

    All Complete Complaints

    @endif - +

    Click anywhere on a complaint's row to read and take actions on it.

    @if ($listView != 'incomplete')
    @if (isset($fltDept) && intVal($fltDept) > 0) @@ -54,79 +56,101 @@ @endif
    @endif +
    -
    - - - - - +
    +
    +
    +
    ID# Status @if ($listView == 'incomplete') - Last Page @endif
    +
    City
    +
    Complainant
    +
    Privacy, Level
    +
    Incident
    +
    OPC Start
    +
    +
    +
    Department(s)
    Allegations
    +
    Narrative
    +
    +
    + + @forelse ($complaints as $j => $com) -
    - - - - - - - - - - - - + + + @empty - + No complaints found in this filter @endforelse -
    ID#Status @if ($listView == 'incomplete') Last Page @endif -
    Level - Allegations
    Department(s)City
    Narrative
    ComplainantPrivacyIncidentSubmitted
    - #{{ number_format($com->ComPublicID) }} -
    -
    - @if ($GLOBALS['SL']->def->getVal('Complaint Status', $com->ComStatus) == 'New') - - @endif - {{ $GLOBALS['SL']->def->getVal('Complaint Status', $com->ComStatus) }} - - @if ($com->ComStatus == $GLOBALS['SL']->def->getID('Complaint Status', 'Incomplete')) - @if ($com->ComSubmissionProgress > 0 && isset($lastNodes[$com->ComSubmissionProgress])) - /{{ $lastNodes[$com->ComSubmissionProgress] }} + + ComPublicID > 0) href="/complaint/read-{{ $com->ComPublicID }}" + @else href="/complaint/readi-{{ $com->ComID }}" @endif class="noUnd" style="color: #333;" > +
    +
    +
    + @if ($com->ComPublicID <= 0) + #i{{ number_format($com->ComID) }} + @if ($com->ComSubmissionProgress > 0 && isset($lastNodes[$com->ComSubmissionProgress])) + /{{ $lastNodes[$com->ComSubmissionProgress] }} + @endif + @else + #{{ number_format($com->ComPublicID) }} + @if ($GLOBALS['SL']->def->getVal('Complaint Status', $com->ComStatus) == 'New') + + @endif + {{ $GLOBALS['SL']->def->getVal('Complaint Status', $com->ComStatus) }} + @endif + @if ($com->ComStatus != $GLOBALS['SL']->def->getID('Complaint Status', 'Incomplete') && $com->ComType + != $GLOBALS["SL"]->def->getID('OPC Staff/Internal Complaint Type', 'Police Complaint')) + ({{ $GLOBALS['SL']->def->getVal('OPC Staff/Internal Complaint Type', $com->ComType) }}) + @endif +
    +
    {{ $com->IncAddressCity }}, {{ $com->IncAddressState }}
    +
    {{ $com->PrsnNameFirst }} {{ $com->PrsnNameLast }}
    +
    + @if ($com->ComPrivacy == 304) Open, + @elseif ($com->ComPrivacy == 305) No Names, + @elseif ($com->ComPrivacy == 306) Anonymous, + @elseif ($com->ComPrivacy == 307) Anonymized, @endif - @elseif ($com->ComType - != $GLOBALS["SL"]->def->getID('OPC Staff/Internal Complaint Type', 'Police Complaint')) - ({{ $GLOBALS['SL']->def->getVal('OPC Staff/Internal Complaint Type', $com->ComType) }}) - @endif -
    @if (isset($comInfo[$com->ComID][1])) {{ $comInfo[$com->ComID][1] }} @endif {{ $com->IncAddressCity }}, {{ $com->IncAddressState }}{{ $com->PrsnNameFirst }} {{ $com->PrsnNameLast }} - @if ($com->ComPrivacy == 304) Open - @elseif ($com->ComPrivacy == 305) No Names - @elseif ($com->ComPrivacy == 306) Anonymous - @elseif ($com->ComPrivacy == 307) Anonymized - @endif - @if (trim($com->IncTimeStart) != '') {{ date("n/j/Y", strtotime($com->IncTimeStart)) }} @endif @if (isset($comInfo[$com->ComID][0])) {{ $comInfo[$com->ComID][0] }} @endif
    -
    - {{ $com->ComAwardMedallion }} - {!! $com->ComAllegList !!} + {{ $com->ComAwardMedallion }} +
    +
    + @if (trim($com->IncTimeStart) != '') {{ date("n/j/y", strtotime($com->IncTimeStart)) }} @endif +
    +
    + @if (isset($com->created_at)) {{ date("n/j/y", strtotime($com->created_at)) }} @endif
    -
    -
    - @if (isset($com->ComSummary) && trim($com->ComSummary) != '') - @if (strlen(strip_tags($com->ComSummary)) > 150) {{ substr(strip_tags($com->ComSummary), 0, 150) }}... - @else {{ $com->ComSummary }} @endif - @endif +
    +
    + @if (isset($comInfo[$com->ComID]["depts"]) && trim($comInfo[$com->ComID]["depts"]) != '') + {{ $comInfo[$com->ComID]["depts"] }}
    + @endif + {!! $com->ComAllegList !!} +
    +
    + @if (isset($com->ComSummary) && trim($com->ComSummary) != '') + @if (strlen(strip_tags($com->ComSummary)) > 180) + {{ substr(strip_tags($com->ComSummary), 0, 180) }}... + @else + {{ $com->ComSummary }} + @endif + @endif
    -
    No complaints found in this filter
    +
    + + \ No newline at end of file diff --git a/src/Views/nodes/143-dept-loop-custom-row.blade.php b/src/Views/nodes/143-dept-loop-custom-row.blade.php index 68272b6..6a63994 100755 --- a/src/Views/nodes/143-dept-loop-custom-row.blade.php +++ b/src/Views/nodes/143-dept-loop-custom-row.blade.php @@ -1,38 +1,25 @@
    -
    -
    -
    -
    -

    - {{ $GLOBALS['SL']->closestLoop["obj"]->DataLoopSingular }} #{{ (1+$setIndex) }} - @if (intVal($loopItem->DeptType) > 0) - , {{ $GLOBALS['SL']->def->getValById($loopItem->DeptType) }} - @endif -

    -

    {{ $loopItem->DeptName }}

    -

    - @if (trim($loopItem->DeptAddress) != '') {{ $loopItem->DeptAddress }}, @endif - @if (trim($loopItem->DeptAddress2) != '') {{ $loopItem->DeptAddress2 }}, @endif - @if (trim($loopItem->DeptAddressCity) != '') {{ $loopItem->DeptAddressCity }}, @endif - {{ $loopItem->DeptAddressState }} {{ $loopItem->DeptAddressZip }} - @if (trim($loopItem->DeptAddressCounty) != '') , {{ $loopItem->DeptAddressCounty }} County @endif - @if (trim($loopItem->DeptPhoneWork) != '') , {{ $loopItem->DeptPhoneWork }}
    @endif - @if (trim($loopItem->DeptWebsite) != '') , {{ $loopItem->DeptWebsite }} @endif -

    -
    - Edit - Delete - -
    -
    -
    +
    +

    {{ $loopItem->DeptName }}

    +

    + @if (intVal($loopItem->DeptType) > 0 && strpos($loopItem->DeptName, 'Not sure') === false) + {{ $GLOBALS['SL']->def->getValById($loopItem->DeptType) }}, + @endif + {!! $GLOBALS["SL"]->printRowAddy($loopItem, 'Dept') !!} + DeptAddressCounty) != '') , {{ $loopItem->DeptAddressCounty }} County @endif + @if (trim($loopItem->DeptPhoneWork) != '') , {{ $loopItem->DeptPhoneWork }}
    @endif + @if (trim($loopItem->DeptWebsite) != '') , {{ $loopItem->DeptWebsite }} @endif + */ ?> +

    + Edit + Delete +
    Deleted: {{ $GLOBALS['SL']->closestLoop["obj"]->DataLoopSingular }} #{{ (1+$setIndex) }}: diff --git a/src/Views/nodes/1436-vehicle-match-line.blade.php b/src/Views/nodes/1436-vehicle-match-line.blade.php deleted file mode 100644 index 1826861..0000000 --- a/src/Views/nodes/1436-vehicle-match-line.blade.php +++ /dev/null @@ -1,56 +0,0 @@ - - -@if (isset($civ)) - {{ $civNames[$civ->CivID] }} - - - - - - -@elseif (isset($off)) - {{ $offNames[$off->OffID] }} - - - - - - -@endif - diff --git a/src/Views/nodes/1436-vehicle-match.blade.php b/src/Views/nodes/1436-vehicle-match.blade.php deleted file mode 100644 index a74d9dc..0000000 --- a/src/Views/nodes/1436-vehicle-match.blade.php +++ /dev/null @@ -1,55 +0,0 @@ - -
    -
    -
    -
    -

    Who Was In Which Vehicle?

    - @forelse ($vehicles as $vehicle) -

    {!! view('vendor.openpolice.nodes.tbl-rec-label-vehicles', - [ "rec" => $vehicle ])->render() !!}

    - - @if (intVal($vehicle->VehicIsCivilian) == 1) - @forelse ($civs as $civ) - {!! view('vendor.openpolice.nodes.1436-vehicle-match-line', [ - "vehicle" => $vehicle, - "linksCiv" => $linksCiv, - "civ" => $civ, - "civNames" => $civNames - ])->render() !!} - @empty - @endforelse - @forelse ($offs as $off) - {!! view('vendor.openpolice.nodes.1436-vehicle-match-line', [ - "vehicle" => $vehicle, - "linksOff" => $linksOff, - "off" => $off, - "offNames" => $offNames - ])->render() !!} - @empty - @endforelse - @else - @forelse ($offs as $off) - {!! view('vendor.openpolice.nodes.1436-vehicle-match-line', [ - "vehicle" => $vehicle, - "linksOff" => $linksOff, - "off" => $off, - "offNames" => $offNames - ])->render() !!} - @empty - @endforelse - @forelse ($civs as $civ) - {!! view('vendor.openpolice.nodes.1436-vehicle-match-line', [ - "vehicle" => $vehicle, - "linksCiv" => $linksCiv, - "civ" => $civ, - "civNames" => $civNames - ])->render() !!} - @empty - @endforelse - @endif -
    - @empty - @endforelse -
    -
    -
    \ No newline at end of file diff --git a/src/Views/nodes/145-ajax-dept-search.blade.php b/src/Views/nodes/145-ajax-dept-search.blade.php index fd8aa51..1a6567b 100755 --- a/src/Views/nodes/145-ajax-dept-search.blade.php +++ b/src/Views/nodes/145-ajax-dept-search.blade.php @@ -1,8 +1,7 @@ /* resources/views/openpolice/nodes/145-ajax-dept-search.blade.php */ if (document.getElementById('nFormNext')) { - document.getElementById('nFormNext').disabled=true; - $("#nFormNext").removeClass("btn-primary"); + document.getElementById('nFormNext').style.display='none'; } function submitAjaxSearch() { setTimeout(function() { @@ -59,7 +58,7 @@ function submitAjaxSearch() { //return runFormSub(); }); -$( "#deptNameInID" ).autocomplete({ +$( "#deptNameInID" ).autocomplete({ select: function(e) { submitAjaxSearch(); }, source: [ {!! implode(', ', $searchSuggest) !!} diff --git a/src/Views/nodes/145-dept-search.blade.php b/src/Views/nodes/145-dept-search.blade.php index 0af7c61..0deb15f 100755 --- a/src/Views/nodes/145-dept-search.blade.php +++ b/src/Views/nodes/145-dept-search.blade.php @@ -1,22 +1,22 @@ -
    +
    -
    +
    -
    +
    -
    - +
    -
    +
    diff --git a/src/Views/nodes/1712-report-inc-staff-tools.blade.php b/src/Views/nodes/1712-report-inc-staff-tools.blade.php index e364f5e..6495e58 100644 --- a/src/Views/nodes/1712-report-inc-staff-tools.blade.php +++ b/src/Views/nodes/1712-report-inc-staff-tools.blade.php @@ -87,7 +87,7 @@ @if (intVal($emailID) > 0 && sizeof($currEmail) > 0) -
    +
    @@ -188,13 +188,13 @@ function chkEmaForm() {
    @if (intVal($emailID) > 0 && sizeof($currEmail) > 0) -
    +

    History

    {!! view('vendor.openpolice.nodes.1712-report-inc-history', [ "history" => $history ])->render() !!}
    @endif -
    +
    @if ($firstRevDone)

    Next, Update Complaint Status:

    @else -@if (sizeof($deptPriorityRows) > 0) -

    -@endif -

    Priority Departments

    -
    Click a department below to verify it's information:
    -
    +

    High-Priority Departments

    +@if (sizeof($deptPriorityRows) > 0) + {!! view('vendor.openpolice.volun.dept-rows', [ "deptRows" => $deptPriorityRows ])->render() !!} +@else + No priority departments found, so pick anything you like. +@endif \ No newline at end of file diff --git a/src/Views/nodes/1809-volun-dept-edit-how-investigate.blade.php b/src/Views/nodes/1809-volun-dept-edit-how-investigate.blade.php index a0dae6c..bd9169b 100644 --- a/src/Views/nodes/1809-volun-dept-edit-how-investigate.blade.php +++ b/src/Views/nodes/1809-volun-dept-edit-how-investigate.blade.php @@ -1,5 +1,4 @@
    -

    How Can Complaints Be Submitted AND Investigated?

    \ No newline at end of file diff --git a/src/Views/nodes/1898-public-attorney-page.blade.php b/src/Views/nodes/1898-public-attorney-page.blade.php index 1addaea..a63a581 100644 --- a/src/Views/nodes/1898-public-attorney-page.blade.php +++ b/src/Views/nodes/1898-public-attorney-page.blade.php @@ -56,19 +56,19 @@ @if ($type == $GLOBALS["SL"]->def->getID('Partner Types', 'Attorney')) Meet the attorney @else About the organization @endif - @if ($type == $GLOBALS["SL"]->def->getID('Partner Types', 'Organization')) - @if (isset($dat["PartnerCapac"]) && sizeof($dat["PartnerCapac"]) > 0) -
    @foreach ($dat["PartnerCapac"] as $i => $cap) - @if ($i > 0) , @endif - {!! $GLOBALS["SL"]->def->getVal('Organization Capacities', $cap->PrtCapCapacity) !!} - @endforeach
    - @endif - @endif -


    +

    @if (isset($dat["Partners"][0]->PartBio)) {!! str_replace("\n", "

    ", $dat["Partners"][0]->PartBio) !!} @endif

    + @if ($type == $GLOBALS["SL"]->def->getID('Partner Types', 'Organization')) +

    Organization Capabilities

      + @if (isset($dat["PartnerCapac"]) && sizeof($dat["PartnerCapac"]) > 0) + @foreach ($dat["PartnerCapac"] as $i => $cap) +
    • {!! $GLOBALS["SL"]->def->getVal('Organization Capacities', $cap->PrtCapCapacity) !!}
    • + @endforeach + @endif
    + @endif
    diff --git a/src/Views/nodes/1939-manage-attorneys.blade.php b/src/Views/nodes/1939-manage-attorneys.blade.php index df7fec6..1631016 100644 --- a/src/Views/nodes/1939-manage-attorneys.blade.php +++ b/src/Views/nodes/1939-manage-attorneys.blade.php @@ -1,5 +1,5 @@ -

     

    +
    Add {{ $prtnType["sing"] }}

    Manage {{ $prtnType["plur"] }}

    @@ -30,4 +30,6 @@
    @empty
    No {{ $prtnType["plur"] }} Found.
    -@endforelse \ No newline at end of file +@endforelse +
    + \ No newline at end of file diff --git a/src/Views/nodes/2069-prepare-complaint-org.blade.php b/src/Views/nodes/2069-prepare-complaint-org.blade.php index 696a1b9..1efd83a 100644 --- a/src/Views/nodes/2069-prepare-complaint-org.blade.php +++ b/src/Views/nodes/2069-prepare-complaint-org.blade.php @@ -2,6 +2,6 @@

     

    Share your story with
    {!! $dat["PersonContact"][0]->PrsnNickname !!}

    - @if (isset($dat["Partners"][0]->PartHelpReqs)) {{ $dat["Partners"][0]->PartHelpReqs }} @endif - Organization Profile + @if (isset($dat["Partners"][0]->PartHelpReqs)) {!! $dat["Partners"][0]->PartHelpReqs !!} @endif + PartSlug }}">Organization Profile */ ?>

    \ No newline at end of file diff --git a/src/Views/nodes/2162-volun-dept-edit-header2.blade.php b/src/Views/nodes/2162-volun-dept-edit-header2.blade.php new file mode 100644 index 0000000..b9890d9 --- /dev/null +++ b/src/Views/nodes/2162-volun-dept-edit-header2.blade.php @@ -0,0 +1,13 @@ + +
    +
    +

    Department Main Contact Info

    +
    +
    + \ No newline at end of file diff --git a/src/Views/volun/dept-rows.blade.php b/src/Views/volun/dept-rows.blade.php new file mode 100644 index 0000000..08088ca --- /dev/null +++ b/src/Views/volun/dept-rows.blade.php @@ -0,0 +1,41 @@ + +@if (sizeof($deptRows) > 0) +

    Click a department below to verify it's information and Accessibility Score:

    +
    +
    Department Name
    +
    City, State
    +
    Score
    +
    Last Researched
    +
    + @forelse ($deptRows as $i => $dept) + @if ($i < 500) +
    + +
    + {{ $dept->DeptAddressCity }}, {{ $dept->DeptAddressState }} +
    +
    + @if (intVal($dept->DeptScoreOpenness) > 0) {{ $dept->DeptScoreOpenness }} + @else 0 + @endif +
    +
    + {!! view('vendor.openpolice.volun.volunteer-recent-edits', [ "deptID" => $dept->DeptID ])->render() !!} + @if (trim($dept->DeptVerified) != '' + && !in_array($dept->DeptVerified, ['0000-00-00 00:00:00', '2001-01-01 00:00:00'])) + {{ date("n/j/y", strtotime($dept->DeptVerified)) }} + @else + - + @endif +
    +
    + @endif + @empty @endforelse + @if (sizeof($deptRows) > 500) +
    First 500 results printed above.
    + @endif +@endif \ No newline at end of file diff --git a/src/Views/volun/volun-dept-edit-history.blade.php b/src/Views/volun/volun-dept-edit-history.blade.php index 8e5444d..e026f41 100644 --- a/src/Views/volun/volun-dept-edit-history.blade.php +++ b/src/Views/volun/volun-dept-edit-history.blade.php @@ -1,8 +1,7 @@ -

    +

    Past Volunteer Edits

    - @if ($editsIA) diff --git a/src/Views/volun/volun-dept-edit-ia-contact.blade.php b/src/Views/volun/volun-dept-edit-ia-contact.blade.php index ba8bab8..2af7b75 100644 --- a/src/Views/volun/volun-dept-edit-ia-contact.blade.php +++ b/src/Views/volun/volun-dept-edit-ia-contact.blade.php @@ -1,5 +1,5 @@ -

    +
    @if ($whch == 'Civ' && !$hasCiv) Add Civilian Oversight Office diff --git a/src/routes.php b/src/routes.php index 1c12e1b..18605de 100755 --- a/src/routes.php +++ b/src/routes.php @@ -13,7 +13,7 @@ Route::group(['middleware' => ['web']], function () { - Route::get( '/dept/{deptSlug}', 'OpenPolice\Controllers\OpenPolice@deptPage'); + Route::get( '/dept/{deptSlug}', 'OpenPolice\Controllers\OpenPolice@deptPage'); Route::get( '/complaint-or-compliment/{deptSlug}', 'OpenPolice\Controllers\OpenPolice@shareStoryDept'); Route::get( '/attorney/{prtnSlug}', 'OpenPolice\Controllers\OpenPolice@attorneyPage'); @@ -21,100 +21,11 @@ Route::get( '/org/{prtnSlug}', 'OpenPolice\Controllers\OpenPolice@orgPage'); Route::get( '/prepare-complaint-for-org/{prtnSlug}', 'OpenPolice\Controllers\OpenPolice@shareStoryOrg'); - - Route::get('/evidence/{cid}/{upID}', [ - 'uses' => 'OpenPolice\Controllers\OpenPolice@retrieveUpload', - 'middleware' => ['auth'] - ]); Route::get( '/form-tree', function () { header("Location: /tree/complaint"); exit; }); - - - - - Route::get('/dashboard/complaint/{cid}/', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@complaintView', - 'middleware' => ['auth'] - ]); - - Route::get('/dashboard/complaint/{cid}', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@complaintView', - 'middleware' => ['auth'] - ]); - - Route::post('/dashboard/complaint/{cid}/review/save', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@complaintReviewPost', - 'middleware' => ['auth'] - ]); - - Route::get('/dashboard/complaint/{cid}/review', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@complaintReview', - 'middleware' => ['auth'] - ]); - - Route::post('/dashboard/complaint/{cid}/emails/send', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@complaintEmailsSend', - 'middleware' => ['auth'] - ]); - - Route::post('/dashboard/complaint/{cid}/emails/type', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@complaintEmailsType', - 'middleware' => ['auth'] - ]); - - Route::get('/dashboard/complaint/{cid}/emails', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@complaintEmails', - 'middleware' => ['auth'] - ]); - - Route::get('/dashboard/complaint/{cid}/update', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@complaintUpdate', - 'middleware' => ['auth'] - ]); - - Route::get('/dashboard/complaint/{cid}/history', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@complaintHistory', - 'middleware' => ['auth'] - ]); - - - /********************************************************/ - - - - Route::get('/dashboard/officers', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@listOfficers', - 'middleware' => ['auth'] - ]); - - Route::get('/dashboard/depts', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@listDepts', - 'middleware' => ['auth'] - ]); - - - Route::post('/dashboard/overs/assign/{overID}', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@quickAssign', - 'middleware' => ['auth'] - ]); - - Route::get('/dashboard/legal', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@listLegal', - 'middleware' => ['auth'] - ]); - - Route::get('/dashboard/academic', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@listAcademic', - 'middleware' => ['auth'] - ]); - - Route::get('/dashboard/media', [ - 'uses' => 'OpenPolice\Controllers\OpenPoliceAdmin@listMedia', - 'middleware' => ['auth'] - ]); });