PaystackWidget.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace smladeoye\paystack\widget;
  3. use yii\base\Widget;
  4. use yii\helpers\Html;
  5. use yii\web\View;
  6. use yii\base\InvalidConfigException;
  7. use yii\web\JqueryAsset;
  8. class PaystackWidget extends Widget
  9. {
  10. public $options;
  11. public $buttonOptions = [];
  12. public $buttonText;
  13. private $idOptions = ['email','amount','currency','quantity'];
  14. private $jsScript = 'https://js.paystack.co/v1/inline.js';
  15. public function init()
  16. {
  17. parent::init();
  18. $this->view->registerJs($this->setHandler(),View::POS_END,'paystack');
  19. $this->view->registerJsFile($this->jsScript,['depends' => [JqueryAsset::className()]]);
  20. }
  21. private function filterIdOptions()
  22. {
  23. $idOptionsList = array();
  24. foreach ($this->idOptions as $value)
  25. {
  26. if (array_key_exists($value,$this->options))
  27. {
  28. $hasSubstr = substr($this->options[$value],0,1) == '#';
  29. if ($value == 'amount' && !$hasSubstr)
  30. $this->options[$value] *= 100;
  31. elseif ($hasSubstr)
  32. $idOptionsList[] = $value;
  33. }
  34. }
  35. $this->idOptions = $idOptionsList;
  36. return $this->idOptions;
  37. }
  38. public function run()
  39. {
  40. return Html::tag('button',$this->buttonText,array_merge(['class'=>'btn btn-info'],$this->buttonOptions,['onClick'=>'paystack_inline();']));
  41. }
  42. public function setHandler()
  43. {
  44. $file = __DIR__.DIRECTORY_SEPARATOR.'_paystack.php';
  45. if (empty($this->options))
  46. {
  47. throw new InvalidConfigException('Paystack options must be set');
  48. }
  49. $this->filterIdOptions();
  50. return strip_tags($this->view->renderFile($file,['options'=>$this->options,'idOptions'=>$this->idOptions]));
  51. }
  52. }