LiveStreamingPreferences.php 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. class Application_Form_LiveStreamingPreferences extends Zend_Form_SubForm
  3. {
  4. public function init()
  5. {
  6. $CC_CONFIG = Config::getConfig();
  7. $isDemo = isset($CC_CONFIG['demo']) && $CC_CONFIG['demo'] == 1;
  8. $isStreamConfigable = Application_Model_Preference::GetEnableStreamConf() == "true";
  9. $defaultFade = Application_Model_Preference::GetDefaultTransitionFade();
  10. // automatic trasition on source disconnection
  11. $auto_transition = new Zend_Form_Element_Checkbox("auto_transition");
  12. $auto_transition->setLabel(_("Auto Switch Off"))
  13. ->setValue(Application_Model_Preference::GetAutoTransition())
  14. ->setDecorators(array('ViewHelper'));
  15. $this->addElement($auto_transition);
  16. // automatic switch on upon source connection
  17. $auto_switch = new Zend_Form_Element_Checkbox("auto_switch");
  18. $auto_switch->setLabel(_("Auto Switch On"))
  19. ->setValue(Application_Model_Preference::GetAutoSwitch())
  20. ->setDecorators(array('ViewHelper'));
  21. $this->addElement($auto_switch);
  22. // Default transition fade
  23. $transition_fade = new Zend_Form_Element_Text("transition_fade");
  24. $transition_fade->setLabel(_("Switch Transition Fade (s)"))
  25. ->setFilters(array('StringTrim'))
  26. ->addValidator('regex', false, array('/^\d*(\.\d+)?$/',
  27. 'messages' => _('Please enter a time in seconds (eg. 0.5)')))
  28. ->setValue($defaultFade)
  29. ->setDecorators(array('ViewHelper'));
  30. $this->addElement($transition_fade);
  31. //Master username
  32. $master_username = new Zend_Form_Element_Text('master_username');
  33. $master_username->setAttrib('autocomplete', 'off')
  34. ->setAllowEmpty(true)
  35. ->setLabel(_('Master Username'))
  36. ->setFilters(array('StringTrim'))
  37. ->setValue(Application_Model_Preference::GetLiveStreamMasterUsername())
  38. ->setDecorators(array('ViewHelper'));
  39. $this->addElement($master_username);
  40. //Master password
  41. if ($isDemo) {
  42. $master_password = new Zend_Form_Element_Text('master_password');
  43. } else {
  44. $master_password = new Zend_Form_Element_Password('master_password');
  45. $master_password->setAttrib('renderPassword','true');
  46. }
  47. $master_password->setAttrib('autocomplete', 'off')
  48. ->setAttrib('renderPassword','true')
  49. ->setAllowEmpty(true)
  50. ->setValue(Application_Model_Preference::GetLiveStreamMasterPassword())
  51. ->setLabel(_('Master Password'))
  52. ->setFilters(array('StringTrim'))
  53. ->setDecorators(array('ViewHelper'));
  54. $this->addElement($master_password);
  55. //Master source connection url
  56. $master_dj_connection_url = new Zend_Form_Element_Text('master_dj_connection_url');
  57. $master_dj_connection_url->setAttrib('readonly', true)
  58. ->setLabel(_('Master Source Connection URL'))
  59. ->setValue(Application_Model_Preference::GetMasterDJSourceConnectionURL())
  60. ->setDecorators(array('ViewHelper'));
  61. $this->addElement($master_dj_connection_url);
  62. //Show source connection url
  63. $live_dj_connection_url = new Zend_Form_Element_Text('live_dj_connection_url');
  64. $live_dj_connection_url->setAttrib('readonly', true)
  65. ->setLabel(_('Show Source Connection URL'))
  66. ->setValue(Application_Model_Preference::GetLiveDJSourceConnectionURL())
  67. ->setDecorators(array('ViewHelper'));
  68. $this->addElement($live_dj_connection_url);
  69. //liquidsoap harbor.input port
  70. $betweenValidator = Application_Form_Helper_ValidationTypes::overrideBetweenValidator(1024, 49151);
  71. $m_port = Application_Model_StreamSetting::getMasterLiveStreamPort();
  72. $master_dj_port = new Zend_Form_Element_Text('master_harbor_input_port');
  73. $master_dj_port->setLabel(_("Master Source Port"))
  74. ->setValue($m_port)
  75. ->setValidators(array($betweenValidator))
  76. ->addValidator('regex', false, array('pattern'=>'/^[0-9]+$/', 'messages'=>array('regexNotMatch'=>_('Only numbers are allowed.'))))
  77. ->setDecorators(array('ViewHelper'));
  78. $this->addElement($master_dj_port);
  79. $m_mount = Application_Model_StreamSetting::getMasterLiveStreamMountPoint();
  80. $master_dj_mount = new Zend_Form_Element_Text('master_harbor_input_mount_point');
  81. $master_dj_mount->setLabel(_("Master Source Mount Point"))
  82. ->setValue($m_mount)
  83. ->setValidators(array(
  84. array('regex', false, array('/^[^ &<>]+$/', 'messages' => _('Invalid character entered')))))
  85. ->setDecorators(array('ViewHelper'));
  86. $this->addElement($master_dj_mount);
  87. //liquidsoap harbor.input port
  88. $l_port = Application_Model_StreamSetting::getDjLiveStreamPort();
  89. $live_dj_port = new Zend_Form_Element_Text('dj_harbor_input_port');
  90. $live_dj_port->setLabel(_("Show Source Port"))
  91. ->setValue($l_port)
  92. ->setValidators(array($betweenValidator))
  93. ->addValidator('regex', false, array('pattern'=>'/^[0-9]+$/', 'messages'=>array('regexNotMatch'=>_('Only numbers are allowed.'))))
  94. ->setDecorators(array('ViewHelper'));
  95. $this->addElement($live_dj_port);
  96. $l_mount = Application_Model_StreamSetting::getDjLiveStreamMountPoint();
  97. $live_dj_mount = new Zend_Form_Element_Text('dj_harbor_input_mount_point');
  98. $live_dj_mount->setLabel(_("Show Source Mount Point"))
  99. ->setValue($l_mount)
  100. ->setValidators(array(
  101. array('regex', false, array('/^[^ &<>]+$/', 'messages' => _('Invalid character entered')))))
  102. ->setDecorators(array('ViewHelper'));
  103. $this->addElement($live_dj_mount);
  104. // demo only code
  105. if (!$isStreamConfigable) {
  106. $elements = $this->getElements();
  107. foreach ($elements as $element) {
  108. if ($element->getType() != 'Zend_Form_Element_Hidden') {
  109. $element->setAttrib("disabled", "disabled");
  110. }
  111. }
  112. }
  113. }
  114. public function updateVariables()
  115. {
  116. $CC_CONFIG = Config::getConfig();
  117. $isDemo = isset($CC_CONFIG['demo']) && $CC_CONFIG['demo'] == 1;
  118. $master_dj_connection_url = Application_Model_Preference::GetMasterDJSourceConnectionURL();
  119. $live_dj_connection_url = Application_Model_Preference::GetLiveDJSourceConnectionURL();
  120. $this->setDecorators(array(
  121. array('ViewScript', array('viewScript' => 'form/preferences_livestream.phtml', 'master_dj_connection_url'=>$master_dj_connection_url, 'live_dj_connection_url'=>$live_dj_connection_url, 'isDemo' => $isDemo))
  122. ));
  123. }
  124. public function isValid($data)
  125. {
  126. $isValid = parent::isValid($data);
  127. $master_harbor_input_port = $data['master_harbor_input_port'];
  128. $dj_harbor_input_port = $data['dj_harbor_input_port'];
  129. if ($master_harbor_input_port == $dj_harbor_input_port && $master_harbor_input_port != "") {
  130. $element = $this->getElement("dj_harbor_input_port");
  131. $element->addError(_("You cannot use same port as Master DJ port."));
  132. $isValid = false;
  133. }
  134. if ($master_harbor_input_port != "") {
  135. if (is_numeric($master_harbor_input_port)) {
  136. if ($master_harbor_input_port != Application_Model_StreamSetting::getMasterLiveStreamPort()) {
  137. $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  138. try {
  139. socket_bind($sock, 0, $master_harbor_input_port);
  140. } catch (Exception $e) {
  141. $element = $this->getElement("master_harbor_input_port");
  142. $element->addError(sprintf(_("Port %s is not available"), $master_harbor_input_port));
  143. $isValid = false;
  144. }
  145. socket_close($sock);
  146. }
  147. } else {
  148. $isValid = false;
  149. }
  150. }
  151. if ($dj_harbor_input_port != "") {
  152. if (is_numeric($dj_harbor_input_port)) {
  153. if ($dj_harbor_input_port != Application_Model_StreamSetting::getDjLiveStreamPort()) {
  154. $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  155. try {
  156. socket_bind($sock, 0, $dj_harbor_input_port);
  157. } catch (Exception $e) {
  158. $element = $this->getElement("dj_harbor_input_port");
  159. $element->addError(sprintf(_("Port %s is not available"), $dj_harbor_input_port));
  160. $isValid = false;
  161. }
  162. socket_close($sock);
  163. }
  164. } else {
  165. $isValid = false;
  166. }
  167. }
  168. return $isValid;
  169. }
  170. }