Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]API - problem z dostępem do pliku
pela222
post 24.04.2019, 16:11:33
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


Cześć,

Używam API napisane w PHP do generowania dokumentów (System generuje mi zestawienie sprzedaży dla danego klienta w docx). Niestety mój developer który mi to zrobił kilka lat temu nie jest już zainteresowany inwestowaniem swojego czasu potrzebuję pomocy. Sam ogarniam podstawy i potrafię wykonać większość modyfikacji jakie potrzebuję, ale niestety z tym nie potrafię sobie poradzić.

System zapisuje wygenerowane pliki na serwerze. Mój developer na pewnym etapie prac dodatkowo załatał jeszcze jedną dziurę bezpieczeństwa, czyli pobieranie wygenerowanych dokumentów docx bezpośrednio przez serwer http, czyli bez potrzeby logowania. Logowanie obejmuje tylko dostęp do php, pliki statyczne w tym dokumenty docx są serwowana bezpośredni przez serwer http z pominięciem php. Przerobił to tak, żeby te pliki także szły przez php.

W tej chwili jak wykomentuje to o co mi chodzi pliki zapisują się w jednej lokalizacji documents/. Chiciałem zrobić, żeby każdy agent miał pliki w swoim katalogu czyli documents/PiotrP drugi documents/MarcinS itd.
Niestety ale mam problem. Nie wiem czy to co wrzucę jest wystarczające no ale spróbuję opisać do czego doszedłem:

plik DocumentGenerate.php
  1. //zdefiniowanie scieżki zapisu dokumentu dla każdego agenta
  2. if ($agent == 'Piotr aaa') {
  3. $outputFilePath = DOCUMENT_PATH . '/PiotrP/' . $outputFileName;
  4. } elseif ($agent == 'Marcin bbb') {
  5. $outputFilePath = DOCUMENT_PATH . '/MarcinS/' . $outputFileName;
  6. } elseif ($agent == 'Michal ccc') {
  7. $outputFilePath = DOCUMENT_PATH . '/MichalT/' . $outputFileName;
  8. } else {
  9. $outputFilePath = DOCUMENT_PATH . '/' . $outputFileName;
  10. }
  11.  
  12. $TBS->Show(OPENTBS_FILE, $outputFilePath);
  13. $TBSError = trim(ob_get_clean());
  14. if (!is_file($outputFilePath)) {
  15. throw new Exception ('Document has not been generated <br/>' . $TBSError);
  16. }
  17.  
  18. echo json_encode(array(
  19. 'status' => 'OK',
  20. 'html' => array(
  21. 'content' => '<div class="container alert alert-success text-center">
  22. <a target="_blank" href="/getDocument.php?name=' . $outputFileName . '">' . $outputFileName . '</a>
  23. </div>',
  24. 'container' => HtmlConfig::CONTAINER_DOCUMENT_LINK,
  25. 'pasteType' => 'replace'),
  26. )
  27. ));

Dzięki temu generuje się link do pliku do pobrania. Plik generuje się prawidłowo w odpowiedniej lokalizacji dla tych trzech użytkowników. Dodam że oryginalnie nie było tych if /else if i wszystko zapisywało sie w katalogu głównym documents/

Plik drugi getDocument.php (chyba tutaj jest jakiś problem) odpowiada za możliwość pobrania tych plików. Obecnie wygląda tak:
  1. <?php
  2.  
  3. include_once 'DocumentDeclaration.php';
  4. include_once 'DocumentData.php';
  5. include_once 'AppConfig.php';
  6.  
  7. if (!array_key_exists('name', $_GET) || !is_string($_GET['name'])) {
  8. throw new Exception('File name is not determined.');
  9. }
  10.  
  11. $fileName = $_GET['name'];
  12.  
  13. if (false !== strpos($fileName, '/')) {
  14. throw new Exception('Incorrect file path.');
  15. }
  16.  
  17. //zapis orygianlny
  18. //$filePath = DOCUMENT_PATH . '/' . $_GET['name'];
  19. //
  20. //Tutaj modyfikacja skad pobierać plik - nie działa if (brak zmiennej $agent chyba)
  21. if ($agent == 'Piotr aaa') {
  22. $filePath = DOCUMENT_PATH . '/PiotrP/' . $_GET['name'];
  23. } elseif ($agent == 'Marcin bbb') {
  24. $filePath = DOCUMENT_PATH . '/MarcinS/' . $_GET['name'];
  25. } elseif ($agent == 'Michal ccc') {
  26. $filePath = DOCUMENT_PATH . '/MichalT/' . $_GET['name'];
  27. } else {
  28. $filePath = DOCUMENT_PATH . '/' . $_GET['name'];
  29. }
  30.  
  31.  
  32. if (!is_file($filePath)) {
  33. //throw new Exception('File does not exist!');
  34. throw new Exception(print_r($filePath, 1) );
  35. }
  36.  
  37. if (!is_readable($filePath)) {
  38. throw new Exception('File is not readable.');
  39. }
  40.  
  41. header('Content-Description: File Transfer');
  42. header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
  43. header("Content-Disposition: attachment; filename=" . $fileName);
  44. header('Content-Transfer-Encoding: binary');
  45. header('Expires: 0');
  46. header('Cache-Control: must-revalidate');
  47. header('Pragma: public');
  48. header('Content-Length: ' . filesize($filePath));
  49. readfile($filePath);


