public function editAction()
 {
     $this->accessRights(12);
     //Accept Parent Module, Return Main Menu Lists with Active Menu Indicator
     $this->childModuleAccessRights(32, 'edit');
     //Accept Child Module ID & it's Actions: add, edit, view, disable
     $id = (int) $this->params()->fromRoute('id', 0);
     if (!$id) {
         return $this->redirect()->toRoute('source', array('action' => 'add'));
     }
     try {
         $source = $this->getSourceTable()->getSource($id);
     } catch (\Exception $ex) {
         return $this->redirect()->toRoute('source', array('action' => 'index'));
     }
     $form = new SourceForm();
     $form->bind($source);
     //        $form->get('source_kind_id')->setAttribute('options', $this->dropDownSourceKindId());
     $form->get('submit')->setAttribute('value', 'Edit');
     $request = $this->getRequest();
     if ($request->isPost()) {
         // prepare audit trail parameters
         $from = (array) $source;
         $to = $this->getRequest()->getPost()->toArray();
         $diff = array_diff_assoc($to, $from);
         unset($diff['submit'], $diff['sources_id']);
         $changes = $this->prepare_modified_data($from, $to, $diff);
         // end of audit trail parameters
         $form->setInputFilter($source->getInputFilter());
         $form->setData($request->getPost());
         $form->getInputFilter()->remove('media_outfit_name');
         if ($form->isValid()) {
             $this->getSourceTable()->saveSource($this->getRequest()->getPost());
             $this->save_to_audit_trail($to['source_name'], $changes['pre'], $changes['post'], 'edit', 32);
             // show alert of updated data
             $this->flashMessenger()->addMessage(['content' => $request->getPost('source_name') . ' source has been updated.', 'type' => 'success']);
         }
         return $this->redirect()->toRoute('sources');
     }
 }