fix broken voip script, where call was dropping shortly after it started recording...
[vozmob:vozmob.git] / html / sites / all / modules / custom / vozmob_callin / vozmob_callin.module
1 <?php
2 /**
3  * @file Provides sample scripts that demonstrate the capabilities of the VoIP Drupal platform
4  */ 
5
6 /**
7  * Implementation of hook_voipscript_load_script()
8  */
9 function vozmob_callin_voipscript_load_script($script_name, $params=NULL) {
10   if ($script_name == 'vozmob_callin_record_script') {
11     return _vozmob_callin_load_script($script_name);
12   }
13 }
14
15 /**
16  * Implementation of hook_voipscript_get_script_names()
17  */
18 function vozmob_callin_voipscript_get_script_names() {
19   return array('vozmob_callin_record_script');
20 }
21
22 /*
23  * Sample scripts that highlight VoIP Drupal capabilities
24  */
25 function _vozmob_callin_load_script($script_name) {
26   $script = new VoipScript('vozmob_callin_record_script');
27
28   $script->addLabel('switch_to_spanish');
29   $script->addSetLanguage('es');
30   $script->addSet('spanishmsg', url(drupal_get_path('module', 'vozmob_callin') . '/audio/VozMob-Bienven-Es-mono.mp3', array('absolute' => TRUE, 'language' => (object) array('prefix' => '', 'domain' => $GLOBALS['language']->domain))));
31   $script->addGetInput('%spanishmsg', 1, '', 1);
32   $script->addGotoIf('switch_to_english', "^%input_digits == '2'");
33   $script->addGoto('start_recording');
34
35   $script->addLabel('switch_to_english');
36   $script->addSetLanguage('en');
37   $script->addSet('englishmsg', url(drupal_get_path('module', 'vozmob_callin') . '/audio/VozMob-Welcome-En-mono.mp3', array('absolute' => TRUE, 'language' => (object) array('prefix' => '', 'domain' => $GLOBALS['language']->domain))));
38   $script->addSay('%englishmsg');
39
40   $script->addLabel('start_recording');
41   $timeout = 15;
42   $end_key = '#';
43   $max_length = 1000;
44   $prompt = t("Please record your message. When done, press the pound key.");
45   $script->addRecord($prompt, $timeout, $end_key, $max_length);
46   $script->addGotoIf('switch_to_english', "^%recording_digits == '2'");
47   // if recording return 0 don't save
48   $script->addGotoIf('recording_completed', '^%recording_duration > 0');
49   $script->addGotoIf('no recording detected', '^%recording_duration == 0');
50
51   // otherwise just save
52   $script->addSet('callback_result', '^_vozmob_callin_record_callback(%call_id, %recording_fid, %recording_duration)');
53   $script->addGoto('end call');
54
55   $script->addLabel('no recording detected');
56   $script->addSay("No recording detected. Please try again.");
57   $script->addGoto('start_recording');
58
59   $script->addLabel('end call');
60   $script->addSay('Bye bye.');
61   $script->addHangup();
62
63   return $script;
64 }
65
66 /**
67  * Callback function associated with the script vozmob_callin_record_script.
68  * It is called whenever that script records a new entry from the user.
69  */
70 function _vozmob_callin_record_callback($call_id, $fid, $recording_duration) {
71   watchdog('vozmob_callin', 'in _vozmob_callin_record_callback(%call_id, %recording_fid, %recording_duration)', array('%call_id' => $call_id, '%recording_fid' => $fid, '%recording_duration' => $recording_duration));
72   $language = 'es';
73   $uid = sms_user_get_uid(substr($_REQUEST['From'], 1));
74   if (!$uid) {
75     // Find number stored without a 1-digit country code.
76     $uid = sms_user_get_uid(substr($_REQUEST['From'], 2));
77   }
78   while (!$uid) {
79     $user = user_save(NULL, array(
80       'name' => variable_get('sms_registration_username', 'Drupal-') . mt_rand(1, db_result(db_query('SELECT MAX(uid) FROM {users}')) * 10),
81       'pass' => user_password(8),
82       'mail' => $_REQUEST['From'],
83       'roles' => ($role = variable_get('sms_registration_role', NULL)) ? array($role => 1) : NULL,
84       'status' => 1,
85       'language' => $language,
86       'sms_user' => array('number' => sms_formatter($_REQUEST['From']), 'status' => SMS_USER_PENDING, 'gateway' => array()),
87     ));
88     if ($user) {
89       $uid = $user->uid;
90     }
91   }
92   // Construct the new node object.
93   $node = new stdClass();
94   $result = db_query('SELECT * FROM {files} WHERE fid = %d', $fid);
95   if ($file = db_fetch_object($result)) {
96     $file->list = variable_get('upload_list_default', 1);
97     $node->files[$file->fid] = $file;
98     // Force upload module to recognize the file attachment.
99     $node->old_vid = 1;
100   }
101   $node->title = t('Voice message');
102   $node->body = '';
103   $node->type = 'blog';
104   $node->created = $_SERVER['REQUEST_TIME'];
105   $node->changed = $node->created;
106   $node->status = 1;
107   $node->promote = 0;
108   $node->sticky = 0;
109   $node->format = 1;
110   $node->uid = $uid;
111   $node->language = $language;
112   $node = node_submit($node);
113   node_save($node);
114   return 'Success';
115 }