No i niestety ale nie mogę pobrać tych wygenerownych plików. Po kliknięciu na link zamiast okna do zapisu pliku dostaję komunikat:

{"status":"ERR","message":[{"body":"C:\\wamp\\www\\api\\document\/XXX_Zbigniew_20190424_170454_other_en.docx","type":"danger"}]}

Tak jakby nie działały te if w drugim pliku.

Przykład który pokaże może gdzie problem.
Powiedzmy, że generuję plik dla agenta Piotr aaa. Plik zapisuje się prawidłowo w katalogu documents/PiotrP. Przy tym co wyżej, nie mogę pobrać pliku (komunkiat o błędzie). Ale jak dla testów dopiszę w drugim pliku w tej linijce:
  1. else {
  2. $filePath = DOCUMENT_PATH . '/' . $_GET['name'];
  3. }

lokalizajcę gdzie zapisał sie pliki czyli ;
  1. else {
  2. $filePath = DOCUMENT_PATH . '/PiotrP/' . $_GET['name'];
  3. }

to wszystko działa prawidłowo i w momencie kliknięcie linku otwiera okno z zapisem pliku.

Mam nadzieję że to co napisąłem ma jakiś sens. System jest dość rozbudowany i składa się z 30-40 plików ale oczywiście większość myślę że jest tutaj bez znaczenia. Drugi plik podałem w całości. Pierwszy tylko fragment ale tam myśle ze wszystko działa bo zapisuje prawidłowo.
Dziękuję za wskazówki / podpowiedzi

Ten post edytował pela222 24.04.2019, 16:35:23
Go to the top of the page
+Quote Post
nospor
post 24.04.2019, 16:26:32
Post #2





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




A skad sie bierze zmienna $agent? Nigdzie nie widze jej tworzenia

ps: pozatym w druim pliku zjadles ELSEIF i dales samo IF. Przejrzyj pierwszy plik gdzie masz ELSEIF i skopiuj dokladnie bo jak nic to tez jest problememem


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pela222
post 24.04.2019, 16:29:21
Post #3





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


Dzięki za zainteresowanie.
Tak jak pisałem system jest dość rozbudowany (i pewnie dlatego sobie nie radzę).

