Changeset 8785

Show
Ignore:
Timestamp:
02/07/10 18:54:30 (2 years ago)
Author:
p_lindheimer
Message:

adds place to define penalties for dynamic agents and optionally restrict queue members to these agents, this code was mostly written by mbrevda (Moshe), I'm just checking it in for him. WARNING: NOT YET TESTED (comming soon). re #2085

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • modules/branches/2.7/queues/functions.inc.php

    r8461 r8785  
    486486      $ext->add($context, $exten, '', new ext_gotoif('$["${ARG3}" = "EXTEN" & ${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 0]', 'invalid')); 
    487487 
     488      // If this is a restricted dynamic agent queue then check to make sure they are allowed 
     489      // 
     490      $ext->add($context, $exten, '', new ext_gotoif('$["${DB(QPENALTY/${ARG1}/dynmemberonly)}" = "yes" & ${DB_EXISTS(QPENALTY/${ARG1}/agents/${CALLBACKNUM})} != 1]', 'invalid')); 
     491 
    488492      $ext->add($context, $exten, '', new ext_execif('$["${QREGEX}" != ""]', 'GotoIf', '$["${REGEX("${QREGEX}" ${CALLBACKNUM})}" = "0"]?invalid')); 
    489493      $ext->add($context, $exten, '', new ext_execif('$["${ARG2}" != ""]', 'Authenticate', '${ARG2}')); 
     
    491495 
    492496      if ($amp_conf['USEQUEUESTATE']) { 
    493         $ext->add($context, $exten, '', new ext_execif('$[${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 1]', 'AddQueueMember', '${ARG1},Local/${CALLBACKNUM}@from-queue/n,0,,${DB(AMPUSER/${CALLBACKNUM}/cidname)},HINT:${CALLBACKNUM}@ext-local')); 
    494         $ext->add($context, $exten, '', new ext_execif('$[${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 0]', 'AddQueueMember', '${ARG1},Local/${CALLBACKNUM}@from-queue/n')); 
     497        $ext->add($context, $exten, '', new ext_execif('$[${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 1]', 'AddQueueMember', '${ARG1},Local/${CALLBACKNUM}@from-queue/n,${DB(QPENALTY/${ARG1}/agents/${CALLBACKNUM})},,${DB(AMPUSER/${CALLBACKNUM}/cidname)},HINT:${CALLBACKNUM}@ext-local')); 
     498        $ext->add($context, $exten, '', new ext_execif('$[${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 0]', 'AddQueueMember', '${ARG1},Local/${CALLBACKNUM}@from-queue/n,${DB(QPENALTY/${ARG1}/agents/${CALLBACKNUM})}')); 
    495499      } else { 
    496         $ext->add($context, $exten, 'a9', new ext_addqueuemember('${ARG1}', 'Local/${CALLBACKNUM}@from-queue/n')); 
     500        $ext->add($context, $exten, 'a9', new ext_addqueuemember('${ARG1}', 'Local/${CALLBACKNUM}@from-queue/n,${DB(QPENALTY/${ARG1}/agents/${CALLBACKNUM})}')); 
    497501      } 
    498502      $ext->add($context, $exten, '', new ext_userevent('Agentlogin', 'Agent: ${CALLBACKNUM}')); 
     
    557561} 
    558562 
    559 function queues_add($account,$name,$password,$prefix,$goto,$agentannounce_id,$members,$joinannounce_id,$maxwait,$alertinfo='',$cwignore='0',$qregex='',$queuewait='0', $use_queue_context='0') { 
    560  global $db
     563function queues_add($account,$name,$password,$prefix,$goto,$agentannounce_id,$members,$joinannounce_id,$maxwait,$alertinfo='',$cwignore='0',$qregex='',$queuewait='0', $use_queue_context='0', $dynmembers = '', $dynmemberonly = '') { 
     564  global $db,$astman,$amp_conf
    561565 
    562566  if (trim($account) == '') { 
     
    636640          VALUES ('$extension', '$descr', '$grppre', '$alertinfo', '$joinannounce_id', '$ringing', '$agentannounce_id', '$maxwait', '$password', '$ivr_id', '$dest', '$cwignore', '$qregex', '$queuewait', '$use_queue_context')  "; 
    637641  $results = sql($sql); 
     642 
     643  // store dynamic member data in astDB 
     644  if ($astman) { 
     645    foreach($dynmembers as $member){ 
     646      $mem=explode(',',$member); 
     647      $astman->database_put('QPENALTY/'.$account.'/agents',$mem[0],$mem[1]); 
     648    } 
     649    $astman->database_put('QPENALTY/'.$account,'dynmemberonly',$dynmemberonly); 
     650  } else { 
     651    fatal("Cannot connect to Asterisk Manager with ".$amp_conf["AMPMGRUSER"]."/".$amp_conf["AMPMGRPASS"]); 
     652  } 
     653 
    638654  return true; 
    639655} 
    640656 
    641657function queues_del($account) { 
    642   global $db
     658  global $db,$astman,$amp_conf
    643659   
    644660  $sql = "DELETE FROM queues_details WHERE id = '$account'"; 
     
    652668        die_freepbx($result->getMessage().$sql); 
    653669    } 
    654  
     670   
     671  //remove dynamic memebers from astDB 
     672  if ($astman) { 
     673    $astman->database_deltree('QPENALTY/'.$account); 
     674  } else { 
     675    fatal("Cannot connect to Asterisk Manager with ".$amp_conf["AMPMGRUSER"]."/".$amp_conf["AMPMGRPASS"]); 
     676  } 
    655677} 
    656678 
     
    773795 
    774796function queues_get($account, $queues_conf_only=false) { 
    775   global $db
     797  global $db,$astman,$amp_conf
    776798   
    777799    if ($account == "") 
     
    855877    } 
    856878  } 
    857  
     879  // TODO: why the str_replace? 
     880  // 
     881  if ($astman) { 
     882    $account=str_replace("'",'',$account); 
     883    //get dynamic members priority from astDB 
     884    $get=$astman->database_show('QPENALTY/'.$account.'/agents'); 
     885    if($get){ 
     886      foreach($get as $key => $value){ 
     887        $key=explode('/',$key); 
     888        $mem[$key[3]]=$value; 
     889      } 
     890      foreach($mem as $mem => $pnlty){ 
     891        $dynmem[]=$mem.','.$pnlty; 
     892      } 
     893    } 
     894    $results['dynmembers']=implode("\n",$dynmem); 
     895    $results['dynmeberonly'] = $astman->database_get('QPENALTY/'.$account,'dynmemberonly'); 
     896  } else { 
     897    fatal("Cannot connect to Asterisk Manager with ".$amp_conf["AMPMGRUSER"]."/".$amp_conf["AMPMGRPASS"]); 
     898  } 
    858899  return $results; 
    859900} 
     
    929970  $ext->add($id, $c, '', new ext_setvar('CALLBACKNUM','${AMPUSER}')); 
    930971 
     972  $ext->add($id, $c, '', new ext_gotoif('$["${DB(QPENALTY/${QUEUENO}/dynmemberonly)}" = "yes" & ${DB_EXISTS(QPENALTY/${QUEUENO}/agents/${CALLBACKNUM})} != 1]', 'invalid')); 
    931973  // I think that when using this it will always be a user, but just in case... 
    932974  // 
    933975  if ($amp_conf['USEQUEUESTATE']) { 
    934     $ext->add($id, $c, '', new ext_execif('$[${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 1]', 'AddQueueMember', '${QUEUENO},Local/${CALLBACKNUM}@from-queue/n,0,,${DB(AMPUSER/${CALLBACKNUM}/cidname)},HINT:${CALLBACKNUM}@ext-local')); 
    935     $ext->add($id, $c, '', new ext_execif('$[${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 0]', 'AddQueueMember', '${QUEUENO},Local/${CALLBACKNUM}@from-queue/n')); 
     976    $ext->add($id, $c, '', new ext_execif('$[${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 1]', 'AddQueueMember', '${QUEUENO},Local/${CALLBACKNUM}@from-queue/n,${DB(QPENALTY/${QUEUENO}/agents/${CALLBACKNUM})},,${DB(AMPUSER/${CALLBACKNUM}/cidname)},HINT:${CALLBACKNUM}@ext-local')); 
     977    $ext->add($id, $c, '', new ext_execif('$[${DB_EXISTS(AMPUSER/${CALLBACKNUM}/cidname)} = 0]', 'AddQueueMember', '${QUEUENO},Local/${CALLBACKNUM}@from-queue/n,${DB(QPENALTY/${QUEUENO}/agents/${CALLBACKNUM})}')); 
    936978  } else { 
    937     $ext->add($id, $c, '', new ext_addqueuemember('${QUEUENO}','Local/${CALLBACKNUM}@from-queue/n')); 
     979    $ext->add($id, $c, '', new ext_addqueuemember('${QUEUENO}','Local/${CALLBACKNUM}@from-queue/n,${DB(QPENALTY/${QUEUENO}/agents/${CALLBACKNUM})}')); 
    938980  } 
    939981 
    940982  $ext->add($id, $c, '', new ext_userevent('AgentLogin','Agent: ${CALLBACKNUM}')); 
     983  $ext->add($id, $c, '', new ext_macroexit()); 
     984  $ext->add($id, $c, 'invalid', new ext_playback('pbx-invalid')); 
    941985  $ext->add($id, $c, '', new ext_macroexit()); 
    942986} 
  • modules/branches/2.7/queues/module.xml

    r8724 r8785  
    1111  </description> 
    1212  <changelog> 
     13    *2.7.0beta1.1* #2085 
    1314    *2.7.0beta1.0* #3594 
    1415    *2.6.0.3* #3945,#3984 
     
    5152  </depends> 
    5253  <menuitems> 
    53     <queues>Queues</queues> 
     54    <queues needsenginedb="yes">Queues</queues> 
    5455  </menuitems> 
    5556  <location>release/2.7/queues-2.7.0beta1.0.tgz</location> 
  • modules/branches/2.7/queues/page.queues.php

    r8768 r8785  
    3232$weight = isset($_REQUEST['weight'])?$_REQUEST['weight']:'0'; 
    3333$autofill = isset($_REQUEST['autofill'])?$_REQUEST['autofill']:'no'; 
    34  
     34$dynmemberonly = isset($_REQUEST['dynmemberonly'])?$_REQUEST['dynmemberonly']:'no'; 
    3535$use_queue_context = isset($_REQUEST['use_queue_context'])?$_REQUEST['use_queue_context']:'0'; 
    3636$exten_context = "from-queue"; 
     
    8888  // $members = array_values(array_unique($members)); 
    8989} 
     90 
     91if (isset($_REQUEST["dynmembers"])) { 
     92  $dynmembers=explode("\n",$_REQUEST["dynmembers"]); 
     93  if (!$dynmembers) { 
     94    $dynmembers = null; 
     95  } 
     96} 
     97 
    9098 
    9199// do if we are submitting a form 
     
    104112          $conflict_url = framework_display_extension_usage_alert($usage_arr); 
    105113        } else { 
    106           queues_add($account,$name,$password,$prefix,$goto,$agentannounce_id,$members,$joinannounce_id,$maxwait,$alertinfo,$cwignore,$qregex,$queuewait,$use_queue_context); 
     114          queues_add($account,$name,$password,$prefix,$goto,$agentannounce_id,$members,$joinannounce_id,$maxwait,$alertinfo,$cwignore,$qregex,$queuewait,$use_queue_context,$dynmembers,$dynmemberonly); 
    107115          needreload(); 
    108116          redirect_standard(); 
     
    116124      case "edit":  //just delete and re-add 
    117125        queues_del($account); 
    118         queues_add($account,$name,$password,$prefix,$goto,$agentannounce_id,$members,$joinannounce_id,$maxwait,$alertinfo,$cwignore,$qregex,$queuewait,$use_queue_context); 
     126        queues_add($account,$name,$password,$prefix,$goto,$agentannounce_id,$members,$joinannounce_id,$maxwait,$alertinfo,$cwignore,$qregex,$queuewait,$use_queue_context,$dynmembers,$dynmemberonly); 
    119127        needreload(); 
    120128        redirect_standard('extdisplay'); 
     
    257265  ?> 
    258266      </select> 
     267    </td> 
     268  </tr> 
     269 
     270  <tr> 
     271    <td valign="top"><a href="#" class="info"><?php echo _('Dynamic Member Penalty') ?>:<span><br><?php echo _("Dynamic Members are extensions that can log in and out of the queue. When a member logges in to a queue, their penalty in the queue will be as specified here. Extensions included here will NOT be automaticlay logged in to the queue.") ?><br><br></span></a></td> 
     272    <td valign="top"> 
     273      <textarea id="dynmembers" cols="15" rows="<?php  $rows = count($dynmembers)+1; echo (($rows < 5) ? 5 : (($rows > 20) ? 20 : $rows) ); ?>" name="dynmembers" tabindex="<?php echo ++$tabindex;?>"><?php echo $dynmembers; ?></textarea> 
     274    </td> 
     275  </tr> 
     276 
     277  <tr> 
     278    <td> 
     279    <a href=# class="info"><?php echo _("Extension Quick Pick")?> 
     280      <span> 
     281        <?php echo _("Choose an extension to append to the end of the dynamic memebers list above.")?> 
     282      </span> 
     283    </a> 
     284    </td> 
     285    <td> 
     286      <select onChange="insertExten('dyn');" id="dyninsexten" tabindex="<?php echo ++$tabindex;?>"> 
     287        <option value=""><?php echo _("(pick extension)")?></option> 
     288  <?php 
     289        $results = core_users_list(); 
     290        foreach ($results as $result) { 
     291          echo "<option value='".$result[0]."'>".$result[0]." (".$result[1].")</option>\n"; 
     292        } 
     293  ?> 
     294      </select> 
     295    </td> 
     296  </tr> 
     297 
     298  <tr> 
     299    <td><a href="#" class="info"><?php echo _("Allow only these?")?><span><?php echo _('Restrict dynamic queue memeber logins to only thoes listed in previous option. When set to yes, members not listed will be DENIED ACCESS to the queue.')?></span></a></td> 
     300    <td><input type="radio" name="dynmemberonly" value="yes" <?php echo ($dynmemberonly=='yes'?'checked':'');?>><?php echo _('Yes')?><input type="radio" name="dynmemberonly" value="yes" <?php echo ($dynmemberonly!='yes'?'checked':'');?> ><?php echo _('No')?> 
    259301    </td> 
    260302  </tr>