Changeset 8785

Show
Ignore:
Timestamp:
02/07/10 16:54:30 (7 months 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>