Jest plik o nazwię DocumentData.php w którym m.in. jest:

  1. public function getData($final = false) {
  2. $this->captureLeadId();
  3. $this->captureContactId();
  4. $this->captureDocumentParameters();
  5. $this->capturePrimaryPerson();
  6. $this->capturePriority();
  7. $this->capturePersonWithDefaultOrder();
  8. $this->captureAgent();
  9. $this->captureAddress();
  10. $this->captureLeadSource();
  11. $this->captureConsider();
  12. $this->captureRecommend();
  13. $this->captureChildren();
  14. $this->capturePolicies();
  15. $this->captureDataDependOn();
  16. if ($final) {
  17. $this->captureFields();
  18. //throw new Exception('<pre>' . var_export($this->data, 1) . '</pre><br>');
  19. }

a chwile niżej w tym samym pliku jest:

  1. private function captureAgent() {
  2. $this->data['agent'] = $_POST['agent'];
  3. $agentFull = new AgentFull();
  4. $this->data['agentFull'] = $agentFull->getByAgentName($_POST['agent']);
  5. $this->data['agentPhone'] = $_POST['agentPhone'];
  6. $this->data['broker'] = $_POST['broker'];
  7. $brokerAddress = new BrokerAddress();
  8. $this->data['brokerAddress'] = $brokerAddress->getByBrokerName($_POST['broker']);
  9. $brokerBackground = new BrokerBackground();
  10. $this->data['brokerBackground'] = $brokerBackground->getByBrokerName($_POST['broker']);
  11. $agentSignature = new AgentSignature();
  12. $this->data['agentSignature'] = $agentSignature->getByAgentName($_POST['agent']);
  13. }


Tak myślałem na początku że nie przechodzi ta zmienna więc dla pewności dodałem na poczatku
  1. include_once 'DocumentData.php';

w pliku getDocument.php dla tego pliku

Ten post edytował pela222 24.04.2019, 16:33:10
Go to the top of the page
+Quote Post
nospor
post 24.04.2019, 16:32:15
Post #4





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




Sprawdz moj PS z poprzedniego posta bo tam narozrabiales


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pela222
post 24.04.2019, 16:37:33
Post #5





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


Ok. Widziałem to elseif. Chyba kiedyś kombinowałem i tak zostało. teraz poprawiłem i jest tak jak w pierwszym poście z elseif. Dalej nie działa. sad.gif

Ten post edytował pela222 24.04.2019, 16:37:47
Go to the top of the page
+Quote Post
nospor
post 24.04.2019, 16:42:38
Post #6





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




Daj w takim razie przed blokiem IF
var_dump($agent);

a po bloku IF
var_dump($filePath);
i pokaza jakie wartosci zwrocilo


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pela222
post 24.04.2019, 16:56:15
Post #7





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


null
string 'C:\wamp\www\apiRightone\document/XXX_Zbigniew_20190424_175408_other_en.docx' (length=76)
Go to the top of the page
+Quote Post
nospor
post 24.04.2019, 17:02:58
Post #8





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




Czyli jak wdzisz $agent jest null wiec co ci nie wyszlo jego dodanie do drugiego pliku

ps: samo include_once 'DocumentData.php'; raczej nie wywola funkcji tam zawartych. Przesledz lepiej pierwszy plik jak on odpala to wszystko wczesniej


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pela222
post 24.04.2019, 17:15:33
Post #9





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


Tutaj cały plik pierwszy czyli documentGenerate.php
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: herb
  5.  * Date: 25.04.15
  6.  * Time: 19:37
  7.  */
  8.  
  9. function base64ToPng( $base64_string, $output_file ) {
  10. $ifp = fopen( $output_file, "wb" );
  11. fwrite( $ifp, base64_decode( $base64_string) );
  12. fclose( $ifp );
  13. }
  14.  
  15. include_once 'DocumentDeclaration.php';
  16. include_once 'DocumentData.php';
  17. include_once 'AdditionalDataWriter.php';
  18. include_once 'AppConfig.php';
  19.  
  20. $documentData = new DocumentData();
  21. $documentData = $documentData->getData(true);
  22.  
  23. //tu sa wszystkie dane ze strony ze wszytskich formularzy
  24. // wiec w tym miejscu zapiszemy dane do bazy
  25. $writer = new AdditionalDataWriter();
  26. $writer->writeData($documentData);
  27.  
  28. $declaration = new DocumentDeclaration();
  29. $fields = $declaration->getFieldsDefinition($documentData['type'], $documentData['language'], $documentData['dual']);
  30. $declaration = $declaration->getDeclarationByTypeAndLanguage($documentData['type'], $documentData['language'], $documentData['dual']);
  31.  
  32. $primarySignatureImagePath = CLIENT_SIGNATURE_PATH . DIRECTORY_SEPARATOR . date('Y-m-d') . '_' . $documentData['primary']['firstName'] . '_' . $documentData['primary']['lastName']
  33. . '_' . $declaration['template'] .'_primary.png';
  34. $secondarySignatureImagePath = CLIENT_SIGNATURE_PATH . DIRECTORY_SEPARATOR . date('Y-m-d') . '_' . $documentData['primary']['firstName'] . '_' . $documentData['primary']['lastName']
  35. . '_' . $declaration['template'] .'_secondary.png';
  36.  
  37. base64ToPng( $_POST['signature']['primary']['data'] , $primarySignatureImagePath);
  38. base64ToPng( $_POST['signature']['secondary']['data'] , $secondarySignatureImagePath);
  39.  
  40. $signatureUsed = $_POST['signatureUsed'];
  41.  
  42. include_once 'tbs_class.php';
  43. include_once 'tbs_plugin_opentbs.php';
  44.  
  45. $TBS = new clsTinyButStrong;
  46. $TBS->Plugin(TBS_INSTALL, OPENTBS_PLUGIN);
  47. $TBS->SetOption(array('noerr' => true));
  48.  
  49. extract($documentData);
  50. //extract($policies);
  51. //extract($policiesLevel);
  52. //extract($policiesMark);
  53. //extract($policiesLevelMark);
  54.  
  55.  
  56. $TBS->LoadTemplate($declaration['templatePath'], OPENTBS_ALREADY_UTF8);
  57.  
  58. foreach ($policies as $policeKey => $police) {
  59. // z uwagi na błąd w TBS - nie wykożystywać jednego alisau bloku dwa razy, dodawane są aliasy z kolejnymi liczbami
  60. $TBS->MergeBlock($policeKey . ',' . $policeKey . '2,' . $policeKey. '3,' . $policeKey . '4', $police);
  61. }
  62.  
  63. // Bloki dla dokumentu common, strony w tym dokumencie zależą od formylarza
  64.  
  65. //throw new Exception('<pre>' . print_r($documentData, 1) . '</pre>');
  66. /*foreach ($documentData['f'] as $sectionName => $sectionData) {
  67.   // jeśli w danych z formularzy jest sekcja,
  68.   // której nazwa ZACZYNA SIĘ od przedrostaka dla dokumentu commo
  69.   // to dodaj blok o pełnej nazwie sekcji do TBS
  70.   if ($commonPrefix == substr($sectionName, 0, strlen($commonPrefix))) {
  71.   $TBS->MergeBlock($sectionName, $sectionData);
  72.   //throw new Exception('<pre>' . print_r($sectionName, 1) . '</pre>');
  73.   //break;
  74.   }
  75. }*/
  76.  
  77. if ($documentData['f']['comCoAL']['selected'] == 'yes') {
  78. $TBS->MergeBlock('comCoAL', $documentData['f']);
  79. } else {
  80. $TBS->MergeBlock('comCoAL', []);
  81. }
  82.  
  83. if ($documentData['f']['comCL']['selected'] == 'yes') {
  84. $TBS->MergeBlock('comCL', $documentData['f']);
  85. } else {
  86. $TBS->MergeBlock('comCL', []);
  87. }
  88. if ($documentData['f']['comCH']['selected'] == 'yes') {
  89. $TBS->MergeBlock('comCH', $documentData['f']);
  90. } else {
  91. $TBS->MergeBlock('comCH', []);
  92. }
  93.  
  94. //funkcja usuwa puste klucze tablicy
  95. function array_filter_recursive($data) {
  96. foreach ($data as &$value) {
  97. if (is_array($value)) {
  98. $value = array_filter_recursive($value);
  99. }
  100. }
  101. return array_filter($data);
  102. }
  103. $arraynoempty = array_filter_recursive($documentData['f']);
  104. //$TBS->MergeBlock('existlife', $arraynoempty['exist']['life']);
  105. //throw new Exception('<pre>' . print_r($arraynoempty['exist']['life'], 1) . '</pre>');
  106.  
  107. //usuniecie pierwszego klucza dla tablicy. Dodano warunek gdyby niezaznaczono warosci hold w formularzu.
  108. function cut_array($input, $data) {
  109. if ($input == 'yes' || $input == 'no' || $input == 'Not disclosed') {
  110. $cutArray = array_slice($data, 1); //usun pierwsza tablice gdy zaznaczono pole hold
  111. }
  112. else {
  113. $cutArray = $data; //nie wycinaj pierwszej tablicy gdy pola hold zapomniał zaznaczyć użytkownik formularza
  114. }
  115. return $cutArray;
  116. }
  117. //wykonaj cut_array dla klucza [exist][life] tablicy z usuniętymi pustymi kluczami i zmiennymi
  118. $cutArray = cut_array($documentData['f']['exist']['life']['0']['hold'], $arraynoempty['exist']['life']);
  119. $TBS->MergeBlock('existlife', $cutArray); //wrzuć dane tablicy do blocku existlife
  120. //throw new Exception('<pre>' . print_r($cutArray, 1) . '</pre>');
  121.  
  122. //throw new Exception('<pre>' . print_r($arraynoempty['existincomeprot'], 1) . '</pre>');
  123. //throw new Exception('<pre>' . print_r($documentData['f']['existincomeprot'], 1) . '</pre>');
  124. //throw new Exception('<pre>' . print_r($documentData['f'], 1) . '</pre>');
  125. //throw new Exception('<pre>' . print_r($_POST, 1) . '</pre>');
  126. //
  127. $TBS->MergeBlock('b,b1,b2', $documentData['f']); //wrzucenie danych o formularzu w block b, b1 i b2
  128. $TBS->MergeBlock('address,address2', $documentData['address']); //wrzucenie danych adresowych w block address
  129. $TBS->MergeBlock('brokeraddress, brokeraddress2', $documentData['brokerAddress']); //wrzucenie danych adresowych w block address
  130. $TBS->MergeBlock('companyaddress,companyaddress2', $documentData['policies']['Group']['0']['DOC']['companyaddress']); //wrzucenie danych adresowych w block address
  131.  
  132. $outputFileName = $documentData['primary']['lastName'] . '_' . $documentData['primary']['firstName'] . '_' . date('Ymd_His') . '_' . $declaration['template'];
  133.  
  134. //zdefiniowanie scieżki zapisu dokumentu dla każdego agenta
  135. if ($agent == 'Piotr aaa') {
  136. $outputFilePath = DOCUMENT_PATH . '/PiotrP/' . $outputFileName;
  137. } elseif ($agent == 'Marcin bbb') {
  138. $outputFilePath = DOCUMENT_PATH . '/MarcinS/' . $outputFileName;
  139. } elseif ($agent == 'Michal ccc') {
  140. $outputFilePath = DOCUMENT_PATH . '/MichalT/' . $outputFileName;
  141. } else {
  142. $outputFilePath = DOCUMENT_PATH . '/' . $outputFileName;
  143. }
  144.  
  145. $TBS->Show(OPENTBS_FILE, $outputFilePath);
  146. $TBSError = trim(ob_get_clean());
  147. if (!is_file($outputFilePath)) {
  148. throw new Exception ('Document has not been generated <br/>' . $TBSError);
  149. }
  150.  
  151. echo json_encode(array(
  152. 'status' => 'OK',
  153. 'html' => array(
  154. 'content' => '<div class="container alert alert-success text-center">
  155. <a target="_blank" href="/getDocument.php?name=' . $outputFileName . '">' . $outputFileName . '</a>
  156. </div>',
  157. 'container' => HtmlConfig::CONTAINER_DOCUMENT_LINK,
  158. 'pasteType' => 'replace'),
  159. )
  160. ));
