View file system/AJAX/php/attachments/voices.php

File size: 4.86Kb
<?php  
require ($_SERVER['DOCUMENT_ROOT'].'/system/connections/core.php');
access('users');
get_check_valid();

if (ajax() == true){

  $type = tabs(get('type'));
  $url = tabs(get('url'));
  $id = intval(get('id'));
  
  ?><div class="modal_bottom_title"><?
  
  if (config('PRIVATE_PHOTOS')){
    
    ?>
    <div id="modal_bottom_open_set" onclick="upload('/system/AJAX/php/attachments/photos.php?type=<?=$type?>&id=<?=$id?>&url=<?=$url?>&show=<?=intval(get('show'))?>&<?=TOKEN_URL?>', 'attachments_upload')" class="modal_bottom_icons_optimize"><span class="modal_bottom_icons_circle"><?=icons('image', 20)?></span><span class='modal_bottom_title_text'><?=lg('Фото')?></span></div>
    <?
    
  }
  
  if (config('PRIVATE_VIDEOS')){
    
    ?>
    <div id="modal_bottom_open_set" onclick="upload('/system/AJAX/php/attachments/videos.php?type=<?=$type?>&id=<?=$id?>&url=<?=$url?>&show=<?=intval(get('show'))?>&<?=TOKEN_URL?>', 'attachments_upload')" class="modal_bottom_icons_optimize"><span class="modal_bottom_icons_circle"><?=icons('film', 20)?></span><span class="modal_bottom_title_text"><?=lg('Видео')?></span></div>
    <?
    
  }
  
  if (config('PRIVATE_MUSIC')){
    
    ?>
    <div id="modal_bottom_open_set" onclick="upload('/system/AJAX/php/attachments/music.php?type=<?=$type?>&id=<?=$id?>&url=<?=$url?>&show=<?=intval(get('show'))?>&<?=TOKEN_URL?>', 'attachments_upload')" class="modal_bottom_icons_optimize"><span class="modal_bottom_icons_circle"><?=icons('music', 20)?></span><span class="modal_bottom_title_text"><?=lg('Музыка')?></span></div>
    <?
    
  }
  
  if (config('PRIVATE_FILES')){
    
    ?>
    <div id="modal_bottom_open_set" onclick="upload('/system/AJAX/php/attachments/files.php?type=<?=$type?>&id=<?=$id?>&url=<?=$url?>&show=<?=intval(get('show'))?>&<?=TOKEN_URL?>', 'attachments_upload')" class="modal_bottom_icons_optimize"><span class="modal_bottom_icons_circle"><?=icons('file', 20)?></span><span class="modal_bottom_title_text"><?=lg('Файлы')?></span></div>
    <?
    
  }
  
  hooks::challenge('attachments_ajax', 'attachments_ajax');
  hooks::run('attachments_ajax');
  
  ?>
  </div>

  <center>
  <div class="modal-bottom-container">
  <div class='vbody'>  
  <div id='vtime'>0:00</div>
  <button onclick='vstart()' id='vstart'><?=icons('microphone', 20, 'fa-fw')?></button> 
  <button id='vstop' style='display: none'><?=icons('stop', 20, 'fa-fw')?></button>
  <div id='vinfo' style='display: none'><?=lg('Идет запись')?></div>
  </div>
  </div>

  <script>
  function vstart(){
    
    var vstop = document.getElementById('vstop');
    var vstart = document.getElementById('vstart');
    var vinfo = document.getElementById('vinfo');
    
    navigator.mediaDevices.getUserMedia({audio: true}).then(stream => {
      
      var mediaRecorder = new MediaRecorder(stream);
      let voice = [];
      
      mediaRecorder.start();
      vstop.style.display = '';
      vinfo.style.display = '';
      vstart.style.display = 'none';
      vtick(0);
      
      mediaRecorder.addEventListener("dataavailable", function(event) {
      
        voice.push(event.data);
      
      });
    
      document.querySelector('#vstop').addEventListener('click', function(){
        
        mediaRecorder.stop();
      
      });
      
      mediaRecorder.addEventListener("stop", function() {
        
        vstop.style.display = 'none';
        vstart.style.display = '';
        vinfo.style.display = 'none';
        clearInterval(timer);
        
        const audioBlob = new Blob(voice, {
          
          type: 'audio/wav'
          
        });
        
        let fd = new FormData();
        fd.append('voice', audioBlob);
        sendVoice(fd);
        voice = [];
      
      });
    
    }).catch(error => {
      
      alert('Браузер отказал в разрешении. Проверьте настройки');
    
    });
  
  }
  
  async function sendVoice(form) {
    
    var promise = await fetch('/files/receiver/voice.php?type=<?=$type?>&id=<?=$id?>&url=<?=$url?>&duration='+document.getElementById('vtime').innerHTML, {
      
      method: 'POST',
      body: form
      
    });
    
    if (promise.ok) {
      
      var data = "<?=base64_decode($url)?>";
      var toLoad = data+' #upload-attachments-result';
      $("#upload-attachments-result").load(toLoad);        
      modal_bottom_close();
    
    }
  
  }
  
  //Таймер для длительности трека по возрастанию
  function vtick(num) {
    
    var sec = num;
    timer = setInterval(function() {
      
      sec++;
      document.getElementById("vtime").childNodes[0].nodeValue = duration_format(sec);
    
    }, 1000);
  
  }
  </script> 
  
  <span onclick='modal_bottom_close()' class='modal-bottom-button'><?=lg('Отменить')?></span></center> 
  <?
  
}else{
  
  echo lg('Не удалось установить соединение');
  
}