PageRenderTime 49ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/tine20/Voipmanager/Controller/Asterisk/Voicemail.php

https://github.com/testruby/Tine-2.0-Open-Source-Groupware-and-CRM
PHP | 167 lines | 89 code | 26 blank | 52 comment | 8 complexity | 108854b4b7a545093277f31112d1efa0 MD5 | raw file
  1. <?php
  2. /**
  3. * Asterisk_Voicemail controller for Voipmanager Management application
  4. *
  5. * @package Voipmanager
  6. * @subpackage Controller
  7. * @license http://www.gnu.org/licenses/agpl.html AGPL Version 3
  8. * @author Philipp Schuele <p.schuele@metaways.de>
  9. * @copyright Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
  10. *
  11. */
  12. /**
  13. * Asterisk_Voicemail controller class for Voipmanager Management application
  14. *
  15. * @package Voipmanager
  16. * @subpackage Controller
  17. */
  18. class Voipmanager_Controller_Asterisk_Voicemail extends Voipmanager_Controller_Abstract
  19. {
  20. /**
  21. * holds the instance of the singleton
  22. *
  23. * @var Voipmanager_Controller_Asterisk_Voicemail
  24. */
  25. private static $_instance = NULL;
  26. /**
  27. * the constructor
  28. *
  29. * don't use the constructor. use the singleton
  30. */
  31. private function __construct()
  32. {
  33. $this->_modelName = 'Voipmanager_Model_Asterisk_Voicemail';
  34. $this->_backend = new Voipmanager_Backend_Asterisk_Voicemail();
  35. }
  36. /**
  37. * don't clone. Use the singleton.
  38. *
  39. */
  40. private function __clone()
  41. {
  42. }
  43. /**
  44. * the singleton pattern
  45. *
  46. * @return Voipmanager_Controller_Asterisk_Voicemail
  47. */
  48. public static function getInstance()
  49. {
  50. if (self::$_instance === NULL) {
  51. self::$_instance = new Voipmanager_Controller_Asterisk_Voicemail();
  52. }
  53. return self::$_instance;
  54. }
  55. /**
  56. * (non-PHPdoc)
  57. * @see Tinebase/Controller/Record/Tinebase_Controller_Record_Abstract#create($_record)
  58. */
  59. public function create(Tinebase_Record_Interface $_record)
  60. {
  61. $result = parent::create($_record);
  62. if(isset(Tinebase_Core::getConfig()->asterisk)) {
  63. $this->publishConfiguration();
  64. }
  65. return $result;
  66. }
  67. /**
  68. * (non-PHPdoc)
  69. * @see Tinebase/Controller/Record/Tinebase_Controller_Record_Abstract#delete($_ids)
  70. */
  71. public function delete($_ids)
  72. {
  73. $result = parent::delete($_ids);
  74. if(isset(Tinebase_Core::getConfig()->asterisk)) {
  75. $this->publishConfiguration();
  76. }
  77. return $result;
  78. }
  79. /**
  80. * (non-PHPdoc)
  81. * @see Tinebase/Controller/Record/Tinebase_Controller_Record_Abstract#update($_record)
  82. */
  83. public function update(Tinebase_Record_Interface $_record)
  84. {
  85. $result = parent::update($_record);
  86. Zend_Registry::get('logger')->debug(__METHOD__ . '::' . __LINE__ . ' update voicemail configuration');
  87. if(isset(Tinebase_Core::getConfig()->asterisk)) {
  88. $this->publishConfiguration();
  89. }
  90. return $result;
  91. }
  92. /**
  93. * create voicemail.conf and upload to asterisk server
  94. *
  95. * @return void
  96. */
  97. public static function publishConfiguration()
  98. {
  99. Zend_Registry::get('logger')->debug(__METHOD__ . '::' . __LINE__ . ' publish voicemail configuration');
  100. if(isset(Tinebase_Core::getConfig()->asterisk)) {
  101. $asteriskConfig = Tinebase_Core::getConfig()->asterisk;
  102. $url = $asteriskConfig->managerbaseurl;
  103. $username = $asteriskConfig->managerusername;
  104. $password = $asteriskConfig->managerpassword;
  105. } else {
  106. throw new Voipmanager_Exception_NotFound('can\'t publish configuration. No settings found for asterisk backend in config file!');
  107. }
  108. $filter = new Voipmanager_Model_Asterisk_ContextFilter();
  109. $contexts = Voipmanager_Controller_Asterisk_Context::getInstance()->search($filter);
  110. $fp = fopen("php://temp", 'r+');
  111. foreach($contexts as $context) {
  112. $filter = new Voipmanager_Model_Asterisk_VoicemailFilter(array(
  113. array(
  114. 'field' => 'context_id',
  115. 'operator' => 'equals',
  116. 'value' => $context->getId()
  117. )
  118. ));
  119. $voicemails = Voipmanager_Controller_Asterisk_Voicemail::getInstance()->search($filter);
  120. if(count($voicemails) == 0) {
  121. continue;
  122. }
  123. fputs($fp, "[" . $context->name . "]\n");
  124. foreach($voicemails as $voicemail) {
  125. fputs($fp, sprintf("%s = %s,%s,%s\n",
  126. $voicemail->mailbox,
  127. $voicemail->password,
  128. $voicemail->fullname,
  129. $voicemail->email
  130. ));
  131. }
  132. fputs($fp, "\n");
  133. }
  134. rewind($fp);
  135. $ajam = new Ajam_Connection($url);
  136. $ajam->login($username, $password);
  137. $ajam->upload($url . '/tine20config', 'voicemail.conf', stream_get_contents($fp));
  138. $ajam->command('voicemail reload');
  139. $ajam->logout();
  140. }
  141. }