Go to the top of the page
+Quote Post
nospor
post 24.04.2019, 18:46:12
Post #10





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




No i powtorz wszystko w pliku drugim co w pliku pierwszym ma zwiazek z $documentData


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pela222
post 24.04.2019, 19:09:51
Post #11





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


tak wygląda plik DocumentData.php
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: herb
  5.  * Date: 25.04.15
  6.  * Time: 20:25
  7.  */
  8.  
  9. include_once 'DependOnCompanyDefault.php';
  10. include_once 'DependOnCompanySpecified.php';
  11. include_once 'PolicyParameterTranslator.php';
  12. include_once 'PolicyParameterAdder.php';
  13. include_once 'AgentSignature.php';
  14. include_once 'Broker.php';
  15. include_once 'Agent.php';
  16. include_once 'DocumentDeclaration.php';
  17. include_once 'PolicyGroup.php';
  18.  
  19. class DocumentData {
  20.  
  21. private $data = array();
  22. private $primary = '';
  23. private $translator;
  24. private $adder;
  25.  
  26. public function __construct() {
  27. $this->translator = new PolicyParameterTranslator();
  28. $this->adder = new PolicyParameterAdder();
  29. }
  30.  
  31. public function getData($final = false) {
  32. $this->captureLeadId();
  33. $this->captureContactId();
  34. $this->captureDocumentParameters();
  35. $this->capturePrimaryPerson();
  36. $this->capturePriority();
  37. $this->capturePersonWithDefaultOrder();
  38. $this->captureAgent();
  39. $this->captureAddress();
  40. $this->captureLeadSource();
  41. $this->captureConsider();
  42. $this->captureRecommend();
  43. $this->captureChildren();
  44. $this->capturePolicies();
  45. $this->captureDataDependOn();
  46. if ($final) {
  47. $this->captureFields();
  48. //throw new Exception('<pre>' . var_export($this->data, 1) . '</pre><br>');
  49. }
  50.  
  51. //throw new Exception('<pre>' . print_r($this->data, 1) . '</pre><br><pre>' . print_r($_POST, 1) . '</pre>');
  52. //throw new Exception('<pre>' . var_export($this->data, 1) . '</pre><br>');
  53. //throw new Exception('<pre>' . var_export($_POST, 1) . '</pre><br>');
  54. //throw new Exception('<pre>' . print_r($_POST, 1) . '</pre>');
  55. //throw new Exception('<pre>' . print_r($this->data, 1));
  56. return $this->data;
  57. }
  58.  
  59. private function captureLeadId()
  60. {
  61. $this->data['leadid'] = $_POST['leadid'];
  62. }
  63. private function captureContactId()
  64. {
  65. $this->data['contactid'] = $_POST['contactid'];
  66. }
  67.  
  68. private function captureDocumentParameters() {
  69. if (!array_key_exists('person', $_POST)) {
  70. throw new Exception('Lack of clients data');
  71. }
  72.  
  73. if (!array_key_exists('documentType', $_POST)) {
  74. throw new Exception('Lack of documentType parameter.');
  75. }
  76.  
  77. if (!array_key_exists('language', $_POST)) {
  78. throw new Exception('Lack of language parameter.');
  79. }
  80.  
  81. $this->data['type'] = $_POST['documentType'];
  82. $this->data['language'] = $_POST['language'];
  83. $this->data['dual'] = true;
  84. if (array_key_exists('onePerson', $_POST)) {
  85. $this->data['dual'] = false;
  86. }
  87. }
  88.  
  89. private function capturePrimaryPerson() {
  90. if (!array_key_exists('primary', $_POST['person']) || !in_array($_POST['person']['primary'], array('A', 'B'))) {
  91. throw new Exception('Pleas, mark one person as primary.');
  92. }
  93.  
  94. $this->primary = $_POST['person']['primary'];
  95. }
  96.  
  97. private function capturePriority() {
  98. $this->data[$this->prescribePriority('A')] = $_POST['person']['A'];
  99. $this->data[$this->prescribePriority('B')] = $_POST['person']['B'];
  100. }
  101.  
  102. private function prescribePriority($person) {
  103. if ($this->primary == $person) {
  104. return 'primary';
  105. }
  106.  
  107. return 'secondary';
  108. }
  109.  
  110. private function capturePersonWithDefaultOrder() {
  111. $this->data['person'] = [
  112. 'A' => $_POST['person']['A'],
  113. 'B' => $_POST['person']['B']
  114. ];
  115. }
  116.  
  117. private function captureAgent() {
  118. $this->data['agent'] = $_POST['agent'];
  119. $agentFull = new AgentFull();
  120. $this->data['agentFull'] = $agentFull->getByAgentName($_POST['agent']);
  121. $this->data['agentPhone'] = $_POST['agentPhone'];
  122. $this->data['broker'] = $_POST['broker'];
  123. $brokerAddress = new BrokerAddress();
  124. $this->data['brokerAddress'] = $brokerAddress->getByBrokerName($_POST['broker']);
  125. $brokerBackground = new BrokerBackground();
  126. $this->data['brokerBackground'] = $brokerBackground->getByBrokerName($_POST['broker']);
  127. $agentSignature = new AgentSignature();
  128. $this->data['agentSignature'] = $agentSignature->getByAgentName($_POST['agent']);
  129. }
  130. ...
  131. ...


jak w pliku getDocument.php powtórzę ten zapis (czyli pobierz wszystkie zmienne)
  1. $documentData = new DocumentData();
  2. $documentData = $documentData->getData(true);

to dostaje
  1. {"status":"ERR","message":[{"body":"Lack of clients data","type":"danger"}]}


Zakładam że powinienem odwołać się do funkcji cuptureAgent tylko jak to zrobić?

??wesoła twórczośćquestionmark.gif
Kod
$documentData = new DocumentData;
$agent = $documentData->getData($this->captureAgent());

??koniec twórczości??

Ten post edytował pela222 24.04.2019, 19:39:14
Go to the top of the page
+Quote Post
nospor
post 25.04.2019, 08:54:10
Post #12





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




Zdaje sie dosc wyraznie napisalem ze masz powtorzyc caly kod z pliku pierwszego, ktory dotyczy zmiennej $documentData. Czego nie rozumiesz w tym zdaniu?
Odpal sobie w edytorze CTRL+F, wpisz $documentData i to ci znajdzie wszystkie jego wystapienia. Masz je powtorzyc w pliku drugim.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pela222
post 25.04.2019, 09:44:47
Post #13





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


Hej,

Już pisałem, że jak powtórzę wszystkie wpisy gdzie jest $documentData to dostaję błąd:

{"status":"ERR","message":[{"body":"Lack of clients data","type":"danger"}]}

Ten błąd wynika z części kodu jaki jest w pliku DocumentData.php, który już wkleiłem, żeby pokazać skąd się bierze:
  1. private function captureDocumentParameters() {
  2. if (!array_key_exists('person', $_POST)) {
  3. throw new Exception('Lack of clients data');
  4. }
  5.  
  6. if (!array_key_exists('documentType', $_POST)) {
  7. throw new Exception('Lack of documentType parameter.');
  8. }
  9.  
  10. if (!array_key_exists('language', $_POST)) {
  11. throw new Exception('Lack of language parameter.');
  12. }
  13.  
  14. $this->data['type'] = $_POST['documentType'];
  15. $this->data['language'] = $_POST['language'];
  16. $this->data['dual'] = true;
  17. if (array_key_exists('onePerson', $_POST)) {
  18. $this->data['dual'] = false;
  19. }
  20. }

Ponownie napisze, że wykonywanie tego tutaj jest zbędne bo to odpowiada za walidację parametrów takich jak: Czy istnieje klient, czy istnieje typ polisy, czy wybrano język). Innymi słowy zbędne tutaj. Ja z całego tego pliku potrzebuję uzyskać jedną zmienną jaką jest $agent.

