Compare commits

...

9 Commits

Author SHA1 Message Date
Thomas MONCHICOURT 5b9c7e57fe Fix : check si variable existe 2018-05-25 15:15:32 +02:00
Thomas MONCHICOURT 8f8e2c3b2f Merge branch 'feat/offres_pourvues' into develop
# Conflicts:
#	volume/www/website/www/src/AppBundle/Utils/Services/AdSearcher.php
2018-05-25 15:15:05 +02:00
Thomas MONCHICOURT d0e7ee8b74 Fix : libelle 2018-05-25 15:06:40 +02:00
Thomas MONCHICOURT c0445c9ad3 Fix : orthographe 2018-05-25 15:03:44 +02:00
Thomas MONCHICOURT 65dfac1af5 Feat : mise en place de la page de detail ad et company #5964 @0h20 2018-05-25 14:50:05 +02:00
Thomas MONCHICOURT 50831adf20 Feat : Page de detail annonce #5964 @0h20 2018-05-25 12:33:12 +02:00
Thomas MONCHICOURT 6f7d329cc6 Feat : Mise en place d’un champ type privé pour ad et company #6472 @1h10 2018-05-25 11:33:39 +02:00
Thomas MONCHICOURT 5f2e5fddbf Feat: filtre offres pourvues #5964 2018-05-25 10:27:59 +02:00
Thomas MONCHICOURT e905cb063c feat : Modification de la recherche #5964 @0h20 2018-05-24 17:01:53 +02:00
27 changed files with 267 additions and 39 deletions
@@ -3,7 +3,8 @@
<div class="row center-align">
<div class="col s12">
<div class="owl-carousel territory-carousel">
{% for territory in territories %}
{% for territory in territories if territory.territory.isPrivate != true %}
{% set territory = territory.territory %}
<div class="item">
<h2 class="blue-text no-margin-top">
@@ -19,6 +19,7 @@
<div class="box box-primary">
<div class="box-header">
<h3 class="box-title">{{ ad.title }}</h3>
<br/><i class="fa fa-link"></i>Url : {{ path("ad_show",{'alias':ad.alias})}}<br />
</div>
<div class="box-body">
{{ form_errors(form) }}
@@ -41,7 +42,7 @@
<h3 class="box-title">Informations</h3>
</div>
<div class="box-body">
{{ form_row(form.status) }} {{ form_row(form.isPromoted) }} {{ form_row(form.isVerified) }}
{{ form_row(form.status) }} {{ form_row(form.isPromoted) }} {{ form_row(form.isVerified) }} {{ form_row(form.isPrivate) }}
</div>
</div>
</div>
@@ -22,9 +22,11 @@
<div class="box-header">
<h3 class="box-title">{{ company.brandName }}</h3>
<br><span>{{ company.mainUser.email }}</span>
<br/><i class="fa fa-link"></i>Url : {{ path("company_show",{'alias':company.alias})}}<br />
</div>
<div class="box-body">
{{ form_errors(form) }}
{{ form_row(form.isPrivate) }}
{{ form_row(form.emphasis) }}
{{ form_row(form.emphasisOrder) }}
{{ form_row(form.brandName) }}
@@ -22,9 +22,11 @@
<div class="box-header">
<h3 class="box-title">{{ territory.brandName }}</h3>
<br><span>{{ territory.mainUser.email }}</span>
<br/><i class="fa fa-link"></i>Url : {{ path("territory_show",{'alias':territory.alias})}}<br />
</div>
<div class="box-body">
{{ form_errors(form) }}
{{ form_row(form.isPrivate) }}
{{ form_row(form.emphasis) }}
{{ form_row(form.emphasisOrder) }}
{{ form_row(form.brandName) }}
@@ -90,18 +90,20 @@
<p class="chip">{{ tag }}</p>
{% endfor %}
</div>
<div class="col s12 m-t-20 ">
{% if not is_granted('ROLE_COMPANY') %}
<p class="item-detail-reply center-align">
<a href="{{ path('talent_spontaneous_application_create',{'id': company.id}) }}"
class="btn btn-default">
Candidature spontanée
</a>
</p>
{% endif %}
</div>
{% if not is_granted('ROLE_COMPANY') %}
<div class="row bg-bordered row-promoted">
<div class="col s12 center-align">
<h3>Vous souhaitez rejoindre <span class="color-blue1">{{ company.brandname }}</span> ?</h3>
<a href="{{ path('talent_spontaneous_application_create',{'id': company.getId()}) }}"
class="btn btn-default">
Candidature spontanée
</a>
</div>
</div>
{% endif %}
</div>
<div id="offers" class="row">
<div class="col s12">
<h1>Les offres demploi pour {{ company.brandname }}</h1>
@@ -1,4 +1,4 @@
{% for a in ads %}
{% for a in ads if a.isPrivate != true %}
<div class="col s12">
<div class="card z-depth-3">
<div class="card-image">
@@ -1,4 +1,4 @@
{% for a in ads %}
{% for a in ads if a.isPrivate != true %}
<div id="adRow" class="row item-list-bis z-depth-2 row-noMargin">
<div class="col s12 m4 col-noPadding ad-picture">
<a href="{{ path('ad_show',{'alias': a.alias }) }}" title="{{ a.title }}" class="item-list-media">
@@ -34,6 +34,15 @@
</div>
<div class="row m-b-0 p-b-30">
<div class="col s12 m12">
<div id="header-resultats">
{% if isPromotedAds is defined%}
<div><span class="color-blue2">{{ ads|length }}</span> offres d'emploi pourvues</div>
<div><span><a href="{{ path('ad_search_result') }}">Voir les offres d'emploi en cours</a></span></div>
{% else %}
<div><span class="color-blue2">{{ ads|length }}</span> offres d'emploi en cours</div>
<div><span><a href="{{ path('ad_search_result', {'promoted': true }) }}">Voir les offres d'emploi pourvues</a></span></div>
{% endif %}
</div>
<div id="liste-resultats">
{% if ads|length > 0 and noResults == false %}
{% include 'default/ad_listing.html.twig' with {'ads':ads} %}
@@ -96,16 +96,29 @@
{{ 'ad.talent.isAnswer.label'|trans }}
</div>
{% elseif not is_granted('ROLE_COMPANY') %}
<p class="item-detail-reply">
<a href="{{ path('talent_answer_create',{'id': ad.getId()}) }}"
class="btn btn-default">
Postuler
</a>
</p>
{% if not ad.isPromoted %}
<p class="item-detail-reply">
<a href="{{ path('talent_answer_create',{'id': ad.getId()}) }}"
class="btn btn-default">
Postuler
</a>
</p>
{% endif %}
{% endif %}
{% endif %}
</div>
</div>
{% if ad.isPromoted %}
<div class="row bg-bordered row-promoted">
<div class="col s12 center-align">
<h3>Vous souhaitez rejoindre <span class="color-blue1">{{ ad.company.brandname }}</span> ?</h3>
<a href="{{ path('talent_spontaneous_application_create',{'id': ad.company.getId()}) }}"
class="btn btn-default">
Candidature spontanée
</a>
</div>
</div>
{% endif %}
<div class="col s12 hide-on-large-only m-b-50">
{% include 'default/ad_sidebar.html.twig' with {'ad': ad, 'showBrand': true} %}
</div>
@@ -56,12 +56,18 @@
{{ 'ad.talent.isAnswer.label'|trans }}
</div>
{% elseif not is_granted('ROLE_COMPANY') %}
<p class="item-detail-reply">
<a href="{{ path('talent_answer_create',{'id': ad.getId()}) }}"
class="btn btn-default">
Postuler
</a>
</p>
{% if not ad.isPromoted %}
<p class="item-detail-reply">
<a href="{{ path('talent_answer_create',{'id': ad.getId()}) }}"
class="btn btn-default">
Postuler
</a>
</p>
{% else %}
<div class="item-detail-ispromoted">
Offre pourvue
</div>
{% endif %}
{% endif %}
{% endif %}
</div>
@@ -1,4 +1,4 @@
{% for company in companies %}
{% for company in companies if company.isPrivate != true %}
<div class="col s12">
<div class="card z-depth-3 card-company">
<div class="card-content card-content-company">
@@ -37,7 +37,7 @@
<div class="row m-b-0 p-b-30">
<div class="col s12 m12">
<div id="liste-resultats">
{% for c in companies %}
{% for c in companies if c.isPrivate != true %}
{% if (c.presentationVideo is not null or c.getPublishedAds|length > 0 ) %}
<div class="row item-list-bis z-depth-2 row-noMargin">
@@ -110,7 +110,7 @@
<h2 class="blue-text no-margin-top">Les territoires <span>pour vivre et travailler</span></h2>
{% if territories %}
<div class="owl-carousel owl-carousel-home territory-carousel">
{% for territory in territories if territory.presentationVideo %}
{% for territory in territories if territory.presentationVideo and territory.isPrivate != true %}
<div class="item">
<div class="embed-responsive embed-responsive-16by9">
<div class="col s12">
@@ -36,7 +36,7 @@
<div class="row m-b-0 p-b-30">
<div class="col s12 m12">
<div id="liste-resultats">
{% for c in companies %}
{% for c in companies if c.isPrivate != true %}
{% if (c.presentationVideo is not null or c.getPublishedAds|length > 0 ) %}
<div class="row item-list-bis z-depth-2 row-noMargin">
@@ -288,9 +288,9 @@ class AdController extends Controller
***********************/
/**
* @Route("/annonce/recherche/", name="ad_search_result")
* @Route("/annonce/recherche/{promoted}", defaults={"promoted"=false}, name="ad_search_result")
*/
public function adSearchResultAction(Request $request)
public function adSearchResultAction(Request $request, $promoted)
{
$session = $request->getSession();
$form = $this->createForm(AdSearchType::class);
@@ -307,7 +307,7 @@ class AdController extends Controller
$adSearcher = $this->get('app.ad_searcher');
$ads = $adSearcher->process($data);
if(empty($ads)){
$ads = $this->getPublishedAds();
$ads = $this->getPublishedAds($promoted);
$noResults = true;
} else {
$noResults = false;
@@ -324,18 +324,19 @@ class AdController extends Controller
} else {
$ads = $this->getPublishedAds();
$ads = $this->getPublishedAds($promoted);
}
return $this->render('default/ad_search_result.html.twig', [
'ads' => $ads,
'noResults' => false
'noResults' => false,
'isPromotedAds' => $promoted
]);
}
public function getPublishedAds()
public function getPublishedAds($promoted)
{
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('AppBundle:Ad');
@@ -345,6 +346,17 @@ class AdController extends Controller
$mediaManager->getThumbnails($ad);
}
return $this->filterPromoted($ads, $promoted);
}
public function filterPromoted($result, $promoted = "false")
{
$ads = array();
foreach ($result as $ad) {
if ($ad->getIsPromoted() === (boolean)$promoted) {
$ads[] = $ad;
}
}
return $ads;
}
@@ -97,6 +97,13 @@ class Ad
*/
private $isPromoted;
/**
* @var boolean
*
* @ORM\Column(name="is_private", type="boolean", nullable=true, options={"comment":"Annonce privé, non listée en front"})
*/
private $isPrivate;
/**
* @var boolean
*
@@ -1076,4 +1083,64 @@ class Ad
{
return $this->territories;
}
/**
* Set isPrivate.
*
* @param bool|null $isPrivate
*
* @return Ad
*/
public function setIsPrivate($isPrivate = null)
{
$this->isPrivate = $isPrivate;
return $this;
}
/**
* Get isPrivate.
*
* @return bool|null
*/
public function getIsPrivate()
{
return $this->isPrivate;
}
/**
* Add bookmarkAd.
*
* @param \AppBundle\Entity\BookmarkAd $bookmarkAd
*
* @return Ad
*/
public function addBookmarkAd(\AppBundle\Entity\BookmarkAd $bookmarkAd)
{
$this->bookmarkAds[] = $bookmarkAd;
return $this;
}
/**
* Remove bookmarkAd.
*
* @param \AppBundle\Entity\BookmarkAd $bookmarkAd
*
* @return boolean TRUE if this collection contained the specified element, FALSE otherwise.
*/
public function removeBookmarkAd(\AppBundle\Entity\BookmarkAd $bookmarkAd)
{
return $this->bookmarkAds->removeElement($bookmarkAd);
}
/**
* Get bookmarkAds.
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getBookmarkAds()
{
return $this->bookmarkAds;
}
}
@@ -120,6 +120,13 @@ class Company
*/
private $searchable;
/**
* @var boolean
*
* @ORM\Column(name="is_private", type="boolean", nullable=true, options={"comment":"Company privé, non listée en front"})
*/
private $isPrivate;
/***********************
* OneToMany Array's
***********************/
@@ -803,4 +810,28 @@ class Company
{
return $this->descriptionAdmin;
}
/**
* Set isPrivate.
*
* @param bool|null $isPrivate
*
* @return Company
*/
public function setIsPrivate($isPrivate = null)
{
$this->isPrivate = $isPrivate;
return $this;
}
/**
* Get isPrivate.
*
* @return bool|null
*/
public function getIsPrivate()
{
return $this->isPrivate;
}
}
@@ -82,6 +82,10 @@ class AdType extends AbstractType
->add('isVerified', CheckboxType::class, array(
'label' => 'Vérifiée',
'required' => false
))
->add('isPrivate', CheckboxType::class, array(
'label' => 'Annonce privé ( non listée en front )',
'required' => false
));
// Emphasis
@@ -37,6 +37,10 @@ class CompanyAdminType extends AbstractType
))
->add('size', TextType::class, array(
'label' => 'profile.company.size',
))
->add('isPrivate', CheckboxType::class, array(
'label' => 'Page entreprise privé ( non listée en front )',
'required' => false
));
// Addresses fields
$builder
@@ -87,6 +87,10 @@ class TerritoryAdminType extends AbstractType
'label' => 'Ordre',
'required' => false
));
$builder->add('isPrivate', CheckboxType::class, array(
'label' => 'Page territoire privé ( non listée en front )',
'required' => false
));
}
public function configureOptions(OptionsResolver $resolver)
@@ -96,7 +96,7 @@ class AdSearcher
{
$ads = array();
foreach ($result as $ad) {
if ($ad->getStatus() == "PUBLISHED") {
if ($ad->getStatus() == "PUBLISHED" && $ad->getIsPrivate() != true && $ad->getIsPromoted() != true) {
$ads[] = $ad;
}
}
+31 -1
View File
@@ -13129,7 +13129,7 @@ a.link-white-underline {
padding-top: 10px; }
.profil-company {
padding: 0 40px; }
padding: 0 20px; }
/*************************** FLEX ****************************/
.flexcontainer {
@@ -13986,6 +13986,16 @@ a.link-white-underline {
.items-list-dark .item-list p.item-list-name, .items-list-dark .item-list p.item-list-city {
border-color: #AAAAAA; }
#header-resultats {
display: flex;
flex-direction: row;
justify-items: flex-end;
justify-content: space-between;
margin-bottom: 15px;
font-size: 1rem; }
#header-resultats a {
color: #000; }
#liste-resultats .item-list-bis {
margin-bottom: 20px;
background: #FFFFFF;
@@ -15769,6 +15779,21 @@ table.highlight > tbody > tr:hover {
width: 101px;
height: 101px; }
.item-detail-ispromoted {
display: block;
text-align: center;
padding: 10px 20px;
color: #ff9800;
border: 1px solid #ff9800;
border-radius: 6px;
text-transform: uppercase;
font-size: 1.1rem; }
#ad_show .row-promoted {
padding-bottom: 40px; }
#ad_show .row-promoted h3 span {
text-decoration: none; }
#company_show .chip {
font-size: 14px; }
#company_show h3 {
@@ -15788,6 +15813,11 @@ table.highlight > tbody > tr:hover {
font-size: 16px;
margin: 20px 0; }
#company_show .row-promoted {
padding-bottom: 40px; }
#company_show .row-promoted h3 span {
text-decoration: none; }
#page-static {
font-size: 14px;
/***** OLD STEP *****/ }
File diff suppressed because one or more lines are too long
@@ -70,7 +70,7 @@
}
.profil-company {
padding: 0 40px;
padding: 0 20px;
}
/*************************** FLEX ****************************/
@@ -55,6 +55,17 @@
}
}
#header-resultats{
display: flex;
flex-direction: row;
justify-items: flex-end;
justify-content: space-between;
margin-bottom: 15px;
font-size: 1rem;
a{
color: #000;
}
}
#liste-resultats {
.item-list-bis {
margin-bottom: 20px;
@@ -122,3 +122,23 @@
}
}
}
.item-detail-ispromoted{
display: block;
text-align: center;
padding: 10px 20px;
color: $orange;
border: 1px solid $orange;
border-radius: 6px;
text-transform: uppercase;
font-size: 1.1rem;
}
#ad_show .row-promoted{
h3{
span{
text-decoration: none;
}
}
padding-bottom: 40px;
}
@@ -28,4 +28,13 @@
margin: 20px 0;
}
}
}
#company_show .row-promoted{
h3{
span{
text-decoration: none;
}
}
padding-bottom: 40px;
}