Tak naprawdę to ten błąd dostaję już jak powtórzę:

  1. include_once 'DocumentData.php';
  2.  
  3. $documentData = new DocumentData();
  4. $documentData = $documentData->getData(true);


Poza tym nie ma sensu powtarzać części z nich bo dotyczą zupełnie innych kwestii i są kompletnie nie związane ze zmienną agent.

Moje ograniczone myślenie prowadzi mnie do tego, żeby dodać nową funkcje publiczną w pliku DocumentData.php:
  1. //nowa funkcja publiczna dla potrzeb pliku getDocument.php
  2. public function getAgent() {
  3. $this->captureAgent();
  4. return $this->data['agent'];
  5. // return $this->data;
  6. }


i wtedy w getDocument.php
  1. //wywołanie funkcji publicznej getAgent utworzonej dla tych potrzeb w DocumentData.php
  2. include_once 'DocumentData.php';
  3.  
  4. $documentData = new DocumentData;
  5. $agent = $documentData->getAgent();


No ale cały czas jak wrzucę poniżej:
  1. var_dump($agent);


To po klinknięciu na link do ściągania pliku dostaję
'null'

Jak zmienię mój wpis w DocumentData.php na:
  1. //nowa funkcja publiczna dla potrzeb pliku getDocument.php
  2. public function getAgent() {
  3. $this->captureAgent();
  4. // return $this->data['agent'];
  5. return $this->data;
  6. }

to dostaję:
array (size=7)
'agent' => null
'agentFull' => null
'agentPhone' => null
'broker' => null
'brokerAddress' => null
'brokerBackground' => null
'agentSignature' => null

Jest to oczywiście związane z tym że tak naprawdę nie wywołuję mojej nowej funkcji publicznej getAgent na poziomie plików określających typ dokumentu jaki ma być wygenerowany. Wieć albo musiąłbym to dodać w tych plikach (ich stała cześć skaładowa wyglada tak:
  1. include_once 'DocumentData.php';
  2. include_once 'AppConfig.php';
  3.  
  4. class FormOther {
  5. private $groups = array (
  6. );
  7.  
  8. public function __construct(DocumentData $documentData = null) {
  9.  
  10. if (!$documentData) {
  11. $documentData = new DocumentData();
  12. }
  13.  
  14. $documentData = $documentData->getData();
  15.  
  16. //budowanie zmiennych do dokumentu w oparciu o wybrane wartości tutaj
  17.  
  18. }
  19.  
  20. public function getGroups() {
  21. return $this->groups;
  22. }
  23. }


Albo tak jak pisałem wyłuskać z tej istniejącej funkcji publicznej getData tylko zmienne dla funkcii prywatnej captureAgent. Niestety tego nie potrafię.

Ten post edytował pela222 25.04.2019, 09:46:33
Go to the top of the page
+Quote Post
nospor
post 25.04.2019, 09:51:40
Post #14





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




No dobra, moj blad, spojrzalem tylko na kod ktory wkleiles a tam mi brakowalo tego i owego.
Ok, teraz widze ze agen idzie poprostu z POSTa. A z tego co widze do pliku dobierasz sie linkiem wiec raz ze postem nic nie wysylasz a dwa ze i tak nie ma tam agenta.

Jak nie zalezy ci na bezpieczenstwie, tudziez i tak twoja aplikacja za bardzo bezpieczna nie jest - patrzac w jaki sposob teraz leci agent to mozna odniesc takie wlasnie wrazenie - to dodaj tego agenta poprostu do linku i pobieraj go z GET i juz
Jesli chcesz to zrobic choc odrobine ladniej, to trzymaja agenta w SESSION i przy pobieraniu pliku pobieraj go wlasnie stamtad


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pela222
post 25.04.2019, 10:33:43
Post #15





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


Hej,

dlaczego nie mogę dobrać się do tej zmiennej skoro ona jest dostępne np jak zrobię
  1. throw new Exception('<pre>' . print_r($this->data, 1));


Na poziomie tej funkcji publicznej public function getData w pliku DocumentData.php

  1. Array
  2. (
  3. [leadid] =>
  4. [contactid] => 624745000001111111
  5. [type] => Other
  6. [language] => PL
  7. [dual] => 1
  8.  
  9. [person] => Array
  10. (
  11. [A] => Array
  12. (
  13. [sex] => male
  14. [firstName] => Zxxxx
  15. [lastName] => XXX
  16. [dob] => 1958-01-01
  17. [age] => xx years
  18. [mobile] => 01---
  19. [email] =>
  20. [marital] => M
  21. [smoking] => No
  22. [occupation] => Ccccc
  23. [company] => A---
  24. [monthlyIncome] =>
  25. [socialIncome] =>
  26. )
  27.  
  28. [B] => Array
  29. (
  30. [sex] => female
  31. [firstName] => Jxxxxx
  32. [lastName] => xxx
  33. [dob] => 1960-01-01
  34. [age] => xx years
  35. [mobile] => 01----
  36. [email] =>
  37. [marital] => M
  38. [smoking] => N
  39. [occupation] => Sxxxx
  40. [company] => Gxxx
  41. [monthlyIncome] =>
  42. [socialIncome] =>
  43. )
  44.  
  45. )
  46.  
  47. [agent] => Piotr aaa
  48. [agentFull] => Piotr aaa
  49. [agentPhone] => 01 xxxxxxxx
  50. [broker] => Piotr aaa
  51. [brokerAddress] => Array
  52. ...
  53. ...
  54. ...


Na koniec czy dodać tą zmienną do SESSION powinienem na poziomie pliku documentGenerate.php (bo tam mam tą zmienną).
Go to the top of the page
+Quote Post
nospor
post 25.04.2019, 10:43:31
Post #16





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




Ja nie wiem, ja widze, ze w DocumetnData agent idzie stad
$this->data['agent'] = $_POST['agent'];
czyli z posta.

Plik pobierasz na podstawie zwyklego linku z tego co widzialem tak? Czyli POSTa nie wysylasz a tym samym nie masz agent w POST. Czy moze sie myle i plik pobierasz inaczej?

Cytat
dlaczego nie mogę dobrać się do tej zmiennej skoro ona jest dostępne np jak zrobię

Czyli w akcji pobierania pliku masz tego agent? No to nie rozumiem w czym problem


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pela222
post 25.04.2019, 11:02:36
Post #17





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


Ok. Puściłem zmienną agent w linku w pliku documentGenerate.php
  1. <a target="_blank" href="/getDocument.php?name=' . $outputFileName . '&agent=' .$agent .'">' . $outputFileName . '</a>


w w pliku getDocument.php zczytałem
  1. $agent = $_GET['agent'];


I działa. Dziękuję tobie za pomoc, cierpliwość i czas jaki poświęciłeś.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.03.2024 - 03:38